IGNITE-7996 Move configuration form templates.

Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/c2c03a92
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/c2c03a92
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/c2c03a92

Branch: refs/heads/master
Commit: c2c03a92e80ee64f9be14d4978c61dd090643f3c
Parents: 538e13a
Author: Ilya Borisov <klast...@gmail.com>
Authored: Fri Apr 6 11:17:05 2018 +0700
Committer: Ilya Borisov <klast...@gmail.com>
Committed: Fri Apr 6 11:17:05 2018 +0700

----------------------------------------------------------------------
 .../components/cache-edit-form/template.tpl.pug |  22 +-
 .../cache-edit-form/templates/affinity.pug      |  86 +++++
 .../cache-edit-form/templates/concurrency.pug   |  64 ++++
 .../cache-edit-form/templates/general.pug       | 113 +++++++
 .../cache-edit-form/templates/memory.pug        | 158 ++++++++++
 .../templates/near-cache-client.pug             |  50 +++
 .../templates/near-cache-server.pug             |  51 +++
 .../cache-edit-form/templates/node-filter.pug   |  53 ++++
 .../cache-edit-form/templates/query.pug         | 114 +++++++
 .../cache-edit-form/templates/rebalance.pug     |  66 ++++
 .../cache-edit-form/templates/statistics.pug    |  34 ++
 .../cache-edit-form/templates/store.pug         | 310 +++++++++++++++++++
 .../cluster-edit-form/template.tpl.pug          |  62 ++--
 .../cluster-edit-form/templates/atomic.pug      |  75 +++++
 .../cluster-edit-form/templates/attributes.pug  |  40 +++
 .../cluster-edit-form/templates/binary.pug      |  80 +++++
 .../templates/cache-key-cfg.pug                 |  63 ++++
 .../cluster-edit-form/templates/checkpoint.pug  |  82 +++++
 .../templates/checkpoint/fs.pug                 |  36 +++
 .../templates/checkpoint/jdbc.pug               |  47 +++
 .../templates/checkpoint/s3.pug                 | 204 ++++++++++++
 .../templates/client-connector.pug              |  76 +++++
 .../cluster-edit-form/templates/collision.pug   |  58 ++++
 .../templates/collision/custom.pug              |  23 ++
 .../templates/collision/fifo-queue.pug          |  26 ++
 .../templates/collision/job-stealing.pug        |  51 +++
 .../templates/collision/priority-queue.pug      |  41 +++
 .../templates/communication.pug                 | 134 ++++++++
 .../cluster-edit-form/templates/connector.pug   | 100 ++++++
 .../templates/data-storage.pug                  | 301 ++++++++++++++++++
 .../cluster-edit-form/templates/deployment.pug  | 192 ++++++++++++
 .../cluster-edit-form/templates/discovery.pug   |  97 ++++++
 .../cluster-edit-form/templates/events.pug      |  66 ++++
 .../cluster-edit-form/templates/failover.pug    |  89 ++++++
 .../cluster-edit-form/templates/general.pug     |  89 ++++++
 .../templates/general/discovery/cloud.pug       |  78 +++++
 .../templates/general/discovery/google.pug      |  38 +++
 .../templates/general/discovery/jdbc.pug        |  35 +++
 .../templates/general/discovery/kubernetes.pug  |  38 +++
 .../templates/general/discovery/multicast.pug   |  63 ++++
 .../templates/general/discovery/s3.pug          |  38 +++
 .../templates/general/discovery/shared.pug      |  24 ++
 .../templates/general/discovery/vm.pug          |  55 ++++
 .../templates/general/discovery/zookeeper.pug   |  84 +++++
 .../retrypolicy/bounded-exponential-backoff.pug |  26 ++
 .../discovery/zookeeper/retrypolicy/custom.pug  |  25 ++
 .../retrypolicy/exponential-backoff.pug         |  26 ++
 .../discovery/zookeeper/retrypolicy/forever.pug |  23 ++
 .../discovery/zookeeper/retrypolicy/n-times.pug |  24 ++
 .../zookeeper/retrypolicy/one-time.pug          |  23 ++
 .../zookeeper/retrypolicy/until-elapsed.pug     |  24 ++
 .../cluster-edit-form/templates/hadoop.pug      |  87 ++++++
 .../cluster-edit-form/templates/igfs.pug        |  34 ++
 .../templates/load-balancing.pug                | 115 +++++++
 .../cluster-edit-form/templates/logger.pug      |  60 ++++
 .../templates/logger/custom.pug                 |  24 ++
 .../templates/logger/log4j.pug                  |  49 +++
 .../templates/logger/log4j2.pug                 |  38 +++
 .../cluster-edit-form/templates/marshaller.pug  |  75 +++++
 .../cluster-edit-form/templates/memory.pug      | 195 ++++++++++++
 .../cluster-edit-form/templates/metrics.pug     |  46 +++
 .../cluster-edit-form/templates/misc.pug        |  58 ++++
 .../cluster-edit-form/templates/odbc.pug        |  70 +++++
 .../cluster-edit-form/templates/persistence.pug |  82 +++++
 .../cluster-edit-form/templates/service.pug     |  89 ++++++
 .../templates/sql-connector.pug                 |  58 ++++
 .../cluster-edit-form/templates/ssl.pug         |  89 ++++++
 .../cluster-edit-form/templates/swap.pug        |  74 +++++
 .../cluster-edit-form/templates/thread.pug      | 144 +++++++++
 .../cluster-edit-form/templates/time.pug        |  44 +++
 .../templates/transactions.pug                  |  65 ++++
 .../components/igfs-edit-form/template.tpl.pug  |  12 +-
 .../igfs-edit-form/templates/dual.pug           |  42 +++
 .../igfs-edit-form/templates/fragmentizer.pug   |  37 +++
 .../igfs-edit-form/templates/general.pug        |  72 +++++
 .../components/igfs-edit-form/templates/ipc.pug |  55 ++++
 .../igfs-edit-form/templates/misc.pug           | 110 +++++++
 .../igfs-edit-form/templates/secondary.pug      |  55 ++++
 .../components/model-edit-form/template.tpl.pug |   6 +-
 .../model-edit-form/templates/general.pug       |  57 ++++
 .../model-edit-form/templates/query.pug         | 255 +++++++++++++++
 .../model-edit-form/templates/store.pug         | 123 ++++++++
 .../page-configure-basic/template.pug           |  18 +-
 .../states/configuration/caches/affinity.pug    |  86 -----
 .../states/configuration/caches/concurrency.pug |  64 ----
 .../states/configuration/caches/general.pug     | 113 -------
 .../states/configuration/caches/memory.pug      | 158 ----------
 .../configuration/caches/near-cache-client.pug  |  50 ---
 .../configuration/caches/near-cache-server.pug  |  51 ---
 .../states/configuration/caches/node-filter.pug |  53 ----
 .../states/configuration/caches/query.pug       | 114 -------
 .../states/configuration/caches/rebalance.pug   |  66 ----
 .../states/configuration/caches/statistics.pug  |  34 --
 .../states/configuration/caches/store.pug       | 310 -------------------
 .../states/configuration/clusters/atomic.pug    |  75 -----
 .../configuration/clusters/attributes.pug       |  40 ---
 .../states/configuration/clusters/binary.pug    |  80 -----
 .../configuration/clusters/cache-key-cfg.pug    |  63 ----
 .../configuration/clusters/checkpoint.pug       |  82 -----
 .../configuration/clusters/checkpoint/fs.pug    |  36 ---
 .../configuration/clusters/checkpoint/jdbc.pug  |  47 ---
 .../configuration/clusters/checkpoint/s3.pug    | 204 ------------
 .../configuration/clusters/client-connector.pug |  76 -----
 .../states/configuration/clusters/collision.pug |  58 ----
 .../configuration/clusters/collision/custom.pug |  23 --
 .../clusters/collision/fifo-queue.pug           |  26 --
 .../clusters/collision/job-stealing.pug         |  51 ---
 .../clusters/collision/priority-queue.pug       |  41 ---
 .../configuration/clusters/communication.pug    | 134 --------
 .../states/configuration/clusters/connector.pug | 100 ------
 .../configuration/clusters/data-storage.pug     | 301 ------------------
 .../configuration/clusters/deployment.pug       | 192 ------------
 .../states/configuration/clusters/discovery.pug |  97 ------
 .../states/configuration/clusters/events.pug    |  66 ----
 .../states/configuration/clusters/failover.pug  |  89 ------
 .../states/configuration/clusters/general.pug   |  89 ------
 .../clusters/general/discovery/cloud.pug        |  78 -----
 .../clusters/general/discovery/google.pug       |  38 ---
 .../clusters/general/discovery/jdbc.pug         |  35 ---
 .../clusters/general/discovery/kubernetes.pug   |  38 ---
 .../clusters/general/discovery/multicast.pug    |  63 ----
 .../clusters/general/discovery/s3.pug           |  38 ---
 .../clusters/general/discovery/shared.pug       |  24 --
 .../clusters/general/discovery/vm.pug           |  55 ----
 .../clusters/general/discovery/zookeeper.pug    |  84 -----
 .../retrypolicy/bounded-exponential-backoff.pug |  26 --
 .../discovery/zookeeper/retrypolicy/custom.pug  |  25 --
 .../retrypolicy/exponential-backoff.pug         |  26 --
 .../discovery/zookeeper/retrypolicy/forever.pug |  23 --
 .../discovery/zookeeper/retrypolicy/n-times.pug |  24 --
 .../zookeeper/retrypolicy/one-time.pug          |  23 --
 .../zookeeper/retrypolicy/until-elapsed.pug     |  24 --
 .../states/configuration/clusters/hadoop.pug    |  87 ------
 .../states/configuration/clusters/igfs.pug      |  34 --
 .../configuration/clusters/load-balancing.pug   | 115 -------
 .../states/configuration/clusters/logger.pug    |  60 ----
 .../configuration/clusters/logger/custom.pug    |  24 --
 .../configuration/clusters/logger/log4j.pug     |  49 ---
 .../configuration/clusters/logger/log4j2.pug    |  38 ---
 .../configuration/clusters/marshaller.pug       |  75 -----
 .../states/configuration/clusters/memory.pug    | 195 ------------
 .../states/configuration/clusters/metrics.pug   |  46 ---
 .../states/configuration/clusters/misc.pug      |  58 ----
 .../states/configuration/clusters/odbc.pug      |  70 -----
 .../configuration/clusters/persistence.pug      |  82 -----
 .../states/configuration/clusters/service.pug   |  89 ------
 .../configuration/clusters/sql-connector.pug    |  58 ----
 .../states/configuration/clusters/ssl.pug       |  89 ------
 .../states/configuration/clusters/swap.pug      |  74 -----
 .../states/configuration/clusters/thread.pug    | 144 ---------
 .../states/configuration/clusters/time.pug      |  44 ---
 .../configuration/clusters/transactions.pug     |  65 ----
 .../states/configuration/domains/general.pug    |  57 ----
 .../states/configuration/domains/query.pug      | 255 ---------------
 .../states/configuration/domains/store.pug      | 123 --------
 .../modules/states/configuration/igfs/dual.pug  |  42 ---
 .../states/configuration/igfs/fragmentizer.pug  |  37 ---
 .../states/configuration/igfs/general.pug       |  72 -----
 .../modules/states/configuration/igfs/ipc.pug   |  55 ----
 .../modules/states/configuration/igfs/misc.pug  | 110 -------
 .../states/configuration/igfs/secondary.pug     |  55 ----
 161 files changed, 6055 insertions(+), 6055 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/c2c03a92/modules/web-console/frontend/app/components/page-configure-advanced/components/cache-edit-form/template.tpl.pug
----------------------------------------------------------------------
diff --git 
a/modules/web-console/frontend/app/components/page-configure-advanced/components/cache-edit-form/template.tpl.pug
 
b/modules/web-console/frontend/app/components/page-configure-advanced/components/cache-edit-form/template.tpl.pug
index 70cb445..a8ae2f2 100644
--- 
a/modules/web-console/frontend/app/components/page-configure-advanced/components/cache-edit-form/template.tpl.pug
+++ 
b/modules/web-console/frontend/app/components/page-configure-advanced/components/cache-edit-form/template.tpl.pug
@@ -20,18 +20,18 @@ form(
     novalidate
     ng-submit='$ctrl.save($ctrl.clonedCache)'
 )
-    include /app/modules/states/configuration/caches/general
-    include /app/modules/states/configuration/caches/memory
-    include /app/modules/states/configuration/caches/query
-    include /app/modules/states/configuration/caches/store
+    include ./templates/general
+    include ./templates/memory
+    include ./templates/query
+    include ./templates/store
 
-    include /app/modules/states/configuration/caches/affinity
-    include /app/modules/states/configuration/caches/concurrency
-    include /app/modules/states/configuration/caches/near-cache-client
-    include /app/modules/states/configuration/caches/near-cache-server
-    include /app/modules/states/configuration/caches/node-filter
-    include /app/modules/states/configuration/caches/rebalance
-    include /app/modules/states/configuration/caches/statistics
+    include ./templates/affinity
+    include ./templates/concurrency
+    include ./templates/near-cache-client
+    include ./templates/near-cache-server
+    include ./templates/node-filter
+    include ./templates/rebalance
+    include ./templates/statistics
 
 .pc-form-actions-panel
     .pc-form-actions-panel__right-after

http://git-wip-us.apache.org/repos/asf/ignite/blob/c2c03a92/modules/web-console/frontend/app/components/page-configure-advanced/components/cache-edit-form/templates/affinity.pug
----------------------------------------------------------------------
diff --git 
a/modules/web-console/frontend/app/components/page-configure-advanced/components/cache-edit-form/templates/affinity.pug
 
b/modules/web-console/frontend/app/components/page-configure-advanced/components/cache-edit-form/templates/affinity.pug
new file mode 100644
index 0000000..ce2cad5
--- /dev/null
+++ 
b/modules/web-console/frontend/app/components/page-configure-advanced/components/cache-edit-form/templates/affinity.pug
@@ -0,0 +1,86 @@
+//-
+    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 = 'affinity'
+-var model = '$ctrl.clonedCache'
+-var affModel = model + '.affinity'
+-var affMapModel = model + '.affinityMapper'
+-var rendezvousAff = affModel + '.kind === "Rendezvous"'
+-var fairAff = affModel + '.kind === "Fair"'
+-var customAff = affModel + '.kind === "Custom"'
+-var customAffMapper = affMapModel + '.kind === "Custom"'
+-var rendPartitionsRequired = rendezvousAff + ' && ' + affModel + 
'.Rendezvous.affinityBackupFilter'
+-var fairPartitionsRequired = fairAff + ' && ' + affModel + 
'.Fair.affinityBackupFilter'
+
+panel-collapsible(ng-form=form on-open=`ui.loadPanel('${form}')`)
+    panel-title Affinity Collocation
+    panel-description
+        | Collocate data with data to improve performance and scalability of 
your application. 
+        
a.link-success(href="https://apacheignite.readme.io/docs/affinity-collocation"; 
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(ng-if='$ctrl.available(["1.0.0", "2.0.0"])')
+                +dropdown('Function:', `${affModel}.kind`, '"AffinityKind"', 
'true', 'Default', 'affinityFunction',
+                    'Key topology resolver to provide mapping from keys to 
nodes<br/>\
+                    <ul>\
+                        <li>Rendezvous - Based on Highest Random Weight 
algorithm</li>\
+                        <li>Fair - Tries to ensure that all nodes get equal 
number of partitions with minimum amount of reassignments between existing 
nodes</li>\
+                        <li>Custom - Custom implementation of key affinity 
fynction</li>\
+                        <li>Default - By default rendezvous affinity function  
with 1024 partitions is used</li>\
+                    </ul>')
+            .pc-form-grid-col-60(ng-if='$ctrl.available("2.0.0")')
+                +dropdown('Function:', `${affModel}.kind`, '"AffinityKind"', 
'true', 'Default', 'affinityFunction',
+                    'Key topology resolver to provide mapping from keys to 
nodes<br/>\
+                    <ul>\
+                        <li>Rendezvous - Based on Highest Random Weight 
algorithm</li>\
+                        <li>Custom - Custom implementation of key affinity 
fynction</li>\
+                        <li>Default - By default rendezvous affinity function  
with 1024 partitions is used</li>\
+                    </ul>')
+            .pc-form-group
+                .pc-form-grid-row(ng-if=rendezvousAff)
+                    .pc-form-grid-col-60
+                        +number-required('Partitions', 
`${affModel}.Rendezvous.partitions`, '"RendPartitions"', 'true', 
rendPartitionsRequired, '1024', '1', 'Number of partitions')
+                    .pc-form-grid-col-60
+                        +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
+                        +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-row(ng-if=fairAff)
+                    .pc-form-grid-col-60
+                        +number-required('Partitions', 
`${affModel}.Fair.partitions`, '"FairPartitions"', 'true', 
fairPartitionsRequired, '256', '1', 'Number of partitions')
+                    .pc-form-grid-col-60
+                        +java-class('Backup filter', 
`${affModel}.Fair.affinityBackupFilter`, '"FairAffinityBackupFilter"', 'true', 
'false',
+                            'Backups will be selected from all nodes that pass 
this filter')
+                    .pc-form-grid-col-60
+                        +checkbox('Exclude neighbors', 
`${affModel}.Fair.excludeNeighbors`, '"FairExcludeNeighbors"',
+                            'Exclude same - host - neighbors from being 
backups of each other and specified number of backups')
+                .pc-form-grid-row(ng-if=customAff)
+                    .pc-form-grid-col-60
+                        +java-class('Class name:', 
`${affModel}.Custom.className`, '"AffCustomClassName"', 'true', customAff,
+                            'Custom key affinity function implementation class 
name')
+            .pc-form-grid-col-60
+                +java-class('Mapper:', model + '.affinityMapper', 
'"AffMapCustomClassName"', 'true', 'false',
+                    'Provide custom affinity key for any given key')
+
+            //- Since ignite 2.0
+            .pc-form-grid-col-60(ng-if='$ctrl.available("2.0.0")')
+                +java-class('Topology validator:', model + 
'.topologyValidator', '"topologyValidator"', 'true', 'false')
+
+        .pca-form-column-6
+            +preview-xml-java(model, 'cacheAffinity')

http://git-wip-us.apache.org/repos/asf/ignite/blob/c2c03a92/modules/web-console/frontend/app/components/page-configure-advanced/components/cache-edit-form/templates/concurrency.pug
----------------------------------------------------------------------
diff --git 
a/modules/web-console/frontend/app/components/page-configure-advanced/components/cache-edit-form/templates/concurrency.pug
 
b/modules/web-console/frontend/app/components/page-configure-advanced/components/cache-edit-form/templates/concurrency.pug
new file mode 100644
index 0000000..d99f894
--- /dev/null
+++ 
b/modules/web-console/frontend/app/components/page-configure-advanced/components/cache-edit-form/templates/concurrency.pug
@@ -0,0 +1,64 @@
+//-
+    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 = 'concurrency'
+-var model = '$ctrl.clonedCache'
+
+panel-collapsible(ng-form=form on-open=`ui.loadPanel('${form}')`)
+    panel-title Concurrency control
+    panel-description
+        | Cache concurrent asynchronous operations settings.
+    panel-content.pca-form-row(ng-if=`ui.isPanelLoaded('${form}')`)
+        .pca-form-column-6.pc-form-grid-row
+            .pc-form-grid-col-30
+                +number('Max async operations:', 
`${model}.maxConcurrentAsyncOperations`, '"maxConcurrentAsyncOperations"', 
'true', '500', '0',
+                    'Maximum number of allowed concurrent asynchronous 
operations<br/>\
+                    If <b>0</b> then number of concurrent asynchronous 
operations is unlimited')
+            .pc-form-grid-col-30
+                +number('Default lock timeout:', 
`${model}.defaultLockTimeout`, '"defaultLockTimeout"', 'true', '0', '0',
+                    'Default lock acquisition timeout in milliseconds<br/>\
+                    If <b>0</b> then lock acquisition will never timeout')
+
+            //- Removed in ignite 2.0
+            .pc-form-grid-col-60(ng-if='$ctrl.available(["1.0.0", "2.0.0"])' 
ng-hide=`${model}.atomicityMode === 'TRANSACTIONAL'`)
+                +dropdown('Entry versioning:', 
`${model}.atomicWriteOrderMode`, '"atomicWriteOrderMode"', 'true', 'Choose 
versioning',
+                    '[\
+                        {value: "CLOCK", label: "CLOCK"},\
+                        {value: "PRIMARY", label: "PRIMARY"}\
+                    ]',
+                    'Write ordering mode determines which node assigns the 
write version, sender or the primary node\
+                    <ul>\
+                        <li>CLOCK - in this mode write versions are assigned 
on a sender node which generally leads to better performance</li>\
+                        <li>PRIMARY - in this mode version is assigned only on 
primary node. This means that sender will only send write request to primary 
node, which in turn will assign write version and forward it to backups</li>\
+                    </ul>')
+
+            .pc-form-grid-col-60
+                +dropdown('Write synchronization mode:', 
`${model}.writeSynchronizationMode`, '"writeSynchronizationMode"', 'true', 
'PRIMARY_SYNC',
+                    '[\
+                        {value: "FULL_SYNC", label: "FULL_SYNC"},\
+                        {value: "FULL_ASYNC", label: "FULL_ASYNC"},\
+                        {value: "PRIMARY_SYNC", label: "PRIMARY_SYNC"}\
+                    ]',
+                    'Write synchronization mode\
+                    <ul>\
+                        <li>FULL_SYNC - Ignite will wait for write or commit 
replies from all nodes</li>\
+                        <li>FULL_ASYNC - Ignite will not wait for write or 
commit responses from participating nodes</li>\
+                        <li>PRIMARY_SYNC - Makes sense for PARTITIONED mode. 
Ignite will wait for write or commit to complete on primary node</li>\
+                    </ul>')
+        .pca-form-column-6
+            +preview-xml-java(model, 'cacheConcurrency')

http://git-wip-us.apache.org/repos/asf/ignite/blob/c2c03a92/modules/web-console/frontend/app/components/page-configure-advanced/components/cache-edit-form/templates/general.pug
----------------------------------------------------------------------
diff --git 
a/modules/web-console/frontend/app/components/page-configure-advanced/components/cache-edit-form/templates/general.pug
 
b/modules/web-console/frontend/app/components/page-configure-advanced/components/cache-edit-form/templates/general.pug
new file mode 100644
index 0000000..29977be
--- /dev/null
+++ 
b/modules/web-console/frontend/app/components/page-configure-advanced/components/cache-edit-form/templates/general.pug
@@ -0,0 +1,113 @@
+//-
+    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 = 'general'
+-var model = '$ctrl.clonedCache'
+
+panel-collapsible(opened=`::true` ng-form=form)
+    panel-title General
+    panel-description
+        | Common cache configuration. 
+        a.link-success(href="https://apacheignite.readme.io/docs/data-grid"; 
target="_blank") More info
+    panel-content.pca-form-row
+        .pca-form-column-6.pc-form-grid-row
+            .pc-form-grid-col-60
+                +sane-ignite-form-field-text({
+                    label: 'Name:',
+                    model: `${model}.name`,
+                    name: '"cacheName"',
+                    placeholder: 'Input name',
+                    required: true
+                })(
+                    ignite-unique='$ctrl.caches'
+                    ignite-unique-property='name'
+                    ignite-unique-skip=`["_id", ${model}]`
+                )
+                    +unique-feedback(`${model}.name`, 'Cache name should be 
unique')
+            .pc-form-grid-col-60
+                +sane-ignite-form-field-dropdown({
+                    label: 'Domain models:',
+                    model: `${model}.domains`,
+                    name: '"domains"',
+                    multiple: true,
+                    placeholder: 'Choose domain models',
+                    placeholderEmpty: 'No valid domain models configured',
+                    options: '$ctrl.modelsMenu',
+                    tip: 'Select domain models to describe types in cache'
+                })
+            .pc-form-grid-col-60(ng-if='$ctrl.available("2.1.0")')
+                +text('Group:', `${model}.groupName`, '"groupName"', 'false', 
'Input group name',
+                    'Cache group name.<br/>\
+                    Caches with the same group name share single underlying 
"physical" cache (partition set), but are logically isolated.')
+            .pc-form-grid-col-30
+                +cacheMode('Mode:', `${model}.cacheMode`, '"cacheMode"', 
'PARTITIONED')
+
+            .pc-form-grid-col-30
+                +dropdown('Atomicity:', `${model}.atomicityMode`, 
'"atomicityMode"', 'true', 'ATOMIC',
+                    '[\
+                        {value: "ATOMIC", label: "ATOMIC"},\
+                        {value: "TRANSACTIONAL", label: "TRANSACTIONAL"}\
+                    ]',
+                    'Atomicity:\
+                    <ul>\
+                        <li>ATOMIC - in this mode distributed transactions and 
distributed locking are not supported</li>\
+                        <li>TRANSACTIONAL - in this mode specified fully 
ACID-compliant transactional cache behavior</li>\
+                    </ul>')
+            .pc-form-grid-col-30(ng-is=`${model}.cacheMode === 'PARTITIONED'`)
+                +number('Backups:', `${model}.backups`, '"backups"', 'true', 
'0', '0', 'Number of nodes used to back up single partition for partitioned 
cache')
+            //- Since ignite 2.0
+            .pc-form-grid-col-30(ng-if='$ctrl.available("2.0.0")')
+                +dropdown('Partition loss policy:', 
`${model}.partitionLossPolicy`, '"partitionLossPolicy"', 'true', 'IGNORE',
+                '[\
+                    {value: "READ_ONLY_SAFE", label: "READ_ONLY_SAFE"},\
+                    {value: "READ_ONLY_ALL", label: "READ_ONLY_ALL"},\
+                    {value: "READ_WRITE_SAFE", label: "READ_WRITE_SAFE"},\
+                    {value: "READ_WRITE_ALL", label: "READ_WRITE_ALL"},\
+                    {value: "IGNORE", label: "IGNORE"}\
+                ]',
+                'Partition loss policies:\
+                <ul>\
+                    <li>READ_ONLY_SAFE - in this mode all writes to the cache 
will be failed with an exception,\
+                        reads will only be allowed for keys in  non-lost 
partitions.\
+                        Reads from lost partitions will be failed with an 
exception.</li>\
+                    <li>READ_ONLY_ALL - in this mode all writes to the cache 
will be failed with an exception.\
+                        All reads will proceed as if all partitions were in a 
consistent state.\
+                        The result of reading from a lost partition is 
undefined and may be different on different nodes in the cluster.</li>\
+                    <li>READ_WRITE_SAFE - in this mode all reads and writes 
will be allowed for keys in valid partitions.\
+                        All reads and writes for keys in lost partitions will 
be failed with an exception.</li>\
+                    <li>READ_WRITE_ALL - in this mode all reads and writes 
will proceed as if all partitions were in a consistent state.\
+                        The result of reading from a lost partition is 
undefined and may be different on different nodes in the cluster.</li>\
+                    <li>IGNORE - in this mode if partition is lost, reset it 
state and do not clear intermediate data.\
+                        The result of reading from a previously lost and not 
cleared partition is undefined and may be different\
+                        on different nodes in the cluster.</li>\
+                </ul>')
+            .pc-form-grid-col-60(ng-show=`${model}.cacheMode === 'PARTITIONED' 
&& ${model}.backups`)
+                +checkbox('Read from backup', `${model}.readFromBackup`, 
'"readFromBackup"',
+                    'Flag indicating whether data can be read from backup<br/>\
+                    If not set then always get data from primary node (never 
from backup)')
+            .pc-form-grid-col-60
+                +checkbox('Copy on read', `${model}.copyOnRead`, 
'"copyOnRead"',
+                    'Flag indicating whether copy of the value stored in cache 
should be created for cache operation implying return value<br/>\
+                    Also if this flag is set copies are created for values 
passed to CacheInterceptor and to CacheEntryProcessor')
+            .pc-form-grid-col-60(ng-show=`${model}.cacheMode === 'PARTITIONED' 
&& ${model}.atomicityMode === 'TRANSACTIONAL'`)
+                +checkbox('Invalidate near cache', `${model}.isInvalidate`, 
'"isInvalidate"',
+                    'Invalidation flag for near cache entries in 
transaction<br/>\
+                    If set then values will be invalidated (nullified) upon 
commit in near cache')
+
+        .pca-form-column-6
+            +preview-xml-java(model, 'cacheGeneral')

http://git-wip-us.apache.org/repos/asf/ignite/blob/c2c03a92/modules/web-console/frontend/app/components/page-configure-advanced/components/cache-edit-form/templates/memory.pug
----------------------------------------------------------------------
diff --git 
a/modules/web-console/frontend/app/components/page-configure-advanced/components/cache-edit-form/templates/memory.pug
 
b/modules/web-console/frontend/app/components/page-configure-advanced/components/cache-edit-form/templates/memory.pug
new file mode 100644
index 0000000..10eb488
--- /dev/null
+++ 
b/modules/web-console/frontend/app/components/page-configure-advanced/components/cache-edit-form/templates/memory.pug
@@ -0,0 +1,158 @@
+//-
+    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 = 'memory'
+-var model = '$ctrl.clonedCache'
+
+panel-collapsible(ng-form=form on-open=`ui.loadPanel('${form}')`)
+    panel-title Memory
+    panel-description
+        | Cache memory settings. 
+        a.link-success(
+            href="https://apacheignite.readme.io/v1.9/docs/off-heap-memory";
+            target="_blank"
+            ng-show='$ctrl.available(["1.0.0", "2.0.0"])'
+        ) More info
+        a.link-success(
+            href="https://apacheignite.readme.io/docs/evictions";
+            target="_blank"
+            ng-show='$ctrl.available("2.0.0")'
+        ) More info
+    panel-content.pca-form-row(ng-if=`ui.isPanelLoaded('${form}')`)
+        .pca-form-column-6.pc-form-grid-row
+            //- Since ignite 2.0
+            .pc-form-grid-col-60(ng-if='$ctrl.available("2.0.0")')
+                +checkbox('Onheap cache enabled', model + 
'.onheapCacheEnabled', '"OnheapCacheEnabled"', 'Checks if the on-heap cache is 
enabled for the off-heap based page memory')
+
+            //- Since ignite 2.0 deprecated in ignite 2.3
+            .pc-form-grid-col-60(ng-if='$ctrl.available(["2.0.0", "2.3.0"])')
+                +text('Memory policy name:', model + '.memoryPolicyName', 
'"MemoryPolicyName"', 'false', 'default',
+                    'Name of memory policy configuration for this cache')
+
+            //- Since ignite 2.3
+            .pc-form-grid-col-60(ng-if='$ctrl.available("2.3.0")')
+                +text('Data region name:', model + '.dataRegionName', 
'"DataRegionName"', 'false', 'default',
+                    'Name of data region configuration for this cache')
+
+            //- Removed in ignite 2.0
+            .pc-form-grid-col-60(ng-if-start='$ctrl.available(["1.0.0", 
"2.0.0"])')
+                +sane-ignite-form-field-dropdown({
+                    label: 'Mode:',
+                    model: `${model}.memoryMode`,
+                    name: '"memoryMode"',
+                    placeholder: '{{ ::$ctrl.Caches.memoryMode.default }}',
+                    options: '::$ctrl.Caches.memoryModes',
+                    tip: `Memory modes control whether value is stored in 
on-heap memory, off-heap memory, or swap space
+                    <ul>
+                        <li>
+                            ONHEAP_TIERED - entries are cached on heap memory 
first<br/>
+                            <ul>
+                                <li>
+                                    If offheap memory is enabled and eviction 
policy evicts an entry from heap memory, entry will be moved to offheap 
memory<br/>
+                                    If offheap memory is disabled, then entry 
is simply discarded
+                                </li>
+                                <li>
+                                    If swap space is enabled and offheap 
memory fills up, then entry will be evicted into swap space<br/>
+                                    If swap space is disabled, then entry will 
be discarded. If swap is enabled and offheap memory is disabled, then entry 
will be evicted directly from heap memory into swap
+                                </li>
+                            </ul>
+                        </li>
+                        <li>
+                            OFFHEAP_TIERED - works the same as ONHEAP_TIERED, 
except that entries never end up in heap memory and get stored in offheap 
memory right away<br/>
+                            Entries get cached in offheap memory first and 
then get evicted to swap, if one is configured
+                        </li>
+                        <li>
+                            OFFHEAP_VALUES - entry keys will be stored on heap 
memory, and values will be stored in offheap memory<br/>
+                            Note that in this mode entries can be evicted only 
to swap
+                        </li>
+                    </ul>`
+                })(
+                    ui-validate=`{
+                        offheapAndDomains: 
'$ctrl.Caches.memoryMode.offheapAndDomains(${model})'
+                    }`
+                    ui-validate-watch=`"${model}.domains.length"`
+                    ng-model-options='{allowInvalid: true}'
+                )
+                    +form-field-feedback(null, 'offheapAndDomains', 'Query 
indexing could not be enabled while values are stored off-heap')
+            .pc-form-grid-col-60(ng-if=`${model}.memoryMode !== 
'OFFHEAP_VALUES'`)
+                +sane-ignite-form-field-dropdown({
+                    label: 'Off-heap memory:',
+                    model: `${model}.offHeapMode`,
+                    name: '"offHeapMode"',
+                    required: `$ctrl.Caches.offHeapMode.required(${model})`,
+                    placeholder: '{{::$ctrl.Caches.offHeapMode.default}}',
+                    options: '{{::$ctrl.Caches.offHeapModes}}',
+                    tip: `Off-heap storage mode
+                    <ul>
+                        <li>Disabled - Off-heap storage is disabled</li>
+                        <li>Limited - Off-heap storage has limited size</li>
+                        <li>Unlimited - Off-heap storage grow infinitely (it 
is up to user to properly add and remove entries from cache to ensure that 
off-heap storage does not grow infinitely)</li>
+                    </ul>`
+                })(
+                    ng-change=`$ctrl.Caches.offHeapMode.onChange(${model})`
+                    ui-validate=`{
+                        offheapDisabled: 
'$ctrl.Caches.offHeapMode.offheapDisabled(${model})'
+                    }`
+                    ui-validate-watch=`'${model}.memoryMode'`
+                    ng-model-options='{allowInvalid: true}'
+                )
+                    +form-field-feedback(null, 'offheapDisabled', 'Off-heap 
storage can\'t be disabled when memory mode is OFFHEAP_TIERED')
+            .pc-form-grid-col-60(
+                ng-if=`${model}.offHeapMode === 1 && ${model}.memoryMode !== 
'OFFHEAP_VALUES'`
+                ng-if-end
+            )
+                pc-form-field-size(
+                    label='Off-heap memory max size:'
+                    ng-model=`${model}.offHeapMaxMemory`
+                    name='offHeapMaxMemory'
+                    placeholder='Enter off-heap memory size'
+                    min='{{ ::$ctrl.Caches.offHeapMaxMemory.min }}'
+                    tip='Maximum amount of memory available to off-heap 
storage'
+                    size-scale-label='mb'
+                    size-type='bytes'
+                    required='true'
+                )
+            +evictionPolicy(`${model}.evictionPolicy`, '"evictionPolicy"', 
'true',
+                `$ctrl.Caches.evictionPolicy.required(${model})`,
+                'Optional cache eviction policy<br/>\
+                Must be set for entries to be evicted from on-heap to off-heap 
or swap\
+                <ul>\
+                    <li>Least Recently Used(LRU) - Eviction policy based on 
LRU algorithm and supports batch eviction</li>\
+                    <li>First In First Out (FIFO) - Eviction policy based on 
FIFO algorithm and supports batch eviction</li>\
+                    <li>SORTED - Eviction policy which will select the minimum 
cache entry for eviction</li>\
+                </ul>')
+
+            //- Since ignite 2.0
+            .pc-form-grid-col-60(ng-if='$ctrl.available("2.0.0")')
+                +java-class('Eviction filter:', model + '.evictionFilter', 
'"EvictionFilter"', 'true', 'false', 'Eviction filter to specify which entries 
should not be evicted')
+
+            //- Removed in ignite 2.0
+            .pc-form-grid-col-60(ng-if-start='$ctrl.available(["1.0.0", 
"2.0.0"])')
+                +number('Start size:', `${model}.startSize`, '"startSize"', 
'true', '1500000', '0',
+                    'In terms of size and capacity, Ignite internal cache map 
acts exactly like a normal Java HashMap: it has some initial capacity\
+                    (which is pretty small by default), which doubles as data 
arrives. The process of internal cache map resizing is CPU-intensive\
+                    and time-consuming, and if you load a huge dataset into 
cache (which is a normal use case), the map will have to resize a lot of times.\
+                    To avoid that, you can specify the initial cache map 
capacity, comparable to the expected size of your dataset.\
+                    This will save a lot of CPU resources during the load 
time, because the map would not have to resize.\
+                    For example, if you expect to load 10 million entries into 
cache, you can set this property to 10 000 000.\
+                    This will save you from cache internal map resizes.')
+            .pc-form-grid-col-60(ng-if-end)
+                +checkbox('Swap enabled', `${model}.swapEnabled`, 
'"swapEnabled"', 'Flag indicating whether swap storage is enabled or not for 
this cache')
+
+        .pca-form-column-6
+            +preview-xml-java(model, 'cacheMemory')

http://git-wip-us.apache.org/repos/asf/ignite/blob/c2c03a92/modules/web-console/frontend/app/components/page-configure-advanced/components/cache-edit-form/templates/near-cache-client.pug
----------------------------------------------------------------------
diff --git 
a/modules/web-console/frontend/app/components/page-configure-advanced/components/cache-edit-form/templates/near-cache-client.pug
 
b/modules/web-console/frontend/app/components/page-configure-advanced/components/cache-edit-form/templates/near-cache-client.pug
new file mode 100644
index 0000000..2b6705d
--- /dev/null
+++ 
b/modules/web-console/frontend/app/components/page-configure-advanced/components/cache-edit-form/templates/near-cache-client.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 = 'clientNearCache'
+-var model = '$ctrl.clonedCache'
+
+panel-collapsible(
+    ng-form=form
+    on-open=`ui.loadPanel('${form}')`
+    ng-show=`${model}.cacheMode === 'PARTITIONED'`
+)
+    panel-title Near cache on client node
+    panel-description
+        | Near cache settings for client nodes. 
+        | Near cache is a small local cache that stores most recently or most 
frequently accessed data. 
+        | Should be used in case when it is impossible to send computations to 
remote nodes.
+    panel-content.pca-form-row(ng-if=`ui.isPanelLoaded('${form}')`)
+        .pca-form-column-6.pc-form-grid-row
+            -var nearCfg = `${model}.clientNearConfiguration`
+            -var enabled = `${nearCfg}.enabled`
+
+            .pc-form-grid-col-60
+                +checkbox('Enabled', enabled, '"clientNearEnabled"', 'Flag 
indicating whether to configure near cache')
+            .pc-form-grid-col-60
+                +number('Start size:', `${nearCfg}.nearStartSize`, 
'"clientNearStartSize"', enabled, '375000', '0',
+                    'Initial cache size for near cache which will be used to 
pre-create internal hash table after start')
+            +evictionPolicy(`${nearCfg}.nearEvictionPolicy`, 
'"clientNearCacheEvictionPolicy"', enabled, 'false',
+                'Near cache eviction policy\
+                <ul>\
+                    <li>Least Recently Used (LRU) - Eviction policy based on 
LRU algorithm and supports batch eviction</li>\
+                    <li>First In First Out (FIFO) - Eviction policy based on 
FIFO algorithm and supports batch eviction</li>\
+                    <li>SORTED - Eviction policy which will select the minimum 
cache entry for eviction</li>\
+                </ul>')
+        .pca-form-column-6
+            +preview-xml-java(model, 'cacheNearClient')

http://git-wip-us.apache.org/repos/asf/ignite/blob/c2c03a92/modules/web-console/frontend/app/components/page-configure-advanced/components/cache-edit-form/templates/near-cache-server.pug
----------------------------------------------------------------------
diff --git 
a/modules/web-console/frontend/app/components/page-configure-advanced/components/cache-edit-form/templates/near-cache-server.pug
 
b/modules/web-console/frontend/app/components/page-configure-advanced/components/cache-edit-form/templates/near-cache-server.pug
new file mode 100644
index 0000000..3a91fd2
--- /dev/null
+++ 
b/modules/web-console/frontend/app/components/page-configure-advanced/components/cache-edit-form/templates/near-cache-server.pug
@@ -0,0 +1,51 @@
+//-
+    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 = 'serverNearCache'
+-var model = '$ctrl.clonedCache'
+
+panel-collapsible(
+    ng-form=form
+    on-open=`ui.loadPanel('${form}')`
+    ng-show=`${model}.cacheMode === 'PARTITIONED'`
+)
+    panel-title Near cache on server node
+    panel-description
+        | Near cache settings. 
+        | Near cache is a small local cache that stores most recently or most 
frequently accessed data. 
+        | Should be used in case when it is impossible to send computations to 
remote nodes. 
+        a.link-success(href="https://apacheignite.readme.io/docs/near-caches"; 
target="_blank") More info
+    panel-content.pca-form-row(ng-if=`ui.isPanelLoaded('${form}')`)
+        .pca-form-column-6.pc-form-grid-row
+            -var nearCfg = `${model}.nearConfiguration`
+            -var enabled = `${nearCfg}.enabled`
+
+            .pc-form-grid-col-60
+                +checkbox('Enabled', enabled, '"nearCacheEnabled"', 'Flag 
indicating whether to configure near cache')
+            .pc-form-grid-col-60
+                +number('Start size:', `${nearCfg}.nearStartSize`, 
'"nearStartSize"', enabled, '375000', '0',
+                    'Initial cache size for near cache which will be used to 
pre-create internal hash table after start')
+            +evictionPolicy(`${model}.nearConfiguration.nearEvictionPolicy`, 
'"nearCacheEvictionPolicy"', enabled, 'false',
+                'Near cache eviction policy\
+                <ul>\
+                    <li>Least Recently Used (LRU) - Eviction policy based on 
LRU algorithm and supports batch eviction</li>\
+                    <li>First In First Out (FIFO) - Eviction policy based on 
FIFO algorithm and supports batch eviction</li>\
+                    <li>SORTED - Eviction policy which will select the minimum 
cache entry for eviction</li>\
+                </ul>')
+        .pca-form-column-6
+            +preview-xml-java(model, 'cacheNearServer')

http://git-wip-us.apache.org/repos/asf/ignite/blob/c2c03a92/modules/web-console/frontend/app/components/page-configure-advanced/components/cache-edit-form/templates/node-filter.pug
----------------------------------------------------------------------
diff --git 
a/modules/web-console/frontend/app/components/page-configure-advanced/components/cache-edit-form/templates/node-filter.pug
 
b/modules/web-console/frontend/app/components/page-configure-advanced/components/cache-edit-form/templates/node-filter.pug
new file mode 100644
index 0000000..11938f9
--- /dev/null
+++ 
b/modules/web-console/frontend/app/components/page-configure-advanced/components/cache-edit-form/templates/node-filter.pug
@@ -0,0 +1,53 @@
+//-
+    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 = 'nodeFilter'
+-var model = '$ctrl.clonedCache'
+-var nodeFilter = model + '.nodeFilter';
+-var nodeFilterKind = nodeFilter + '.kind';
+-var igfsFilter = nodeFilterKind + ' === "IGFS"'
+-var customFilter = nodeFilterKind + ' === "Custom"'
+
+panel-collapsible(ng-form=form on-open=`ui.loadPanel('${form}')`)
+    panel-title Node filter
+    panel-description Determines on what nodes the cache should be started.
+    panel-content.pca-form-row(ng-if=`ui.isPanelLoaded('${form}')`)
+        .pca-form-column-6.pc-form-grid-row
+            .pc-form-grid-col-60
+                +dropdown('Node filter:', nodeFilterKind, '"nodeFilter"', 
'true', 'Not set', '::$ctrl.Caches.nodeFilterKinds', 'Node filter variant')
+            .pc-form-grid-col-60(
+                ng-if=igfsFilter
+            )
+                +sane-ignite-form-field-dropdown({
+                    label: 'IGFS:',
+                    model: `${nodeFilter}.IGFS.igfs`,
+                    name: '"igfsNodeFilter"',
+                    required: true,
+                    placeholder: 'Choose IGFS',
+                    placeholderEmpty: 'No IGFS configured',
+                    options: '$ctrl.igfssMenu',
+                    tip: 'Select IGFS to filter nodes'
+                })(
+                    pc-is-in-collection='$ctrl.igfsIDs'
+                )
+                    +form-field-feedback(_, 'isInCollection', `Cluster doesn't 
have such an IGFS`)
+            .pc-form-grid-col-60(ng-show=customFilter)
+                +java-class('Class name:', `${nodeFilter}.Custom.className`, 
'"customNodeFilter"',
+                    'true', customFilter, 'Class name of custom node filter 
implementation', customFilter)
+        .pca-form-column-6
+            +preview-xml-java(model, 'cacheNodeFilter', 'igfss')

http://git-wip-us.apache.org/repos/asf/ignite/blob/c2c03a92/modules/web-console/frontend/app/components/page-configure-advanced/components/cache-edit-form/templates/query.pug
----------------------------------------------------------------------
diff --git 
a/modules/web-console/frontend/app/components/page-configure-advanced/components/cache-edit-form/templates/query.pug
 
b/modules/web-console/frontend/app/components/page-configure-advanced/components/cache-edit-form/templates/query.pug
new file mode 100644
index 0000000..20869f5
--- /dev/null
+++ 
b/modules/web-console/frontend/app/components/page-configure-advanced/components/cache-edit-form/templates/query.pug
@@ -0,0 +1,114 @@
+//-
+    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 = 'query'
+-var model = '$ctrl.clonedCache'
+
+panel-collapsible(ng-form=form on-open=`ui.loadPanel('${form}')`)
+    panel-title Queries & Indexing
+    panel-description 
+        | Cache queries settings. 
+        a.link-success(href="https://apacheignite-sql.readme.io/docs/select"; 
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
+                +text('SQL schema name:', `${model}.sqlSchema`, '"sqlSchema"', 
'false', 'Input schema name',
+                    'Specify any custom name to be used as SQL schema for 
current cache. This name will correspond to SQL ANSI-99 standard.\
+                    Nonquoted identifiers are not case sensitive. Quoted 
identifiers are case sensitive.\
+                    When SQL schema is not specified, quoted cache name should 
used instead.<br/>\
+                    For example:\
+                    <ul>\
+                        <li>\
+                            Query without schema names (quoted cache names 
will be used):\
+                            SELECT * FROM "PersonsCache".Person p INNER JOIN 
"OrganizationsCache".Organization o on p.org = o.id\
+                        </li>\
+                        <li>\
+                            The same query using schema names "Persons" and 
"Organizations":\
+                            SELECT * FROM Persons.Person p INNER JOIN 
Organizations.Organization o on p.org = o.id\
+                        </li>\
+                    </ul>')
+
+            //- Removed in ignite 2.0
+            .pc-form-grid-col-60(ng-if='$ctrl.available(["1.0.0", "2.0.0"])')
+                +number('On-heap cache for off-heap indexes:', 
`${model}.sqlOnheapRowCacheSize`, '"sqlOnheapRowCacheSize"', 'true', '10240', 
'1',
+                    'Number of SQL rows which will be cached onheap to avoid 
deserialization on each SQL index access')
+
+            //- Deprecated in ignite 2.1
+            .pc-form-grid-col-60(ng-if='$ctrl.available(["1.0.0", "2.1.0"])')
+                +number('Long query timeout:', 
`${model}.longQueryWarningTimeout`, '"longQueryWarningTimeout"', 'true', 
'3000', '0',
+                    'Timeout in milliseconds after which long query warning 
will be printed')
+            .pc-form-grid-col-60
+                +number('History size:', `${model}.queryDetailMetricsSize`, 
'"queryDetailMetricsSize"', 'true', '0', '0',
+                    'Size of queries detail metrics that will be stored in 
memory for monitoring purposes')
+            .pc-form-grid-col-60
+                mixin caches-query-list-sql-functions()
+                    .ignite-form-field
+                        -let items = `${model}.sqlFunctionClasses`;
+                        -let uniqueTip = 'SQL function with such class name 
already exists!'
+
+                        list-editable(
+                            ng-model=items
+                            list-editable-cols=`::[{
+                                name: 'SQL functions:',
+                                tip: 'Collections of classes with user-defined 
functions for SQL queries'
+                            }]`
+                        )
+                            list-editable-item-view {{ $item }}
+
+                            list-editable-item-edit
+                                +list-java-class-field('SQL function', 
'$item', '"sqlFunction"', items)
+                                    +unique-feedback('"sqlFunction"', 
uniqueTip)
+
+                            list-editable-no-items
+                                list-editable-add-item-button(
+                                    add-item=`$editLast((${items} = ${items} 
|| []).push(""))`
+                                    label-single='SQL function'
+                                    label-multiple='SQL functions'
+                                )
+
+                - var form = '$parent.form'
+                +caches-query-list-sql-functions
+                - var form = 'query'
+
+            //- Removed in ignite 2.0
+            .pc-form-grid-col-60(ng-if='$ctrl.available(["1.0.0", "2.0.0"])')
+                +checkbox('Snapshotable index', `${model}.snapshotableIndex`, 
'"snapshotableIndex"',
+                    'Flag indicating whether SQL indexes should support 
snapshots')
+
+            .pc-form-grid-col-60
+                +checkbox('Escape table and filed names', 
`${model}.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 creation internal 
structures in Ignite SQL engine.')
+
+            //- Since ignite 2.0
+            .pc-form-grid-col-30(ng-if-start='$ctrl.available("2.0.0")')
+                +number('Query parallelism', model + '.queryParallelism', 
'"queryParallelism"', 'true', '1', '1',
+                    'A hint to query execution engine on desired degree of 
parallelism within a single node')
+            .pc-form-grid-col-30(ng-if-end)
+                +sane-ignite-form-field-number({
+                    label: 'SQL index max inline size:',
+                    model: `${model}.sqlIndexMaxInlineSize`,
+                    name: '"sqlIndexMaxInlineSize"',
+                    placeholder: '-1',
+                    min: '-1',
+                    tip: 'Maximum inline size for sql indexes'
+                })
+
+        .pca-form-column-6
+            +preview-xml-java(model, 'cacheQuery', 'domains')

http://git-wip-us.apache.org/repos/asf/ignite/blob/c2c03a92/modules/web-console/frontend/app/components/page-configure-advanced/components/cache-edit-form/templates/rebalance.pug
----------------------------------------------------------------------
diff --git 
a/modules/web-console/frontend/app/components/page-configure-advanced/components/cache-edit-form/templates/rebalance.pug
 
b/modules/web-console/frontend/app/components/page-configure-advanced/components/cache-edit-form/templates/rebalance.pug
new file mode 100644
index 0000000..7563435
--- /dev/null
+++ 
b/modules/web-console/frontend/app/components/page-configure-advanced/components/cache-edit-form/templates/rebalance.pug
@@ -0,0 +1,66 @@
+//-
+    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 = 'rebalance'
+-var model = '$ctrl.clonedCache'
+
+panel-collapsible(
+    ng-form=form
+    on-open=`ui.loadPanel('${form}')`
+    ng-hide=`${model}.cacheMode === "LOCAL"`
+)
+    panel-title Rebalance
+    panel-description
+        | Cache rebalance settings. 
+        a.link-success(href="https://apacheignite.readme.io/docs/rebalancing"; 
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('Mode:', `${model}.rebalanceMode`, 
'"rebalanceMode"', 'true', 'ASYNC',
+                    '[\
+                        {value: "SYNC", label: "SYNC"},\
+                        {value: "ASYNC", label: "ASYNC"},\
+                        {value: "NONE", label: "NONE"}\
+                    ]',
+                    'Rebalance modes\
+                    <ul>\
+                        <li>Synchronous - in this mode distributed caches will 
not start until all necessary data is loaded from other available grid 
nodes</li>\
+                        <li>Asynchronous - in this mode distributed caches 
will start immediately and will load all necessary data from other available 
grid nodes in the background</li>\
+                        <li>None - in this mode no rebalancing will take place 
which means that caches will be either loaded on demand from persistent store 
whenever data is accessed, or will be populated explicitly</li>\
+                    </ul>')
+            .pc-form-grid-col-30
+                +number('Batch size:', `${model}.rebalanceBatchSize`, 
'"rebalanceBatchSize"', 'true', '512 * 1024', '1',
+                    'Size (in bytes) to be loaded within a single rebalance 
message<br/>\
+                    Rebalancing algorithm will split total data set on every 
node into multiple batches prior to sending data')
+            .pc-form-grid-col-30
+                +number('Batches prefetch count:', 
`${model}.rebalanceBatchesPrefetchCount`, '"rebalanceBatchesPrefetchCount"', 
'true', '2', '1',
+                    'Number of batches generated by supply node at rebalancing 
start')
+            .pc-form-grid-col-30
+                +number('Order:', `${model}.rebalanceOrder`, 
'"rebalanceOrder"', 'true', '0', Number.MIN_SAFE_INTEGER,
+                    'If cache rebalance order is positive, rebalancing for 
this cache will be started only when rebalancing for all caches with smaller 
rebalance order (except caches with rebalance order 0) will be completed')
+            .pc-form-grid-col-20
+                +number('Delay:', `${model}.rebalanceDelay`, 
'"rebalanceDelay"', 'true', '0', '0',
+                    'Delay in milliseconds upon a node joining or leaving 
topology (or crash) after which rebalancing should be started automatically')
+            .pc-form-grid-col-20
+                +number('Timeout:', `${model}.rebalanceTimeout`, 
'"rebalanceTimeout"', 'true', '10000', '0',
+                    'Rebalance timeout in milliseconds')
+            .pc-form-grid-col-20
+                +number('Throttle:', `${model}.rebalanceThrottle`, 
'"rebalanceThrottle"', 'true', '0', '0',
+                    'Time in milliseconds to wait between rebalance messages 
to avoid overloading of CPU or network')
+        .pca-form-column-6
+            +preview-xml-java(model, 'cacheRebalance')

http://git-wip-us.apache.org/repos/asf/ignite/blob/c2c03a92/modules/web-console/frontend/app/components/page-configure-advanced/components/cache-edit-form/templates/statistics.pug
----------------------------------------------------------------------
diff --git 
a/modules/web-console/frontend/app/components/page-configure-advanced/components/cache-edit-form/templates/statistics.pug
 
b/modules/web-console/frontend/app/components/page-configure-advanced/components/cache-edit-form/templates/statistics.pug
new file mode 100644
index 0000000..bf58354
--- /dev/null
+++ 
b/modules/web-console/frontend/app/components/page-configure-advanced/components/cache-edit-form/templates/statistics.pug
@@ -0,0 +1,34 @@
+//-
+    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 = '$ctrl.clonedCache'
+
+panel-collapsible(ng-form=form on-open=`ui.loadPanel('${form}')`)
+    panel-title Statistics
+    panel-description Cache statistics and management settings.
+    panel-content.pca-form-row(ng-if=`ui.isPanelLoaded('${form}')`)
+        .pca-form-column-6.pc-form-grid-row
+            .pc-form-grid-col-60
+                +checkbox('Statistics enabled', `${model}.statisticsEnabled`, 
'"statisticsEnabled"', 'Flag indicating whether statistics gathering is enabled 
on this cache')
+            .pc-form-grid-col-60
+                +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')
+        .pca-form-column-6
+            +preview-xml-java(model, 'cacheStatistics')

http://git-wip-us.apache.org/repos/asf/ignite/blob/c2c03a92/modules/web-console/frontend/app/components/page-configure-advanced/components/cache-edit-form/templates/store.pug
----------------------------------------------------------------------
diff --git 
a/modules/web-console/frontend/app/components/page-configure-advanced/components/cache-edit-form/templates/store.pug
 
b/modules/web-console/frontend/app/components/page-configure-advanced/components/cache-edit-form/templates/store.pug
new file mode 100644
index 0000000..32d966a
--- /dev/null
+++ 
b/modules/web-console/frontend/app/components/page-configure-advanced/components/cache-edit-form/templates/store.pug
@@ -0,0 +1,310 @@
+//-
+    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 = '$ctrl.clonedCache'
+
+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-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
+                        +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'`
+
+                    .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'`
+
+                    .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-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'
+                                })
+
+            - 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}'
+                    )
+                .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')
+
+                //- 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')

Reply via email to