You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by ak...@apache.org on 2018/04/05 07:09:40 UTC
[6/8] ignite git commit: IGNITE-7894 Web Console: Refactored
panel-collapsible to component.
http://git-wip-us.apache.org/repos/asf/ignite/blob/d24dab81/modules/web-console/frontend/app/modules/states/configuration/caches/store.pug
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/states/configuration/caches/store.pug b/modules/web-console/frontend/app/modules/states/configuration/caches/store.pug
index 4cfbbaf..32d966a 100644
--- a/modules/web-console/frontend/app/modules/states/configuration/caches/store.pug
+++ b/modules/web-console/frontend/app/modules/states/configuration/caches/store.pug
@@ -42,272 +42,269 @@ mixin hibernateField(name, model, items, valid, save, newItem)
ignite-on-escape=onEscape
)
-.pca-panel(ng-form=form novalidate)
- .pca-panel-heading(bs-collapse-toggle='' ng-click=`ui.loadPanel('${form}')`)
- ignite-form-panel-chevron
- .pca-panel-heading-title Store
- .pca-panel-heading-description
- | Cache store settings.
- | #[a.link-success(href="https://apacheignite.readme.io/docs/3rd-party-store" target="_blank") More info]
- .pca-panel-collapse(role='tabpanel' bs-collapse-target id=`${form}`)
- .pca-panel-body.pca-form-row(ng-if=`ui.isPanelLoaded('${form}')`)
- .pca-form-column-6.pc-form-grid-row
- -var storeFactory = `${model}.cacheStoreFactory`;
- -var storeFactoryKind = `${storeFactory}.kind`;
- .pc-form-grid-col-60
- +sane-ignite-form-field-dropdown({
- label: 'Store factory:',
- model: storeFactoryKind,
- name: '"cacheStoreFactory"',
- placeholder: '{{ ::$ctrl.Caches.cacheStoreFactory.kind.default }}',
- options: '::$ctrl.Caches.cacheStoreFactory.values',
- tip: `Factory for persistent storage for cache data
- <ul>
- <li>JDBC POJO store factory - Objects are stored in underlying database by using java beans mapping description via reflection backed by JDBC</li>
- <li>JDBC BLOB store factory - Objects are stored in underlying database in BLOB format backed by JDBC</li>
- <li>Hibernate BLOB store factory - Objects are stored in underlying database in BLOB format backed by Hibernate</li>
- </ul>`
- })(
- ui-validate=`{
- writeThroughOn: '$ctrl.Caches.cacheStoreFactory.storeDisabledValueOff(${model}, ${model}.writeThrough)',
- readThroughOn: '$ctrl.Caches.cacheStoreFactory.storeDisabledValueOff(${model}, ${model}.readThrough)',
- writeBehindOn: '$ctrl.Caches.cacheStoreFactory.storeDisabledValueOff(${model}, ${model}.writeBehindEnabled)'
- }`
- ui-validate-watch-collection=`"[${model}.readThrough, ${model}.writeThrough, ${model}.writeBehindEnabled]"`
- ng-model-options='{allowInvalid: true}'
- )
- +form-field-feedback(null, 'writeThroughOn', 'Write through is enabled but store is not set')
- +form-field-feedback(null, 'readThroughOn', 'Read through is enabled but store is not set')
- +form-field-feedback(null, 'writeBehindOn', 'Write-behind is enabled but store is not set')
- .pc-form-group(ng-if=storeFactoryKind)
- .pc-form-grid-row(ng-if=`${storeFactoryKind} === 'CacheJdbcPojoStoreFactory'`)
- -var pojoStoreFactory = `${storeFactory}.CacheJdbcPojoStoreFactory`
- -var required = `${storeFactoryKind} === 'CacheJdbcPojoStoreFactory'`
+panel-collapsible(ng-form=form on-open=`ui.loadPanel('${form}')`)
+ panel-title Store
+ panel-description
+ | Cache store settings.
+ | #[a.link-success(href="https://apacheignite.readme.io/docs/3rd-party-store" target="_blank") More info]
+ panel-content.pca-form-row(ng-if=`ui.isPanelLoaded('${form}')`)
+ .pca-form-column-6.pc-form-grid-row
+ -var storeFactory = `${model}.cacheStoreFactory`;
+ -var storeFactoryKind = `${storeFactory}.kind`;
+ .pc-form-grid-col-60
+ +sane-ignite-form-field-dropdown({
+ label: 'Store factory:',
+ model: storeFactoryKind,
+ name: '"cacheStoreFactory"',
+ placeholder: '{{ ::$ctrl.Caches.cacheStoreFactory.kind.default }}',
+ options: '::$ctrl.Caches.cacheStoreFactory.values',
+ tip: `Factory for persistent storage for cache data
+ <ul>
+ <li>JDBC POJO store factory - Objects are stored in underlying database by using java beans mapping description via reflection backed by JDBC</li>
+ <li>JDBC BLOB store factory - Objects are stored in underlying database in BLOB format backed by JDBC</li>
+ <li>Hibernate BLOB store factory - Objects are stored in underlying database in BLOB format backed by Hibernate</li>
+ </ul>`
+ })(
+ ui-validate=`{
+ writeThroughOn: '$ctrl.Caches.cacheStoreFactory.storeDisabledValueOff(${model}, ${model}.writeThrough)',
+ readThroughOn: '$ctrl.Caches.cacheStoreFactory.storeDisabledValueOff(${model}, ${model}.readThrough)',
+ writeBehindOn: '$ctrl.Caches.cacheStoreFactory.storeDisabledValueOff(${model}, ${model}.writeBehindEnabled)'
+ }`
+ ui-validate-watch-collection=`"[${model}.readThrough, ${model}.writeThrough, ${model}.writeBehindEnabled]"`
+ ng-model-options='{allowInvalid: true}'
+ )
+ +form-field-feedback(null, 'writeThroughOn', 'Write through is enabled but store is not set')
+ +form-field-feedback(null, 'readThroughOn', 'Read through is enabled but store is not set')
+ +form-field-feedback(null, 'writeBehindOn', 'Write-behind is enabled but store is not set')
+ .pc-form-group(ng-if=storeFactoryKind)
+ .pc-form-grid-row(ng-if=`${storeFactoryKind} === 'CacheJdbcPojoStoreFactory'`)
+ -var pojoStoreFactory = `${storeFactory}.CacheJdbcPojoStoreFactory`
+ -var required = `${storeFactoryKind} === 'CacheJdbcPojoStoreFactory'`
- .pc-form-grid-col-60
- +sane-ignite-form-field-text({
- label: 'Data source bean name:',
- model: `${pojoStoreFactory}.dataSourceBean`,
- name: '"pojoDataSourceBean"',
- required: required,
- placeholder: 'Input bean name',
- tip: 'Name of the data source bean in Spring context'
- })(
- is-valid-java-identifier
- not-java-reserved-word
- )
- +form-field-feedback(null, 'required', 'Data source bean name is required')
- +form-field-feedback(null, 'isValidJavaIdentifier', 'Data source bean name is not a valid Java identifier')
- +form-field-feedback(null, 'notJavaReservedWord', 'Data source bean name should not be a Java reserved word')
- .pc-form-grid-col-60
- +dialect('Dialect:', `${pojoStoreFactory}.dialect`, '"pojoDialect"', required,
- 'Dialect of SQL implemented by a particular RDBMS:', 'Generic JDBC dialect',
- 'Choose JDBC dialect')
- .pc-form-grid-col-30
- +number('Batch size:', `${pojoStoreFactory}.batchSize`, '"pojoBatchSize"', true, '512', '1',
- 'Maximum batch size for writeAll and deleteAll operations')
- .pc-form-grid-col-30
- +number('Thread count:', `${pojoStoreFactory}.maximumPoolSize`, '"pojoMaximumPoolSize"', true, 'availableProcessors', '1',
- 'Maximum workers thread count.<br/>\
- These threads are responsible for load cache.')
- .pc-form-grid-col-30
- +number('Maximum write attempts:', `${pojoStoreFactory}.maximumWriteAttempts`, '"pojoMaximumWriteAttempts"', true, '2', '0',
- 'Maximum write attempts in case of database error')
- .pc-form-grid-col-30
- +number('Parallel load threshold:', `${pojoStoreFactory}.parallelLoadCacheMinimumThreshold`, '"pojoParallelLoadCacheMinimumThreshold"', true, '512', '0',
- 'Parallel load cache minimum threshold.<br/>\
- If <b>0</b> then load sequentially.')
- .pc-form-grid-col-60
- +java-class('Hasher', `${pojoStoreFactory}.hasher`, '"pojoHasher"', 'true', 'false', 'Hash calculator', required)
- .pc-form-grid-col-60
- +java-class('Transformer', `${pojoStoreFactory}.transformer`, '"pojoTransformer"', 'true', 'false', 'Types transformer', required)
- .pc-form-grid-col-60
- +checkbox('Escape table and filed names', `${pojoStoreFactory}.sqlEscapeAll`, '"sqlEscapeAll"',
- 'If enabled than all schema, table and field names will be escaped with double quotes (for example: "tableName"."fieldName").<br/>\
- This enforces case sensitivity for field names and also allows having special characters in table and field names.<br/>\
- Escaped names will be used for CacheJdbcPojoStore internal SQL queries.')
- .pc-form-grid-row(ng-if=`${storeFactoryKind} === 'CacheJdbcBlobStoreFactory'`)
- -var blobStoreFactory = `${storeFactory}.CacheJdbcBlobStoreFactory`
- -var blobStoreFactoryVia = `${blobStoreFactory}.connectVia`
+ .pc-form-grid-col-60
+ +sane-ignite-form-field-text({
+ label: 'Data source bean name:',
+ model: `${pojoStoreFactory}.dataSourceBean`,
+ name: '"pojoDataSourceBean"',
+ required: required,
+ placeholder: 'Input bean name',
+ tip: 'Name of the data source bean in Spring context'
+ })(
+ is-valid-java-identifier
+ not-java-reserved-word
+ )
+ +form-field-feedback(null, 'required', 'Data source bean name is required')
+ +form-field-feedback(null, 'isValidJavaIdentifier', 'Data source bean name is not a valid Java identifier')
+ +form-field-feedback(null, 'notJavaReservedWord', 'Data source bean name should not be a Java reserved word')
+ .pc-form-grid-col-60
+ +dialect('Dialect:', `${pojoStoreFactory}.dialect`, '"pojoDialect"', required,
+ 'Dialect of SQL implemented by a particular RDBMS:', 'Generic JDBC dialect',
+ 'Choose JDBC dialect')
+ .pc-form-grid-col-30
+ +number('Batch size:', `${pojoStoreFactory}.batchSize`, '"pojoBatchSize"', true, '512', '1',
+ 'Maximum batch size for writeAll and deleteAll operations')
+ .pc-form-grid-col-30
+ +number('Thread count:', `${pojoStoreFactory}.maximumPoolSize`, '"pojoMaximumPoolSize"', true, 'availableProcessors', '1',
+ 'Maximum workers thread count.<br/>\
+ These threads are responsible for load cache.')
+ .pc-form-grid-col-30
+ +number('Maximum write attempts:', `${pojoStoreFactory}.maximumWriteAttempts`, '"pojoMaximumWriteAttempts"', true, '2', '0',
+ 'Maximum write attempts in case of database error')
+ .pc-form-grid-col-30
+ +number('Parallel load threshold:', `${pojoStoreFactory}.parallelLoadCacheMinimumThreshold`, '"pojoParallelLoadCacheMinimumThreshold"', true, '512', '0',
+ 'Parallel load cache minimum threshold.<br/>\
+ If <b>0</b> then load sequentially.')
+ .pc-form-grid-col-60
+ +java-class('Hasher', `${pojoStoreFactory}.hasher`, '"pojoHasher"', 'true', 'false', 'Hash calculator', required)
+ .pc-form-grid-col-60
+ +java-class('Transformer', `${pojoStoreFactory}.transformer`, '"pojoTransformer"', 'true', 'false', 'Types transformer', required)
+ .pc-form-grid-col-60
+ +checkbox('Escape table and filed names', `${pojoStoreFactory}.sqlEscapeAll`, '"sqlEscapeAll"',
+ 'If enabled than all schema, table and field names will be escaped with double quotes (for example: "tableName"."fieldName").<br/>\
+ This enforces case sensitivity for field names and also allows having special characters in table and field names.<br/>\
+ Escaped names will be used for CacheJdbcPojoStore internal SQL queries.')
+ .pc-form-grid-row(ng-if=`${storeFactoryKind} === 'CacheJdbcBlobStoreFactory'`)
+ -var blobStoreFactory = `${storeFactory}.CacheJdbcBlobStoreFactory`
+ -var blobStoreFactoryVia = `${blobStoreFactory}.connectVia`
- .pc-form-grid-col-60
- +dropdown('Connect via:', blobStoreFactoryVia, '"connectVia"', 'true', 'Choose connection method',
- '[\
- {value: "URL", label: "URL"},\
- {value: "DataSource", label: "Data source"}\
- ]',
- 'You can connect to database via:\
- <ul>\
- <li>JDBC URL, for example: jdbc:h2:mem:myDatabase</li>\
- <li>Configured data source</li>\
- </ul>')
+ .pc-form-grid-col-60
+ +dropdown('Connect via:', blobStoreFactoryVia, '"connectVia"', 'true', 'Choose connection method',
+ '[\
+ {value: "URL", label: "URL"},\
+ {value: "DataSource", label: "Data source"}\
+ ]',
+ 'You can connect to database via:\
+ <ul>\
+ <li>JDBC URL, for example: jdbc:h2:mem:myDatabase</li>\
+ <li>Configured data source</li>\
+ </ul>')
- -var required = `${storeFactoryKind} === 'CacheJdbcBlobStoreFactory' && ${blobStoreFactoryVia} === 'URL'`
+ -var required = `${storeFactoryKind} === 'CacheJdbcBlobStoreFactory' && ${blobStoreFactoryVia} === 'URL'`
- .pc-form-grid-col-60(ng-if-start=`${blobStoreFactoryVia} === 'URL'`)
- +text('Connection URL:', `${blobStoreFactory}.connectionUrl`, '"connectionUrl"', required, 'Input URL',
- 'URL for database access, for example: jdbc:h2:mem:myDatabase')
- .pc-form-grid-col-30
- +text('User:', `${blobStoreFactory}.user`, '"user"', required, 'Input user name', 'User name for database access')
- .pc-form-grid-col-30(ng-if-end)
- .pc-form-grid__text-only-item Password will be generated as stub.
+ .pc-form-grid-col-60(ng-if-start=`${blobStoreFactoryVia} === 'URL'`)
+ +text('Connection URL:', `${blobStoreFactory}.connectionUrl`, '"connectionUrl"', required, 'Input URL',
+ 'URL for database access, for example: jdbc:h2:mem:myDatabase')
+ .pc-form-grid-col-30
+ +text('User:', `${blobStoreFactory}.user`, '"user"', required, 'Input user name', 'User name for database access')
+ .pc-form-grid-col-30(ng-if-end)
+ .pc-form-grid__text-only-item Password will be generated as stub.
- -var required = `${storeFactoryKind} === 'CacheJdbcBlobStoreFactory' && ${blobStoreFactoryVia} !== 'URL'`
+ -var required = `${storeFactoryKind} === 'CacheJdbcBlobStoreFactory' && ${blobStoreFactoryVia} !== 'URL'`
- .pc-form-grid-col-60(ng-if-start=`${blobStoreFactoryVia} !== 'URL'`)
- +sane-ignite-form-field-text({
- label: 'Data source bean name:',
- model: `${blobStoreFactory}.dataSourceBean`,
- name: '"blobDataSourceBean"',
- required: required,
- placeholder: 'Input bean name',
- tip: 'Name of the data source bean in Spring context'
- })(
- is-valid-java-identifier
- not-java-reserved-word
- )
- +form-field-feedback(null, 'required', 'Data source bean name is required')
- +form-field-feedback(null, 'isValidJavaIdentifier', 'Data source bean name is not a valid Java identifier')
- +form-field-feedback(null, 'notJavaReservedWord', 'Data source bean name should not be a Java reserved word')
- .pc-form-grid-col-60(ng-if-end)
- +dialect('Database:', `${blobStoreFactory}.dialect`, '"blobDialect"', required, 'Supported databases:', 'Generic database', 'Choose database')
+ .pc-form-grid-col-60(ng-if-start=`${blobStoreFactoryVia} !== 'URL'`)
+ +sane-ignite-form-field-text({
+ label: 'Data source bean name:',
+ model: `${blobStoreFactory}.dataSourceBean`,
+ name: '"blobDataSourceBean"',
+ required: required,
+ placeholder: 'Input bean name',
+ tip: 'Name of the data source bean in Spring context'
+ })(
+ is-valid-java-identifier
+ not-java-reserved-word
+ )
+ +form-field-feedback(null, 'required', 'Data source bean name is required')
+ +form-field-feedback(null, 'isValidJavaIdentifier', 'Data source bean name is not a valid Java identifier')
+ +form-field-feedback(null, 'notJavaReservedWord', 'Data source bean name should not be a Java reserved word')
+ .pc-form-grid-col-60(ng-if-end)
+ +dialect('Database:', `${blobStoreFactory}.dialect`, '"blobDialect"', required, 'Supported databases:', 'Generic database', 'Choose database')
- .pc-form-grid-col-60
- +checkbox('Init schema', `${blobStoreFactory}.initSchema`, '"initSchema"',
- 'Flag indicating whether DB schema should be initialized by Ignite (default behaviour) or was explicitly created by user')
- .pc-form-grid-col-60
- +text('Create query:', `${blobStoreFactory}.createTableQuery`, '"createTableQuery"', 'false', 'SQL for table creation',
- 'Query for table creation in underlying database<br/>\
- Default value: create table if not exists ENTRIES (key binary primary key, val binary)')
- .pc-form-grid-col-60
- +text('Load query:', `${blobStoreFactory}.loadQuery`, '"loadQuery"', 'false', 'SQL for load entry',
- 'Query for entry load from underlying database<br/>\
- Default value: select * from ENTRIES where key=?')
- .pc-form-grid-col-60
- +text('Insert query:', `${blobStoreFactory}.insertQuery`, '"insertQuery"', 'false', 'SQL for insert entry',
- 'Query for insert entry into underlying database<br/>\
- Default value: insert into ENTRIES (key, val) values (?, ?)')
- .pc-form-grid-col-60
- +text('Update query:', `${blobStoreFactory}.updateQuery`, '"updateQuery"', 'false', 'SQL for update entry',
- 'Query for update entry in underlying database<br/>\
- Default value: update ENTRIES set val=? where key=?')
- .pc-form-grid-col-60
- +text('Delete query:', `${blobStoreFactory}.deleteQuery`, '"deleteQuery"', 'false', 'SQL for delete entry',
- 'Query for delete entry from underlying database<br/>\
- Default value: delete from ENTRIES where key=?')
+ .pc-form-grid-col-60
+ +checkbox('Init schema', `${blobStoreFactory}.initSchema`, '"initSchema"',
+ 'Flag indicating whether DB schema should be initialized by Ignite (default behaviour) or was explicitly created by user')
+ .pc-form-grid-col-60
+ +text('Create query:', `${blobStoreFactory}.createTableQuery`, '"createTableQuery"', 'false', 'SQL for table creation',
+ 'Query for table creation in underlying database<br/>\
+ Default value: create table if not exists ENTRIES (key binary primary key, val binary)')
+ .pc-form-grid-col-60
+ +text('Load query:', `${blobStoreFactory}.loadQuery`, '"loadQuery"', 'false', 'SQL for load entry',
+ 'Query for entry load from underlying database<br/>\
+ Default value: select * from ENTRIES where key=?')
+ .pc-form-grid-col-60
+ +text('Insert query:', `${blobStoreFactory}.insertQuery`, '"insertQuery"', 'false', 'SQL for insert entry',
+ 'Query for insert entry into underlying database<br/>\
+ Default value: insert into ENTRIES (key, val) values (?, ?)')
+ .pc-form-grid-col-60
+ +text('Update query:', `${blobStoreFactory}.updateQuery`, '"updateQuery"', 'false', 'SQL for update entry',
+ 'Query for update entry in underlying database<br/>\
+ Default value: update ENTRIES set val=? where key=?')
+ .pc-form-grid-col-60
+ +text('Delete query:', `${blobStoreFactory}.deleteQuery`, '"deleteQuery"', 'false', 'SQL for delete entry',
+ 'Query for delete entry from underlying database<br/>\
+ Default value: delete from ENTRIES where key=?')
- .pc-form-grid-row(ng-if=`${storeFactoryKind} === 'CacheHibernateBlobStoreFactory'`)
- -var hibernateStoreFactory = `${storeFactory}.CacheHibernateBlobStoreFactory`
+ .pc-form-grid-row(ng-if=`${storeFactoryKind} === 'CacheHibernateBlobStoreFactory'`)
+ -var hibernateStoreFactory = `${storeFactory}.CacheHibernateBlobStoreFactory`
- .pc-form-grid-col-60
- .ignite-form-field
- +ignite-form-field__label('Hibernate properties:', '"hibernateProperties"')
- +tooltip(`List of Hibernate properties<bt />
- For example: connection.url=jdbc:h2:mem:exampleDb`)
- .ignite-form-field__control
- +list-pair-edit({
- items: `${hibernateStoreFactory}.hibernateProperties`,
- keyLbl: 'Property name',
- valLbl: 'Property value',
- itemName: 'property',
- itemsName: 'properties'
- })
+ .pc-form-grid-col-60
+ .ignite-form-field
+ +ignite-form-field__label('Hibernate properties:', '"hibernateProperties"')
+ +tooltip(`List of Hibernate properties<bt />
+ For example: connection.url=jdbc:h2:mem:exampleDb`)
+ .ignite-form-field__control
+ +list-pair-edit({
+ items: `${hibernateStoreFactory}.hibernateProperties`,
+ keyLbl: 'Property name',
+ valLbl: 'Property value',
+ itemName: 'property',
+ itemsName: 'properties'
+ })
- - form = 'store'
- .pc-form-grid-col-60
- +checkbox('Keep binary in store', `${model}.storeKeepBinary`, '"storeKeepBinary"',
- 'Flag indicating that CacheStore implementation is working with binary objects instead of Java objects')
- .pc-form-grid-col-60
- +checkbox('Load previous value', `${model}.loadPreviousValue`, '"loadPreviousValue"',
- 'Flag indicating whether value should be loaded from store if it is not in the cache for following cache operations: \
- <ul> \
- <li>IgniteCache.putIfAbsent()</li> \
- <li>IgniteCache.replace()</li> \
- <li>IgniteCache.remove()</li> \
- <li>IgniteCache.getAndPut()</li> \
- <li>IgniteCache.getAndRemove()</li> \
- <li>IgniteCache.getAndReplace()</li> \
- <li> IgniteCache.getAndPutIfAbsent()</li>\
- </ul>')
- .pc-form-grid-col-60
- +sane-form-field-checkbox({
- label: 'Read-through',
- model: `${model}.readThrough`,
- name: '"readThrough"',
- tip: 'Flag indicating whether read-through caching should be used'
- })(
- ng-model-options='{allowInvalid: true}'
- ui-validate=`{
- storeEnabledReadOrWriteOn: '$ctrl.Caches.cacheStoreFactory.storeEnabledReadOrWriteOn(${model})'
- }`
- ui-validate-watch-collection=`"[${storeFactoryKind}, ${model}.writeThrough, ${model}.readThrough]"`
- )
- +form-field-feedback(0, 'storeEnabledReadOrWriteOn', 'Read or write through should be turned on when store kind is set')
- .pc-form-grid-col-60
- +sane-form-field-checkbox({
- label: 'Write-through',
- model: `${model}.writeThrough`,
- name: '"writeThrough"',
- tip: 'Flag indicating whether write-through caching should be used'
+ - form = 'store'
+ .pc-form-grid-col-60
+ +checkbox('Keep binary in store', `${model}.storeKeepBinary`, '"storeKeepBinary"',
+ 'Flag indicating that CacheStore implementation is working with binary objects instead of Java objects')
+ .pc-form-grid-col-60
+ +checkbox('Load previous value', `${model}.loadPreviousValue`, '"loadPreviousValue"',
+ 'Flag indicating whether value should be loaded from store if it is not in the cache for following cache operations: \
+ <ul> \
+ <li>IgniteCache.putIfAbsent()</li> \
+ <li>IgniteCache.replace()</li> \
+ <li>IgniteCache.remove()</li> \
+ <li>IgniteCache.getAndPut()</li> \
+ <li>IgniteCache.getAndRemove()</li> \
+ <li>IgniteCache.getAndReplace()</li> \
+ <li> IgniteCache.getAndPutIfAbsent()</li>\
+ </ul>')
+ .pc-form-grid-col-60
+ +sane-form-field-checkbox({
+ label: 'Read-through',
+ model: `${model}.readThrough`,
+ name: '"readThrough"',
+ tip: 'Flag indicating whether read-through caching should be used'
+ })(
+ ng-model-options='{allowInvalid: true}'
+ ui-validate=`{
+ storeEnabledReadOrWriteOn: '$ctrl.Caches.cacheStoreFactory.storeEnabledReadOrWriteOn(${model})'
+ }`
+ ui-validate-watch-collection=`"[${storeFactoryKind}, ${model}.writeThrough, ${model}.readThrough]"`
+ )
+ +form-field-feedback(0, 'storeEnabledReadOrWriteOn', 'Read or write through should be turned on when store kind is set')
+ .pc-form-grid-col-60
+ +sane-form-field-checkbox({
+ label: 'Write-through',
+ model: `${model}.writeThrough`,
+ name: '"writeThrough"',
+ tip: 'Flag indicating whether write-through caching should be used'
+ })(
+ ng-model-options='{allowInvalid: true}'
+ ui-validate=`{
+ storeEnabledReadOrWriteOn: '$ctrl.Caches.cacheStoreFactory.storeEnabledReadOrWriteOn(${model})'
+ }`
+ ui-validate-watch-collection=`"[${storeFactoryKind}, ${model}.writeThrough, ${model}.readThrough]"`
+ )
+ +form-field-feedback(0, 'storeEnabledReadOrWriteOn', 'Read or write through should be turned on when store kind is set')
+
+ -var enabled = `${model}.writeBehindEnabled`
+
+ .pc-form-grid-col-60.pc-form-group__text-title
+ +sane-form-field-checkbox({
+ label: 'Write-behind',
+ model: enabled,
+ name: '"writeBehindEnabled"',
+ tip: `
+ Cache write-behind settings.<br>
+ Write-behind is a special mode when updates to cache accumulated and then asynchronously flushed to persistent store as a bulk operation.
+ `
+ })(
+ ng-model-options='{allowInvalid: true}'
+ )
+ +form-field-feedback(0, 'storeDisabledValueOff', 'Write-behind is enabled but store kind is not set')
+ .pc-form-group.pc-form-grid-row(ng-if=enabled)
+ .pc-form-grid-col-30
+ +number('Batch size:', `${model}.writeBehindBatchSize`, '"writeBehindBatchSize"', enabled, '512', '1',
+ 'Maximum batch size for write-behind cache store operations<br/>\
+ Store operations(get or remove) are combined in a batch of this size to be passed to cache store')
+ .pc-form-grid-col-30
+ +sane-ignite-form-field-number({
+ label: 'Flush size:',
+ model: `${model}.writeBehindFlushSize`,
+ name: '"writeBehindFlushSize"',
+ placeholder: '10240',
+ min: `{{ $ctrl.Caches.writeBehindFlush.min(${model}) }}`,
+ tip: `Maximum size of the write-behind cache<br/>
+ If cache size exceeds this value, all cached items are flushed to the cache store and write cache is cleared`
})(
ng-model-options='{allowInvalid: true}'
- ui-validate=`{
- storeEnabledReadOrWriteOn: '$ctrl.Caches.cacheStoreFactory.storeEnabledReadOrWriteOn(${model})'
- }`
- ui-validate-watch-collection=`"[${storeFactoryKind}, ${model}.writeThrough, ${model}.readThrough]"`
)
- +form-field-feedback(0, 'storeEnabledReadOrWriteOn', 'Read or write through should be turned on when store kind is set')
-
- -var enabled = `${model}.writeBehindEnabled`
-
- .pc-form-grid-col-60.pc-form-group__text-title
- +sane-form-field-checkbox({
- label: 'Write-behind',
- model: enabled,
- name: '"writeBehindEnabled"',
- tip: `
- Cache write-behind settings.<br>
- Write-behind is a special mode when updates to cache accumulated and then asynchronously flushed to persistent store as a bulk operation.
- `
+ .pc-form-grid-col-30
+ +sane-ignite-form-field-number({
+ label: 'Flush frequency:',
+ model: `${model}.writeBehindFlushFrequency`,
+ name: '"writeBehindFlushFrequency"',
+ placeholder: '5000',
+ min: `{{ $ctrl.Caches.writeBehindFlush.min(${model}) }}`,
+ tip: `Frequency with which write-behind cache is flushed to the cache store in milliseconds`
})(
ng-model-options='{allowInvalid: true}'
)
- +form-field-feedback(0, 'storeDisabledValueOff', 'Write-behind is enabled but store kind is not set')
- .pc-form-group.pc-form-grid-row(ng-if=enabled)
- .pc-form-grid-col-30
- +number('Batch size:', `${model}.writeBehindBatchSize`, '"writeBehindBatchSize"', enabled, '512', '1',
- 'Maximum batch size for write-behind cache store operations<br/>\
- Store operations(get or remove) are combined in a batch of this size to be passed to cache store')
- .pc-form-grid-col-30
- +sane-ignite-form-field-number({
- label: 'Flush size:',
- model: `${model}.writeBehindFlushSize`,
- name: '"writeBehindFlushSize"',
- placeholder: '10240',
- min: `{{ $ctrl.Caches.writeBehindFlush.min(${model}) }}`,
- tip: `Maximum size of the write-behind cache<br/>
- If cache size exceeds this value, all cached items are flushed to the cache store and write cache is cleared`
- })(
- ng-model-options='{allowInvalid: true}'
- )
- .pc-form-grid-col-30
- +sane-ignite-form-field-number({
- label: 'Flush frequency:',
- model: `${model}.writeBehindFlushFrequency`,
- name: '"writeBehindFlushFrequency"',
- placeholder: '5000',
- min: `{{ $ctrl.Caches.writeBehindFlush.min(${model}) }}`,
- tip: `Frequency with which write-behind cache is flushed to the cache store in milliseconds`
- })(
- ng-model-options='{allowInvalid: true}'
- )
- .pc-form-grid-col-30
- +number('Flush threads count:', `${model}.writeBehindFlushThreadCount`, '"writeBehindFlushThreadCount"', enabled, '1', '1',
- 'Number of threads that will perform cache flushing')
+ .pc-form-grid-col-30
+ +number('Flush threads count:', `${model}.writeBehindFlushThreadCount`, '"writeBehindFlushThreadCount"', enabled, '1', '1',
+ 'Number of threads that will perform cache flushing')
- //- Since ignite 2.0
- .pc-form-grid-col-60(ng-if='$ctrl.available("2.0.0")')
- +checkbox-enabled('Write coalescing', model + '.writeBehindCoalescing', '"WriteBehindCoalescing"', enabled, 'Write coalescing flag for write-behind cache store')
+ //- Since ignite 2.0
+ .pc-form-grid-col-60(ng-if='$ctrl.available("2.0.0")')
+ +checkbox-enabled('Write coalescing', model + '.writeBehindCoalescing', '"WriteBehindCoalescing"', enabled, 'Write coalescing flag for write-behind cache store')
- .pca-form-column-6
- +preview-xml-java(model, 'cacheStore', 'domains')
+ .pca-form-column-6
+ +preview-xml-java(model, 'cacheStore', 'domains')
http://git-wip-us.apache.org/repos/asf/ignite/blob/d24dab81/modules/web-console/frontend/app/modules/states/configuration/clusters/atomic.pug
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/states/configuration/clusters/atomic.pug b/modules/web-console/frontend/app/modules/states/configuration/clusters/atomic.pug
index 8994fa6..13424f8 100644
--- a/modules/web-console/frontend/app/modules/states/configuration/clusters/atomic.pug
+++ b/modules/web-console/frontend/app/modules/states/configuration/clusters/atomic.pug
@@ -22,57 +22,54 @@ include /app/helpers/jade/mixins
-var rendezvousAff = affModel + '.kind === "Rendezvous"'
-var customAff = affModel + '.kind === "Custom"'
-.pca-panel.pca-panel-default(ng-form=form novalidate)
- .pca-panel-heading(bs-collapse-toggle='' ng-click=`ui.loadPanel('${form}')`)
- ignite-form-panel-chevron
- .pca-panel-heading-title Atomic configuration
- .pca-panel-heading-description
- | Configuration for atomic data structures.
- | Atomics are distributed across the cluster, essentially enabling performing atomic operations (such as increment-and-get or compare-and-set) with the same globally-visible value.
- | #[a.link-success(href="https://apacheignite.readme.io/docs/atomic-types" target="_blank") More info]
- .pca-panel-collapse(role='tabpanel' bs-collapse-target='' id=`${form}`)
- .pca-panel-body(ng-if=`ui.isPanelLoaded('${form}')`).pca-form-row
- .pca-form-column-6.pc-form-grid-row
- .pc-form-grid-col-30
- +dropdown('Cache mode:', `${model}.cacheMode`, '"cacheMode"', 'true', 'PARTITIONED',
- '[\
- {value: "LOCAL", label: "LOCAL"},\
- {value: "REPLICATED", label: "REPLICATED"},\
- {value: "PARTITIONED", label: "PARTITIONED"}\
- ]',
- 'Cache modes:\
- <ul>\
- <li>Partitioned - in this mode the overall key set will be divided into partitions and all partitions will be split equally between participating nodes</li>\
- <li>Replicated - in this mode all the keys are distributed to all participating nodes</li>\
- <li>Local - in this mode caches residing on different grid nodes will not know about each other</li>\
- </ul>')
- .pc-form-grid-col-30
- +number('Sequence reserve:', `${model}.atomicSequenceReserveSize`, '"atomicSequenceReserveSize"', 'true', '1000', '0',
- 'Default number of sequence values reserved for IgniteAtomicSequence instances<br/>\
- After a certain number has been reserved, consequent increments of sequence will happen locally, without communication with other nodes, until the next reservation has to be made')
- .pc-form-grid-col-60(ng-show=`!(${model}.cacheMode && ${model}.cacheMode != "PARTITIONED")`)
- +number('Backups:', model + '.backups', '"backups"', 'true', '0', '0', 'Number of backup nodes')
+panel-collapsible(ng-form=form on-open=`ui.loadPanel('${form}')`)
+ panel-title Atomic configuration
+ panel-description
+ | Configuration for atomic data structures.
+ | Atomics are distributed across the cluster, essentially enabling performing atomic operations (such as increment-and-get or compare-and-set) with the same globally-visible value.
+ | #[a.link-success(href="https://apacheignite.readme.io/docs/atomic-types" target="_blank") More info]
+ panel-content.pca-form-row(ng-if=`ui.isPanelLoaded('${form}')`)
+ .pca-form-column-6.pc-form-grid-row
+ .pc-form-grid-col-30
+ +dropdown('Cache mode:', `${model}.cacheMode`, '"cacheMode"', 'true', 'PARTITIONED',
+ '[\
+ {value: "LOCAL", label: "LOCAL"},\
+ {value: "REPLICATED", label: "REPLICATED"},\
+ {value: "PARTITIONED", label: "PARTITIONED"}\
+ ]',
+ 'Cache modes:\
+ <ul>\
+ <li>Partitioned - in this mode the overall key set will be divided into partitions and all partitions will be split equally between participating nodes</li>\
+ <li>Replicated - in this mode all the keys are distributed to all participating nodes</li>\
+ <li>Local - in this mode caches residing on different grid nodes will not know about each other</li>\
+ </ul>')
+ .pc-form-grid-col-30
+ +number('Sequence reserve:', `${model}.atomicSequenceReserveSize`, '"atomicSequenceReserveSize"', 'true', '1000', '0',
+ 'Default number of sequence values reserved for IgniteAtomicSequence instances<br/>\
+ After a certain number has been reserved, consequent increments of sequence will happen locally, without communication with other nodes, until the next reservation has to be made')
+ .pc-form-grid-col-60(ng-show=`!(${model}.cacheMode && ${model}.cacheMode != "PARTITIONED")`)
+ +number('Backups:', model + '.backups', '"backups"', 'true', '0', '0', 'Number of backup nodes')
- .pc-form-grid-col-60(ng-if-start='$ctrl.available("2.1.0")')
- +dropdown('Function:', `${affModel}.kind`, '"AffinityKind"', 'true', 'Default', '$ctrl.Clusters.affinityFunctions',
- 'Key topology resolver to provide mapping from keys to nodes\
- <ul>\
- <li>Rendezvous - Based on Highest Random Weight algorithm<br/></li>\
- <li>Custom - Custom implementation of key affinity function<br/></li>\
- <li>Default - By default rendezvous affinity function with 1024 partitions is used<br/></li>\
- </ul>')
- .pc-form-group(ng-if-end ng-if=rendezvousAff + ' || ' + customAff)
- .pc-form-grid-row
- .pc-form-grid-col-30(ng-if-start=rendezvousAff)
- +number-required('Partitions', `${affModel}.Rendezvous.partitions`, '"RendPartitions"', 'true', rendPartitionsRequired, '1024', '1', 'Number of partitions')
- .pc-form-grid-col-30
- +java-class('Backup filter', `${affModel}.Rendezvous.affinityBackupFilter`, '"RendAffinityBackupFilter"', 'true', 'false',
- 'Backups will be selected from all nodes that pass this filter')
- .pc-form-grid-col-60(ng-if-end)
- +checkbox('Exclude neighbors', `${affModel}.Rendezvous.excludeNeighbors`, '"RendExcludeNeighbors"',
- 'Exclude same - host - neighbors from being backups of each other and specified number of backups')
- .pc-form-grid-col-60(ng-if=customAff)
- +java-class('Class name:', `${affModel}.Custom.className`, '"AffCustomClassName"', 'true', customAff,
- 'Custom key affinity function implementation class name')
- .pca-form-column-6
- +preview-xml-java(model, 'clusterAtomics')
+ .pc-form-grid-col-60(ng-if-start='$ctrl.available("2.1.0")')
+ +dropdown('Function:', `${affModel}.kind`, '"AffinityKind"', 'true', 'Default', '$ctrl.Clusters.affinityFunctions',
+ 'Key topology resolver to provide mapping from keys to nodes\
+ <ul>\
+ <li>Rendezvous - Based on Highest Random Weight algorithm<br/></li>\
+ <li>Custom - Custom implementation of key affinity function<br/></li>\
+ <li>Default - By default rendezvous affinity function with 1024 partitions is used<br/></li>\
+ </ul>')
+ .pc-form-group(ng-if-end ng-if=rendezvousAff + ' || ' + customAff)
+ .pc-form-grid-row
+ .pc-form-grid-col-30(ng-if-start=rendezvousAff)
+ +number-required('Partitions', `${affModel}.Rendezvous.partitions`, '"RendPartitions"', 'true', rendPartitionsRequired, '1024', '1', 'Number of partitions')
+ .pc-form-grid-col-30
+ +java-class('Backup filter', `${affModel}.Rendezvous.affinityBackupFilter`, '"RendAffinityBackupFilter"', 'true', 'false',
+ 'Backups will be selected from all nodes that pass this filter')
+ .pc-form-grid-col-60(ng-if-end)
+ +checkbox('Exclude neighbors', `${affModel}.Rendezvous.excludeNeighbors`, '"RendExcludeNeighbors"',
+ 'Exclude same - host - neighbors from being backups of each other and specified number of backups')
+ .pc-form-grid-col-60(ng-if=customAff)
+ +java-class('Class name:', `${affModel}.Custom.className`, '"AffCustomClassName"', 'true', customAff,
+ 'Custom key affinity function implementation class name')
+ .pca-form-column-6
+ +preview-xml-java(model, 'clusterAtomics')
http://git-wip-us.apache.org/repos/asf/ignite/blob/d24dab81/modules/web-console/frontend/app/modules/states/configuration/clusters/attributes.pug
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/states/configuration/clusters/attributes.pug b/modules/web-console/frontend/app/modules/states/configuration/clusters/attributes.pug
index edff038..b57f1da 100644
--- a/modules/web-console/frontend/app/modules/states/configuration/clusters/attributes.pug
+++ b/modules/web-console/frontend/app/modules/states/configuration/clusters/attributes.pug
@@ -19,26 +19,22 @@ include /app/helpers/jade/mixins
-var form = 'attributes'
-var model = '$ctrl.clonedCluster'
-.pca-panel.pca-panel-default(ng-form=form novalidate)
- .pca-panel-heading(bs-collapse-toggle ng-click=`ui.loadPanel('${form}')`)
- ignite-form-panel-chevron
- .pca-panel-heading-title User attributes
- .pca-panel-heading-description
- | Configuration for Ignite user attributes.
- .pca-panel-collapse(role='tabpanel' bs-collapse-target id=`${form}`)
- .pca-panel-body(ng-if=`ui.isPanelLoaded('${form}')`).pca-form-row
- .pca-form-column-6
- .ignite-form-field
- +ignite-form-field__label('User attributes:', '"userAttributes"')
- +tooltip(`User-defined attributes to add to node`)
- .ignite-form-field__control
- +list-pair-edit({
- items: `${model}.attributes`,
- keyLbl: 'Attribute name',
- valLbl: 'Attribute value',
- itemName: 'attribute',
- itemsName: 'attributes'
- })
+panel-collapsible(ng-form=form on-open=`ui.loadPanel('${form}')`)
+ panel-title User attributes
+ panel-description Configuration for Ignite user attributes.
+ panel-content.pca-form-row(ng-if=`ui.isPanelLoaded('${form}')`)
+ .pca-form-column-6
+ .ignite-form-field
+ +ignite-form-field__label('User attributes:', '"userAttributes"')
+ +tooltip(`User-defined attributes to add to node`)
+ .ignite-form-field__control
+ +list-pair-edit({
+ items: `${model}.attributes`,
+ keyLbl: 'Attribute name',
+ valLbl: 'Attribute value',
+ itemName: 'attribute',
+ itemsName: 'attributes'
+ })
- .pca-form-column-6
- +preview-xml-java(model, 'clusterUserAttributes')
+ .pca-form-column-6
+ +preview-xml-java(model, 'clusterUserAttributes')
http://git-wip-us.apache.org/repos/asf/ignite/blob/d24dab81/modules/web-console/frontend/app/modules/states/configuration/clusters/binary.pug
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/states/configuration/clusters/binary.pug b/modules/web-console/frontend/app/modules/states/configuration/clusters/binary.pug
index 9c3a48d..6c1b246 100644
--- a/modules/web-console/frontend/app/modules/states/configuration/clusters/binary.pug
+++ b/modules/web-console/frontend/app/modules/states/configuration/clusters/binary.pug
@@ -19,65 +19,62 @@ include /app/helpers/jade/mixins
-var form = 'binary'
-var model = '$ctrl.clonedCluster.binaryConfiguration'
-.pca-panel.pca-panel-default(ng-form=form novalidate)
- .pca-panel-heading(bs-collapse-toggle ng-click=`ui.loadPanel('${form}')`)
- ignite-form-panel-chevron
- .pca-panel-heading-title Binary configuration
- .pca-panel-heading-description
- | Configuration of specific binary types.
- | #[a.link-success(href="https://apacheignite.readme.io/docs/binary-marshaller" target="_blank") More info]
- .pca-panel-collapse(role='tabpanel' bs-collapse-target id=`${form}`)
- .pca-panel-body(ng-if=`ui.isPanelLoaded('${form}')`).pca-form-row
- .pca-form-column-6.pc-form-grid-row
- .pc-form-grid-col-60
- +java-class('ID mapper:', model + '.idMapper', '"idMapper"', 'true', 'false',
- 'Maps given from BinaryNameMapper type and filed name to ID that will be used by Ignite in internals<br/>\
- Ignite never writes full strings for field or type names. Instead, for performance reasons, Ignite writes integer hash codes for type/class and field names. It has been tested that hash code conflicts for the type/class names or the field names within the same type are virtually non - existent and, to gain performance, it is safe to work with hash codes. For the cases when hash codes for different types or fields actually do collide <b>BinaryIdMapper</b> allows to override the automatically generated hash code IDs for the type and field names')
- .pc-form-grid-col-60
- +java-class('Name mapper:', model + '.nameMapper', '"nameMapper"', 'true', 'false', 'Maps type/class and field names to different names')
- .pc-form-grid-col-60
- +java-class('Serializer:', model + '.serializer', '"serializer"', 'true', 'false', 'Class with custom serialization logic for binary objects')
- .pc-form-grid-col-60
- .ignite-form-field
- +ignite-form-field__label('Type configurations:', '"typeСonfigurations"')
- +tooltip(`Configuration properties for binary types`)
- .ignite-form-field__control
- -var items = model + '.typeConfigurations'
- list-editable(ng-model=items name='typeСonfigurations')
- list-editable-item-edit.pc-form-grid-row
- - form = '$parent.form'
- .pc-form-grid-col-60
- +java-class-autofocus('Type name:', '$item.typeName', '"typeName"', 'true', 'true', 'true', 'Type name')(
- ignite-unique=items
- ignite-unique-property='typeName'
- )
- +unique-feedback(`$item.typeName`, 'Type name should be unique.')
- .pc-form-grid-col-60
- +java-class('ID mapper:', '$item.idMapper', '"idMapper"', 'true', 'false',
- 'Maps given from BinaryNameMapper type and filed name to ID that will be used by Ignite in internals<br/>\
- Ignite never writes full strings for field or type/class names.\
- Instead, for performance reasons, Ignite writes integer hash codes for type/class and field names.\
- It has been tested that hash code conflicts for the type/class names or the field names within the same type are virtually non - existent and,\
- to gain performance, it is safe to work with hash codes.\
- For the cases when hash codes for different types or fields actually do collide <b>BinaryIdMapper</b> allows to override the automatically generated hash code IDs for the type and field names')
- .pc-form-grid-col-60
- +java-class('Name mapper:', '$item.nameMapper', '"nameMapper"', 'true', 'false',
- 'Maps type/class and field names to different names')
- .pc-form-grid-col-60
- +java-class('Serializer:', '$item.serializer', '"serializer"', 'true', 'false',
- 'Class with custom serialization logic for binary object')
- .pc-form-grid-col-60
- +checkbox('Enum', '$item.enum', 'enum', 'Flag indicating that this type is the enum')
-
- list-editable-no-items
- list-editable-add-item-button(
- add-item=`$ctrl.Clusters.addBinaryTypeConfiguration($ctrl.clonedCluster)`
- label-single='configuration'
- label-multiple='configurations'
+panel-collapsible(ng-form=form on-open=`ui.loadPanel('${form}')`)
+ panel-title Binary configuration
+ panel-description
+ | Configuration of specific binary types.
+ | #[a.link-success(href="https://apacheignite.readme.io/docs/binary-marshaller" target="_blank") More info]
+ panel-content.pca-form-row(ng-if=`ui.isPanelLoaded('${form}')`)
+ .pca-form-column-6.pc-form-grid-row
+ .pc-form-grid-col-60
+ +java-class('ID mapper:', model + '.idMapper', '"idMapper"', 'true', 'false',
+ 'Maps given from BinaryNameMapper type and filed name to ID that will be used by Ignite in internals<br/>\
+ Ignite never writes full strings for field or type names. Instead, for performance reasons, Ignite writes integer hash codes for type/class and field names. It has been tested that hash code conflicts for the type/class names or the field names within the same type are virtually non - existent and, to gain performance, it is safe to work with hash codes. For the cases when hash codes for different types or fields actually do collide <b>BinaryIdMapper</b> allows to override the automatically generated hash code IDs for the type and field names')
+ .pc-form-grid-col-60
+ +java-class('Name mapper:', model + '.nameMapper', '"nameMapper"', 'true', 'false', 'Maps type/class and field names to different names')
+ .pc-form-grid-col-60
+ +java-class('Serializer:', model + '.serializer', '"serializer"', 'true', 'false', 'Class with custom serialization logic for binary objects')
+ .pc-form-grid-col-60
+ .ignite-form-field
+ +ignite-form-field__label('Type configurations:', '"typeСonfigurations"')
+ +tooltip(`Configuration properties for binary types`)
+ .ignite-form-field__control
+ -var items = model + '.typeConfigurations'
+ list-editable(ng-model=items name='typeСonfigurations')
+ list-editable-item-edit.pc-form-grid-row
+ - form = '$parent.form'
+ .pc-form-grid-col-60
+ +java-class-autofocus('Type name:', '$item.typeName', '"typeName"', 'true', 'true', 'true', 'Type name')(
+ ignite-unique=items
+ ignite-unique-property='typeName'
)
+ +unique-feedback(`$item.typeName`, 'Type name should be unique.')
+ .pc-form-grid-col-60
+ +java-class('ID mapper:', '$item.idMapper', '"idMapper"', 'true', 'false',
+ 'Maps given from BinaryNameMapper type and filed name to ID that will be used by Ignite in internals<br/>\
+ Ignite never writes full strings for field or type/class names.\
+ Instead, for performance reasons, Ignite writes integer hash codes for type/class and field names.\
+ It has been tested that hash code conflicts for the type/class names or the field names within the same type are virtually non - existent and,\
+ to gain performance, it is safe to work with hash codes.\
+ For the cases when hash codes for different types or fields actually do collide <b>BinaryIdMapper</b> allows to override the automatically generated hash code IDs for the type and field names')
+ .pc-form-grid-col-60
+ +java-class('Name mapper:', '$item.nameMapper', '"nameMapper"', 'true', 'false',
+ 'Maps type/class and field names to different names')
+ .pc-form-grid-col-60
+ +java-class('Serializer:', '$item.serializer', '"serializer"', 'true', 'false',
+ 'Class with custom serialization logic for binary object')
+ .pc-form-grid-col-60
+ +checkbox('Enum', '$item.enum', 'enum', 'Flag indicating that this type is the enum')
+
+ list-editable-no-items
+ list-editable-add-item-button(
+ add-item=`$ctrl.Clusters.addBinaryTypeConfiguration($ctrl.clonedCluster)`
+ label-single='configuration'
+ label-multiple='configurations'
+ )
- - form = 'binary'
- .pc-form-grid-col-60
- +checkbox('Compact footer', model + '.compactFooter', '"compactFooter"', 'When enabled, Ignite will not write fields metadata when serializing objects (this will increase serialization performance), because internally <b>BinaryMarshaller</b> already distribute metadata inside cluster')
- .pca-form-column-6
- +preview-xml-java(model, 'clusterBinary')
+ - form = 'binary'
+ .pc-form-grid-col-60
+ +checkbox('Compact footer', model + '.compactFooter', '"compactFooter"', 'When enabled, Ignite will not write fields metadata when serializing objects (this will increase serialization performance), because internally <b>BinaryMarshaller</b> already distribute metadata inside cluster')
+ .pca-form-column-6
+ +preview-xml-java(model, 'clusterBinary')
http://git-wip-us.apache.org/repos/asf/ignite/blob/d24dab81/modules/web-console/frontend/app/modules/states/configuration/clusters/cache-key-cfg.pug
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/states/configuration/clusters/cache-key-cfg.pug b/modules/web-console/frontend/app/modules/states/configuration/clusters/cache-key-cfg.pug
index 577d66c..abc8ff1 100644
--- a/modules/web-console/frontend/app/modules/states/configuration/clusters/cache-key-cfg.pug
+++ b/modules/web-console/frontend/app/modules/states/configuration/clusters/cache-key-cfg.pug
@@ -19,48 +19,45 @@ include /app/helpers/jade/mixins
-var form = 'cacheKeyCfg'
-var model = '$ctrl.clonedCluster.cacheKeyConfiguration'
-.pca-panel.pca-panel-default(ng-form=form novalidate)
- .pca-panel-heading(bs-collapse-toggle ng-click=`ui.loadPanel('${form}')`)
- ignite-form-panel-chevron
- .pca-panel-heading-title Cache key configuration
- .pca-panel-heading-description
- | Cache key configuration allows to collocate objects in a partitioned cache based on field in cache key without explicit usage of annotations on user classes.
- .pca-panel-collapse(role='tabpanel' bs-collapse-target id=`${form}`)
- .pca-panel-body(ng-if=`ui.isPanelLoaded('${form}')`).pca-form-row
- .pca-form-column-6
- mixin clusters-cache-key-cfg
- .ignite-form-field
- +ignite-form-field__label('Cache key configuration:', '"cacheKeyConfiguration"')
- .ignite-form-field__control
- -let items = model
- list-editable(ng-model=items name='cacheKeyConfiguration')
- list-editable-item-edit.pc-form-grid-row
- - form = '$parent.form'
- .pc-form-grid-col-60
- +java-class-autofocus('Type name:', '$item.typeName', '"cacheKeyTypeName"', 'true', 'true', 'true', 'Type name')(
- ignite-unique=items
- ignite-unique-property='typeName'
- )
- +unique-feedback(`cacheKeyTypeName`, 'Type name should be unique.')
- .pc-form-grid-col-60
- +sane-ignite-form-field-text({
- label: 'Affinity key field name:',
- model: '$item.affinityKeyFieldName',
- name: '"affinityKeyFieldName"',
- disabled: 'false',
- placeholder: 'Enter field name',
- tip: 'Affinity key field name',
- required: true
- })
-
- list-editable-no-items
- list-editable-add-item-button(
- add-item=`(${items} = ${items} || []).push({})`
- label-single='configuration'
- label-multiple='configurations'
+panel-collapsible(ng-form=form on-open=`ui.loadPanel('${form}')`)
+ panel-title Cache key configuration
+ panel-description
+ | Cache key configuration allows to collocate objects in a partitioned cache based on field in cache key without explicit usage of annotations on user classes.
+ panel-content.pca-form-row(ng-if=`ui.isPanelLoaded('${form}')`)
+ .pca-form-column-6
+ mixin clusters-cache-key-cfg
+ .ignite-form-field
+ +ignite-form-field__label('Cache key configuration:', '"cacheKeyConfiguration"')
+ .ignite-form-field__control
+ -let items = model
+ list-editable(ng-model=items name='cacheKeyConfiguration')
+ list-editable-item-edit.pc-form-grid-row
+ - form = '$parent.form'
+ .pc-form-grid-col-60
+ +java-class-autofocus('Type name:', '$item.typeName', '"cacheKeyTypeName"', 'true', 'true', 'true', 'Type name')(
+ ignite-unique=items
+ ignite-unique-property='typeName'
)
-
- +clusters-cache-key-cfg
-
- .pca-form-column-6
- +preview-xml-java(model, 'clusterCacheKeyConfiguration')
+ +unique-feedback(`cacheKeyTypeName`, 'Type name should be unique.')
+ .pc-form-grid-col-60
+ +sane-ignite-form-field-text({
+ label: 'Affinity key field name:',
+ model: '$item.affinityKeyFieldName',
+ name: '"affinityKeyFieldName"',
+ disabled: 'false',
+ placeholder: 'Enter field name',
+ tip: 'Affinity key field name',
+ required: true
+ })
+
+ list-editable-no-items
+ list-editable-add-item-button(
+ add-item=`(${items} = ${items} || []).push({})`
+ label-single='configuration'
+ label-multiple='configurations'
+ )
+
+ +clusters-cache-key-cfg
+
+ .pca-form-column-6
+ +preview-xml-java(model, 'clusterCacheKeyConfiguration')
http://git-wip-us.apache.org/repos/asf/ignite/blob/d24dab81/modules/web-console/frontend/app/modules/states/configuration/clusters/checkpoint.pug
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/states/configuration/clusters/checkpoint.pug b/modules/web-console/frontend/app/modules/states/configuration/clusters/checkpoint.pug
index 5adb29c..b00c98c 100644
--- a/modules/web-console/frontend/app/modules/states/configuration/clusters/checkpoint.pug
+++ b/modules/web-console/frontend/app/modules/states/configuration/clusters/checkpoint.pug
@@ -21,65 +21,62 @@ include /app/helpers/jade/mixins
-var CustomCheckpoint = '$checkpointSPI.kind === "Custom"'
-var CacheCheckpoint = '$checkpointSPI.kind === "Cache"'
-.pca-panel.pca-panel-default(ng-form=form novalidate)
- .pca-panel-heading(bs-collapse-toggle ng-click=`ui.loadPanel('${form}')`)
- ignite-form-panel-chevron
- .pca-panel-heading-title Checkpointing
- .pca-panel-heading-description
- | Checkpointing provides an ability to save an intermediate job state.
- | #[a.link-success(href="https://apacheignite.readme.io/docs/checkpointing" target="_blank") More info]
- .pca-panel-collapse(role='tabpanel' bs-collapse-target id=`${form}`)
- .pca-panel-body(ng-i_f=`ui.isPanelLoaded('${form}')`).pca-form-row
- .pca-form-column-6.pc-form-grid-row
- .pc-form-grid-col-60
- .ignite-form-field
- +ignite-form-field__label('Checkpoint SPI configurations:', '"checkpointSPIConfigurations"')
- .ignite-form-field__control
- list-editable(ng-model=model name='checkpointSPIConfigurations')
- list-editable-item-edit(item-name='$checkpointSPI').pc-form-grid-row
- .pc-form-grid-col-60
- +dropdown-required('Checkpoint SPI:', '$checkpointSPI.kind', '"checkpointKind"', 'true', 'true', 'Choose checkpoint configuration variant', '[\
- {value: "FS", label: "File System"},\
- {value: "Cache", label: "Cache"},\
- {value: "S3", label: "Amazon S3"},\
- {value: "JDBC", label: "Database"},\
- {value: "Custom", label: "Custom"}\
- ]',
- 'Provides an ability to save an intermediate job state\
- <ul>\
- <li>File System - Uses a shared file system to store checkpoints</li>\
- <li>Cache - Uses a cache to store checkpoints</li>\
- <li>Amazon S3 - Uses Amazon S3 to store checkpoints</li>\
- <li>Database - Uses a database to store checkpoints</li>\
- <li>Custom - Custom checkpoint SPI implementation</li>\
- </ul>')
+panel-collapsible(ng-form=form)
+ panel-title Checkpointing
+ panel-description
+ | Checkpointing provides an ability to save an intermediate job state.
+ | #[a.link-success(href="https://apacheignite.readme.io/docs/checkpointing" target="_blank") More info]
+ panel-content.pca-form-row
+ .pca-form-column-6.pc-form-grid-row
+ .pc-form-grid-col-60
+ .ignite-form-field
+ +ignite-form-field__label('Checkpoint SPI configurations:', '"checkpointSPIConfigurations"')
+ .ignite-form-field__control
+ list-editable(ng-model=model name='checkpointSPIConfigurations')
+ list-editable-item-edit(item-name='$checkpointSPI').pc-form-grid-row
+ .pc-form-grid-col-60
+ +dropdown-required('Checkpoint SPI:', '$checkpointSPI.kind', '"checkpointKind"', 'true', 'true', 'Choose checkpoint configuration variant', '[\
+ {value: "FS", label: "File System"},\
+ {value: "Cache", label: "Cache"},\
+ {value: "S3", label: "Amazon S3"},\
+ {value: "JDBC", label: "Database"},\
+ {value: "Custom", label: "Custom"}\
+ ]',
+ 'Provides an ability to save an intermediate job state\
+ <ul>\
+ <li>File System - Uses a shared file system to store checkpoints</li>\
+ <li>Cache - Uses a cache to store checkpoints</li>\
+ <li>Amazon S3 - Uses Amazon S3 to store checkpoints</li>\
+ <li>Database - Uses a database to store checkpoints</li>\
+ <li>Custom - Custom checkpoint SPI implementation</li>\
+ </ul>')
- include ./checkpoint/fs
+ include ./checkpoint/fs
- .pc-form-grid-col-60(ng-if-start=CacheCheckpoint)
- +dropdown-required-empty('Cache:', '$checkpointSPI.Cache.cache', '"checkpointCacheCache"', 'true', CacheCheckpoint,
- 'Choose cache', 'No caches configured for current cluster', '$ctrl.cachesMenu', 'Cache to use for storing checkpoints')(
- pc-is-in-collection='$ctrl.clonedCluster.caches'
- )
- +form-field-feedback(form, 'isInCollection', `Cluster doesn't have such a cache`)
- .pc-form-grid-col-60(ng-if-end)
- +java-class('Listener:', '$checkpointSPI.Cache.checkpointListener', '"checkpointCacheListener"', 'true', 'false',
- 'Checkpoint listener implementation class name', CacheCheckpoint)
+ .pc-form-grid-col-60(ng-if-start=CacheCheckpoint)
+ +dropdown-required-empty('Cache:', '$checkpointSPI.Cache.cache', '"checkpointCacheCache"', 'true', CacheCheckpoint,
+ 'Choose cache', 'No caches configured for current cluster', '$ctrl.cachesMenu', 'Cache to use for storing checkpoints')(
+ pc-is-in-collection='$ctrl.clonedCluster.caches'
+ )
+ +form-field-feedback(form, 'isInCollection', `Cluster doesn't have such a cache`)
+ .pc-form-grid-col-60(ng-if-end)
+ +java-class('Listener:', '$checkpointSPI.Cache.checkpointListener', '"checkpointCacheListener"', 'true', 'false',
+ 'Checkpoint listener implementation class name', CacheCheckpoint)
- include ./checkpoint/s3
+ include ./checkpoint/s3
- include ./checkpoint/jdbc
+ include ./checkpoint/jdbc
- .pc-form-grid-col-60(ng-if=CustomCheckpoint)
- +java-class('Class name:', '$checkpointSPI.Custom.className', '"checkpointCustomClassName"', 'true', CustomCheckpoint,
- 'Custom CheckpointSpi implementation class', CustomCheckpoint)
+ .pc-form-grid-col-60(ng-if=CustomCheckpoint)
+ +java-class('Class name:', '$checkpointSPI.Custom.className', '"checkpointCustomClassName"', 'true', CustomCheckpoint,
+ 'Custom CheckpointSpi implementation class', CustomCheckpoint)
- list-editable-no-items
- list-editable-add-item-button(
- add-item=`$edit($ctrl.Clusters.addCheckpointSPI($ctrl.clonedCluster))`
- label-single='checkpoint SPI configuration'
- label-multiple='checkpoint SPI configurations'
- )
-
- .pca-form-column-6
- +preview-xml-java('$ctrl.clonedCluster', 'clusterCheckpoint', '$ctrl.caches')
+ list-editable-no-items
+ list-editable-add-item-button(
+ add-item=`$edit($ctrl.Clusters.addCheckpointSPI($ctrl.clonedCluster))`
+ label-single='checkpoint SPI configuration'
+ label-multiple='checkpoint SPI configurations'
+ )
+
+ .pca-form-column-6
+ +preview-xml-java('$ctrl.clonedCluster', 'clusterCheckpoint', '$ctrl.caches')
http://git-wip-us.apache.org/repos/asf/ignite/blob/d24dab81/modules/web-console/frontend/app/modules/states/configuration/clusters/client-connector.pug
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/states/configuration/clusters/client-connector.pug b/modules/web-console/frontend/app/modules/states/configuration/clusters/client-connector.pug
index 5421255..d27fa14 100644
--- a/modules/web-console/frontend/app/modules/states/configuration/clusters/client-connector.pug
+++ b/modules/web-console/frontend/app/modules/states/configuration/clusters/client-connector.pug
@@ -23,57 +23,54 @@ include /app/helpers/jade/mixins
-var sslEnabled = `${connectionEnabled} && ${connectionModel}.sslEnabled`
-var sslFactoryEnabled = `${sslEnabled} && !${connectionModel}.useIgniteSslContextFactory`
-.pca-panel.pca-panel-default(ng-show='$ctrl.available("2.3.0")' ng-form=form novalidate)
- .pca-panel-heading(bs-collapse-toggle ng-click=`ui.loadPanel('${form}')`)
- ignite-form-panel-chevron
- .pca-panel-heading-title Client connector configuration
- .pca-panel-collapse(role='tabpanel' bs-collapse-target id=`${form}`)
- .pca-panel-body(ng-if=`$ctrl.available("2.3.0") && ui.isPanelLoaded('${form}')`).pca-form-row
- .pca-form-column-6.pc-form-grid-row
- .pc-form-grid-col-60
- +checkbox('Enabled', connectionEnabled, '"ClientConnectorEnabled"', 'Flag indicating whether to configure client connector configuration')
- .pc-form-grid-col-40
- +text-enabled('Host:', `${connectionModel}.host`, '"ClientConnectorHost"', connectionEnabled, 'false', 'localhost')
- .pc-form-grid-col-20
- +number('Port:', `${connectionModel}.port`, '"ClientConnectorPort"', connectionEnabled, '10800', '1025')
- .pc-form-grid-col-20
- +number('Port range:', `${connectionModel}.portRange`, '"ClientConnectorPortRange"', connectionEnabled, '100', '0')
- .pc-form-grid-col-20
- +number('Socket send buffer size:', `${connectionModel}.socketSendBufferSize`, '"ClientConnectorSocketSendBufferSize"', connectionEnabled, '0', '0',
- 'Socket send buffer size<br/>\
- When set to <b>0</b>, operation system default will be used')
- .pc-form-grid-col-20
- +number('Socket receive buffer size:', `${connectionModel}.socketReceiveBufferSize`, '"ClientConnectorSocketReceiveBufferSize"', connectionEnabled, '0', '0',
- 'Socket receive buffer size<br/>\
- When set to <b>0</b>, operation system default will be used')
- .pc-form-grid-col-30
- +number('Max connection cursors:', `${connectionModel}.maxOpenCursorsPerConnection`, '"ClientConnectorMaxOpenCursorsPerConnection"', connectionEnabled, '128', '0',
- 'Max number of opened cursors per connection')
- .pc-form-grid-col-30
- +number('Pool size:', `${connectionModel}.threadPoolSize`, '"ClientConnectorThreadPoolSize"', connectionEnabled, 'max(8, availableProcessors)', '1',
- 'Size of thread pool that is in charge of processing SQL requests')
- .pc-form-grid-col-60
- +checkbox-enabled('TCP_NODELAY option', `${connectionModel}.tcpNoDelay`, '"ClientConnectorTcpNoDelay"', connectionEnabled)
- .pc-form-grid-col-60(ng-if='$ctrl.available("2.4.0")')
- +number('Idle timeout:', `${connectionModel}.idleTimeout`, '"ClientConnectorIdleTimeout"', connectionEnabled, '0', '-1',
- 'Idle timeout for client connections<br/>\
- Zero or negative means no timeout')
- .pc-form-grid-col-60(ng-if-start='$ctrl.available("2.5.0")')
- +checkbox-enabled('Enable SSL', `${connectionModel}.sslEnabled`, '"ClientConnectorSslEnabled"', connectionEnabled, 'Enable secure socket layer on client connector')
- .pc-form-grid-col-60
- +checkbox-enabled('Enable SSL client auth', `${connectionModel}.sslClientAuth`, '"ClientConnectorSslClientAuth"', sslEnabled, 'Flag indicating whether or not SSL client authentication is required')
- .pc-form-grid-col-60
- +checkbox-enabled('Use Ignite SSL', `${connectionModel}.useIgniteSslContextFactory`, '"ClientConnectorUseIgniteSslContextFactory"', sslEnabled, 'Use SSL factory Ignite configuration')
- .pc-form-grid-col-60(ng-if-end)
- +java-class('SSL factory:', `${connectionModel}.sslContextFactory`, '"ClientConnectorSslContextFactory"', sslFactoryEnabled, sslFactoryEnabled,
- 'If SSL factory specified then replication will be performed through secure SSL channel created with this factory<br/>\
- If not present <b>isUseIgniteSslContextFactory()</b> flag will be evaluated<br/>\
- If set to <b>true</b> and <b>IgniteConfiguration#getSslContextFactory()</b> exists, then Ignite SSL context factory will be used to establish secure connection')
- .pc-form-grid-col-60(ng-if-start='$ctrl.available("2.4.0")')
- +checkbox-enabled('JDBC Enabled', `${connectionModel}.jdbcEnabled`, '"ClientConnectorJdbcEnabled"', connectionEnabled, 'Access through JDBC is enabled')
- .pc-form-grid-col-60
- +checkbox-enabled('ODBC Enabled', `${connectionModel}.odbcEnabled`, '"ClientConnectorOdbcEnabled"', connectionEnabled, 'Access through ODBC is enabled')
- .pc-form-grid-col-60(ng-if-end)
- +checkbox-enabled('Thin client enabled', `${connectionModel}.thinClientEnabled`, '"ClientConnectorThinCliEnabled"', connectionEnabled, 'Access through thin client is enabled')
- .pca-form-column-6
- +preview-xml-java(model, 'clusterClientConnector')
+panel-collapsible(ng-show='$ctrl.available("2.3.0")' ng-form=form on-open=`ui.loadPanel('${form}')`)
+ panel-title Client connector configuration
+ panel-content.pca-form-row(ng-if=`$ctrl.available("2.3.0") && ui.isPanelLoaded('${form}')`)
+ .pca-form-column-6.pc-form-grid-row
+ .pc-form-grid-col-60
+ +checkbox('Enabled', connectionEnabled, '"ClientConnectorEnabled"', 'Flag indicating whether to configure client connector configuration')
+ .pc-form-grid-col-40
+ +text-enabled('Host:', `${connectionModel}.host`, '"ClientConnectorHost"', connectionEnabled, 'false', 'localhost')
+ .pc-form-grid-col-20
+ +number('Port:', `${connectionModel}.port`, '"ClientConnectorPort"', connectionEnabled, '10800', '1025')
+ .pc-form-grid-col-20
+ +number('Port range:', `${connectionModel}.portRange`, '"ClientConnectorPortRange"', connectionEnabled, '100', '0')
+ .pc-form-grid-col-20
+ +number('Socket send buffer size:', `${connectionModel}.socketSendBufferSize`, '"ClientConnectorSocketSendBufferSize"', connectionEnabled, '0', '0',
+ 'Socket send buffer size<br/>\
+ When set to <b>0</b>, operation system default will be used')
+ .pc-form-grid-col-20
+ +number('Socket receive buffer size:', `${connectionModel}.socketReceiveBufferSize`, '"ClientConnectorSocketReceiveBufferSize"', connectionEnabled, '0', '0',
+ 'Socket receive buffer size<br/>\
+ When set to <b>0</b>, operation system default will be used')
+ .pc-form-grid-col-30
+ +number('Max connection cursors:', `${connectionModel}.maxOpenCursorsPerConnection`, '"ClientConnectorMaxOpenCursorsPerConnection"', connectionEnabled, '128', '0',
+ 'Max number of opened cursors per connection')
+ .pc-form-grid-col-30
+ +number('Pool size:', `${connectionModel}.threadPoolSize`, '"ClientConnectorThreadPoolSize"', connectionEnabled, 'max(8, availableProcessors)', '1',
+ 'Size of thread pool that is in charge of processing SQL requests')
+ .pc-form-grid-col-60
+ +checkbox-enabled('TCP_NODELAY option', `${connectionModel}.tcpNoDelay`, '"ClientConnectorTcpNoDelay"', connectionEnabled)
+ .pc-form-grid-col-60(ng-if='$ctrl.available("2.4.0")')
+ +number('Idle timeout:', `${connectionModel}.idleTimeout`, '"ClientConnectorIdleTimeout"', connectionEnabled, '0', '-1',
+ 'Idle timeout for client connections<br/>\
+ Zero or negative means no timeout')
+ .pc-form-grid-col-60(ng-if-start='$ctrl.available("2.5.0")')
+ +checkbox-enabled('Enable SSL', `${connectionModel}.sslEnabled`, '"ClientConnectorSslEnabled"', connectionEnabled, 'Enable secure socket layer on client connector')
+ .pc-form-grid-col-60
+ +checkbox-enabled('Enable SSL client auth', `${connectionModel}.sslClientAuth`, '"ClientConnectorSslClientAuth"', sslEnabled, 'Flag indicating whether or not SSL client authentication is required')
+ .pc-form-grid-col-60
+ +checkbox-enabled('Use Ignite SSL', `${connectionModel}.useIgniteSslContextFactory`, '"ClientConnectorUseIgniteSslContextFactory"', sslEnabled, 'Use SSL factory Ignite configuration')
+ .pc-form-grid-col-60(ng-if-end)
+ +java-class('SSL factory:', `${connectionModel}.sslContextFactory`, '"ClientConnectorSslContextFactory"', sslFactoryEnabled, sslFactoryEnabled,
+ 'If SSL factory specified then replication will be performed through secure SSL channel created with this factory<br/>\
+ If not present <b>isUseIgniteSslContextFactory()</b> flag will be evaluated<br/>\
+ If set to <b>true</b> and <b>IgniteConfiguration#getSslContextFactory()</b> exists, then Ignite SSL context factory will be used to establish secure connection')
+ .pc-form-grid-col-60(ng-if-start='$ctrl.available("2.4.0")')
+ +checkbox-enabled('JDBC Enabled', `${connectionModel}.jdbcEnabled`, '"ClientConnectorJdbcEnabled"', connectionEnabled, 'Access through JDBC is enabled')
+ .pc-form-grid-col-60
+ +checkbox-enabled('ODBC Enabled', `${connectionModel}.odbcEnabled`, '"ClientConnectorOdbcEnabled"', connectionEnabled, 'Access through ODBC is enabled')
+ .pc-form-grid-col-60(ng-if-end)
+ +checkbox-enabled('Thin client enabled', `${connectionModel}.thinClientEnabled`, '"ClientConnectorThinCliEnabled"', connectionEnabled, 'Access through thin client is enabled')
+ .pca-form-column-6
+ +preview-xml-java(model, 'clusterClientConnector')