http://git-wip-us.apache.org/repos/asf/ignite/blob/eb5ac0ae/modules/web-console/src/main/js/app/modules/states/configuration/caches/memory.jade
----------------------------------------------------------------------
diff --git 
a/modules/web-console/src/main/js/app/modules/states/configuration/caches/memory.jade
 
b/modules/web-console/src/main/js/app/modules/states/configuration/caches/memory.jade
new file mode 100644
index 0000000..c862071
--- /dev/null
+++ 
b/modules/web-console/src/main/js/app/modules/states/configuration/caches/memory.jade
@@ -0,0 +1,88 @@
+//-
+    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 = 'memory'
+-var model = 'backupItem'
+
+form.panel.panel-default(name=form novalidate)
+    .panel-heading(bs-collapse-toggle='' ng-click='ui.loadPanel("#{form}")')
+        ignite-form-panel-chevron
+        label Memory
+        ignite-form-field-tooltip.tipLabel
+            | Cache memory 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
+                    +dropdown('Mode:', model + '.memoryMode', 'memoryMode', 
'true', 'ONHEAP_TIERED',
+                        '[\
+                            {value: "ONHEAP_TIERED", label: "ONHEAP_TIERED"},\
+                            {value: "OFFHEAP_TIERED", label: 
"OFFHEAP_TIERED"},\
+                            {value: "OFFHEAP_VALUES", label: "OFFHEAP_VALUES"}\
+                        ]',
+                        'Memory modes:\
+                        <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>')
+                .settings-row(data-ng-show=model + '.memoryMode !== 
"OFFHEAP_VALUES"')
+                    +number-required('Off-heap max memory:', model + 
'.offHeapMaxMemory', 'offHeapMaxMemory', 'true',
+                        model + '.memoryMode === "OFFHEAP_TIERED"', '-1', '-1',
+                        'Sets maximum amount of memory available to off-heap 
storage<br/>\
+                        Possible values are:\
+                        <ul>\
+                            <li>-1 - means that off-heap storage is 
disabled</li>\
+                            <li>0 - Ignite will not limit off-heap storage (it 
is up to user to properly add and remove entries from cache to ensure that 
off-heap storage does not grow infinitely)</li>\
+                            <li>Any positive value specifies the limit of 
off-heap storage in bytes</li>\
+                        </ul>')
+                .settings-row
+                    -var onHeapTired = model + '.memoryMode === 
"ONHEAP_TIERED"'
+                    -var swapEnabled = model + '.swapEnabled'
+                    -var offHeapMaxMemory = model + '.offHeapMaxMemory'
+
+                    +evictionPolicy(model + '.evictionPolicy', 
'evictionPolicy', 'true',
+                        onHeapTired  + ' && (' + swapEnabled + '|| 
_.isNumber(' + offHeapMaxMemory + ') &&' + offHeapMaxMemory + ' >= 0)',
+                        'Optional cache eviction policy<br/>\
+                        Must be set for entries to be evicted from on - heap 
to off - heap or swap')
+                .settings-row
+                    +number('Start size:', model + '.startSize', 'startSize', 
'true', '1500000', '0',
+                        'Initial cache size which will be used to pre-create 
internal hash table after start')
+                .settings-row
+                    +checkbox('Swap enabled', model + '.swapEnabled', 
'swapEnabled', 'Flag indicating whether swap storage is enabled or not for this 
cache')
+            .col-sm-6
+                +preview-xml-java(model, 'cacheMemory')

http://git-wip-us.apache.org/repos/asf/ignite/blob/eb5ac0ae/modules/web-console/src/main/js/app/modules/states/configuration/caches/query.directive.js
----------------------------------------------------------------------
diff --git 
a/modules/web-console/src/main/js/app/modules/states/configuration/caches/query.directive.js
 
b/modules/web-console/src/main/js/app/modules/states/configuration/caches/query.directive.js
new file mode 100644
index 0000000..b3b6edb
--- /dev/null
+++ 
b/modules/web-console/src/main/js/app/modules/states/configuration/caches/query.directive.js
@@ -0,0 +1,27 @@
+/*
+ * 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.
+ */
+
+import template from './query.jade!';
+
+export default ['igniteConfigurationCachesQuery', [() => {
+    return {
+        scope: true,
+        restrict: 'E',
+        template,
+        replace: true
+    };
+}]];

http://git-wip-us.apache.org/repos/asf/ignite/blob/eb5ac0ae/modules/web-console/src/main/js/app/modules/states/configuration/caches/query.jade
----------------------------------------------------------------------
diff --git 
a/modules/web-console/src/main/js/app/modules/states/configuration/caches/query.jade
 
b/modules/web-console/src/main/js/app/modules/states/configuration/caches/query.jade
new file mode 100644
index 0000000..2a6495b
--- /dev/null
+++ 
b/modules/web-console/src/main/js/app/modules/states/configuration/caches/query.jade
@@ -0,0 +1,93 @@
+//-
+    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 = 'query'
+-var model = 'backupItem'
+
+form.panel.panel-default(name=form novalidate)
+    .panel-heading(bs-collapse-toggle='' ng-click='ui.loadPanel("#{form}")')
+        ignite-form-panel-chevron
+        label Queries & Indexing
+        ignite-form-field-tooltip.tipLabel
+            | Cache queries 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
+                    +text('SQL schema name:', model + '.sqlSchema', 
'sqlSchema', 'false', 'Input schema name', 'Schema name for cache according to 
SQL ANSI-99')
+                .settings-row
+                    +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')
+                .settings-row
+                    +number('Long query timeout:', model + 
'.longQueryWarningTimeout', 'longQueryWarningTimeout', 'true', '3000', '0',
+                        'Timeout in milliseconds after which long query 
warning will be printed')
+                .settings-row
+                    -var sqlFunctionClassesForm = 'querySqlFunctionClasses';
+                    -var sqlFunctionClasses = model + '.sqlFunctionClasses';
+
+                    ignite-form-group(ng-model=sqlFunctionClasses 
ng-form=sqlFunctionClassesForm)
+                        ignite-form-field-label
+                            | SQL functions
+                        ignite-form-group-tooltip
+                            | Collections of classes with user-defined 
functions for SQL queries
+                        ignite-form-group-add(ng-click='group.add = [{}]')
+                            | Add new user-defined functions for SQL queries
+
+                        -var uniqueTip = 'SQL function with such class name 
already exists!'
+
+                        .group-content(ng-if=sqlFunctionClasses + '.length')
+                            -var field = 'edit'
+                            -var valid = 'form[ngModelName].$valid'
+                            -var unique = 
'form[ngModelName].$error.igniteUnique'
+                            -var save = sqlFunctionClasses + '[$index] = ' + 
field
+
+                            ignite-form-field(ng-repeat='model in 
#{sqlFunctionClasses} track by $index' type='internal' name='SQL function')
+                                .indexField
+                                    | {{ $index+1 }})
+                                +table-remove-button(sqlFunctionClasses, 
'Remove user-defined function')
+
+                                span(ng-hide='field.edit')
+                                    a.labelFormField(ng-click='field.edit = 
true') {{ model }}
+                                span(ng-if='field.edit' ng-init='#{field} = 
model')
+                                    +table-java-class-field('SQL function', 
field, sqlFunctionClasses, valid, save, false)
+                                        +table-save-button(valid, save, false)
+                                        +unique-feedback(unique, uniqueTip)
+
+                        .group-content(ng-repeat='field in group.add')
+                            -var field = 'new'
+                            -var valid = 'form[ngModelName].$valid'
+                            -var unique = 
'form[ngModelName].$error.igniteUnique'
+                            -var save = sqlFunctionClasses + '.push(' + field 
+ ')'
+
+                            ignite-form-field(type='internal' name='SQL 
function')
+                                +table-java-class-field('SQL function', field, 
sqlFunctionClasses, valid, save, true)
+                                    +table-save-button(valid, save, true)
+                                    +unique-feedback(unique, uniqueTip)
+
+                        
.group-content-empty(ng-if='!(#{sqlFunctionClasses}.length) && 
!group.add.length')
+                            | Not defined
+                .settings-row
+                    +checkbox('Snapshotable index', model + 
'.snapshotableIndex', 'snapshotableIndex',
+                        'Flag indicating whether SQL indexes should support 
snapshots')
+                .settings-row
+                    +checkbox('Escape table and filed names', model + 
'.sqlEscapeAll', 'sqlEscapeAll',
+                        'If set then all the SQL table and field names will be 
escaped with double quotes<br/>\
+                        This enforces case sensitivity for field names and 
also allows having special characters in table and field names')
+            .col-sm-6
+                +preview-xml-java(model, 'cacheQuery')

http://git-wip-us.apache.org/repos/asf/ignite/blob/eb5ac0ae/modules/web-console/src/main/js/app/modules/states/configuration/caches/rebalance.directive.js
----------------------------------------------------------------------
diff --git 
a/modules/web-console/src/main/js/app/modules/states/configuration/caches/rebalance.directive.js
 
b/modules/web-console/src/main/js/app/modules/states/configuration/caches/rebalance.directive.js
new file mode 100644
index 0000000..b3f24a1
--- /dev/null
+++ 
b/modules/web-console/src/main/js/app/modules/states/configuration/caches/rebalance.directive.js
@@ -0,0 +1,27 @@
+/*
+ * 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.
+ */
+
+import template from './rebalance.jade!';
+
+export default ['igniteConfigurationCachesRebalance', [() => {
+    return {
+        scope: true,
+        restrict: 'E',
+        template,
+        replace: true
+    };
+}]];

http://git-wip-us.apache.org/repos/asf/ignite/blob/eb5ac0ae/modules/web-console/src/main/js/app/modules/states/configuration/caches/rebalance.jade
----------------------------------------------------------------------
diff --git 
a/modules/web-console/src/main/js/app/modules/states/configuration/caches/rebalance.jade
 
b/modules/web-console/src/main/js/app/modules/states/configuration/caches/rebalance.jade
new file mode 100644
index 0000000..88026a2
--- /dev/null
+++ 
b/modules/web-console/src/main/js/app/modules/states/configuration/caches/rebalance.jade
@@ -0,0 +1,65 @@
+//-
+    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 = 'rebalance'
+-var model = 'backupItem'
+
+form.panel.panel-default(name=form novalidate ng-hide='#{model}.cacheMode === 
"LOCAL"')
+    .panel-heading(bs-collapse-toggle='' ng-click='ui.loadPanel("#{form}")')
+        ignite-form-panel-chevron
+        label Rebalance
+        ignite-form-field-tooltip.tipLabel
+            | Cache rebalance 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
+                    +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>')
+                    .settings-row
+                        +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')
+                    .settings-row
+                        +number('Batches prefetch count:', model + 
'.rebalanceBatchesPrefetchCount', 'rebalanceBatchesPrefetchCount', 'true', '2', 
'1',
+                            'Number of batches generated by supply node at 
rebalancing start')
+                    .settings-row
+                        +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')
+                    .settings-row
+                        +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')
+                    .settings-row
+                        +number('Timeout:', model + '.rebalanceTimeout', 
'rebalanceTimeout', 'true', '10000', '0',
+                            'Rebalance timeout in milliseconds')
+                    .settings-row
+                        +number('Throttle:', model + '.rebalanceThrottle', 
'rebalanceThrottle', 'true', '0', '0',
+                            'Time in milliseconds to wait between rebalance 
messages to avoid overloading of CPU or network')
+            .col-sm-6
+                +preview-xml-java(model, 'cacheRebalance')

http://git-wip-us.apache.org/repos/asf/ignite/blob/eb5ac0ae/modules/web-console/src/main/js/app/modules/states/configuration/caches/server-near-cache.directive.js
----------------------------------------------------------------------
diff --git 
a/modules/web-console/src/main/js/app/modules/states/configuration/caches/server-near-cache.directive.js
 
b/modules/web-console/src/main/js/app/modules/states/configuration/caches/server-near-cache.directive.js
new file mode 100644
index 0000000..5a4e474
--- /dev/null
+++ 
b/modules/web-console/src/main/js/app/modules/states/configuration/caches/server-near-cache.directive.js
@@ -0,0 +1,27 @@
+/*
+ * 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.
+ */
+
+import template from './server-near-cache.jade!';
+
+export default ['igniteConfigurationCachesServerNearCache', [() => {
+    return {
+        scope: true,
+        restrict: 'E',
+        template,
+        replace: true
+    };
+}]];

http://git-wip-us.apache.org/repos/asf/ignite/blob/eb5ac0ae/modules/web-console/src/main/js/app/modules/states/configuration/caches/server-near-cache.jade
----------------------------------------------------------------------
diff --git 
a/modules/web-console/src/main/js/app/modules/states/configuration/caches/server-near-cache.jade
 
b/modules/web-console/src/main/js/app/modules/states/configuration/caches/server-near-cache.jade
new file mode 100644
index 0000000..2b1ca07
--- /dev/null
+++ 
b/modules/web-console/src/main/js/app/modules/states/configuration/caches/server-near-cache.jade
@@ -0,0 +1,45 @@
+//-
+    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 = 'server-near-cache'
+-var model = 'backupItem'
+
+form.panel.panel-default(name=form novalidate ng-show='#{model}.cacheMode === 
"PARTITIONED"')
+    .panel-heading(bs-collapse-toggle='' ng-click='ui.loadPanel("#{form}")')
+        ignite-form-panel-chevron
+        label Server near cache
+        ignite-form-field-tooltip.tipLabel
+            | Near cache settings#[br]
+            | Near cache is a small local cache that stores most recently or 
most frequently accessed data#[br]
+            | Should be used in case when it is impossible to send 
computations to remote nodes
+        ignite-form-revert
+    .panel-collapse(role='tabpanel' bs-collapse-target id=form)
+        .panel-body(ng-if='ui.isPanelLoaded("#{form}")')
+            .col-sm-6
+                -var enabled = model + '.nearCacheEnabled'
+                -var nearCfg = model + '.nearConfiguration'
+
+                .settings-row
+                    +checkbox('Enabled', enabled, 'nearCacheEnabled', 'Flag 
indicating whether to configure near cache')
+                .settings-row
+                    +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')
+                .settings-row
+                    +evictionPolicy(model + 
'.nearConfiguration.nearEvictionPolicy', 'nearCacheEvictionPolicy', enabled, 
'false', 'Near cache eviction policy')
+            .col-sm-6
+                +preview-xml-java(model, 'cacheServerNearCache')

http://git-wip-us.apache.org/repos/asf/ignite/blob/eb5ac0ae/modules/web-console/src/main/js/app/modules/states/configuration/caches/statistics.directive.js
----------------------------------------------------------------------
diff --git 
a/modules/web-console/src/main/js/app/modules/states/configuration/caches/statistics.directive.js
 
b/modules/web-console/src/main/js/app/modules/states/configuration/caches/statistics.directive.js
new file mode 100644
index 0000000..d40ac1a
--- /dev/null
+++ 
b/modules/web-console/src/main/js/app/modules/states/configuration/caches/statistics.directive.js
@@ -0,0 +1,27 @@
+/*
+ * 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.
+ */
+
+import template from './statistics.jade!';
+
+export default ['igniteConfigurationCachesStatistics', [() => {
+    return {
+        scope: true,
+        restrict: 'E',
+        template,
+        replace: true
+    };
+}]];

http://git-wip-us.apache.org/repos/asf/ignite/blob/eb5ac0ae/modules/web-console/src/main/js/app/modules/states/configuration/caches/statistics.jade
----------------------------------------------------------------------
diff --git 
a/modules/web-console/src/main/js/app/modules/states/configuration/caches/statistics.jade
 
b/modules/web-console/src/main/js/app/modules/states/configuration/caches/statistics.jade
new file mode 100644
index 0000000..cc2310a
--- /dev/null
+++ 
b/modules/web-console/src/main/js/app/modules/states/configuration/caches/statistics.jade
@@ -0,0 +1,37 @@
+//-
+    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 = 'statistics'
+-var model = 'backupItem'
+
+form.panel.panel-default(name=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 a cache')
+                .settings-row
+                    +checkbox('Management enabled', model + 
'.managementEnabled', 'managementEnabled', 'Flag indicating whether management 
is enabled on this cache')
+            .col-sm-6
+                +preview-xml-java(model, 'cacheStatistics')

http://git-wip-us.apache.org/repos/asf/ignite/blob/eb5ac0ae/modules/web-console/src/main/js/app/modules/states/configuration/caches/store.directive.js
----------------------------------------------------------------------
diff --git 
a/modules/web-console/src/main/js/app/modules/states/configuration/caches/store.directive.js
 
b/modules/web-console/src/main/js/app/modules/states/configuration/caches/store.directive.js
new file mode 100644
index 0000000..168eb85
--- /dev/null
+++ 
b/modules/web-console/src/main/js/app/modules/states/configuration/caches/store.directive.js
@@ -0,0 +1,27 @@
+/*
+ * 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.
+ */
+
+import template from './store.jade!';
+
+export default ['igniteConfigurationCachesStore', [() => {
+    return {
+        scope: true,
+        restrict: 'E',
+        template,
+        replace: true
+    };
+}]];

http://git-wip-us.apache.org/repos/asf/ignite/blob/eb5ac0ae/modules/web-console/src/main/js/app/modules/states/configuration/caches/store.jade
----------------------------------------------------------------------
diff --git 
a/modules/web-console/src/main/js/app/modules/states/configuration/caches/store.jade
 
b/modules/web-console/src/main/js/app/modules/states/configuration/caches/store.jade
new file mode 100644
index 0000000..d4f698e
--- /dev/null
+++ 
b/modules/web-console/src/main/js/app/modules/states/configuration/caches/store.jade
@@ -0,0 +1,266 @@
+//-
+    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 for DB dialect.
+mixin dialect(lbl, model, name, tipTitle, genericDialectName, placeholder)
+    ignite-form-field
+        ignite-form-field-label
+            | #{lbl}
+        ignite-form-field-tooltip
+            | #{tipTitle}
+            ul: li #{genericDialectName}
+                li Oracle database
+                li IBM DB2
+                li Microsoft SQL Server
+                li MySQL
+                li PostgreSQL
+                li H2 database
+        ignite-form-field-dropdown(
+            data-id=name
+            data-name=name
+            data-options='[\
+                {value: "Generic", label: "#{genericDialectName}"},\
+                {value: "Oracle", label: "Oracle"},\
+                {value: "DB2", label: "IBM DB2"},\
+                {value: "SQLServer", label: "Microsoft SQL Server"},\
+                {value: "MySQL", label: "MySQL"},\
+                {value: "PostgreSQL", label: "PostgreSQL"},\
+                {value: "H2", label: "H2 database"}\
+            ]'
+            data-ng-model=model
+            data-ng-required='true'
+            data-placeholder=placeholder
+        )
+
+mixin hibernateField(items, field, valid, save, newItem)
+    -var reset = newItem ? 'group.add = []' : 'field.edit = false'
+
+    -var resetOnEnter = newItem ? '(stopblur = true) && (group.add = [{}])' : 
'(field.edit = false)'
+    -var onEnter = valid + ' && (' + save + '); ' + valid + ' && ' + 
resetOnEnter + ';'
+
+    -var resetOnBlur = newItem ? '!stopblur && (group.add = [])' : 'field.edit 
= false'
+    -var onBlur = valid + ' && ( ' + save + '); ' + resetOnBlur + ';'
+
+    ignite-form-field-input-text(
+        data-name=field
+        data-ng-model=field
+        data-ng-required='true'
+        data-placeholder='key=value'
+        data-ignite-property-unique=items
+        data-ignite-property-value-specified
+        data-ignite-form-field-input-autofocus='true'
+        on-enter=onEnter
+        on-escape=reset
+        ng-blur=onBlur
+    )
+        block
+
+form.panel.panel-default(name=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
+        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'
+                    )
+                    span(ng-if=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-if='__.expanded')
+                            div(ng-if='#{storeFactoryKind} === 
"CacheJdbcPojoStoreFactory"')
+                                -var pojoStoreFactory = storeFactory + 
'.CacheJdbcPojoStoreFactory'
+
+                                .details-row
+                                    +text('Data source bean name:', 
pojoStoreFactory + '.dataSourceBean',
+                                        'pojoDataSourceBean', 'true', 'Input 
bean name',
+                                        'Name of the data source bean in 
Spring context')
+                                .details-row
+                                    +dialect('Dialect:', pojoStoreFactory + 
'.dialect', 'pojoDialect',
+                                        'Dialect of SQL implemented by a 
particular RDBMS:', 'Generic JDBC dialect',
+                                        'Choose JDBC dialect')
+                            div(ng-if='#{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-if='#{blobStoreFactoryVia} === "URL"')
+                                    .details-row
+                                        +text('Connection URL:', 
blobStoreFactory + '.connectionUrl', 'connectionUrl', 'true', 'Input URL',
+                                            'URL for database access, for 
example: jdbc:h2:mem:myDatabase')
+                                    .details-row
+                                        +text('User:', blobStoreFactory + 
'.user', 'user', 'true', 'Input user name', 'User name for database access')
+                                    .details-row
+                                        label Note, password will be generated 
as stub
+                                div(ng-if='#{blobStoreFactoryVia} !== "URL"')
+                                    .details-row
+                                        +text('Data source bean name:', 
blobStoreFactory + '.dataSourceBean', 'blobDataSourceBean', 'true', 'Input bean 
name',
+                                            'Name of the data source bean in 
Spring context')
+                                    .details-row
+                                        +dialect('Database:', blobStoreFactory 
+ '.dialect', 'blobDialect', '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-if='#{storeFactoryKind} === 
"CacheHibernateBlobStoreFactory"')
+                                -var hibernateStoreFactory = storeFactory + 
'.CacheHibernateBlobStoreFactory'
+                                -var hibernateProperties = 
hibernateStoreFactory + '.hibernateProperties'
+
+                                .details-row
+                                    
ignite-form-group(ng-model=hibernateProperties ng-form=form)
+                                        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='group.add = [{}]')
+                                            | Add new Hibernate property
+
+                                        -var tipUnique = 'Property with such 
key already exists!'
+                                        -var tipPropertySpecified = 'Property 
should be present in format key=value!'
+
+                                        
.group-content(ng-if='#{hibernateProperties}.length')
+                                            -var field = 'edit'
+                                            -var valid = 
'form[ngModelName].$valid'
+                                            -var unique = 
'form[ngModelName].$error.ignitePropertyUnique'
+                                            -var prop = 
'form[ngModelName].$error.ignitePropertyValueSpecified'
+                                            -var save = hibernateProperties + 
'[$index] = ' + field
+
+                                            ignite-form-field(ng-repeat='model 
in #{hibernateProperties} track by $index' type='internal' name='Hibernate 
properties')
+                                                .indexField
+                                                    | {{ $index+1 }})
+                                                
+table-remove-button(hibernateProperties, 'Remove Hibernate property')
+
+                                                span(ng-hide='field.edit')
+                                                    
a.labelFormField(ng-click='field.edit = true') {{ model }}
+                                                span(ng-if='field.edit' 
ng-init='#{field} = model')
+                                                    
+hibernateField(hibernateProperties, field, valid, save, false)
+                                                        
+table-save-button(valid, save, false)
+                                                        
+error-feedback(unique, 'ignitePropertyUnique', tipUnique)
+                                                        +error-feedback(prop, 
'ignitePropertyValueSpecified', tipPropertySpecified)
+
+                                        .group-content(ng-repeat='field in 
group.add')
+                                            -var field = 'new'
+                                            -var valid = 
'form[ngModelName].$valid'
+                                            -var unique = 
'form[ngModelName].$error.ignitePropertyUnique'
+                                            -var prop = 
'form[ngModelName].$error.ignitePropertyValueSpecified'
+                                            -var save = hibernateProperties + 
'.push(' + field + ')'
+
+                                            ignite-form-field(type='internal' 
name='Hibernate property')
+                                                
+hibernateField(hibernateProperties, field, valid, save, true)
+                                                    +table-save-button(valid, 
save, true)
+                                                    +error-feedback(unique, 
'ignitePropertyUnique', tipUnique)
+                                                    +error-feedback(prop, 
'ignitePropertyValueSpecified', tipPropertySpecified)
+                                        
.group-content-empty(ng-if='!(#{hibernateProperties}.length) && 
!group.add.length')
+                                            | Not defined
+
+                .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.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', '1',
+                                    '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', '1',
+                                    '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/eb5ac0ae/modules/web-console/src/main/js/app/modules/states/configuration/clusters/atomic.directive.js
----------------------------------------------------------------------
diff --git 
a/modules/web-console/src/main/js/app/modules/states/configuration/clusters/atomic.directive.js
 
b/modules/web-console/src/main/js/app/modules/states/configuration/clusters/atomic.directive.js
new file mode 100644
index 0000000..062a527
--- /dev/null
+++ 
b/modules/web-console/src/main/js/app/modules/states/configuration/clusters/atomic.directive.js
@@ -0,0 +1,27 @@
+/*
+ * 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.
+ */
+
+import template from './atomic.jade!';
+
+export default ['igniteConfigurationClustersAtomic', [() => {
+    return {
+        scope: true,
+        restrict: 'E',
+        template,
+        replace: true
+    };
+}]];

http://git-wip-us.apache.org/repos/asf/ignite/blob/eb5ac0ae/modules/web-console/src/main/js/app/modules/states/configuration/clusters/atomic.jade
----------------------------------------------------------------------
diff --git 
a/modules/web-console/src/main/js/app/modules/states/configuration/clusters/atomic.jade
 
b/modules/web-console/src/main/js/app/modules/states/configuration/clusters/atomic.jade
new file mode 100644
index 0000000..3927b72
--- /dev/null
+++ 
b/modules/web-console/src/main/js/app/modules/states/configuration/clusters/atomic.jade
@@ -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.jade
+
+-var form = 'atomics'
+-var model = 'backupItem.atomicConfiguration'
+
+form.panel.panel-default(name=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
+        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-if='!(#{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/eb5ac0ae/modules/web-console/src/main/js/app/modules/states/configuration/clusters/binary.directive.js
----------------------------------------------------------------------
diff --git 
a/modules/web-console/src/main/js/app/modules/states/configuration/clusters/binary.directive.js
 
b/modules/web-console/src/main/js/app/modules/states/configuration/clusters/binary.directive.js
new file mode 100644
index 0000000..68c8dcb
--- /dev/null
+++ 
b/modules/web-console/src/main/js/app/modules/states/configuration/clusters/binary.directive.js
@@ -0,0 +1,27 @@
+/*
+ * 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.
+ */
+
+import template from './binary.jade!';
+
+export default ['igniteConfigurationClustersBinary', [() => {
+    return {
+        scope: true,
+        restrict: 'E',
+        template,
+        replace: true
+    };
+}]];

http://git-wip-us.apache.org/repos/asf/ignite/blob/eb5ac0ae/modules/web-console/src/main/js/app/modules/states/configuration/clusters/binary.jade
----------------------------------------------------------------------
diff --git 
a/modules/web-console/src/main/js/app/modules/states/configuration/clusters/binary.jade
 
b/modules/web-console/src/main/js/app/modules/states/configuration/clusters/binary.jade
new file mode 100644
index 0000000..37e7559
--- /dev/null
+++ 
b/modules/web-console/src/main/js/app/modules/states/configuration/clusters/binary.jade
@@ -0,0 +1,100 @@
+//-
+    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'
+
+//- Mixin for java name field with enabled condition.
+mixin binary-types-java-class(lbl, model, name, enabled, required, remove, 
autofocus, tip)
+    -var errLbl = lbl.substring(0, lbl.length - 1)
+
+    ignite-form-field
+        ignite-form-field-label
+            | #{lbl}
+        ignite-form-field-tooltip
+            | !{tip}
+        if (remove)
+            +table-remove-button(types, 'Remove type configuration')
+        ignite-form-field-input-text(
+            data-id='{{#{name}}}'
+            data-name='{{#{name}}}'
+            data-ng-model=model
+            data-ng-disabled='!(#{enabled})'
+            data-ng-required=required
+            data-placeholder='Enter fully qualified class name'
+
+            data-ignite-form-field-input-autofocus=autofocus
+
+            data-java-identifier='true'
+            data-java-package-specified='true'
+            data-java-keywords='true'
+            data-java-built-in-class='true'
+        )
+            +error-feedback('form[ngModelName].$error.javaBuiltInClass', 
'javaBuiltInClass', lbl + ' should not be the Java built-in class!', '{{' + 
name + '}}')
+            +error-feedback('form[ngModelName].$error.javaKeywords', 
'javaKeywords', lbl + ' could not contains reserved Java keyword!', '{{' + name 
+ '}}')
+            +error-feedback('form[ngModelName].$error.javaPackageSpecified', 
'javaPackageSpecified', lbl + ' does not have package specified!', '{{' + name 
+ '}}')
+            +error-feedback('form[ngModelName].$error.javaIdentifier', 
'javaIdentifier', lbl + ' is invalid Java identifier!', '{{' + name + '}}')
+
+form.panel.panel-default(name=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 for Ignite Binary Objects
+        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(ng-form='#{form}TypeConfigurations' 
ng-model='#{types}')
+                        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='type in #{types} track by 
$index')
+                            hr(ng-if='$index !== 0')
+                            .settings-row
+                                +binary-types-java-class('Type name:', 
'type.typeName', '"typeName" + $index', 'true', 'true', true, 'true', 'Type 
name')
+                            .settings-row
+                                +binary-types-java-class('ID mapper:', 
'type.idMapper', '"idMapper" + $index', 'true', 'false', false, '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] allows to override the automatically generated hash 
code IDs for the type and field names')
+                            .settings-row
+                                +binary-types-java-class('Name mapper:', 
'type.nameMapper', '"nameMapper" + $index', 'true', 'false', false, 'false', 
'Maps type/class and field names to different names')
+                            .settings-row
+                                +binary-types-java-class('Serializer:', 
'type.serializer', '"serializer" + $index', 'true', 'false', false, 'false', 
'Class with custom serialization logic for binary object')
+                            .settings-row
+                                +checkbox('Enum', 'type.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/eb5ac0ae/modules/web-console/src/main/js/app/modules/states/configuration/clusters/communication.directive.js
----------------------------------------------------------------------
diff --git 
a/modules/web-console/src/main/js/app/modules/states/configuration/clusters/communication.directive.js
 
b/modules/web-console/src/main/js/app/modules/states/configuration/clusters/communication.directive.js
new file mode 100644
index 0000000..5203a9e
--- /dev/null
+++ 
b/modules/web-console/src/main/js/app/modules/states/configuration/clusters/communication.directive.js
@@ -0,0 +1,27 @@
+/*
+ * 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.
+ */
+
+import template from './communication.jade!';
+
+export default ['igniteConfigurationClustersCommunication', [() => {
+    return {
+        scope: true,
+        restrict: 'E',
+        template,
+        replace: true
+    };
+}]];

http://git-wip-us.apache.org/repos/asf/ignite/blob/eb5ac0ae/modules/web-console/src/main/js/app/modules/states/configuration/clusters/communication.jade
----------------------------------------------------------------------
diff --git 
a/modules/web-console/src/main/js/app/modules/states/configuration/clusters/communication.jade
 
b/modules/web-console/src/main/js/app/modules/states/configuration/clusters/communication.jade
new file mode 100644
index 0000000..5d8ed10
--- /dev/null
+++ 
b/modules/web-console/src/main/js/app/modules/states/configuration/clusters/communication.jade
@@ -0,0 +1,90 @@
+//-
+    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 = 'communication'
+-var model = 'backupItem'
+-var communication = model + '.communication'
+
+form.panel.panel-default(name=form novalidate)
+    .panel-heading(bs-collapse-toggle ng-click='ui.loadPanel("#{form}")')
+        ignite-form-panel-chevron
+        label Communication
+        ignite-form-field-tooltip.tipLabel
+            | Cluster communication network properties
+        ignite-form-revert
+    .panel-collapse(role='tabpanel' bs-collapse-target id=form)
+        .panel-body(ng-if='ui.isPanelLoaded("#{form}")')
+            .col-sm-6
+                .settings-row
+                    +number('Timeout:', model + '.networkTimeout', 
'commNetworkTimeout', 'true', '5000', '1', 'Maximum timeout in milliseconds for 
network requests')
+                .settings-row
+                    +number('Send retry delay:', model + 
'.networkSendRetryDelay', 'networkSendRetryDelay', 'true', '1000', '1', 
'Interval in milliseconds between message send retries')
+                .settings-row
+                    +number('Send retry count:', model + 
'.networkSendRetryCount', 'networkSendRetryCount', 'true', '3', '1', 'Message 
send retries count')
+                .settings-row
+                    +number('Discovery startup delay:', model + 
'.discoveryStartupDelay', 'discoveryStartupDelay', 'true', '60000', '1', 'This 
value is used to expire messages from waiting list whenever node discovery 
discrepancies happen')
+                .settings-row
+                    +java-class('Communication listener:', communication + 
'.listener', 'comListener', 'true', 'false', 'Communication listener')
+                .settings-row
+                    +text-ip-address('Local IP address:', communication + 
'.localAddress', 'comLocalAddress', 'true', '228.1.2.4', 'Local host address 
for socket binding')
+                .settings-row
+                    +number-min-max('Local port:', communication + 
'.localPort', 'comLocalPort', 'true', '47100', '1024', '65535', 'Local port for 
socket binding')
+                .settings-row
+                    +number('Local port range:', communication + 
'.localPortRange', 'comLocalPortRange', 'true', '100', '1', 'Local port range 
for local host ports')
+                .settings-row
+                    +number-min-max('Shared memory port:', communication + 
'.sharedMemoryPort', 'sharedMemoryPort', 'true', '48100', '-1', '65535',
+                        'Local port to accept shared memory connections<br/>\
+                        If set to #[b -1] shared memory communication will be 
disabled')
+                .settings-row
+                    +checkbox('Direct buffer', communication + 
'.directBuffer', 'directBuffer',
+                        'If value is true, then SPI will use 
ByteBuffer.allocateDirect(int) call<br/>\
+                        Otherwise, SPI will use ByteBuffer.allocate(int) 
call.')
+                .settings-row
+                    +checkbox('Direct send buffer', communication + 
'.directSendBuffer', 'directSendBuffer', 'Flag defining whether direct send 
buffer should be used')
+                .settings-row
+                    +number('Idle connection timeout:', communication + 
'.idleConnectionTimeout', 'idleConnectionTimeout', 'true', '30000', '1',
+                        'Maximum idle connection timeout upon which a 
connection to client will be closed')
+                .settings-row
+                    +number('Connect timeout:', communication + 
'.connectTimeout', 'connectTimeout', 'true', '5000', '0', 'Connect timeout used 
when establishing connection with remote nodes')
+                .settings-row
+                    +number('Maximum connect timeout:', communication + 
'.maxConnectTimeout', 'maxConnectTimeout', 'true', '600000', '0', 'Maximum 
connect timeout')
+                .settings-row
+                    +number('Reconnect count:', communication + 
'.reconnectCount', 'comReconnectCount', 'true', '10', '1',
+                        'Maximum number of reconnect attempts used when 
establishing connection with remote nodes')
+                .settings-row
+                    +number('Socket send buffer:', communication + 
'.socketSendBuffer', 'socketSendBuffer', 'true', '32768', '0', 'Send buffer 
size for sockets created or accepted by this SPI')
+                .settings-row
+                    +number('Socket receive buffer:', communication + 
'.socketReceiveBuffer', 'socketReceiveBuffer', 'true', '32768', '0', 'Receive 
buffer size for sockets created or accepted by this SPI')
+                .settings-row
+                    +number('Message queue limit:', communication + 
'.messageQueueLimit', 'messageQueueLimit', 'true', '1024', '0', 'Message queue 
limit for incoming and outgoing messages')
+                .settings-row
+                    +number('Slow client queue limit:', communication + 
'.slowClientQueueLimit', 'slowClientQueueLimit', 'true', '0', '0', 'Slow client 
queue limit')
+                .settings-row
+                    +checkbox('TCP_NODELAY option', communication + 
'.tcpNoDelay', 'tcpNoDelay', 'Value for TCP_NODELAY socket option')
+                .settings-row
+                    +number('Ack send threshold:', communication + 
'.ackSendThreshold', 'ackSendThreshold', 'true', '16', '1', 'Number of received 
messages per connection to node after which acknowledgment message is sent')
+                .settings-row
+                    +number('Unacknowledged messages:', communication + 
'.unacknowledgedMessagesBufferSize', 'unacknowledgedMessagesBufferSize', 
'true', '0', '0', 'Maximum number of stored unacknowledged messages per 
connection to node')
+                .settings-row
+                    +number('Socket write timeout:', communication + 
'.socketWriteTimeout', 'socketWriteTimeout', 'true', '2000', '0', 'Socket write 
timeout')
+                .settings-row
+                    +number('Selectors count:', communication + 
'.selectorsCount', 'selectorsCount', 'true', 'min(4, availableProcessors)', 
'1', 'Count of selectors te be used in TCP server')
+                .settings-row
+                    +java-class('Address resolver:', communication + 
'.addressResolver', 'comAddressResolver', 'true', 'false', 'Address resolver')
+            .col-sm-6
+                +preview-xml-java(model, 'clusterCommunication')

http://git-wip-us.apache.org/repos/asf/ignite/blob/eb5ac0ae/modules/web-console/src/main/js/app/modules/states/configuration/clusters/connector.directive.js
----------------------------------------------------------------------
diff --git 
a/modules/web-console/src/main/js/app/modules/states/configuration/clusters/connector.directive.js
 
b/modules/web-console/src/main/js/app/modules/states/configuration/clusters/connector.directive.js
new file mode 100644
index 0000000..6c085b6
--- /dev/null
+++ 
b/modules/web-console/src/main/js/app/modules/states/configuration/clusters/connector.directive.js
@@ -0,0 +1,27 @@
+/*
+ * 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.
+ */
+
+import template from './connector.jade!';
+
+export default ['igniteConfigurationClustersConnector', [() => {
+    return {
+        scope: true,
+        restrict: 'E',
+        template,
+        replace: true
+    };
+}]];

http://git-wip-us.apache.org/repos/asf/ignite/blob/eb5ac0ae/modules/web-console/src/main/js/app/modules/states/configuration/clusters/connector.jade
----------------------------------------------------------------------
diff --git 
a/modules/web-console/src/main/js/app/modules/states/configuration/clusters/connector.jade
 
b/modules/web-console/src/main/js/app/modules/states/configuration/clusters/connector.jade
new file mode 100644
index 0000000..95f6bb3
--- /dev/null
+++ 
b/modules/web-console/src/main/js/app/modules/states/configuration/clusters/connector.jade
@@ -0,0 +1,103 @@
+//-
+    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 = 'connector'
+-var model = 'backupItem.connector'
+-var enabled = model + '.enabled'
+-var sslEnabled = enabled + ' && ' + model + '.sslEnabled'
+
+form.panel.panel-default(name=form novalidate)
+    .panel-heading(bs-collapse-toggle ng-click='ui.loadPanel("#{form}")')
+        ignite-form-panel-chevron
+        label Connector configuration
+        ignite-form-field-tooltip.tipLabel
+            | REST access configuration
+        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('Enabled', enabled, 'restEnabled', 'Flag 
indicating whether to configure connector configuration')
+                .settings-row
+                    +text-enabled('Jetty configuration path:', model + 
'.jettyPath', 'connectorJettyPath', enabled, 'false', 'Input path to Jetty 
configuration',
+                        'Path, either absolute or relative to IGNITE_HOME, to 
Jetty XML configuration file<br/>\
+                        Jetty is used to support REST over HTTP protocol for 
accessing Ignite APIs remotely<br/>\
+                        If not provided, Jetty instance with default 
configuration will be started picking IgniteSystemProperties.IGNITE_JETTY_HOST 
and IgniteSystemProperties.IGNITE_JETTY_PORT as host and port respectively')
+                .settings-row
+                    +text-ip-address('TCP host:', model + '.host', 
'connectorHost', enabled, 'IgniteConfiguration#getLocalHost()',
+                        'Host for TCP binary protocol server<br/>\
+                        This can be either an IP address or a domain name<br/>\
+                        If not defined, system - wide local address will be 
used IgniteConfiguration#getLocalHost()<br/>\
+                        You can also use "0.0.0.0" value to bind to all 
locally - available IP addresses')
+                .settings-row
+                    +number-min-max('TCP port:', model + '.port', 
'connectorPort', enabled, '11211', '1024', '65535', 'Port for TCP binary 
protocol server')
+                .settings-row
+                    +number('TCP port range:', model + '.portRange', 
'connectorPortRange', enabled, '100', '1', 'Number of ports for TCP binary 
protocol server to try if configured port is already in use')
+                .settings-row
+                    +number('Idle query cursor timeout:', model + 
'.idleQueryCursorTimeout', 'connectorIdleQueryCursorTimeout', enabled, 
'600000', '0',
+                        'Reject open query cursors that is not used 
timeout<br/>\
+                        If no fetch query request come within idle timeout, it 
will be removed on next check for old query cursors')
+                .settings-row
+                    +number('Idle query cursor check frequency:', model + 
'.idleQueryCursorCheckFrequency', 'connectorIdleQueryCursorCheckFrequency', 
enabled, '60000', '0',
+                        'Idle query cursors check frequency<br/>\
+                        This setting is used to reject open query cursors that 
is not used')
+                .settings-row
+                    +number('Idle timeout:', model + '.idleTimeout', 
'connectorIdleTimeout', enabled, '7000', '0',
+                        'Idle timeout for REST server<br/>\
+                        This setting is used to reject half - opened 
sockets<br/>\
+                        If no packets come within idle timeout, the connection 
is closed')
+                .settings-row
+                    +number('Receive buffer size:', model + 
'.receiveBufferSize', 'connectorReceiveBufferSize', enabled, '32768', '0', 
'REST TCP server receive buffer size')
+                .settings-row
+                    +number('Send buffer size:', model + '.sendBufferSize', 
'connectorSendBufferSize', enabled, '32768', '0', 'REST TCP server send buffer 
size')
+                .settings-row
+                    +number('Send queue limit:', model + '.sendQueueLimit', 
'connectorSendQueueLimit', enabled, 'unlimited', '0',
+                        'REST TCP server send queue limit<br/>\
+                        If the limit exceeds, all successive writes will block 
until the queue has enough capacity')
+                .settings-row
+                    +checkbox-enabled('Direct buffer', model + 
'.directBuffer', 'connectorDirectBuffer', enabled,
+                        'Flag indicating whether REST TCP server should use 
direct buffers<br/>\
+                        A direct buffer is a buffer that is allocated and 
accessed using native system calls, without using JVM heap<br/>\
+                        Enabling direct buffer may improve performance and 
avoid memory issues(long GC pauses due to huge buffer size)')
+                .settings-row
+                    +checkbox-enabled('TCP_NODELAY option', model + 
'.noDelay', 'connectorNoDelay', enabled,
+                        'Flag indicating whether TCP_NODELAY option should be 
set for accepted client connections<br/>\
+                        Setting this option reduces network latency and should 
be enabled in majority of cases<br/>\
+                        For more information, see 
Socket#setTcpNoDelay(boolean)')
+                .settings-row
+                    +number('Selector count:', model + '.selectorCount', 
'connectorSelectorCount', enabled, 'min(4, availableProcessors)', '1',
+                        'Number of selector threads in REST TCP server<br/>\
+                        Higher value for this parameter may increase 
throughput, but also increases context switching')
+                .settings-row
+                    +number('Thread pool size:', model + '.threadPoolSize', 
'connectorThreadPoolSize', enabled, 'max(8, availableProcessors) * 2', '1',
+                        'Thread pool size to use for processing of client 
messages (REST requests)')
+                .settings-row
+                    +java-class('Message interceptor:', model + 
'.messageInterceptor', 'connectorMessageInterceptor', enabled, 'false',
+                        'Interceptor allows to transform all objects exchanged 
via REST protocol<br/>\
+                        For example if you use custom serialisation on client 
you can write interceptor to transform binary representations received from 
client to Java objects and later access them from java code directly')
+                .settings-row
+                    +text-enabled('Secret key:', model + '.secretKey', 
'connectorSecretKey', enabled, 'false', 'Specify to enable authentication', 
'Secret key to authenticate REST requests')
+                .settings-row
+                    +checkbox-enabled('Enable SSL', model + '.sslEnabled', 
'connectorSslEnabled', enabled, 'Enables/disables SSL for REST TCP binary 
protocol')
+                .settings-row
+                    +checkbox-enabled('Enable SSL client auth', model + 
'.sslClientAuth', 'connectorSslClientAuth', sslEnabled, 'Flag indicating 
whether or not SSL client authentication is required')
+                .settings-row
+                    +java-class('SSL factory:', model + '.sslFactory', 
'connectorSslFactory', sslEnabled, sslEnabled,
+                        'Instance of Factory that will be used to create an 
instance of SSLContext for Secure Socket Layer on TCP binary protocol')
+            .col-sm-6
+                +preview-xml-java(model, 'clusterConnector')

http://git-wip-us.apache.org/repos/asf/ignite/blob/eb5ac0ae/modules/web-console/src/main/js/app/modules/states/configuration/clusters/deployment.directive.js
----------------------------------------------------------------------
diff --git 
a/modules/web-console/src/main/js/app/modules/states/configuration/clusters/deployment.directive.js
 
b/modules/web-console/src/main/js/app/modules/states/configuration/clusters/deployment.directive.js
new file mode 100644
index 0000000..bc71379
--- /dev/null
+++ 
b/modules/web-console/src/main/js/app/modules/states/configuration/clusters/deployment.directive.js
@@ -0,0 +1,27 @@
+/*
+ * 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.
+ */
+
+import template from './deployment.jade!';
+
+export default ['igniteConfigurationClustersDeployment', [() => {
+    return {
+        scope: true,
+        restrict: 'E',
+        template,
+        replace: true
+    };
+}]];

Reply via email to