Repository: ignite Updated Branches: refs/heads/ignite-843-rc2 da50f0c6c -> 539f819c3
IGNITE-2033 Completed base refactoring - Fixes #306. Signed-off-by: Andrey <anovi...@gridgain.com> Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/539f819c Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/539f819c Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/539f819c Branch: refs/heads/ignite-843-rc2 Commit: 539f819c31f240607f4486b9a84f322f185c617f Parents: da50f0c Author: Dmitriyff <dmitri...@gmail.com> Authored: Wed Dec 9 14:56:03 2015 +0700 Committer: Andrey <anovi...@gridgain.com> Committed: Wed Dec 9 14:56:03 2015 +0700 ---------------------------------------------------------------------- .../src/main/js/app/data/os.json | 4 + .../app/directives/loading/loading.directive.js | 27 ++ .../main/js/app/directives/loading/loading.jade | 18 ++ .../ui-ace-docker/ui-ace-docker.controller.js | 43 +++ .../ui-ace-docker/ui-ace-docker.directive.js | 37 +++ .../directives/ui-ace-docker/ui-ace-docker.jade | 35 +++ .../ui-ace-java/ui-ace-java.controller.js | 58 ++++ .../ui-ace-java/ui-ace-java.directive.js | 33 +++ .../app/directives/ui-ace-java/ui-ace-java.jade | 28 ++ .../ui-ace-pojos/ui-ace-pojos.controller.js | 89 ++++++ .../ui-ace-pojos/ui-ace-pojos.directive.js | 37 +++ .../directives/ui-ace-pojos/ui-ace-pojos.jade | 33 +++ .../ui-ace-pom/ui-ace-pom.controller.js | 40 +++ .../ui-ace-pom/ui-ace-pom.directive.js | 32 ++ .../app/directives/ui-ace-pom/ui-ace-pom.jade | 17 ++ .../ui-ace-xml/ui-ace-xml.controller.js | 38 +++ .../ui-ace-xml/ui-ace-xml.directive.js | 33 +++ .../app/directives/ui-ace-xml/ui-ace-xml.jade | 17 ++ .../js/app/filters/hasPojo/hasPojo.filter.js | 26 ++ .../control-center-web/src/main/js/app/index.js | 37 ++- .../app/modules/states/configuration/index.js | 16 +- .../configuration/summary/summary.controller.js | 133 +++++++++ .../configuration/summary/summary.resource.js | 41 +++ .../main/js/app/services/UiAceOnLoad/service.js | 36 +++ .../control-center-web/src/main/js/config.js | 1 + .../main/js/controllers/summary-controller.js | 293 ------------------- .../src/main/js/gulpfile.js/tasks/copy.js | 4 +- .../main/js/helpers/generator/generator-xml.js | 2 +- .../control-center-web/src/main/js/package.json | 1 + .../js/views/configuration/summary-tabs.jade | 2 +- .../main/js/views/configuration/summary.jade | 134 +++------ 31 files changed, 953 insertions(+), 392 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/539f819c/modules/control-center-web/src/main/js/app/data/os.json ---------------------------------------------------------------------- diff --git a/modules/control-center-web/src/main/js/app/data/os.json b/modules/control-center-web/src/main/js/app/data/os.json new file mode 100644 index 0000000..5b67c37 --- /dev/null +++ b/modules/control-center-web/src/main/js/app/data/os.json @@ -0,0 +1,4 @@ +[ + "debian:8", + "ubuntu:14.10" +] \ No newline at end of file http://git-wip-us.apache.org/repos/asf/ignite/blob/539f819c/modules/control-center-web/src/main/js/app/directives/loading/loading.directive.js ---------------------------------------------------------------------- diff --git a/modules/control-center-web/src/main/js/app/directives/loading/loading.directive.js b/modules/control-center-web/src/main/js/app/directives/loading/loading.directive.js new file mode 100644 index 0000000..7cb3769 --- /dev/null +++ b/modules/control-center-web/src/main/js/app/directives/loading/loading.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 './loading.jade!'; + +export default ['igniteLoading', [() => { + return { + restrict: 'E', + template, + replace: true, + transclude: true + } +}]] http://git-wip-us.apache.org/repos/asf/ignite/blob/539f819c/modules/control-center-web/src/main/js/app/directives/loading/loading.jade ---------------------------------------------------------------------- diff --git a/modules/control-center-web/src/main/js/app/directives/loading/loading.jade b/modules/control-center-web/src/main/js/app/directives/loading/loading.jade new file mode 100644 index 0000000..706c9bc --- /dev/null +++ b/modules/control-center-web/src/main/js/app/directives/loading/loading.jade @@ -0,0 +1,18 @@ +//- + 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. + +div(class='page-loading-overlay' dw-loading='loading' dw-loading-options='{text: $state.current.data.loading}') + div(ng-transclude='') http://git-wip-us.apache.org/repos/asf/ignite/blob/539f819c/modules/control-center-web/src/main/js/app/directives/ui-ace-docker/ui-ace-docker.controller.js ---------------------------------------------------------------------- diff --git a/modules/control-center-web/src/main/js/app/directives/ui-ace-docker/ui-ace-docker.controller.js b/modules/control-center-web/src/main/js/app/directives/ui-ace-docker/ui-ace-docker.controller.js new file mode 100644 index 0000000..906aa43 --- /dev/null +++ b/modules/control-center-web/src/main/js/app/directives/ui-ace-docker/ui-ace-docker.controller.js @@ -0,0 +1,43 @@ +/* + * 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 types from 'app/data/os.json!' + +export default ['$scope', 'IgniteUiAceOnLoad', function($scope, onLoad) { + var ctrl = this; + + // Scope values. + $scope.types = types; + + // Scope methods. + $scope.onLoad = onLoad; + + // Watchers definition. + let clusterWatcher = (value) => { + delete ctrl.data; + + if (!value) + return; + + // TODO IGNITE-2058: need move $generatorDocker to services. + ctrl.data = $generatorDocker.clusterDocker($scope.cluster, $scope.type); + }; + + // Setup watchers. + $scope.$watch('type', clusterWatcher); + $scope.$watch('cluster', clusterWatcher); +}] http://git-wip-us.apache.org/repos/asf/ignite/blob/539f819c/modules/control-center-web/src/main/js/app/directives/ui-ace-docker/ui-ace-docker.directive.js ---------------------------------------------------------------------- diff --git a/modules/control-center-web/src/main/js/app/directives/ui-ace-docker/ui-ace-docker.directive.js b/modules/control-center-web/src/main/js/app/directives/ui-ace-docker/ui-ace-docker.directive.js new file mode 100644 index 0000000..356cd2d --- /dev/null +++ b/modules/control-center-web/src/main/js/app/directives/ui-ace-docker/ui-ace-docker.directive.js @@ -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. + */ + +import template from './ui-ace-docker.jade!' +import controller from './ui-ace-docker.controller' + +export default ['igniteUiAceDocker', [() => { + + return { + restrict: 'E', + scope: { + cluster: '=', + data: '=ngModel' + }, + bindToController: { + cluster: '=', + data: '=ngModel' + }, + template, + controller, + controllerAs: 'ctrl' + } +}]] \ No newline at end of file http://git-wip-us.apache.org/repos/asf/ignite/blob/539f819c/modules/control-center-web/src/main/js/app/directives/ui-ace-docker/ui-ace-docker.jade ---------------------------------------------------------------------- diff --git a/modules/control-center-web/src/main/js/app/directives/ui-ace-docker/ui-ace-docker.jade b/modules/control-center-web/src/main/js/app/directives/ui-ace-docker/ui-ace-docker.jade new file mode 100644 index 0000000..cc153d7 --- /dev/null +++ b/modules/control-center-web/src/main/js/app/directives/ui-ace-docker/ui-ace-docker.jade @@ -0,0 +1,35 @@ +//- + 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. + +mixin hard-link(ref, txt) + a(style='color:#ec1c24' href=ref target='_blank') #{txt} + +div + .details-row + p + +hard-link('https://docs.docker.com/reference/builder', 'Docker') + | file is a text file with instructions to create Docker image.<br/> + | To build image you have to store following Docker file with your Ignite XML configuration to the same directory.<br> + | Also you could use predefined + +hard-link('https://ignite.apache.org/download.html#docker', 'Apache Ignite docker image') + | . For more information about using Ignite with Docker please read + +hard-link('http://apacheignite.readme.io/docs/docker-deployment', 'documentation') + |. + .col-xs-3.col-sm-2 + label(for='os') Operation System: + .col-xs-5.col-sm-4 + input#os.form-control(type='text' ng-model='type' placeholder='debian:8' data-min-length='0' data-html='1' data-auto-select='true' bs-typeahead retain-selection bs-options='os for os in types') + div(ui-ace='{onLoad: onLoad, mode: "dockerfile"}' ng-model='ctrl.data') http://git-wip-us.apache.org/repos/asf/ignite/blob/539f819c/modules/control-center-web/src/main/js/app/directives/ui-ace-java/ui-ace-java.controller.js ---------------------------------------------------------------------- diff --git a/modules/control-center-web/src/main/js/app/directives/ui-ace-java/ui-ace-java.controller.js b/modules/control-center-web/src/main/js/app/directives/ui-ace-java/ui-ace-java.controller.js new file mode 100644 index 0000000..f22ad5e --- /dev/null +++ b/modules/control-center-web/src/main/js/app/directives/ui-ace-java/ui-ace-java.controller.js @@ -0,0 +1,58 @@ +/* + * 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. + */ + +const SNIPPET = 1; +const FACTORY = 2; + +const SERVER_CFG = 'ServerConfigurationFactory'; +const CLIENT_CFG = 'ClientConfigurationFactory'; + +const TYPES = [ + {value: SNIPPET, label: 'snippet'}, + {value: FACTORY, label: 'factory class'} +]; + +export default ['$scope', 'IgniteUiAceOnLoad', function($scope, onLoad) { + var ctrl = this; + + // Scope values. + $scope.type = SNIPPET; + + // Scope data. + $scope.types = TYPES; + + // Scope methods. + $scope.onLoad = onLoad; + + // watchers definition + let clusterWatcher = (value) => { + delete ctrl.data; + + if (!value) + return; + + let type = $scope.type === FACTORY ? (!$scope.cfg ? SERVER_CFG : CLIENT_CFG) : false; + + // TODO IGNITE-2054: need move $generatorJava to services. + ctrl.data = $generatorJava.cluster($scope.cluster, 'factory', type, $scope.cfg); + }; + + // Setup watchers. + $scope.$watch('cfg', clusterWatcher, true); + $scope.$watch('type', clusterWatcher); + $scope.$watch('cluster', clusterWatcher); +}] http://git-wip-us.apache.org/repos/asf/ignite/blob/539f819c/modules/control-center-web/src/main/js/app/directives/ui-ace-java/ui-ace-java.directive.js ---------------------------------------------------------------------- diff --git a/modules/control-center-web/src/main/js/app/directives/ui-ace-java/ui-ace-java.directive.js b/modules/control-center-web/src/main/js/app/directives/ui-ace-java/ui-ace-java.directive.js new file mode 100644 index 0000000..1b41d13 --- /dev/null +++ b/modules/control-center-web/src/main/js/app/directives/ui-ace-java/ui-ace-java.directive.js @@ -0,0 +1,33 @@ +/* + * 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 './ui-ace-java.jade!' +import controller from './ui-ace-java.controller' + +export default ['igniteUiAceJava', [() => { + + return { + restrict: 'E', + scope: { + cluster: '=', + cfg: '=clusterCfg' + }, + template, + controller, + controllerAs: 'ctrl' + } +}]] \ No newline at end of file http://git-wip-us.apache.org/repos/asf/ignite/blob/539f819c/modules/control-center-web/src/main/js/app/directives/ui-ace-java/ui-ace-java.jade ---------------------------------------------------------------------- diff --git a/modules/control-center-web/src/main/js/app/directives/ui-ace-java/ui-ace-java.jade b/modules/control-center-web/src/main/js/app/directives/ui-ace-java/ui-ace-java.jade new file mode 100644 index 0000000..866e12a --- /dev/null +++ b/modules/control-center-web/src/main/js/app/directives/ui-ace-java/ui-ace-java.jade @@ -0,0 +1,28 @@ +//- + 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. + +div + .details-row + .col-xs-2.col-sm-2.col-md-1 + label Generate: + .col-xs-4.col-sm-3.col-md-3 + button.select-toggle.form-control( + data-bs-select + data-bs-options='item.value as item.label for item in types' + data-sort='false' + ng-model='type' + ) + div(ui-ace='{onLoad: onLoad, mode: "java"}' ng-model='ctrl.data') http://git-wip-us.apache.org/repos/asf/ignite/blob/539f819c/modules/control-center-web/src/main/js/app/directives/ui-ace-pojos/ui-ace-pojos.controller.js ---------------------------------------------------------------------- diff --git a/modules/control-center-web/src/main/js/app/directives/ui-ace-pojos/ui-ace-pojos.controller.js b/modules/control-center-web/src/main/js/app/directives/ui-ace-pojos/ui-ace-pojos.controller.js new file mode 100644 index 0000000..dc9c81e --- /dev/null +++ b/modules/control-center-web/src/main/js/app/directives/ui-ace-pojos/ui-ace-pojos.controller.js @@ -0,0 +1,89 @@ +/* + * 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. + */ + +export default ['$scope', 'IgniteUiAceOnLoad', function($scope, onLoad) { + var ctrl = this; + + // Scope methods. + $scope.onLoad = onLoad; + + // Watchers definition. + // Watcher clean instance data if instance to cluster caches was change + let cleanMetadatas = (value) => { + delete ctrl.class; + delete ctrl.metadatas; + delete ctrl.classes; + }; + + // Watcher updata metadata when changes caches and checkers useConstructor and includeKeyFields + let updateMetadatas = (value) => { + delete ctrl.metadatas; + + if (!ctrl.cluster || !ctrl.cluster.caches) + return; + + // TODO IGNITE-2054: need move $generatorJava to services. + ctrl.metadatas = $generatorJava.pojos(ctrl.cluster.caches, ctrl.useConstructor, ctrl.includeKeyFields); + }; + + // Watcher update classes after + let updateClasses = (value) => { + delete ctrl.classes; + + if (!value) + return; + + let classes = ctrl.classes = []; + + _.forEach(ctrl.metadatas, (meta) => { + classes.push(meta.keyType); + classes.push(meta.valueType); + }); + }; + + // Update pojos class. + let updateClass = (value) => { + if (!value || !ctrl.metadatas.length) + return; + + ctrl.class = ctrl.class || ctrl.metadatas[0].keyType || ctrl.metadatas[0].valueType; + }; + + // Update pojos data. + let updatePojosData = (value) => { + if (!value) + return; + + _.forEach(ctrl.metadatas, (meta) => { + if (meta.keyType === ctrl.class) + return ctrl.data = meta.keyClass; + + if (meta.valueType === ctrl.class) + return ctrl.data = meta.valueClass; + }) + }; + + // Setup watchers. Watchers order is important. + $scope.$watch('ctrl.cluster.caches', cleanMetadatas); + $scope.$watch('ctrl.cluster.caches', updateMetadatas); + $scope.$watch('ctrl.cluster.caches', updateClasses); + $scope.$watch('ctrl.useConstructor', updateMetadatas); + $scope.$watch('ctrl.includeKeyFields', updateMetadatas); + $scope.$watch('ctrl.metadatas', updateClass); + $scope.$watch('ctrl.metadatas', updatePojosData); + $scope.$watch('ctrl.class', updatePojosData); +}]; http://git-wip-us.apache.org/repos/asf/ignite/blob/539f819c/modules/control-center-web/src/main/js/app/directives/ui-ace-pojos/ui-ace-pojos.directive.js ---------------------------------------------------------------------- diff --git a/modules/control-center-web/src/main/js/app/directives/ui-ace-pojos/ui-ace-pojos.directive.js b/modules/control-center-web/src/main/js/app/directives/ui-ace-pojos/ui-ace-pojos.directive.js new file mode 100644 index 0000000..3a274e4 --- /dev/null +++ b/modules/control-center-web/src/main/js/app/directives/ui-ace-pojos/ui-ace-pojos.directive.js @@ -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. + */ + +import template from './ui-ace-pojos.jade!' +import controller from './ui-ace-pojos.controller' + +export default ['igniteUiAcePojos', [() => { + + return { + restrict: 'E', + scope: { + cluster: '=', + metadatas: '=ngModel' + }, + bindToController: { + cluster: '=', + metadatas: '=ngModel' + }, + template, + controller, + controllerAs: 'ctrl' + } +}]] \ No newline at end of file http://git-wip-us.apache.org/repos/asf/ignite/blob/539f819c/modules/control-center-web/src/main/js/app/directives/ui-ace-pojos/ui-ace-pojos.jade ---------------------------------------------------------------------- diff --git a/modules/control-center-web/src/main/js/app/directives/ui-ace-pojos/ui-ace-pojos.jade b/modules/control-center-web/src/main/js/app/directives/ui-ace-pojos/ui-ace-pojos.jade new file mode 100644 index 0000000..9f4a1db --- /dev/null +++ b/modules/control-center-web/src/main/js/app/directives/ui-ace-pojos/ui-ace-pojos.jade @@ -0,0 +1,33 @@ +//- + 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. + +div + .details-row + .col-xs-2.col-sm-2.col-md-2 + label POJO class: + .col-xs-10.col-sm-10.col-md-10.summary-pojo-list + button.select-toggle.form-control(ng-model='ctrl.class' bs-select bs-options='item for item in ctrl.classes' data-container='') + .col-xs-2.col-sm-2.col-md-2 + label + .col-xs-10.col-sm-10.col-md-10 + input(type='checkbox' ng-model='ctrl.useConstructor') + | Generate constructors + .col-xs-2.col-sm-2.col-md-2 + label + .col-xs-10.col-sm-10.col-md-10 + input(type='checkbox' ng-model='ctrl.includeKeyFields') + | Include key fields + div(ui-ace='{onLoad: onLoad, mode: "java"}' ng-model='ctrl.data') http://git-wip-us.apache.org/repos/asf/ignite/blob/539f819c/modules/control-center-web/src/main/js/app/directives/ui-ace-pom/ui-ace-pom.controller.js ---------------------------------------------------------------------- diff --git a/modules/control-center-web/src/main/js/app/directives/ui-ace-pom/ui-ace-pom.controller.js b/modules/control-center-web/src/main/js/app/directives/ui-ace-pom/ui-ace-pom.controller.js new file mode 100644 index 0000000..639d0f3 --- /dev/null +++ b/modules/control-center-web/src/main/js/app/directives/ui-ace-pom/ui-ace-pom.controller.js @@ -0,0 +1,40 @@ +/* + * 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. + */ + +// TODO IGNITE-2055: use set version. +const igniteVersion = '1.5.0'; + +export default ['$scope', 'IgniteUiAceOnLoad', function($scope, onLoad) { + var ctrl = this; + + // Scope methods. + $scope.onLoad = onLoad; + + // Watchers definition. + let clusterWatcher = (value) => { + delete ctrl.data; + + if (!value) + return; + + // TODO IGNITE-2053: need move $generatorPom to services. + ctrl.data = $generatorPom.pom($scope.cluster, igniteVersion).asString(); + }; + + // Setup watchers. + $scope.$watch('cluster', clusterWatcher); +}] http://git-wip-us.apache.org/repos/asf/ignite/blob/539f819c/modules/control-center-web/src/main/js/app/directives/ui-ace-pom/ui-ace-pom.directive.js ---------------------------------------------------------------------- diff --git a/modules/control-center-web/src/main/js/app/directives/ui-ace-pom/ui-ace-pom.directive.js b/modules/control-center-web/src/main/js/app/directives/ui-ace-pom/ui-ace-pom.directive.js new file mode 100644 index 0000000..3aad559 --- /dev/null +++ b/modules/control-center-web/src/main/js/app/directives/ui-ace-pom/ui-ace-pom.directive.js @@ -0,0 +1,32 @@ +/* + * 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 './ui-ace-pom.jade!' +import controller from './ui-ace-pom.controller' + +export default ['igniteUiAcePom', [() => { + + return { + restrict: 'E', + scope: { + cluster: '=' + }, + template, + controller, + controllerAs: 'ctrl' + } +}]] \ No newline at end of file http://git-wip-us.apache.org/repos/asf/ignite/blob/539f819c/modules/control-center-web/src/main/js/app/directives/ui-ace-pom/ui-ace-pom.jade ---------------------------------------------------------------------- diff --git a/modules/control-center-web/src/main/js/app/directives/ui-ace-pom/ui-ace-pom.jade b/modules/control-center-web/src/main/js/app/directives/ui-ace-pom/ui-ace-pom.jade new file mode 100644 index 0000000..eb023d7 --- /dev/null +++ b/modules/control-center-web/src/main/js/app/directives/ui-ace-pom/ui-ace-pom.jade @@ -0,0 +1,17 @@ +//- + 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. + +div(ui-ace='{onLoad: onLoad, mode: "xml"}' ng-model='ctrl.data') \ No newline at end of file http://git-wip-us.apache.org/repos/asf/ignite/blob/539f819c/modules/control-center-web/src/main/js/app/directives/ui-ace-xml/ui-ace-xml.controller.js ---------------------------------------------------------------------- diff --git a/modules/control-center-web/src/main/js/app/directives/ui-ace-xml/ui-ace-xml.controller.js b/modules/control-center-web/src/main/js/app/directives/ui-ace-xml/ui-ace-xml.controller.js new file mode 100644 index 0000000..6ba65cf --- /dev/null +++ b/modules/control-center-web/src/main/js/app/directives/ui-ace-xml/ui-ace-xml.controller.js @@ -0,0 +1,38 @@ +/* + * 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. + */ + +export default ['$scope', 'IgniteUiAceOnLoad', function($scope, onLoad) { + var ctrl = this; + + // Scope methods. + $scope.onLoad = onLoad; + + // Watchers definition. + let clusterWatcher = (value) => { + delete ctrl.data; + + if (!value) + return; + + // TODO IGNITE-2052: need move $generatorXml to services. + ctrl.data = $generatorXml.cluster($scope.cluster, $scope.cfg) + }; + + // Setup watchers. + $scope.$watch('cfg', clusterWatcher, true); + $scope.$watch('cluster', clusterWatcher); +}] http://git-wip-us.apache.org/repos/asf/ignite/blob/539f819c/modules/control-center-web/src/main/js/app/directives/ui-ace-xml/ui-ace-xml.directive.js ---------------------------------------------------------------------- diff --git a/modules/control-center-web/src/main/js/app/directives/ui-ace-xml/ui-ace-xml.directive.js b/modules/control-center-web/src/main/js/app/directives/ui-ace-xml/ui-ace-xml.directive.js new file mode 100644 index 0000000..fc98c3a --- /dev/null +++ b/modules/control-center-web/src/main/js/app/directives/ui-ace-xml/ui-ace-xml.directive.js @@ -0,0 +1,33 @@ +/* + * 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 './ui-ace-xml.jade!' +import controller from './ui-ace-xml.controller' + +export default ['igniteUiAceXml', [() => { + + return { + restrict: 'E', + scope: { + cluster: '=', + cfg: '=clusterCfg' + }, + template, + controller, + controllerAs: 'ctrl' + } +}]] \ No newline at end of file http://git-wip-us.apache.org/repos/asf/ignite/blob/539f819c/modules/control-center-web/src/main/js/app/directives/ui-ace-xml/ui-ace-xml.jade ---------------------------------------------------------------------- diff --git a/modules/control-center-web/src/main/js/app/directives/ui-ace-xml/ui-ace-xml.jade b/modules/control-center-web/src/main/js/app/directives/ui-ace-xml/ui-ace-xml.jade new file mode 100644 index 0000000..ba324ff --- /dev/null +++ b/modules/control-center-web/src/main/js/app/directives/ui-ace-xml/ui-ace-xml.jade @@ -0,0 +1,17 @@ +//- + 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. + +div(ui-ace='{onLoad: onLoad, mode: "xml"}' ng-model='ctrl.data') http://git-wip-us.apache.org/repos/asf/ignite/blob/539f819c/modules/control-center-web/src/main/js/app/filters/hasPojo/hasPojo.filter.js ---------------------------------------------------------------------- diff --git a/modules/control-center-web/src/main/js/app/filters/hasPojo/hasPojo.filter.js b/modules/control-center-web/src/main/js/app/filters/hasPojo/hasPojo.filter.js new file mode 100644 index 0000000..ff0e813 --- /dev/null +++ b/modules/control-center-web/src/main/js/app/filters/hasPojo/hasPojo.filter.js @@ -0,0 +1,26 @@ +/* + * 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. + */ + +export default ['hasPojo', [() => { + let filter = (cache) => { + return cache.metadatas && cache.metadatas.length; + }; + + return ({caches} = {}) => { + return caches && _.chain(caches).filter(filter).first().value(); + } +}]] http://git-wip-us.apache.org/repos/asf/ignite/blob/539f819c/modules/control-center-web/src/main/js/app/index.js ---------------------------------------------------------------------- diff --git a/modules/control-center-web/src/main/js/app/index.js b/modules/control-center-web/src/main/js/app/index.js index 4174425..087885c 100644 --- a/modules/control-center-web/src/main/js/app/index.js +++ b/modules/control-center-web/src/main/js/app/index.js @@ -69,17 +69,29 @@ import './modules/userbar/main' import './modules/configuration/sidebar/main' // endignite -// directives +// Directives. +import igniteLoading from './directives/loading/loading.directive' import igniteCallout from './directives/callout/callout.directive' import igniteCalloutCel from './directives/callout/callout-cel.directive' +import igniteUiAceXml from './directives/ui-ace-xml/ui-ace-xml.directive' +import igniteUiAceJava from './directives/ui-ace-java/ui-ace-java.directive' +import igniteUiAcePom from './directives/ui-ace-pom/ui-ace-pom.directive' +import igniteUiAceDocker from './directives/ui-ace-docker/ui-ace-docker.directive' +import igniteUiAcePojos from './directives/ui-ace-pojos/ui-ace-pojos.directive' + +// Services. +import IgniteUiAceOnLoad from './services/UiAceOnLoad/service' + +// Filters. +import hasPojo from './filters/hasPojo/hasPojo.filter' angular .module('ignite-console', [ 'ui.router', - // services + // Services. 'ignite-console.Auth', 'ignite-console.User', - // states + // States. 'ignite-console.states.login', 'ignite-console.states.logout', 'ignite-console.states.password', @@ -87,16 +99,26 @@ angular 'ignite-console.states.sql', 'ignite-console.states.profile', 'ignite-console.states.admin', - // + // Common modules. 'ignite-console.navbar', 'ignite-console.userbar', 'ignite-console.configuration.sidebar' ]) -// directives +// Directives. +.directive(...igniteLoading) .directive(...igniteCallout) .directive(...igniteCalloutCel) +.directive(...igniteUiAceXml) +.directive(...igniteUiAceJava) +.directive(...igniteUiAcePom) +.directive(...igniteUiAceDocker) +.directive(...igniteUiAcePojos) +// Services. +.service(...IgniteUiAceOnLoad) +// Filters. +.filter(...hasPojo) .config(['$stateProvider', '$locationProvider', '$urlRouterProvider', function($stateProvider, $locationProvider, $urlRouterProvider) { - // set up the states + // Set up the states. $stateProvider .state('base', { url: '', @@ -107,4 +129,7 @@ angular $urlRouterProvider.when('/', '/configuration/clusters'); $locationProvider.html5Mode(true); +}]) +.run(['$rootScope', '$state', ($root, $state) => { + $root.$state = $state; }]); http://git-wip-us.apache.org/repos/asf/ignite/blob/539f819c/modules/control-center-web/src/main/js/app/modules/states/configuration/index.js ---------------------------------------------------------------------- diff --git a/modules/control-center-web/src/main/js/app/modules/states/configuration/index.js b/modules/control-center-web/src/main/js/app/modules/states/configuration/index.js index 2ff47ca..e5a97fe 100644 --- a/modules/control-center-web/src/main/js/app/modules/states/configuration/index.js +++ b/modules/control-center-web/src/main/js/app/modules/states/configuration/index.js @@ -17,12 +17,17 @@ import angular from 'angular' +import ConfigurationSummaryCtrl from './summary/summary.controller' +import ConfigurationSummaryResource from './summary/summary.resource' + angular .module('ignite-console.states.configuration', [ 'ui.router' ]) +// Services. +.service(...ConfigurationSummaryResource) .config(['$stateProvider', function($stateProvider) { - // set up the states + // Setup the states. $stateProvider .state('base.configuration', { url: '/configuration', @@ -46,6 +51,11 @@ angular }) .state('base.configuration.summary', { url: '/summary', - templateUrl: '/configuration/summary.html' - }) + templateUrl: '/configuration/summary.html', + controller: ConfigurationSummaryCtrl, + controllerAs: 'ctrl', + data: { + loading: 'Loading summary screen...' + } + }) }]); http://git-wip-us.apache.org/repos/asf/ignite/blob/539f819c/modules/control-center-web/src/main/js/app/modules/states/configuration/summary/summary.controller.js ---------------------------------------------------------------------- diff --git a/modules/control-center-web/src/main/js/app/modules/states/configuration/summary/summary.controller.js b/modules/control-center-web/src/main/js/app/modules/states/configuration/summary/summary.controller.js new file mode 100644 index 0000000..e023c13 --- /dev/null +++ b/modules/control-center-web/src/main/js/app/modules/states/configuration/summary/summary.controller.js @@ -0,0 +1,133 @@ +/* + * 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. + */ + +export default [ + '$scope', '$http', '$common', '$loading', '$table', '$filter', 'ConfigurationSummaryResource', + function($scope, $http, $common, $loading, $table, $filter, Resource) { + let ctrl = this; + let igniteVersion = '1.5.0'; + + $loading.start('loading'); + + Resource.read().then(({clusters}) => { + $scope.clusters = clusters; + + $loading.finish('loading'); + + $scope.selectItem(clusters[0]); + }); + + $scope.panelExpanded = $common.panelExpanded; + $scope.tableVisibleRow = $table.tableVisibleRow; + $scope.joinTip = $common.joinTip; + $scope.getModel = $common.getModel; + $scope.widthIsSufficient = $common.widthIsSufficient; + + $scope.evictionPolicies = [ + {value: 'LRU', label: 'LRU'}, + {value: 'FIFO', label: 'FIFO'}, + {value: 'SORTED', label: 'Sorted'}, + {value: undefined, label: 'Not set'} + ]; + + $scope.tabsServer = { activeTab: 0 }; + $scope.tabsClient = { activeTab: 0 }; + + $scope.backupItem = {javaClassClient: 1}; + + $http.get('/models/summary.json') + .success(function (data) { + $scope.screenTip = data.screenTip; + $scope.moreInfo = data.moreInfo; + $scope.clientFields = data.clientFields; + }) + .error(function (errMsg) { + $common.showError(errMsg); + }); + + $scope.selectItem = (cluster) => { + delete ctrl.cluster; + + if (!cluster) + return; + + ctrl.cluster = cluster; + $scope.cluster = cluster; + $scope.selectedItem = cluster; + }; + + let updateTab = (cluster) => { + if (!cluster) + return; + + if (!$filter('hasPojo')(cluster) && $scope.tabsClient.activeTab === 3) + $scope.tabsClient.activeTab = 0; + }; + + $scope.$watch('cluster', updateTab); + + // TODO IGNITE-2114: implemented as indendent logic for download. + $scope.downloadConfiguration = function () { + var cluster = $scope.cluster; + var clientNearCfg = $scope.backupItem.nearConfiguration; + + var zip = new JSZip(); + + zip.file('Dockerfile', ctrl.data.docker); + + var builder = $generatorProperties.generateProperties(cluster); + + if (builder) + zip.file('src/main/resources/secret.properties', builder.asString()); + + var srcPath = 'src/main/java/'; + + var serverXml = 'config/' + cluster.name + '-server.xml'; + var clientXml = 'config/' + cluster.name + '-client.xml'; + + zip.file(serverXml, $generatorXml.cluster(cluster)); + zip.file(clientXml , $generatorXml.cluster(cluster, clientNearCfg)); + + zip.file(srcPath + 'factory/ServerConfigurationFactory.java', $generatorJava.cluster(cluster, 'factory', 'ServerConfigurationFactory', null)); + zip.file(srcPath + 'factory/ClientConfigurationFactory.java', $generatorJava.cluster(cluster, 'factory', 'ClientConfigurationFactory', clientNearCfg)); + + zip.file(srcPath + 'startup/ServerNodeSpringStartup.java', $generatorJava.nodeStartup(cluster, 'startup', 'ServerNodeSpringStartup', '"' + serverXml + '"')); + zip.file(srcPath + 'startup/ClientNodeSpringStartup.java', $generatorJava.nodeStartup(cluster, 'startup', 'ClientNodeSpringStartup', '"' + clientXml + '"')); + + zip.file(srcPath + 'startup/ServerNodeCodeStartup.java', $generatorJava.nodeStartup(cluster, 'startup', 'ServerNodeCodeStartup', + 'ServerConfigurationFactory.createConfiguration()', 'factory.ServerConfigurationFactory')); + zip.file(srcPath + 'startup/ClientNodeCodeStartup.java', $generatorJava.nodeStartup(cluster, 'startup', 'ClientNodeCodeStartup', + 'ClientConfigurationFactory.createConfiguration()', 'factory.ClientConfigurationFactory', clientNearCfg)); + + zip.file('pom.xml', $generatorPom.pom(cluster, igniteVersion).asString()); + + zip.file('README.txt', $generatorReadme.readme().asString()); + zip.file('jdbc-drivers/README.txt', $generatorReadme.readmeJdbc().asString()); + + for (var meta of ctrl.data.metadatas) { + if (meta.keyClass) + zip.file(srcPath + meta.keyType.replace(/\./g, '/') + '.java', meta.keyClass); + + zip.file(srcPath + meta.valueType.replace(/\./g, '/') + '.java', meta.valueClass); + } + + var blob = zip.generate({type:'blob', mimeType: 'application/octet-stream'}); + + // Download archive. + saveAs(blob, cluster.name + '-configuration.zip'); + }; +}] http://git-wip-us.apache.org/repos/asf/ignite/blob/539f819c/modules/control-center-web/src/main/js/app/modules/states/configuration/summary/summary.resource.js ---------------------------------------------------------------------- diff --git a/modules/control-center-web/src/main/js/app/modules/states/configuration/summary/summary.resource.js b/modules/control-center-web/src/main/js/app/modules/states/configuration/summary/summary.resource.js new file mode 100644 index 0000000..b125aca --- /dev/null +++ b/modules/control-center-web/src/main/js/app/modules/states/configuration/summary/summary.resource.js @@ -0,0 +1,41 @@ +/* + * 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. + */ + +export default ['ConfigurationSummaryResource', ['$q', '$http', ($q, $http) => { + const api = '/api/v1/configuration/clusters/list'; + + return { + read() { + return $http + .post(api) + .then(({data}) => data) + .then(({clusters, caches, igfss}) => { + if (!clusters || !clusters.length) + return {}; + + _.each(clusters, cluster => { + cluster.igfss = _.filter(igfss, ({_id}) => _.contains(cluster.igfss, _id)); + cluster.caches = _.filter(caches, ({_id}) => _.contains(cluster.caches, _id)); + }); + + return {clusters}; + }, (err) => { + return $q.reject(err); + }) + } + }; +}]] http://git-wip-us.apache.org/repos/asf/ignite/blob/539f819c/modules/control-center-web/src/main/js/app/services/UiAceOnLoad/service.js ---------------------------------------------------------------------- diff --git a/modules/control-center-web/src/main/js/app/services/UiAceOnLoad/service.js b/modules/control-center-web/src/main/js/app/services/UiAceOnLoad/service.js new file mode 100644 index 0000000..e63992d --- /dev/null +++ b/modules/control-center-web/src/main/js/app/services/UiAceOnLoad/service.js @@ -0,0 +1,36 @@ +/* + * 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. + */ + +export default ['IgniteUiAceOnLoad', () => { + return (editor) => { + editor.setReadOnly(true); + editor.setOption('highlightActiveLine', false); + editor.setAutoScrollEditorIntoView(true); + editor.$blockScrolling = Infinity; + + var renderer = editor.renderer; + + renderer.setHighlightGutterLine(false); + renderer.setShowPrintMargin(false); + renderer.setOption('fontFamily', 'monospace'); + renderer.setOption('fontSize', '12px'); + renderer.setOption('minLines', '25'); + renderer.setOption('maxLines', '25'); + + editor.setTheme('ace/theme/chrome'); + } +}] \ No newline at end of file http://git-wip-us.apache.org/repos/asf/ignite/blob/539f819c/modules/control-center-web/src/main/js/config.js ---------------------------------------------------------------------- diff --git a/modules/control-center-web/src/main/js/config.js b/modules/control-center-web/src/main/js/config.js index 5f11590..ce9ca1b 100644 --- a/modules/control-center-web/src/main/js/config.js +++ b/modules/control-center-web/src/main/js/config.js @@ -44,6 +44,7 @@ System.config({ "font-awesome": "npm:font-awesome@4.5.0", "jade": "github:johnsoftek/plugin-jade@0.5.1", "jquery": "github:components/jquery@2.1.4", + "json": "github:systemjs/plugin-json@0.1.0", "jszip": "github:Stuk/jszip@2.5.0", "lodash": "npm:lodash@3.10.1", "nvd3": "npm:nvd3@1.8.1", http://git-wip-us.apache.org/repos/asf/ignite/blob/539f819c/modules/control-center-web/src/main/js/controllers/summary-controller.js ---------------------------------------------------------------------- diff --git a/modules/control-center-web/src/main/js/controllers/summary-controller.js b/modules/control-center-web/src/main/js/controllers/summary-controller.js deleted file mode 100644 index b5ca1f0..0000000 --- a/modules/control-center-web/src/main/js/controllers/summary-controller.js +++ /dev/null @@ -1,293 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// Controller for Summary screen. -consoleModule.controller('summaryController', [ - '$scope', '$http', '$common', '$loading', '$table', - function ($scope, $http, $common, $loading, $table) { - var igniteVersion = '1.5.0-b1'; - $loading.start('loadingSummaryScreen'); - - $scope.panelExpanded = $common.panelExpanded; - $scope.tableVisibleRow = $table.tableVisibleRow; - $scope.joinTip = $common.joinTip; - $scope.getModel = $common.getModel; - $scope.widthIsSufficient = $common.widthIsSufficient; - - $scope.javaClassItems = [ - {label: 'snippet', value: 1}, - {label: 'factory class', value: 2} - ]; - - $scope.evictionPolicies = [ - {value: 'LRU', label: 'LRU'}, - {value: 'FIFO', label: 'FIFO'}, - {value: 'SORTED', label: 'Sorted'}, - {value: undefined, label: 'Not set'} - ]; - - $scope.tabsServer = { activeTab: 0 }; - $scope.tabsClient = { activeTab: 0 }; - - $scope.pojoClasses = function() { - var classes = []; - - if ($scope.selectedItem) - _.forEach($scope.selectedItem.metadatas, function(meta) { - classes.push(meta.keyType); - classes.push(meta.valueType); - }); - - return classes; - }; - - $scope.oss = ['debian:8', 'ubuntu:14.10']; - - $scope.configServer = {javaClassServer: 1, os: undefined}; - $scope.configClient = {}; - - $scope.backupItem = {javaClassClient: 1}; - - $http.get('/models/summary.json') - .success(function (data) { - $scope.screenTip = data.screenTip; - $scope.moreInfo = data.moreInfo; - $scope.clientFields = data.clientFields; - }) - .error(function (errMsg) { - $common.showError(errMsg); - }); - - $scope.clusters = []; - - $scope.aceInit = function (editor) { - editor.setReadOnly(true); - editor.setOption('highlightActiveLine', false); - editor.setAutoScrollEditorIntoView(true); - editor.$blockScrolling = Infinity; - - var renderer = editor.renderer; - - renderer.setHighlightGutterLine(false); - renderer.setShowPrintMargin(false); - renderer.setOption('fontFamily', 'monospace'); - renderer.setOption('fontSize', '12px'); - renderer.setOption('minLines', '25'); - renderer.setOption('maxLines', '25'); - - editor.setTheme('ace/theme/chrome'); - }; - - $scope.generateJavaServer = function () { - $scope.javaServer = $generatorJava.cluster($scope.selectedItem, 'factory', - $scope.configServer.javaClassServer === 2 ? 'ServerConfigurationFactory' : false, null); - }; - - function selectPojoClass(config) { - if ($scope.selectedItem) - _.forEach($scope.selectedItem.metadatas, function(meta) { - if (meta.keyType === config.pojoClass) - return config.pojoClassBody = meta.keyClass; - - if (meta.valueType === config.pojoClass) - return config.pojoClassBody = meta.valueClass; - }); - } - - function pojoClsListener(config) { - return function () { - selectPojoClass(config); - }; - } - - $scope.updatePojos = function() { - if ($common.isDefined($scope.selectedItem)) { - var metadatas = $generatorJava.pojos($scope.selectedItem.caches, $scope.configServer.useConstructor, $scope.configServer.includeKeyFields); - - $scope.selectedItem.metadatas = metadatas; - - function restoreSelected(selected, config, tabs, metadatas) { - if (!$common.isDefined(selected) || _.findIndex(metadatas, function (meta) { - return meta.keyType === selected || meta.valueType === selected; - }) < 0) { - if (metadatas.length > 0) { - if ($common.isDefined(metadatas[0].keyType)) - config.pojoClass = metadatas[0].keyType; - else - config.pojoClass = metadatas[0].valueType; - } - else { - config.pojoClass = undefined; - - if (tabs.activeTab === 2) - tabs.activeTab = 0; - } - } - else - config.pojoClass = selected; - - selectPojoClass(config); - } - - restoreSelected($scope.configServer.pojoClass, $scope.configServer, $scope.tabsServer, metadatas); - restoreSelected($scope.configClient.pojoClass, $scope.configClient, $scope.tabsClient, metadatas); - } - }; - - $scope.$watch('configServer.javaClassServer', $scope.generateJavaServer, true); - - $scope.$watch('configServer.pojoClass', pojoClsListener($scope.configServer), true); - $scope.$watch('configClient.pojoClass', pojoClsListener($scope.configClient), true); - - $scope.$watch('configServer.useConstructor', $scope.updatePojos, true); - - $scope.$watch('configServer.includeKeyFields', $scope.updatePojos, true); - - $scope.generateDockerServer = function() { - var os = $scope.configServer.os ? $scope.configServer.os : $scope.oss[0]; - - $scope.dockerServer = $generatorDocker.clusterDocker($scope.selectedItem, os); - }; - - $scope.$watch('configServer.os', $scope.generateDockerServer, true); - - $scope.generateClient = function () { - $scope.xmlClient = $generatorXml.cluster($scope.selectedItem, $scope.backupItem.nearConfiguration); - $scope.javaClient = $generatorJava.cluster($scope.selectedItem, 'factory', - $scope.backupItem.javaClassClient === 2 ? 'ClientConfigurationFactory' : false, - $scope.backupItem.nearConfiguration); - }; - - $scope.$watch('backupItem', $scope.generateClient, true); - - $scope.selectItem = function (cluster) { - if (!cluster) - return; - - $scope.selectedItem = cluster; - - $scope.xmlServer = $generatorXml.cluster(cluster); - - $scope.pom = $generatorPom.pom(cluster, igniteVersion).asString(); - - $scope.generateJavaServer(); - - $scope.generateDockerServer(); - - $scope.generateClient(); - - $scope.updatePojos(); - }; - - $scope.pojoAvailable = function() { - return $scope.selectedItem && $common.isDefined($scope.selectedItem.metadatas) && $scope.selectedItem.metadatas.length > 0; - }; - - $scope.downloadConfiguration = function () { - var cluster = $scope.selectedItem; - var clientNearCfg = $scope.backupItem.nearConfiguration; - - var zip = new JSZip(); - - zip.file('Dockerfile', $scope.dockerServer); - - var builder = $generatorProperties.generateProperties(cluster); - - if (builder) - zip.file('src/main/resources/secret.properties', builder.asString()); - - var srcPath = 'src/main/java/'; - - var serverXml = 'config/' + cluster.name + '-server.xml'; - var clientXml = 'config/' + cluster.name + '-client.xml'; - - zip.file(serverXml, $generatorXml.cluster(cluster)); - zip.file(clientXml , $generatorXml.cluster(cluster, clientNearCfg)); - - zip.file(srcPath + 'factory/ServerConfigurationFactory.java', $generatorJava.cluster(cluster, 'factory', 'ServerConfigurationFactory', null)); - zip.file(srcPath + 'factory/ClientConfigurationFactory.java', $generatorJava.cluster(cluster, 'factory', 'ClientConfigurationFactory', clientNearCfg)); - - zip.file(srcPath + 'startup/ServerNodeSpringStartup.java', $generatorJava.nodeStartup(cluster, 'startup', 'ServerNodeSpringStartup', '"' + serverXml + '"')); - zip.file(srcPath + 'startup/ClientNodeSpringStartup.java', $generatorJava.nodeStartup(cluster, 'startup', 'ClientNodeSpringStartup', '"' + clientXml + '"')); - - zip.file(srcPath + 'startup/ServerNodeCodeStartup.java', $generatorJava.nodeStartup(cluster, 'startup', 'ServerNodeCodeStartup', - 'ServerConfigurationFactory.createConfiguration()', 'factory.ServerConfigurationFactory')); - zip.file(srcPath + 'startup/ClientNodeCodeStartup.java', $generatorJava.nodeStartup(cluster, 'startup', 'ClientNodeCodeStartup', - 'ClientConfigurationFactory.createConfiguration()', 'factory.ClientConfigurationFactory', clientNearCfg)); - - zip.file('pom.xml', $generatorPom.pom(cluster, igniteVersion).asString()); - - zip.file('README.txt', $generatorReadme.readme().asString()); - zip.file('jdbc-drivers/README.txt', $generatorReadme.readmeJdbc().asString()); - - for (var meta of $generatorJava.pojos(cluster.caches, $scope.configServer.useConstructor, $scope.configServer.includeKeyFields)) { - if (meta.keyClass) - zip.file(srcPath + meta.keyType.replace(/\./g, '/') + '.java', meta.keyClass); - - zip.file(srcPath + meta.valueType.replace(/\./g, '/') + '.java', meta.valueClass); - } - - var blob = zip.generate({type:'blob', mimeType: 'application/octet-stream'}); - - // Download archive. - saveAs(blob, cluster.name + '-configuration.zip'); - }; - - $http.post('/api/v1/configuration/clusters/list') - .success(function (data) { - $scope.clusters = data.clusters; - - if ($scope.clusters.length > 0) { - // Populate clusters with caches. - _.forEach($scope.clusters, function (cluster) { - cluster.caches = _.filter(data.caches, function (cache) { - return _.contains(cluster.caches, cache._id); - }); - - cluster.igfss = _.filter(data.igfss, function (igfs) { - return _.contains(cluster.igfss, igfs._id); - }); - }); - - var restoredId = sessionStorage.summarySelectedId; - - var selectIdx = 0; - - if (restoredId) { - var idx = _.findIndex($scope.clusters, function (cluster) { - return cluster._id === restoredId; - }); - - if (idx >= 0) - selectIdx = idx; - else - delete sessionStorage.summarySelectedId; - } - - $scope.selectItem($scope.clusters[selectIdx]); - - $scope.$watch('selectedItem', function (val) { - if (val) - sessionStorage.summarySelectedId = val._id; - }, true); - } - }) - .finally(function () { - $loading.finish('loadingSummaryScreen'); - $scope.ui = {ready: true} - }); -}]); http://git-wip-us.apache.org/repos/asf/ignite/blob/539f819c/modules/control-center-web/src/main/js/gulpfile.js/tasks/copy.js ---------------------------------------------------------------------- diff --git a/modules/control-center-web/src/main/js/gulpfile.js/tasks/copy.js b/modules/control-center-web/src/main/js/gulpfile.js/tasks/copy.js index 3786a50..0f05f32 100644 --- a/modules/control-center-web/src/main/js/gulpfile.js/tasks/copy.js +++ b/modules/control-center-web/src/main/js/gulpfile.js/tasks/copy.js @@ -91,7 +91,9 @@ gulp.task('copy:ignite_modules', function(cb) { }); gulp.task('copy:watch', function(cb) { - gulp.watch([paths, legacyPaths, igniteModulePaths], function(glob) { + gulp.watch([legacyPaths, igniteModulePaths], function(glob) { sequence(['copy:base', 'copy:legacy', 'copy:ignite_modules'], 'inject:plugins:js')(cb); }); + + gulp.watch(paths, ['copy:base']); }); http://git-wip-us.apache.org/repos/asf/ignite/blob/539f819c/modules/control-center-web/src/main/js/helpers/generator/generator-xml.js ---------------------------------------------------------------------- diff --git a/modules/control-center-web/src/main/js/helpers/generator/generator-xml.js b/modules/control-center-web/src/main/js/helpers/generator/generator-xml.js index cd8942a..3bcf425 100644 --- a/modules/control-center-web/src/main/js/helpers/generator/generator-xml.js +++ b/modules/control-center-web/src/main/js/helpers/generator/generator-xml.js @@ -1415,7 +1415,7 @@ $generatorXml.generateDataSources = function (datasources, res) { $generatorXml.clusterConfiguration = function (cluster, clientNearCfg, res) { if (clientNearCfg) { - res.line('<property name="clientMode" value="true" />'); + res.line('<property name="clientMode" value="true"/>'); res.line(); } http://git-wip-us.apache.org/repos/asf/ignite/blob/539f819c/modules/control-center-web/src/main/js/package.json ---------------------------------------------------------------------- diff --git a/modules/control-center-web/src/main/js/package.json b/modules/control-center-web/src/main/js/package.json index ae39b46..77b9e06 100644 --- a/modules/control-center-web/src/main/js/package.json +++ b/modules/control-center-web/src/main/js/package.json @@ -86,6 +86,7 @@ "font-awesome": "npm:font-awesome@^4.4.0", "jade": "github:johnsoftek/plugin-jade@^0.5.1", "jquery": "github:components/jquery@^2.1.4", + "json": "github:systemjs/plugin-json@^0.1.0", "jszip": "github:Stuk/jszip@^2.5.0", "lodash": "npm:lodash@^3.10.1", "pdfmake": "github:bpampuch/pdfmake@^0.1.20", http://git-wip-us.apache.org/repos/asf/ignite/blob/539f819c/modules/control-center-web/src/main/js/views/configuration/summary-tabs.jade ---------------------------------------------------------------------- diff --git a/modules/control-center-web/src/main/js/views/configuration/summary-tabs.jade b/modules/control-center-web/src/main/js/views/configuration/summary-tabs.jade index 2b97acd..847b42f 100644 --- a/modules/control-center-web/src/main/js/views/configuration/summary-tabs.jade +++ b/modules/control-center-web/src/main/js/views/configuration/summary-tabs.jade @@ -16,7 +16,7 @@ ul.nav(ng-class='$navClass', role='tablist') li(role='presentation' ng-repeat='$pane in $panes track by $index' ng-class='[ $isActive($pane, $index) ? $activeClass : "", $pane.disabled ? "disabled" : "" ]') - a.summary-tab(ng-show='$pane.title != "POJO" || pojoAvailable()' ng-switch='$pane.title' role='tab' data-toggle='tab' ng-click='!$pane.disabled && $setActive($pane.name || $index)' data-index='{{ $index }}' aria-controls='$pane.title') {{$pane.title}} + a.summary-tab(ng-show='$pane.title != "POJO" || (cluster | hasPojo)' ng-switch='$pane.title' role='tab' data-toggle='tab' ng-click='!$pane.disabled && $setActive($pane.name || $index)' data-index='{{ $index }}' aria-controls='$pane.title') {{$pane.title}} img(ng-switch-when='XML' src='/images/xml.png') img(ng-switch-when='Java' src='/images/java.png') img(ng-switch-when='POM' src='/images/xml.png') http://git-wip-us.apache.org/repos/asf/ignite/blob/539f819c/modules/control-center-web/src/main/js/views/configuration/summary.jade ---------------------------------------------------------------------- diff --git a/modules/control-center-web/src/main/js/views/configuration/summary.jade b/modules/control-center-web/src/main/js/views/configuration/summary.jade index db057cb..3b238b8 100644 --- a/modules/control-center-web/src/main/js/views/configuration/summary.jade +++ b/modules/control-center-web/src/main/js/views/configuration/summary.jade @@ -19,28 +19,9 @@ include ../includes/controls mixin hard-link(ref, txt) a(style='color:#ec1c24' href=ref target='_blank') #{txt} -mixin pojos(side) - div(bs-pane title='POJO' ng-show='pojoAvailable()') - .details-row - .col-xs-2.col-sm-2.col-md-2 - label POJO class: - .col-xs-10.col-sm-10.col-md-10.summary-pojo-list - button.select-toggle.form-control(ng-model='config#{side}.pojoClass' bs-select bs-options='item for item in pojoClasses()' data-container='') - .col-xs-2.col-sm-2.col-md-2 - label - .col-xs-10.col-sm-10.col-md-10 - input(type='checkbox' ng-model='configServer.useConstructor') - | Generate constructors - .col-xs-2.col-sm-2.col-md-2 - label - .col-xs-10.col-sm-10.col-md-10 - input(type='checkbox' ng-model='configServer.includeKeyFields') - | Include key fields - div(ui-ace='{onLoad: aceInit, mode: "java"}' ng-model='config#{side}.pojoClassBody') - .docs-header h1 Configurations Summary -.docs-body(ng-controller='summaryController') +.docs-body ignite-callout ignite-callout-cel(data-title='On This Screen') li Download XML Config @@ -53,70 +34,49 @@ mixin pojos(side) li Deploy Ignite Servers li Connect Ignite Clients li Analyze with SQL - - div(dw-loading='loadingSummaryScreen' dw-loading-options='{text: "Loading summary screen...", className: "page-loading-overlay"}') - div(ng-show='ui.ready') - hr - .padding-dflt(ng-if='clusters.length == 0') - | You have no clusters configured. Please configure them - a(href='/configuration/clusters') here. - +main-table('Clusters:', 'clusters', 'clusterName', 'selectItem(row)', '{{$index + 1}}) {{row.name}}', 'name') - div(ng-show='selectedItem && tableVisibleRow(displayedRows, selectedItem)' role='tab') - .padding-top-dflt(ng-if='clusters.length > 0' bs-affix) - button.btn.btn-primary(id='download' ng-click='downloadConfiguration()' bs-tooltip data-title='Download configuration' data-placement='bottom') Download - hr - .panel-group(bs-collapse ng-init='panels.activePanels=[0,1]' ng-model='panels.activePanels' data-allow-multiple='true') - .panel.panel-default - .panel-heading(role='tab' bs-collapse-toggle) - i.fa(ng-class='panelExpanded(panels, "server") ? "fa-chevron-circle-up" : "fa-chevron-circle-down"') - label Server - .panel-collapse(id='server' role='tabpanel' bs-collapse-target) - .summary-tabs(bs-tabs data-bs-active-pane="tabsServer.activeTab" ng-show='selectedItem' template='configuration/summary-tabs.html') - div(bs-pane title='XML') - div(ui-ace='{onLoad: aceInit, mode: "xml"}' ng-model='xmlServer') - div(bs-pane title='Java') - .details-row - .col-xs-2.col-sm-2.col-md-1 - label Generate: - .col-xs-4.col-sm-3.col-md-3 - button.select-toggle.form-control(ng-model='configServer.javaClassServer' bs-select bs-options='item.value as item.label for item in javaClassItems' data-sort='false') - div(ui-ace='{onLoad: aceInit, mode: "java"}' ng-model='javaServer') - div(bs-pane title='POM') - div(ui-ace='{onLoad: aceInit, mode: "xml"}' ng-model='pom') - div(bs-pane title='Dockerfile') - .details-row - p - +hard-link('https://docs.docker.com/reference/builder', 'Docker') - | file is a text file with instructions to create Docker image.<br/> - | To build image you have to store following Docker file with your Ignite XML configuration to the same directory.<br> - | Also you could use predefined - +hard-link('https://ignite.apache.org/download.html#docker', 'Apache Ignite docker image') - | . For more information about using Ignite with Docker please read - +hard-link('http://apacheignite.readme.io/docs/docker-deployment', 'documentation') - |. - .col-xs-3.col-sm-2 - label(for='os') Operation System: - .col-xs-5.col-sm-4 - input#os.form-control(type='text' ng-model='configServer.os' placeholder='debian:8' data-min-length='0' data-html='1' data-auto-select='true' bs-typeahead retain-selection bs-options='os for os in oss') - div(ui-ace='{onLoad: aceInit, mode: "dockerfile"}' ng-model='dockerServer') - .panel.panel-default - .panel-heading(role='tab' bs-collapse-toggle) - i.fa(ng-class='panelExpanded(panels, "client") ? "fa-chevron-circle-up" : "fa-chevron-circle-down"') - label Client - .panel-collapse(id='client' role='tabpanel' bs-collapse-target) - div(ng-show='selectedItem') - .details-row(ng-repeat='field in clientFields') - +form-row-custom(['col-xs-4 col-sm-4 col-md-3'], ['col-xs-4 col-sm-4 col-md-3'], 'backupItem') - .summary-tabs(bs-tabs data-bs-active-pane="tabsClient.activeTab" template='configuration/summary-tabs.html') - div(bs-pane title='XML') - div(ui-ace='{onLoad: aceInit, mode: "xml"}' ng-model='xmlClient') - div(bs-pane title='Java') - .details-row - .col-xs-2.col-sm-2.col-md-1 - label Generate: - .col-xs-4.col-sm-3.col-md-3 - button.select-toggle.form-control(ng-model='backupItem.javaClassClient' bs-select bs-options='item.value as item.label for item in javaClassItems' data-sort='false') - div(ui-ace='{onLoad: aceInit, mode: "java"}' ng-model='javaClient') - div(bs-pane title='POM') - div(ui-ace='{onLoad: aceInit, mode: "xml"}' ng-model='pom') - +pojos('Client') + + ignite-loading + hr + + .padding-dflt(ng-if='clusters.length == 0') + | You have no clusters configured. Please configure them + a(href='/configuration/clusters') here. + + +main-table('Clusters:', 'clusters', 'clusterName', 'selectItem(row)', '{{$index + 1}}) {{row.name}}', 'name') + + div(ng-show='selectedItem && tableVisibleRow(displayedRows, selectedItem)' role='tab') + .padding-top-dflt(ng-if='clusters.length > 0' bs-affix) + button.btn.btn-primary(id='download' ng-click='downloadConfiguration()' bs-tooltip data-title='Download configuration' data-placement='bottom') Download + hr + .panel-group(bs-collapse ng-init='panels.activePanels=[0,1]' ng-model='panels.activePanels' data-allow-multiple='true') + .panel.panel-default + .panel-heading(role='tab' bs-collapse-toggle) + i.fa(ng-class='panelExpanded(panels, "server") ? "fa-chevron-circle-up" : "fa-chevron-circle-down"') + label Server + .panel-collapse(id='server' role='tabpanel' bs-collapse-target) + .summary-tabs(bs-tabs data-bs-active-pane="tabsServer.activeTab" template='configuration/summary-tabs.html') + div(bs-pane title='XML') + ignite-ui-ace-xml(data-cluster='cluster') + div(bs-pane title='Java') + ignite-ui-ace-java(data-cluster='cluster') + div(bs-pane title='POM') + ignite-ui-ace-pom(data-cluster='cluster') + div(bs-pane title='Dockerfile') + ignite-ui-ace-docker(data-cluster='cluster' ng-model='ctrl.data.docker') + + .panel.panel-default + .panel-heading(role='tab' bs-collapse-toggle) + i.fa(ng-class='panelExpanded(panels, "client") ? "fa-chevron-circle-up" : "fa-chevron-circle-down"') + label Client + .panel-collapse(id='client' role='tabpanel' bs-collapse-target) + .details-row(ng-repeat='field in clientFields') + +form-row-custom(['col-xs-4 col-sm-4 col-md-3'], ['col-xs-4 col-sm-4 col-md-3'], 'backupItem') + .summary-tabs(bs-tabs data-bs-active-pane="tabsClient.activeTab" template='configuration/summary-tabs.html') + div(bs-pane title='XML') + ignite-ui-ace-xml(data-cluster='cluster' data-cluster-cfg='backupItem.nearConfiguration') + div(bs-pane title='Java') + ignite-ui-ace-java(data-cluster='cluster' data-cluster-cfg='backupItem.nearConfiguration') + div(bs-pane title='POM') + ignite-ui-ace-pom(data-cluster='cluster') + div(bs-pane title='POJO' ng-show='cluster | hasPojo') + ignite-ui-ace-pojos(data-cluster='cluster' ng-model='ctrl.data.metadatas')