Installation 2.x

Steps to install and configure the Remote Signature application in OpenKM v8.1:

  • Stop Tomcat
  • Download the application from the OpenKM download center
  • This application needs to share the database with OpenKM, so you don't need to create a new one
  • Copy the remote-signature.properties file in the tomcat and modify the configuration parameters

You must have a mail account configured

# OpenKM Hibernate configuration values
spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
spring.datasource.url=jdbc:mariadb://localhost:3306/remote-signature?useUnicode=true&characterEncoding=UTF8
spring.datasource.username=openkm
spring.datasource.password=openkm

# JPA
spring.jpa.hibernate.ddl-auto=create
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MariaDB103Dialect

# Base URL
base.url=http://localhost:8080/remote-signature

# OpenKM
openkm.url.preview=http://localhost:8080/openkm
openkm.url=http://localhost:8080/openkm

# OpenKM anonymous user
openkm.anonymous.user=okmAdmin
openkm.anonymous.password=admin

# OpenKM admin user
openkm.admin.user=okmAdmin
openkm.admin.password=admin

# Language
languages=es-ES#Espa\u00f1ol,en-GB#English
default.language=en-GB

During the initial setup, it's important to set the parameter spring.jpa.hibernate.ddl-auto to 'create-only' the first time, and then switch it to 'update' for subsequent operations.

  • Start Tomcat
  • Log into OpenKM
  • Go to Administration > Utilities > Database query and execute these SQL sentences to create some needed configuration properties:
INSERT INTO OKM_CONFIG (CFG_KEY, CFG_TYPE, CFG_VALUE) VALUES ('rs.subject.es-ES', 'string', 'Un documento requiere de su firma');
INSERT INTO OKM_CONFIG (CFG_KEY, CFG_TYPE, CFG_VALUE) VALUES ('rs.subject.en-GB', 'string', 'This document needs to be signed');
INSERT INTO OKM_CONFIG (CFG_KEY, CFG_TYPE, CFG_VALUE) VALUES ('rs.body.en-GB', 'html', '<p>You have a pending document to be signed <a href="${docURL}">${docName}</a></p>');
INSERT INTO OKM_CONFIG (CFG_KEY, CFG_TYPE, CFG_VALUE) VALUES ('rs.body.es-ES', 'html', '<p>Tiene un documento pendiente de firmar <a href="${docURL}">${docName}</a></p>');
INSERT INTO OKM_CONFIG (CFG_KEY, CFG_TYPE, CFG_VALUE) VALUES ('rs.subject-signed.es-ES', 'string', 'El documento se ha firmado');
INSERT INTO OKM_CONFIG (CFG_KEY, CFG_TYPE, CFG_VALUE) VALUES ('rs.body-signed.es-ES', 'html', '<p>El documento <a href="${docURL}">${docName}</a> se ha firmado </p>');
INSERT INTO OKM_CONFIG (CFG_KEY, CFG_TYPE, CFG_VALUE) VALUES ('rs.subject-signed.en-GB', 'string', 'The document has been signed');
INSERT INTO OKM_CONFIG (CFG_KEY, CFG_TYPE, CFG_VALUE) VALUES ('rs.body-signed.en-GB', 'html', '<p>The document <a href="${docURL}">${docName}</a> has been signed </p>');
INSERT INTO OKM_CONFIG (CFG_KEY, CFG_TYPE, CFG_VALUE) VALUES ('rs.subject-verify.es-ES', 'string', 'Remote Signature: Código de verificación');
INSERT INTO OKM_CONFIG (CFG_KEY, CFG_TYPE, CFG_VALUE) VALUES ('rs.body-verify.es-ES', 'html', '<p>Su pin de verificación para el documento ${docName} es ${pin}</p>');
INSERT INTO OKM_CONFIG (CFG_KEY, CFG_TYPE, CFG_VALUE) VALUES ('rs.subject-verify.en-GB', 'string', 'Remote Signature: Verification pin');
INSERT INTO OKM_CONFIG (CFG_KEY, CFG_TYPE, CFG_VALUE) VALUES ('rs.body-verify.en-GB', 'html', '<p>Your verification pin for the document ${docName} is ${pin} </p>');
  • Set the configuration properties according to its usage:
    • rs.subject.es-ES: The subject mail message.
    • rs.subject.en-GB: The subject mail message.
    • rs.body.es-ES: The body mail message.
    • rs.body.es-ES: The body mail message.
    • rs.subject-signed.es-ES: The subject mail message.
    • rs.subject-signed.en-GB: The subject mail message.
    • rs.body-signed.es-ES: The body mail message.
    • rs.body-signed.en-GB: The body mail message.
    • rs.subject-verify.es-ES: The subject mail message.
    • rs.subject-verify.en-GB: The subject mail message.
    • rs.body-verify.es-ES: The body mail message.
    • rs.body-verify.en-GB: The body mail message.

Configuration parameters

ParameterDescription

rs.subject.es-ES

Mail Subject message sended to sign in Spanish

rs.subject.en-GB

Mail Subject message sended to sign in English

rs.body.es-ES

Mail Body message sended to sign in Spanish

rs.body.en-GB

Mail Body message sended to sign in English 

rs.subject-signed.es-ES

Mail Subject message sent when a document has been signed in Spanish

rs.subject-signed.en-GB

Mail Subject message sent when a document has been signed in English

rs.body-signed.es-ES

Mail Body message sent when a document has been signed in Spanish

rs.body-signed.en-GB

Mail Body message sent when a document has been signed in English

rs.subject-verify.es-ES

Mail Subject message sent when pin verification is needed in Spanish

rs.body-verify.es-ES

Mail Body message sent when pin verification is needed in Spanish

rs.subject-verify.en-GB

Mail Subject message sent when pin verification is needed in English

rs.body-verify.en-GB

Mail Body message sent when pin verification is needed in English

rs.subject-error.es-ES

Mail Subject message sent when error is raised in Spanish

rs.subject-error.en-GB

Mail Subject message sent when error is raised in English

rs.body-error.es-ES

Mail Body message sent when error is raised in Spanish

rs.body-error.en-GB

Mail Body message sent when error is raised in English

Configuration parameters that can be used in the body

These are the following notification parameters that can be used in the body message:

ParameterDescription

${docURl}

The link to the document to be signed

${docName}

 The name of the document to be signed

${pin}

 Verification pin

Create role ROLE_REMOTE_SIGNATURE

Go to Administration > Roles > New Role. At the id parameter, set ROLE_REMOTE_SIGNATURE and the Active checkbox at true.

You must assign this new role to the user who needs to access the Remote Signature administration.

Add translations

Go to Administration > Utilities > Database query. At the bottom right, choose the option JDBC. Copy the SQL script and finally click at the bottom right the button execute.

DELETE FROM OKM_TRANSLATION WHERE TR_LANGUAGE='en-GB' and TR_MODULE='rs';
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'send.emails', 'Send e-mails', 'en-GB');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'emails.sent', 'E-mails sent', 'en-GB');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'home', 'Home', 'en-GB');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'admin', 'Admin', 'en-GB');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'logout', 'Logout', 'en-GB');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'login', 'Login', 'en-GB');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'sign', 'Sign', 'en-GB');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'undo', 'Undo', 'en-GB');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'clear', 'Clear', 'en-GB');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'document.signed', 'Document signed successfully!', 'en-GB');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'no.signature', 'There is no signature', 'en-GB');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'take.home', 'Take me home.', 'en-GB');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'no.exist', 'This page does not exist.', 'en-GB');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'no.lost', 'You are lost.', 'en-GB');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'signature.needed', 'This document needs to be signed', 'en-GB');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'title', 'Remote Signature', 'en-GB');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'close', 'Close', 'en-GB');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'document.is.signed', '"<strong>{name}</strong>" has already been signed', 'en-GB');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'error.occurred', 'An error has occurred', 'en-GB');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'back', 'Back', 'en-GB');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'next', 'Next', 'en-GB');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'enter.pin', 'Enter pin', 'en-GB');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'enter.valid.pin', 'Please enter a 6-digit pin.', 'en-GB');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'submit', 'Submit', 'en-GB');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'request', 'Request pin', 'en-GB');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'pin.sent', 'Requested pin sent!', 'en-GB');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'invalid.pin', 'Invalid Pin!', 'en-GB');
INSERT INTO OKM_CONFIG (CFG_KEY, CFG_TYPE, CFG_VALUE) VALUES ('rs.subject-error.en-GB', 'string', 'Error signing a document');
INSERT INTO OKM_CONFIG (CFG_KEY, CFG_TYPE, CFG_VALUE) VALUES ('rs.body-error.en-GB', 'html', '<p>Error in the process of signing the document document <a href="${docURL}">${docName}</a></p>');
DELETE FROM OKM_TRANSLATION WHERE TR_LANGUAGE='es-ES' and TR_MODULE='rs';
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'send.emails', 'Enviar correos', 'es-ES');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'emails.sent', 'Correos enviados', 'es-ES');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'home', 'Inicio', 'es-ES');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'admin', 'Administración', 'es-ES');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'logout', 'Salir', 'es-ES');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'login', 'Login', 'es-ES');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'sign', 'Firma', 'es-ES');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'undo', 'Deshacer', 'es-ES');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'clear', 'Limpiar', 'es-ES');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'document.signed', 'Documento firmado correctamente', 'es-ES');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'no.signature', 'Es necesario dibujar la firma', 'es-ES');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'take.home', 'Llévame al inicio', 'es-ES');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'no.exist', 'Esta página no existe.', 'es-ES');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'no.lost', 'Usted está perdido', 'es-ES');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'signature.needed', 'Un documento requiere de su firma', 'es-ES');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'title', 'Remote Signature', 'es-ES');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'close', 'Cerrar', 'es-ES');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'document.is.signed', '"<strong>{name}</strong>" ya ha sido firmado', 'es-ES');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'error.occurred', 'Se ha producido un error', 'es-ES');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'back', 'Atrás', 'es-ES');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'next', 'Siguiente', 'es-ES');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'enter.pin', 'Introducir pin', 'es-ES');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'enter.valid.pin', 'Porfavor introduzca un numero de 6 cifras', 'es-ES');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'submit', 'Enviar', 'es-ES');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'request', 'Solicitar código', 'es-ES');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'request.sent', 'El código de verificación ha sido enviado!', 'es-ES');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'invalid.pin', 'Pin incorrecto!', 'es-ES');
INSERT INTO OKM_CONFIG (CFG_KEY, CFG_TYPE, CFG_VALUE) VALUES ('rs.subject-error.es-ES', 'string', 'Error firmando un documento');
INSERT INTO OKM_CONFIG (CFG_KEY, CFG_TYPE, CFG_VALUE) VALUES ('rs.body-error.es-ES', 'html', '<p>Error en el proceso de firmar el documento <a href="${docURL}">${docName}</a></p>');

Translations by tenant

If you have several remote signature modules configured to work with your OpenKM may be interested in having different translations by the tenant.

Set in the openkm.properties a new translations module name

translation.module=rs2

Register translations renaming the module is shown in the sample below:

-- Take the original translations and update the module from rs to rsX
DELETE FROM OKM_TRANSLATION WHERE TR_LANGUAGE='en-GB' and TR_MODULE='rs2';
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs2', 'send.emails', 'Send e-mails', 'en-GB');
...

From mail parameter by the tenant

If you want to set up the from parameter of the emails to be sent, in your openkm.properties modify the mail from configuration parameters to an existing mail account.

mail.from=sample@example.com

Enable stamp extension 

Ensure you have the extension of the stamp enabled; otherwise, enable it. To enable extensions, take a look at Enable extensions

  • Create the image stamps, which will be used to stamp the signature in the document. The id of these stamps will be the value for the options in okp:remote_signature.location parameter. Use the dummy.png as an image:

  • These are some examples to configure-stamp locations:
    • NorthEast Location 
      • Image: dummy.png
      • Expr. X: PAGE_WIDTH
      • Expr. Y: PAGE_HEIGHT
    • North Location
      • Image: dummy.png
      • Expr. X: PAGE_CENTER - IMAGE_WIDTH / 2
      • Expr. Y: PAGE_HEIGHT
    • NorthWest Location
      • Image: dummy.png
      • Expr. X: 0
      • Expr. Y: PAGE_HEIGHT
    • East Location 
      • Image: dummy.png
      • Expr. X: PAGE_WIDTH
      • Expr. Y:PAGE_MIDDLE  - IMAGE_HEIGHT / 2
    • Center Location
      • Image: dummy.png
      • Expr. X: PAGE_CENTER - IMAGE_WIDTH / 2
      • Expr. Y: PAGE_MIDDLE - IMAGE_HEIGHT / 2
    • West Location
      • Image: dummy.png
      • Expr. X: 0
      • Expr. Y: PAGE_MIDDLE - IMAGE_HEIGHT / 2
    • SouthEast Location 
      • Image: dummy.png
      • Expr. X: PAGE_WIDTH
      • Expr. Y: 0
    • South Location
      • Image: dummy.png
      • Expr. X: PAGE_CENTER - IMAGE_WIDTH / 2
      • Expr. Y: 0
    • SouthWest Location
      • Image: dummy.png
      • Expr. X: 0
      • Expr. Y: 0

Add extra metadata fields

Input-type metadata fields can be added to collect data from the user when a document needs to be signed. Adding the input fields at the end of the metadata group is necessary, and this is an example of two text metadata fields.

<input label="DNI" type="text" name="okp:remote_signature.dni" readonly="true" />
<input label="Name" type="text" name="okp:remote_signature.name" readonly="true" />

Also may have to add one option in the extra select for each input created, with the input name followed by the order desired to be displayed as value. Example:  

<select label="Extra" name="okp:remote_signature.extra" type="multiple">
<option label="DNI" value="okp:remote_signature.dni.1"/>
<option label="Name" value="okp:remote_signature.name.2"/>
</select>

Configuration

Create this property group

Please create a new metadata group and assign it to the PDF documents that need to be signed.

After the property group has been created should enable in the profiles.

Before creating, you must change the option select values from okp:remote_signature.location to the stamp ids.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE property-groups PUBLIC "-//OpenKM//DTD Property Groups 3.10//EN"
"http://www.openkm.com/dtd/property-groups-3.10.dtd">
<property-groups>
<property-group label="Remote Signature" name="okg:remote_signature">
<select label="Status" name="okp:remote_signature.status" type="simple" readonly="true">
<option label="Pending to send" value="pendingToSend" selected="true"/>
<option label="Pending to sign" value="pendingToSign"/>
<option label="Signed" value="signed" />
<option label="Error" value="error" />
</select>
<input label="Mail to notify" type="text" name="okp:remote_signature.mail">
<validator type="req"/>
</input>
<checkbox label="Request Pin" name="okp:remote_signature.pin" />
<select label="Sign Location" name="okp:remote_signature.location" type="simple">
<option label="NorthWest" value="1"/>
<option label="North" value="2"/>
<option label="NorthEast" value="3" />
<option label="West" value="4"/>
<option label="Center" value="5"/>
<option label="East" value="6" />
<option label="SouthWest" value="7"/>
<option label="South" value="8"/>
<option label="SouthEast" value="9" />
<validator type="req"/>
</select>
<select label="Language" name="okp:remote_signature.lang" type="simple">
<option label="English" value="en-GB"/>
<option label="Español" value="es-ES"/>
<validator type="req"/>
</select>
<select label="Extra" name="okp:remote_signature.extra" type="multiple">
<option label="DNI" value="okp:remote_signature.dni.1"/>
<option label="Name" value="okp:remote_signature.name.2"/>
<option label="Checkbox" value="okp:remote_signature.checkbox.3"/>
<option label="Select" value="okp:remote_signature.select.4"/>
<option label="Select Multiple" value="okp:remote_signature.select_multiple.2"/>
</select>
<input label="DNI" type="text" name="okp:remote_signature.dni" readonly="true" />
<input label="Name" type="text" name="okp:remote_signature.name" readonly="true" />
<input label="Page" type="text" name="okp:remote_signature.page" />
<input label="Send Date" type="date" name="okp:remote_signature.send_date" timeFormat="hm" readonly="true"/>
<input label="Sign Date" type="date" name="okp:remote_signature.sign_date" timeFormat="hm" readonly="true"/>
<input label="Signature Device IP" type="text" name="okp:remote_signature.ip" readonly="true"/>
<textarea label="Error Message" name="okp:remote_signature.error_message" width="200px" readonly="true" dbColumnSize="512"/>
</property-group>
</property-groups>