You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by an...@apache.org on 2017/03/02 09:05:46 UTC

[11/15] ignite git commit: IGNITE-4659 Migration to Webpack 2. Upgrade template engine from jade to pug.

http://git-wip-us.apache.org/repos/asf/ignite/blob/1080e686/modules/web-console/frontend/app/modules/states/configuration/caches/statistics.pug
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/states/configuration/caches/statistics.pug b/modules/web-console/frontend/app/modules/states/configuration/caches/statistics.pug
new file mode 100644
index 0000000..1eeea84
--- /dev/null
+++ b/modules/web-console/frontend/app/modules/states/configuration/caches/statistics.pug
@@ -0,0 +1,39 @@
+//-
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+include /app/helpers/jade/mixins
+
+-var form = 'statistics'
+-var model = 'backupItem'
+
+.panel.panel-default(ng-form=form novalidate)
+    .panel-heading(bs-collapse-toggle='' ng-click=`ui.loadPanel('${form}')`)
+        ignite-form-panel-chevron
+        label Statistics
+        ignite-form-field-tooltip.tipLabel
+            | Cache statistics and management settings
+        ignite-form-revert
+    .panel-collapse(role='tabpanel' bs-collapse-target id=`${form}`)
+        .panel-body(ng-if=`ui.isPanelLoaded('${form}')`)
+            .col-sm-6
+                .settings-row
+                    +checkbox('Statistics enabled', `${model}.statisticsEnabled`, '"statisticsEnabled"', 'Flag indicating whether statistics gathering is enabled on this cache')
+                .settings-row
+                    +checkbox('Management enabled', `${model}.managementEnabled`, '"managementEnabled"',
+                    'Flag indicating whether management is enabled on this cache<br/>\
+                    If enabled the CacheMXBean for each cache is registered in the platform MBean server')
+            .col-sm-6
+                +preview-xml-java(model, 'cacheStatistics')

http://git-wip-us.apache.org/repos/asf/ignite/blob/1080e686/modules/web-console/frontend/app/modules/states/configuration/caches/store.jade
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/states/configuration/caches/store.jade b/modules/web-console/frontend/app/modules/states/configuration/caches/store.jade
deleted file mode 100644
index ea350f2..0000000
--- a/modules/web-console/frontend/app/modules/states/configuration/caches/store.jade
+++ /dev/null
@@ -1,250 +0,0 @@
-//-
-    Licensed to the Apache Software Foundation (ASF) under one or more
-    contributor license agreements.  See the NOTICE file distributed with
-    this work for additional information regarding copyright ownership.
-    The ASF licenses this file to You under the Apache License, Version 2.0
-    (the "License"); you may not use this file except in compliance with
-    the License.  You may obtain a copy of the License at
-
-         http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
-
-include /app/helpers/jade/mixins.jade
-
--var form = 'store'
--var model = 'backupItem'
-
-mixin hibernateField(name, model, items, valid, save, newItem)
-    -var resetOnEnter = newItem ? '(stopblur = true) && (group.add = [{}])' : '(field.edit = false)'
-    -var onEnter = valid + ' && (' + save + '); ' + valid + ' && ' + resetOnEnter + ';'
-
-    -var onEscape = newItem ? 'group.add = []' : 'field.edit = false'
-
-    -var resetOnBlur = newItem ? '!stopblur && (group.add = [])' : 'field.edit = false'
-    -var onBlur = valid + ' && ( ' + save + '); ' + resetOnBlur + ';'
-
-    div(ignite-on-focus-out=onBlur)
-        if block
-            block
-
-        .input-tip
-            +ignite-form-field-input(name, model, false, 'true', 'key=value')(
-                data-ignite-property-unique=items
-                data-ignite-property-value-specified
-                data-ignite-form-field-input-autofocus='true'
-
-                ignite-on-enter=onEnter
-                ignite-on-escape=onEscape
-            )
-
-.panel.panel-default(ng-form=form novalidate)
-    .panel-heading(bs-collapse-toggle='' ng-click='ui.loadPanel("#{form}")')
-        ignite-form-panel-chevron
-        label Store
-        ignite-form-field-tooltip.tipLabel
-            | Cache store settings#[br]
-            | #[a(href="https://apacheignite.readme.io/docs/persistent-store" target="_blank") More info]
-        ignite-form-revert
-    .panel-collapse(role='tabpanel' bs-collapse-target id=form)
-        .panel-body(ng-if='ui.isPanelLoaded("#{form}")')
-            .col-sm-6
-                .settings-row
-                    -var storeFactory = model + '.cacheStoreFactory';
-                    -var storeFactoryKind = storeFactory + '.kind';
-
-                    +dropdown('Store factory:', storeFactoryKind, '"cacheStoreFactory"', 'true', 'Not set',
-                        '[\
-                            {value: "CacheJdbcPojoStoreFactory", label: "JDBC POJO store factory"},\
-                            {value: "CacheJdbcBlobStoreFactory", label: "JDBC BLOB store factory"},\
-                            {value: "CacheHibernateBlobStoreFactory", label: "Hibernate BLOB store factory"},\
-                            {value: undefined, label: "Not set"}\
-                        ]',
-                        '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>'
-                    )
-                    span(ng-show=storeFactoryKind ng-init='__.expanded = true')
-                        a.customize(ng-show='__.expanded' ng-click='__.expanded = false') Hide settings
-                        a.customize(ng-hide='__.expanded' ng-click='__.expanded = true') Show settings
-                        .panel-details(ng-show='__.expanded')
-                            div(ng-show='#{storeFactoryKind} === "CacheJdbcPojoStoreFactory"')
-                                -var pojoStoreFactory = storeFactory + '.CacheJdbcPojoStoreFactory'
-                                -var required = storeFactoryKind + ' === "CacheJdbcPojoStoreFactory"'
-
-                                .details-row
-                                    +text('Data source bean name:', pojoStoreFactory + '.dataSourceBean',
-                                        '"pojoDataSourceBean"', required, 'Input bean name',
-                                        'Name of the data source bean in Spring context')
-                                .details-row
-                                    +dialect('Dialect:', pojoStoreFactory + '.dialect', '"pojoDialect"', required,
-                                        'Dialect of SQL implemented by a particular RDBMS:', 'Generic JDBC dialect',
-                                        'Choose JDBC dialect')
-                                .details-row
-                                    +number('Batch size:', pojoStoreFactory + '.batchSize', '"pojoBatchSize"', true, '512', '1',
-                                        'Maximum batch size for writeAll and deleteAll operations')
-                                .details-row
-                                    +number('Thread count:', pojoStoreFactory + '.maximumPoolSize', '"pojoMaximumPoolSize"', true, 'availableProcessors', '1',
-                                        'Maximum workers thread count.<br/>\
-                                        These threads are responsible for load cache.')
-                                .details-row
-                                    +number('Maximum write attempts:', pojoStoreFactory + '.maximumWriteAttempts', '"pojoMaximumWriteAttempts"', true, '2', '0',
-                                        'Maximum write attempts in case of database error')
-                                .details-row
-                                    +number('Parallel load threshold:', pojoStoreFactory + '.parallelLoadCacheMinimumThreshold', '"pojoParallelLoadCacheMinimumThreshold"', true, '512', '0',
-                                        'Parallel load cache minimum threshold.<br/>\
-                                        If <b>0</b> then load sequentially.')
-                                .details-row
-                                    +java-class('Hasher', pojoStoreFactory + '.hasher', '"pojoHasher"', 'true', 'false', 'Hash calculator', required)
-                                .details-row
-                                    +java-class('Transformer', pojoStoreFactory + '.transformer', '"pojoTransformer"', 'true', 'false', 'Types transformer', required)
-                                .details-row
-                                    +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.')
-                            div(ng-show='#{storeFactoryKind} === "CacheJdbcBlobStoreFactory"')
-                                -var blobStoreFactory = storeFactory + '.CacheJdbcBlobStoreFactory'
-                                -var blobStoreFactoryVia = blobStoreFactory + '.connectVia'
-
-                                .details-row
-                                    +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>')
-                                div(ng-show='#{blobStoreFactoryVia} === "URL"')
-                                    -var required = storeFactoryKind + ' === "CacheJdbcBlobStoreFactory" && ' + blobStoreFactoryVia + ' === "URL"'
-
-                                    .details-row
-                                        +text('Connection URL:', blobStoreFactory + '.connectionUrl', '"connectionUrl"', required, 'Input URL',
-                                            'URL for database access, for example: jdbc:h2:mem:myDatabase')
-                                    .details-row
-                                        +text('User:', blobStoreFactory + '.user', '"user"', required, 'Input user name', 'User name for database access')
-                                    .details-row
-                                        label Note, password will be generated as stub
-                                div(ng-show='#{blobStoreFactoryVia} !== "URL"')
-                                    -var required = storeFactoryKind + ' === "CacheJdbcBlobStoreFactory" && ' + blobStoreFactoryVia + '!== "URL"'
-
-                                    .details-row
-                                        +text('Data source bean name:', blobStoreFactory + '.dataSourceBean', '"blobDataSourceBean"', required, 'Input bean name',
-                                            'Name of the data source bean in Spring context')
-                                    .details-row
-                                        +dialect('Database:', blobStoreFactory + '.dialect', '"blobDialect"', required, 'Supported databases:', 'Generic database', 'Choose database')
-                                .details-row
-                                    +checkbox('Init schema', blobStoreFactory + '.initSchema', '"initSchema"',
-                                        'Flag indicating whether DB schema should be initialized by Ignite (default behaviour) or was explicitly created by user')
-                                .details-row
-                                    +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)')
-                                .details-row
-                                    +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=?')
-                                .details-row
-                                    +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 (?, ?)')
-                                .details-row
-                                    +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=?')
-                                .details-row
-                                    +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=?')
-
-                            div(ng-show='#{storeFactoryKind} === "CacheHibernateBlobStoreFactory"')
-                                -var hibernateStoreFactory = storeFactory + '.CacheHibernateBlobStoreFactory'
-                                -var hibernateProperties = hibernateStoreFactory + '.hibernateProperties'
-
-                                .details-row
-                                    +ignite-form-group(ng-form=form ng-model=hibernateProperties)
-                                        ignite-form-field-label
-                                            | Hibernate properties
-                                        ignite-form-group-tooltip
-                                            | List of Hibernate properties#[br]
-                                            | For example: connection.url=jdbc:h2:mem:exampleDb
-                                        ignite-form-group-add(ng-click='tableNewItem(hibernatePropsTbl)')
-                                            | Add new Hibernate property
-
-                                        -var tipUnique = 'Property with such key already exists!'
-                                        -var tipPropertySpecified = 'Property should be present in format key=value!'
-
-                                        .group-content-empty(ng-if='!((#{hibernateProperties} && #{hibernateProperties}.length > 0) || tableNewItemActive(hibernatePropsTbl))')
-                                            | Not defined
-                                        .group-content(ng-show='(#{hibernateProperties} && #{hibernateProperties}.length > 0) || tableNewItemActive(hibernatePropsTbl)')
-                                            table.links-edit(id='hibernateProps' st-table=hibernateProperties)
-                                                tbody
-                                                    tr(ng-repeat='item in #{hibernateProperties}')
-                                                        td.col-sm-12(ng-hide='tableEditing(hibernatePropsTbl, $index)')
-                                                            a.labelFormField(ng-click='tableStartEdit(backupItem, hibernatePropsTbl, $index)') {{item.name}} = {{item.value}}
-                                                            +btn-remove('tableRemove(backupItem, hibernatePropsTbl, $index)', '"Remove Property"')
-                                                        td.col-sm-12(ng-if='tableEditing(hibernatePropsTbl, $index)')
-                                                            +table-pair-edit('hibernatePropsTbl', 'cur', 'Property name', 'Property value', false, false, '{{::hibernatePropsTbl.focusId + $index}}', '$index', '=')
-                                                tfoot(ng-show='tableNewItemActive(hibernatePropsTbl)')
-                                                    tr
-                                                        td.col-sm-12
-                                                            +table-pair-edit('hibernatePropsTbl', 'new', 'Property name', 'Property value', false, false, '{{::hibernatePropsTbl.focusId + $index}}', '-1', '=')
-
-
-                .settings-row
-                    +checkbox('Keep binary in store', model + '.storeKeepBinary', '"storeKeepBinary"',
-                        'Flag indicating that CacheStore implementation is working with binary objects instead of Java objects')
-                .settings-row
-                    +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>')
-                .settings-row
-                    +checkbox('Read-through', model + '.readThrough', '"readThrough"', 'Flag indicating whether read-through caching should be used')
-                .settings-row
-                    +checkbox('Write-through', model + '.writeThrough', '"writeThrough"', 'Flag indicating whether write-through caching should be used')
-                .settings-row
-                    +ignite-form-group
-                        ignite-form-field-label
-                            | Write-behind
-                        ignite-form-group-tooltip
-                            | 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
-                        .group-content
-                            -var enabled = model + '.writeBehindEnabled'
-
-                            .details-row
-                                +checkbox('Enabled', enabled, '"writeBehindEnabled"', 'Flag indicating whether Ignite should use write-behind behaviour for the cache store')
-                            .details-row
-                                +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')
-                            .details-row
-                                +number('Flush size:', model + '.writeBehindFlushSize', '"writeBehindFlushSize"', enabled, '10240', '0',
-                                    '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')
-                            .details-row
-                                +number('Flush frequency:', model + '.writeBehindFlushFrequency', '"writeBehindFlushFrequency"', enabled, '5000', '0',
-                                    'Frequency with which write-behind cache is flushed to the cache store in milliseconds')
-                            .details-row
-                                +number('Flush threads count:', model + '.writeBehindFlushThreadCount', '"writeBehindFlushThreadCount"', enabled, '1', '1',
-                                    'Number of threads that will perform cache flushing')
-            .col-sm-6
-                +preview-xml-java(model, 'cacheStore', 'domains')

http://git-wip-us.apache.org/repos/asf/ignite/blob/1080e686/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
new file mode 100644
index 0000000..f09bc0b
--- /dev/null
+++ b/modules/web-console/frontend/app/modules/states/configuration/caches/store.pug
@@ -0,0 +1,250 @@
+//-
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+include /app/helpers/jade/mixins
+
+-var form = 'store'
+-var model = 'backupItem'
+
+mixin hibernateField(name, model, items, valid, save, newItem)
+    -var resetOnEnter = newItem ? '(stopblur = true) && (group.add = [{}])' : '(field.edit = false)'
+    -var onEnter = `${valid} && (${save}); ${valid} && ${resetOnEnter};`
+
+    -var onEscape = newItem ? 'group.add = []' : 'field.edit = false'
+
+    -var resetOnBlur = newItem ? '!stopblur && (group.add = [])' : 'field.edit = false'
+    -var onBlur = `${valid} && (${save}); ${resetOnBlur};`
+
+    div(ignite-on-focus-out=onBlur)
+        if block
+            block
+
+        .input-tip
+            +ignite-form-field-input(name, model, false, 'true', 'key=value')(
+                data-ignite-property-unique=items
+                data-ignite-property-value-specified
+                data-ignite-form-field-input-autofocus='true'
+
+                ignite-on-enter=onEnter
+                ignite-on-escape=onEscape
+            )
+
+.panel.panel-default(ng-form=form novalidate)
+    .panel-heading(bs-collapse-toggle='' ng-click=`ui.loadPanel('${form}')`)
+        ignite-form-panel-chevron
+        label Store
+        ignite-form-field-tooltip.tipLabel
+            | Cache store settings#[br]
+            | #[a(href="https://apacheignite.readme.io/docs/persistent-store" target="_blank") More info]
+        ignite-form-revert
+    .panel-collapse(role='tabpanel' bs-collapse-target id=`${form}`)
+        .panel-body(ng-if=`ui.isPanelLoaded('${form}')`)
+            .col-sm-6
+                .settings-row
+                    -var storeFactory = `${model}.cacheStoreFactory`;
+                    -var storeFactoryKind = `${storeFactory}.kind`;
+
+                    +dropdown('Store factory:', storeFactoryKind, '"cacheStoreFactory"', 'true', 'Not set',
+                        '[\
+                            {value: "CacheJdbcPojoStoreFactory", label: "JDBC POJO store factory"},\
+                            {value: "CacheJdbcBlobStoreFactory", label: "JDBC BLOB store factory"},\
+                            {value: "CacheHibernateBlobStoreFactory", label: "Hibernate BLOB store factory"},\
+                            {value: undefined, label: "Not set"}\
+                        ]',
+                        '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>'
+                    )
+                    span(ng-show=storeFactoryKind ng-init='__.expanded = true')
+                        a.customize(ng-show='__.expanded' ng-click='__.expanded = false') Hide settings
+                        a.customize(ng-hide='__.expanded' ng-click='__.expanded = true') Show settings
+                        .panel-details(ng-show='__.expanded')
+                            div(ng-show=`${storeFactoryKind} === 'CacheJdbcPojoStoreFactory'`)
+                                -var pojoStoreFactory = `${storeFactory}.CacheJdbcPojoStoreFactory`
+                                -var required = `${storeFactoryKind} === 'CacheJdbcPojoStoreFactory'`
+
+                                .details-row
+                                    +text('Data source bean name:', `${pojoStoreFactory}.dataSourceBean`,
+                                        '"pojoDataSourceBean"', required, 'Input bean name',
+                                        'Name of the data source bean in Spring context')
+                                .details-row
+                                    +dialect('Dialect:', `${pojoStoreFactory}.dialect`, '"pojoDialect"', required,
+                                        'Dialect of SQL implemented by a particular RDBMS:', 'Generic JDBC dialect',
+                                        'Choose JDBC dialect')
+                                .details-row
+                                    +number('Batch size:', `${pojoStoreFactory}.batchSize`, '"pojoBatchSize"', true, '512', '1',
+                                        'Maximum batch size for writeAll and deleteAll operations')
+                                .details-row
+                                    +number('Thread count:', `${pojoStoreFactory}.maximumPoolSize`, '"pojoMaximumPoolSize"', true, 'availableProcessors', '1',
+                                        'Maximum workers thread count.<br/>\
+                                        These threads are responsible for load cache.')
+                                .details-row
+                                    +number('Maximum write attempts:', `${pojoStoreFactory}.maximumWriteAttempts`, '"pojoMaximumWriteAttempts"', true, '2', '0',
+                                        'Maximum write attempts in case of database error')
+                                .details-row
+                                    +number('Parallel load threshold:', `${pojoStoreFactory}.parallelLoadCacheMinimumThreshold`, '"pojoParallelLoadCacheMinimumThreshold"', true, '512', '0',
+                                        'Parallel load cache minimum threshold.<br/>\
+                                        If <b>0</b> then load sequentially.')
+                                .details-row
+                                    +java-class('Hasher', `${pojoStoreFactory}.hasher`, '"pojoHasher"', 'true', 'false', 'Hash calculator', required)
+                                .details-row
+                                    +java-class('Transformer', `${pojoStoreFactory}.transformer`, '"pojoTransformer"', 'true', 'false', 'Types transformer', required)
+                                .details-row
+                                    +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.')
+                            div(ng-show=`${storeFactoryKind} === 'CacheJdbcBlobStoreFactory'`)
+                                -var blobStoreFactory = `${storeFactory}.CacheJdbcBlobStoreFactory`
+                                -var blobStoreFactoryVia = `${blobStoreFactory}.connectVia`
+
+                                .details-row
+                                    +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>')
+                                div(ng-show=`${blobStoreFactoryVia} === 'URL'`)
+                                    -var required = `${storeFactoryKind} === 'CacheJdbcBlobStoreFactory' && ${blobStoreFactoryVia} === 'URL'`
+
+                                    .details-row
+                                        +text('Connection URL:', `${blobStoreFactory}.connectionUrl`, '"connectionUrl"', required, 'Input URL',
+                                            'URL for database access, for example: jdbc:h2:mem:myDatabase')
+                                    .details-row
+                                        +text('User:', `${blobStoreFactory}.user`, '"user"', required, 'Input user name', 'User name for database access')
+                                    .details-row
+                                        label Note, password will be generated as stub
+                                div(ng-show=`${blobStoreFactoryVia} !== 'URL'`)
+                                    -var required = `${storeFactoryKind} === 'CacheJdbcBlobStoreFactory' && ${blobStoreFactoryVia} !== 'URL'`
+
+                                    .details-row
+                                        +text('Data source bean name:', `${blobStoreFactory}.dataSourceBean`, '"blobDataSourceBean"', required, 'Input bean name',
+                                            'Name of the data source bean in Spring context')
+                                    .details-row
+                                        +dialect('Database:', `${blobStoreFactory}.dialect`, '"blobDialect"', required, 'Supported databases:', 'Generic database', 'Choose database')
+                                .details-row
+                                    +checkbox('Init schema', `${blobStoreFactory}.initSchema`, '"initSchema"',
+                                        'Flag indicating whether DB schema should be initialized by Ignite (default behaviour) or was explicitly created by user')
+                                .details-row
+                                    +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)')
+                                .details-row
+                                    +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=?')
+                                .details-row
+                                    +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 (?, ?)')
+                                .details-row
+                                    +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=?')
+                                .details-row
+                                    +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=?')
+
+                            div(ng-show=`${storeFactoryKind} === 'CacheHibernateBlobStoreFactory'`)
+                                -var hibernateStoreFactory = `${storeFactory}.CacheHibernateBlobStoreFactory`
+                                -var hibernateProperties = `${hibernateStoreFactory}.hibernateProperties`
+
+                                .details-row
+                                    +ignite-form-group(ng-form=form ng-model=hibernateProperties)
+                                        ignite-form-field-label
+                                            | Hibernate properties
+                                        ignite-form-group-tooltip
+                                            | List of Hibernate properties#[br]
+                                            | For example: connection.url=jdbc:h2:mem:exampleDb
+                                        ignite-form-group-add(ng-click='tableNewItem(hibernatePropsTbl)')
+                                            | Add new Hibernate property
+
+                                        -var tipUnique = 'Property with such key already exists!'
+                                        -var tipPropertySpecified = 'Property should be present in format key=value!'
+
+                                        .group-content-empty(ng-if=`!((${hibernateProperties} && ${hibernateProperties}.length > 0) || tableNewItemActive(hibernatePropsTbl))`)
+                                            | Not defined
+                                        .group-content(ng-show=`(${hibernateProperties} && ${hibernateProperties}.length > 0) || tableNewItemActive(hibernatePropsTbl)`)
+                                            table.links-edit(id='hibernateProps' st-table=hibernateProperties)
+                                                tbody
+                                                    tr(ng-repeat=`item in ${hibernateProperties}`)
+                                                        td.col-sm-12(ng-hide='tableEditing(hibernatePropsTbl, $index)')
+                                                            a.labelFormField(ng-click='tableStartEdit(backupItem, hibernatePropsTbl, $index)') {{item.name}} = {{item.value}}
+                                                            +btn-remove('tableRemove(backupItem, hibernatePropsTbl, $index)', '"Remove Property"')
+                                                        td.col-sm-12(ng-if='tableEditing(hibernatePropsTbl, $index)')
+                                                            +table-pair-edit('hibernatePropsTbl', 'cur', 'Property name', 'Property value', false, false, '{{::hibernatePropsTbl.focusId + $index}}', '$index', '=')
+                                                tfoot(ng-show='tableNewItemActive(hibernatePropsTbl)')
+                                                    tr
+                                                        td.col-sm-12
+                                                            +table-pair-edit('hibernatePropsTbl', 'new', 'Property name', 'Property value', false, false, '{{::hibernatePropsTbl.focusId + $index}}', '-1', '=')
+
+
+                .settings-row
+                    +checkbox('Keep binary in store', `${model}.storeKeepBinary`, '"storeKeepBinary"',
+                        'Flag indicating that CacheStore implementation is working with binary objects instead of Java objects')
+                .settings-row
+                    +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>')
+                .settings-row
+                    +checkbox('Read-through', `${model}.readThrough`, '"readThrough"', 'Flag indicating whether read-through caching should be used')
+                .settings-row
+                    +checkbox('Write-through', `${model}.writeThrough`, '"writeThrough"', 'Flag indicating whether write-through caching should be used')
+                .settings-row
+                    +ignite-form-group
+                        ignite-form-field-label
+                            | Write-behind
+                        ignite-form-group-tooltip
+                            | 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
+                        .group-content
+                            -var enabled = `${model}.writeBehindEnabled`
+
+                            .details-row
+                                +checkbox('Enabled', enabled, '"writeBehindEnabled"', 'Flag indicating whether Ignite should use write-behind behaviour for the cache store')
+                            .details-row
+                                +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')
+                            .details-row
+                                +number('Flush size:', `${model}.writeBehindFlushSize`, '"writeBehindFlushSize"', enabled, '10240', '0',
+                                    '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')
+                            .details-row
+                                +number('Flush frequency:', `${model}.writeBehindFlushFrequency`, '"writeBehindFlushFrequency"', enabled, '5000', '0',
+                                    'Frequency with which write-behind cache is flushed to the cache store in milliseconds')
+                            .details-row
+                                +number('Flush threads count:', `${model}.writeBehindFlushThreadCount`, '"writeBehindFlushThreadCount"', enabled, '1', '1',
+                                    'Number of threads that will perform cache flushing')
+            .col-sm-6
+                +preview-xml-java(model, 'cacheStore', 'domains')

http://git-wip-us.apache.org/repos/asf/ignite/blob/1080e686/modules/web-console/frontend/app/modules/states/configuration/clusters/atomic.jade
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/states/configuration/clusters/atomic.jade b/modules/web-console/frontend/app/modules/states/configuration/clusters/atomic.jade
deleted file mode 100644
index 412ca3a..0000000
--- a/modules/web-console/frontend/app/modules/states/configuration/clusters/atomic.jade
+++ /dev/null
@@ -1,54 +0,0 @@
-//-
-    Licensed to the Apache Software Foundation (ASF) under one or more
-    contributor license agreements.  See the NOTICE file distributed with
-    this work for additional information regarding copyright ownership.
-    The ASF licenses this file to You under the Apache License, Version 2.0
-    (the "License"); you may not use this file except in compliance with
-    the License.  You may obtain a copy of the License at
-
-         http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
-
-include /app/helpers/jade/mixins.jade
-
--var form = 'atomics'
--var model = 'backupItem.atomicConfiguration'
-
-.panel.panel-default(ng-form=form novalidate)
-    .panel-heading(bs-collapse-toggle='' ng-click='ui.loadPanel("#{form}")')
-        ignite-form-panel-chevron
-        label Atomic configuration
-        ignite-form-field-tooltip.tipLabel
-            | Configuration for atomic data structures#[br]
-            | 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#[br]
-            | #[a(href="https://apacheignite.readme.io/docs/atomic-types" target="_blank") More info]
-        ignite-form-revert 
-    .panel-collapse(role='tabpanel' bs-collapse-target='' id=form)
-        .panel-body(ng-if='ui.isPanelLoaded("#{form}")')
-            .col-sm-6
-                .settings-row
-                    +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>')
-                .settings-row
-                    +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')
-                .settings-row(ng-show='!(#{model}.cacheMode && #{model}.cacheMode != "PARTITIONED")')
-                    +number('Backups:', model + '.backups', '"backups"', 'true', '0', '0', 'Number of backup nodes')
-            .col-sm-6
-                +preview-xml-java(model, 'clusterAtomics')

http://git-wip-us.apache.org/repos/asf/ignite/blob/1080e686/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
new file mode 100644
index 0000000..61532ab
--- /dev/null
+++ b/modules/web-console/frontend/app/modules/states/configuration/clusters/atomic.pug
@@ -0,0 +1,54 @@
+//-
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+include /app/helpers/jade/mixins
+
+-var form = 'atomics'
+-var model = 'backupItem.atomicConfiguration'
+
+.panel.panel-default(ng-form=form novalidate)
+    .panel-heading(bs-collapse-toggle='' ng-click=`ui.loadPanel('${form}')`)
+        ignite-form-panel-chevron
+        label Atomic configuration
+        ignite-form-field-tooltip.tipLabel
+            | Configuration for atomic data structures#[br]
+            | 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#[br]
+            | #[a(href="https://apacheignite.readme.io/docs/atomic-types" target="_blank") More info]
+        ignite-form-revert 
+    .panel-collapse(role='tabpanel' bs-collapse-target='' id=`${form}`)
+        .panel-body(ng-if=`ui.isPanelLoaded('${form}')`)
+            .col-sm-6
+                .settings-row
+                    +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>')
+                .settings-row
+                    +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')
+                .settings-row(ng-show=`!(${model}.cacheMode && ${model}.cacheMode != "PARTITIONED")`)
+                    +number('Backups:', model + '.backups', '"backups"', 'true', '0', '0', 'Number of backup nodes')
+            .col-sm-6
+                +preview-xml-java(model, 'clusterAtomics')

http://git-wip-us.apache.org/repos/asf/ignite/blob/1080e686/modules/web-console/frontend/app/modules/states/configuration/clusters/attributes.jade
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/states/configuration/clusters/attributes.jade b/modules/web-console/frontend/app/modules/states/configuration/clusters/attributes.jade
deleted file mode 100644
index 0366ed8..0000000
--- a/modules/web-console/frontend/app/modules/states/configuration/clusters/attributes.jade
+++ /dev/null
@@ -1,57 +0,0 @@
-//-
-    Licensed to the Apache Software Foundation (ASF) under one or more
-    contributor license agreements.  See the NOTICE file distributed with
-    this work for additional information regarding copyright ownership.
-    The ASF licenses this file to You under the Apache License, Version 2.0
-    (the "License"); you may not use this file except in compliance with
-    the License.  You may obtain a copy of the License at
-
-         http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
-
-include /app/helpers/jade/mixins.jade
-
--var form = 'attributes'
--var model = 'backupItem'
--var userAttributes = model + '.attributes'
-
-.panel.panel-default(ng-form=form novalidate)
-    .panel-heading(bs-collapse-toggle ng-click='ui.loadPanel("#{form}")')
-        ignite-form-panel-chevron
-        label User attributes
-        ignite-form-field-tooltip.tipLabel
-            | Configuration for Ignite user attributes
-        ignite-form-revert
-    .panel-collapse(role='tabpanel' bs-collapse-target id=form)
-        .panel-body(ng-if='ui.isPanelLoaded("#{form}")')
-            .col-sm-6
-                .settings-row
-                    +ignite-form-group(ng-model='#{userAttributes}' ng-form='#{form}')
-                        ignite-form-field-label
-                            | User attributes
-                        ignite-form-group-tooltip
-                            | User-defined attributes to add to node
-                        ignite-form-group-add(ng-click='tableNewItem(attributesTbl)')
-                            | Add user attribute
-                        .group-content-empty(ng-if='!((#{userAttributes} && #{userAttributes}.length > 0) || tableNewItemActive(attributesTbl))')
-                            | Not defined
-                        .group-content(ng-show='(#{userAttributes} && #{userAttributes}.length > 0) || tableNewItemActive(attributesTbl)')
-                            table.links-edit(id='attributes' st-table=userAttributes)
-                                tbody
-                                    tr(ng-repeat='item in #{userAttributes} track by $index')
-                                        td.col-sm-12(ng-hide='tableEditing(attributesTbl, $index)')
-                                            a.labelFormField(ng-click='tableStartEdit(backupItem, attributesTbl, $index)') {{item.name}} = {{item.value}}
-                                            +btn-remove('tableRemove(backupItem, attributesTbl, $index)', '"Remove attribute"')
-                                        td.col-sm-12(ng-show='tableEditing(attributesTbl, $index)')
-                                            +table-pair-edit('attributesTbl', 'cur', 'Attribute name', 'Attribute value', false, false, '{{::attributesTbl.focusId + $index}}', '$index', '=')
-                                tfoot(ng-show='tableNewItemActive(attributesTbl)')
-                                    tr
-                                        td.col-sm-12
-                                            +table-pair-edit('attributesTbl', 'new', 'Attribute name', 'Attribute value', false, false, '{{::attributesTbl.focusId + $index}}', '-1', '=')
-            .col-sm-6
-                +preview-xml-java(model, 'clusterUserAttributes')

http://git-wip-us.apache.org/repos/asf/ignite/blob/1080e686/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
new file mode 100644
index 0000000..cac122b
--- /dev/null
+++ b/modules/web-console/frontend/app/modules/states/configuration/clusters/attributes.pug
@@ -0,0 +1,57 @@
+//-
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+include /app/helpers/jade/mixins
+
+-var form = 'attributes'
+-var model = 'backupItem'
+-var userAttributes = model + '.attributes'
+
+.panel.panel-default(ng-form=form novalidate)
+    .panel-heading(bs-collapse-toggle ng-click=`ui.loadPanel('${form}')`)
+        ignite-form-panel-chevron
+        label User attributes
+        ignite-form-field-tooltip.tipLabel
+            | Configuration for Ignite user attributes
+        ignite-form-revert
+    .panel-collapse(role='tabpanel' bs-collapse-target id=`${form}`)
+        .panel-body(ng-if=`ui.isPanelLoaded('${form}')`)
+            .col-sm-6
+                .settings-row
+                    +ignite-form-group(ng-model=`${userAttributes}` ng-form=form)
+                        ignite-form-field-label
+                            | User attributes
+                        ignite-form-group-tooltip
+                            | User-defined attributes to add to node
+                        ignite-form-group-add(ng-click='tableNewItem(attributesTbl)')
+                            | Add user attribute
+                        .group-content-empty(ng-if=`!((${userAttributes} && ${userAttributes}.length > 0) || tableNewItemActive(attributesTbl))`)
+                            | Not defined
+                        .group-content(ng-show=`(${userAttributes} && ${userAttributes}.length > 0) || tableNewItemActive(attributesTbl)`)
+                            table.links-edit(id='attributes' st-table=userAttributes)
+                                tbody
+                                    tr(ng-repeat=`item in ${userAttributes} track by $index`)
+                                        td.col-sm-12(ng-hide='tableEditing(attributesTbl, $index)')
+                                            a.labelFormField(ng-click='tableStartEdit(backupItem, attributesTbl, $index)') {{item.name}} = {{item.value}}
+                                            +btn-remove('tableRemove(backupItem, attributesTbl, $index)', '"Remove attribute"')
+                                        td.col-sm-12(ng-show='tableEditing(attributesTbl, $index)')
+                                            +table-pair-edit('attributesTbl', 'cur', 'Attribute name', 'Attribute value', false, false, '{{::attributesTbl.focusId + $index}}', '$index', '=')
+                                tfoot(ng-show='tableNewItemActive(attributesTbl)')
+                                    tr
+                                        td.col-sm-12
+                                            +table-pair-edit('attributesTbl', 'new', 'Attribute name', 'Attribute value', false, false, '{{::attributesTbl.focusId + $index}}', '-1', '=')
+            .col-sm-6
+                +preview-xml-java(model, 'clusterUserAttributes')

http://git-wip-us.apache.org/repos/asf/ignite/blob/1080e686/modules/web-console/frontend/app/modules/states/configuration/clusters/binary.jade
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/states/configuration/clusters/binary.jade b/modules/web-console/frontend/app/modules/states/configuration/clusters/binary.jade
deleted file mode 100644
index f8ec8f9..0000000
--- a/modules/web-console/frontend/app/modules/states/configuration/clusters/binary.jade
+++ /dev/null
@@ -1,77 +0,0 @@
-//-
-    Licensed to the Apache Software Foundation (ASF) under one or more
-    contributor license agreements.  See the NOTICE file distributed with
-    this work for additional information regarding copyright ownership.
-    The ASF licenses this file to You under the Apache License, Version 2.0
-    (the "License"); you may not use this file except in compliance with
-    the License.  You may obtain a copy of the License at
-
-         http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
-
-include /app/helpers/jade/mixins.jade
-
--var form = 'binary'
--var model = 'backupItem.binaryConfiguration'
--var types = model + '.typeConfigurations'
-
-.panel.panel-default(ng-form=form novalidate)
-    .panel-heading(bs-collapse-toggle ng-click='ui.loadPanel("#{form}")')
-        ignite-form-panel-chevron
-        label Binary configuration
-        ignite-form-field-tooltip.tipLabel
-            | Configuration of specific binary types#[br]
-            | #[a(href="https://apacheignite.readme.io/docs/binary-marshaller" target="_blank") More info]
-        ignite-form-revert
-    .panel-collapse(role='tabpanel' bs-collapse-target id=form)
-        .panel-body(ng-if='ui.isPanelLoaded("#{form}")')
-            .col-sm-6
-                .settings-row
-                    +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')
-                .settings-row
-                    +java-class('Name mapper:', model + '.nameMapper', '"nameMapper"', 'true', 'false', 'Maps type/class and field names to different names')
-                .settings-row
-                    +java-class('Serializer:', model + '.serializer', '"serializer"', 'true', 'false', 'Class with custom serialization logic for binary objects')
-                .settings-row
-                    +ignite-form-group()
-                        ignite-form-field-label
-                            | Type configurations
-                        ignite-form-group-tooltip
-                            | Configuration properties for binary types
-                        ignite-form-group-add(ng-click='#{types}.push({})')
-                            | Add new type configuration.
-                        .group-content-empty(ng-if='!#{types}.length')
-                            | Not defined
-                        .group-content(ng-repeat='model in #{types} track by $index')
-                            hr(ng-if='$index !== 0')
-                            .settings-row
-                                +java-class-autofocus('Type name:', 'model.typeName', '"typeName" + $index', 'true', 'true', 'true', 'Type name')
-                                    +table-remove-button(types, 'Remove type configuration')
-                            .settings-row
-                                +java-class('ID mapper:', 'model.idMapper', '"idMapper" + $index', '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')
-                            .settings-row
-                                +java-class('Name mapper:', 'model.nameMapper', '"nameMapper" + $index', 'true', 'false',
-                                    'Maps type/class and field names to different names')
-                            .settings-row
-                                +java-class('Serializer:', 'model.serializer', '"serializer" + $index', 'true', 'false',
-                                    'Class with custom serialization logic for binary object')
-                            .settings-row
-                                +checkbox('Enum', 'model.enum', 'enum', 'Flag indicating that this type is the enum')
-
-                .settings-row
-                    +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] already distribute metadata inside cluster')
-            .col-sm-6
-                +preview-xml-java(model, 'clusterBinary')

http://git-wip-us.apache.org/repos/asf/ignite/blob/1080e686/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
new file mode 100644
index 0000000..ee9f37b
--- /dev/null
+++ b/modules/web-console/frontend/app/modules/states/configuration/clusters/binary.pug
@@ -0,0 +1,77 @@
+//-
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+include /app/helpers/jade/mixins
+
+-var form = 'binary'
+-var model = 'backupItem.binaryConfiguration'
+-var types = model + '.typeConfigurations'
+
+.panel.panel-default(ng-form=form novalidate)
+    .panel-heading(bs-collapse-toggle ng-click=`ui.loadPanel('${form}')`)
+        ignite-form-panel-chevron
+        label Binary configuration
+        ignite-form-field-tooltip.tipLabel
+            | Configuration of specific binary types#[br]
+            | #[a(href="https://apacheignite.readme.io/docs/binary-marshaller" target="_blank") More info]
+        ignite-form-revert
+    .panel-collapse(role='tabpanel' bs-collapse-target id=`${form}`)
+        .panel-body(ng-if=`ui.isPanelLoaded('${form}')`)
+            .col-sm-6
+                .settings-row
+                    +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')
+                .settings-row
+                    +java-class('Name mapper:', model + '.nameMapper', '"nameMapper"', 'true', 'false', 'Maps type/class and field names to different names')
+                .settings-row
+                    +java-class('Serializer:', model + '.serializer', '"serializer"', 'true', 'false', 'Class with custom serialization logic for binary objects')
+                .settings-row
+                    +ignite-form-group()
+                        ignite-form-field-label
+                            | Type configurations
+                        ignite-form-group-tooltip
+                            | Configuration properties for binary types
+                        ignite-form-group-add(ng-click=`${types}.push({})`)
+                            | Add new type configuration.
+                        .group-content-empty(ng-if=`!${types}.length`)
+                            | Not defined
+                        .group-content(ng-repeat=`model in ${types} track by $index`)
+                            hr(ng-if='$index !== 0')
+                            .settings-row
+                                +java-class-autofocus('Type name:', 'model.typeName', '"typeName" + $index', 'true', 'true', 'true', 'Type name')
+                                    +table-remove-button(types, 'Remove type configuration')
+                            .settings-row
+                                +java-class('ID mapper:', 'model.idMapper', '"idMapper" + $index', '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')
+                            .settings-row
+                                +java-class('Name mapper:', 'model.nameMapper', '"nameMapper" + $index', 'true', 'false',
+                                    'Maps type/class and field names to different names')
+                            .settings-row
+                                +java-class('Serializer:', 'model.serializer', '"serializer" + $index', 'true', 'false',
+                                    'Class with custom serialization logic for binary object')
+                            .settings-row
+                                +checkbox('Enum', 'model.enum', 'enum', 'Flag indicating that this type is the enum')
+
+                .settings-row
+                    +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] already distribute metadata inside cluster')
+            .col-sm-6
+                +preview-xml-java(model, 'clusterBinary')

http://git-wip-us.apache.org/repos/asf/ignite/blob/1080e686/modules/web-console/frontend/app/modules/states/configuration/clusters/cache-key-cfg.jade
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/states/configuration/clusters/cache-key-cfg.jade b/modules/web-console/frontend/app/modules/states/configuration/clusters/cache-key-cfg.jade
deleted file mode 100644
index 41a72c1..0000000
--- a/modules/web-console/frontend/app/modules/states/configuration/clusters/cache-key-cfg.jade
+++ /dev/null
@@ -1,50 +0,0 @@
-//-
-    Licensed to the Apache Software Foundation (ASF) under one or more
-    contributor license agreements.  See the NOTICE file distributed with
-    this work for additional information regarding copyright ownership.
-    The ASF licenses this file to You under the Apache License, Version 2.0
-    (the "License"); you may not use this file except in compliance with
-    the License.  You may obtain a copy of the License at
-
-         http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
-
-include /app/helpers/jade/mixins.jade
-
--var form = 'cacheKeyCfg'
--var model = 'backupItem.cacheKeyConfiguration'
-
-.panel.panel-default(ng-form=form novalidate)
-    .panel-heading(bs-collapse-toggle ng-click='ui.loadPanel("#{form}")')
-        ignite-form-panel-chevron
-        label Cache key configuration
-        ignite-form-field-tooltip.tipLabel
-            | 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
-        ignite-form-revert
-    .panel-collapse(role='tabpanel' bs-collapse-target id=form)
-        .panel-body(ng-if='ui.isPanelLoaded("#{form}")')
-            .col-sm-6
-                .settings-row
-                    +ignite-form-group()
-                        ignite-form-field-label
-                            | Cache key configuration
-                        ignite-form-group-tooltip
-                            | Cache key configuration
-                        ignite-form-group-add(ng-click='#{model}.push({})')
-                            | Add new cache key configuration
-                        .group-content-empty(ng-if='!#{model}.length')
-                            | Not defined
-                        .group-content(ng-repeat='model in #{model} track by $index')
-                            hr(ng-if='$index !== 0')
-                            .settings-row
-                                +java-class-autofocus('Type name:', 'model.typeName', '"cacheKeyTypeName" + $index', 'true', 'true', 'true', 'Type name')
-                                    +table-remove-button(model, 'Remove cache key configuration')
-                            .settings-row
-                                +text('Affinity key field name:', 'model.affinityKeyFieldName', '"affinityKeyFieldName" + $index', true, 'Enter field name', 'Affinity key field name')
-            .col-sm-6
-                +preview-xml-java(model, 'clusterCacheKeyConfiguration')

http://git-wip-us.apache.org/repos/asf/ignite/blob/1080e686/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
new file mode 100644
index 0000000..c2926f5
--- /dev/null
+++ b/modules/web-console/frontend/app/modules/states/configuration/clusters/cache-key-cfg.pug
@@ -0,0 +1,50 @@
+//-
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+include /app/helpers/jade/mixins
+
+-var form = 'cacheKeyCfg'
+-var model = 'backupItem.cacheKeyConfiguration'
+
+.panel.panel-default(ng-form=form novalidate)
+    .panel-heading(bs-collapse-toggle ng-click=`ui.loadPanel('${form}')`)
+        ignite-form-panel-chevron
+        label Cache key configuration
+        ignite-form-field-tooltip.tipLabel
+            | 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
+        ignite-form-revert
+    .panel-collapse(role='tabpanel' bs-collapse-target id=`${form}`)
+        .panel-body(ng-if=`ui.isPanelLoaded('${form}')`)
+            .col-sm-6
+                .settings-row
+                    +ignite-form-group()
+                        ignite-form-field-label
+                            | Cache key configuration
+                        ignite-form-group-tooltip
+                            | Cache key configuration
+                        ignite-form-group-add(ng-click=`${model}.push({})`)
+                            | Add new cache key configuration
+                        .group-content-empty(ng-if=`!${model}.length`)
+                            | Not defined
+                        .group-content(ng-repeat=`model in ${model} track by $index`)
+                            hr(ng-if='$index !== 0')
+                            .settings-row
+                                +java-class-autofocus('Type name:', 'model.typeName', '"cacheKeyTypeName" + $index', 'true', 'true', 'true', 'Type name')
+                                    +table-remove-button(model, 'Remove cache key configuration')
+                            .settings-row
+                                +text('Affinity key field name:', 'model.affinityKeyFieldName', '"affinityKeyFieldName" + $index', true, 'Enter field name', 'Affinity key field name')
+            .col-sm-6
+                +preview-xml-java(model, 'clusterCacheKeyConfiguration')

http://git-wip-us.apache.org/repos/asf/ignite/blob/1080e686/modules/web-console/frontend/app/modules/states/configuration/clusters/checkpoint.jade
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/states/configuration/clusters/checkpoint.jade b/modules/web-console/frontend/app/modules/states/configuration/clusters/checkpoint.jade
deleted file mode 100644
index 259909e..0000000
--- a/modules/web-console/frontend/app/modules/states/configuration/clusters/checkpoint.jade
+++ /dev/null
@@ -1,86 +0,0 @@
-//-
-    Licensed to the Apache Software Foundation (ASF) under one or more
-    contributor license agreements.  See the NOTICE file distributed with
-    this work for additional information regarding copyright ownership.
-    The ASF licenses this file to You under the Apache License, Version 2.0
-    (the "License"); you may not use this file except in compliance with
-    the License.  You may obtain a copy of the License at
-
-         http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
-
-include /app/helpers/jade/mixins.jade
-
--var form = 'checkpoint'
--var model = 'backupItem.checkpointSpi'
--var CustomCheckpoint = 'model.kind === "Custom"'
--var CacheCheckpoint = 'model.kind === "Cache"'
-
-.panel.panel-default(ng-form=form novalidate)
-    .panel-heading(bs-collapse-toggle ng-click='ui.loadPanel("#{form}")')
-        ignite-form-panel-chevron
-        label Checkpointing
-        ignite-form-field-tooltip.tipLabel
-            | Checkpointing provides an ability to save an intermediate job state#[br]
-            | #[a(href="http://apacheignite.readme.io/docs/checkpointing" target="_blank") More info]
-        ignite-form-revert
-    .panel-collapse(role='tabpanel' bs-collapse-target id=form)
-        .panel-body(ng-if='ui.isPanelLoaded("#{form}")')
-            .col-sm-6
-                .settings-row(ng-init='checkpointSpiTbl={type: "checkpointSpi", model: "checkpointSpi", focusId: "kind", ui: "checkpoint-table"}')
-                    +ignite-form-group()
-                        ignite-form-field-label
-                            | Checkpoint SPI configurations
-                        ignite-form-group-tooltip
-                            | Checkpoint SPI configurations
-                        ignite-form-group-add(ng-click='tableNewItem(checkpointSpiTbl)')
-                            | Add checkpoint SPI
-                        .group-content-empty(ng-if='!(#{model} && #{model}.length > 0)')
-                            | Not defined
-                        .group-content(ng-show='#{model} && #{model}.length > 0' ng-repeat='model in #{model} track by $index')
-                            hr(ng-if='$index != 0')
-                            .settings-row
-                                +dropdown-required-autofocus('Checkpoint SPI:', 'model.kind', '"checkpointKind" + $index', '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>')
-                                    +table-remove-button(model, 'Remove Checkpoint SPI')
-
-                            div(ng-show='model.kind === "FS"')
-                                include ./checkpoint/fs.jade
-
-                            div(ng-show=CacheCheckpoint)
-                                .settings-row
-                                    +dropdown-required-empty('Cache:', 'model.Cache.cache', '"checkpointCacheCache"+ $index', 'true', CacheCheckpoint,
-                                        'Choose cache', 'No caches configured for current cluster', 'clusterCaches', 'Cache to use for storing checkpoints')
-                                .settings-row
-                                    +java-class('Listener:', 'model.Cache.checkpointListener', '"checkpointCacheListener" + $index', 'true', 'false',
-                                        'Checkpoint listener implementation class name', CacheCheckpoint)
-
-                            div(ng-show='model.kind === "S3"')
-                                include ./checkpoint/s3.jade
-
-                            div(ng-show='model.kind === "JDBC"')
-                                include ./checkpoint/jdbc.jade
-
-                            .settings-row(ng-show=CustomCheckpoint)
-                                +java-class('Class name:', 'model.Custom.className', '"checkpointCustomClassName" + $index', 'true', CustomCheckpoint,
-                                'Custom CheckpointSpi implementation class', CustomCheckpoint)
-            .col-sm-6
-                +preview-xml-java('backupItem', 'clusterCheckpoint', 'caches')