http://git-wip-us.apache.org/repos/asf/ignite/blob/087f6405/modules/web-console/frontend/gulpfile.babel.js/paths.js ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/gulpfile.babel.js/paths.js b/modules/web-console/frontend/gulpfile.babel.js/paths.js index 9134e44..6ebfbad 100644 --- a/modules/web-console/frontend/gulpfile.babel.js/paths.js +++ b/modules/web-console/frontend/gulpfile.babel.js/paths.js @@ -24,17 +24,20 @@ const destDir = path.resolve('build'); const igniteModulesDir = process.env.IGNITE_MODULES ? path.join(path.normalize(process.env.IGNITE_MODULES), 'frontend') : './ignite_modules'; const igniteModulesTemp = path.resolve('ignite_modules_temp'); -const jadePaths = [ - './views/*.jade', +const jadeViewsPaths = [ './views/**/*.jade', - './app/helpers/**/*.jade', - './app/modules/states/configuration/**/*.jade', - './app/modules/sql/*.jade' + '!./views/configuration/*.jade' ]; -const resourcePaths = [ - './public/**/*.png', - './public/*.ico' +const jadeAppModulePaths = [ + './app/modules/states/configuration/**/*.jade', + './app/modules/sql/*.jade', + './views/**/*.jade', + '!./views/*.jade', + '!./views/includes/*.jade', + '!./views/settings/*.jade', + '!./views/sql/*.jade', + '!./views/templates/*.jade' ]; const jadeModulePaths = [ @@ -53,6 +56,11 @@ const appModulePaths = [ igniteModulesDir + '/**/app/data/*.json' ]; +const resourcePaths = [ + './public/**/*.png', + './public/*.ico' +]; + const resourceModulePaths = [ igniteModulesDir + '/**/images/*.png', igniteModulesDir + '/*.ico' @@ -65,10 +73,11 @@ export { igniteModulesDir, igniteModulesTemp, - jadePaths, - resourcePaths, - + jadeViewsPaths, + jadeAppModulePaths, jadeModulePaths, + + resourcePaths, resourceModulePaths, appModulePaths };
http://git-wip-us.apache.org/repos/asf/ignite/blob/087f6405/modules/web-console/frontend/gulpfile.babel.js/tasks/jade.js ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/gulpfile.babel.js/tasks/jade.js b/modules/web-console/frontend/gulpfile.babel.js/tasks/jade.js index b150373..fe8bb09 100644 --- a/modules/web-console/frontend/gulpfile.babel.js/tasks/jade.js +++ b/modules/web-console/frontend/gulpfile.babel.js/tasks/jade.js @@ -16,19 +16,28 @@ */ import gulp from 'gulp'; +import ll from 'gulp-ll'; import jade from 'gulp-jade'; -import sequence from 'gulp-sequence'; -import { jadePaths, jadeModulePaths, destDir } from '../paths'; +import { jadeViewsPaths, jadeAppModulePaths, jadeModulePaths, destDir } from '../paths'; const jadeOptions = { - basedir: './' + basedir: './', + cache: true }; -gulp.task('jade', (cb) => sequence('jade:source', 'jade:ignite_modules', cb)); +ll.tasks(['jade:views', 'jade:app', 'jade:ignite_modules']); -gulp.task('jade:source', () => - gulp.src(jadePaths) +gulp.task('jade', ['jade:views', 'jade:app', 'jade:ignite_modules']); + +gulp.task('jade:views', () => + gulp.src(jadeViewsPaths) + .pipe(jade(jadeOptions)) + .pipe(gulp.dest(destDir)) +); + +gulp.task('jade:app', () => + gulp.src(jadeAppModulePaths) .pipe(jade(jadeOptions)) .pipe(gulp.dest(destDir)) ); http://git-wip-us.apache.org/repos/asf/ignite/blob/087f6405/modules/web-console/frontend/gulpfile.babel.js/tasks/watch.js ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/gulpfile.babel.js/tasks/watch.js b/modules/web-console/frontend/gulpfile.babel.js/tasks/watch.js index c179f9c..dfaa1a3 100644 --- a/modules/web-console/frontend/gulpfile.babel.js/tasks/watch.js +++ b/modules/web-console/frontend/gulpfile.babel.js/tasks/watch.js @@ -18,13 +18,15 @@ import gulp from 'gulp'; import sequence from 'gulp-sequence'; -import { jadePaths, jadeModulePaths, resourcePaths, resourceModulePaths, appModulePaths } from '../paths'; +import { jadeViewsPaths, jadeAppModulePaths, jadeModulePaths, resourcePaths, resourceModulePaths, appModulePaths } from '../paths'; gulp.task('watch:ignite-modules', (cb) => sequence('clean:ignite-modules-temp', 'ignite:modules', cb)); // Build + watch task. gulp.task('watch', ['build'], () => { - gulp.watch(jadePaths.concat(jadeModulePaths), ['jade']); + gulp.watch(jadeViewsPaths, ['jade:views']); + gulp.watch(jadeAppModulePaths.concat('./app/helpers/**/*.jade'), ['jade:app']); + gulp.watch(jadeModulePaths.concat('./app/helpers/**/*.jade'), ['jade:ignite_modules']); gulp.watch(resourcePaths, ['copy:resource:app']); gulp.watch(resourceModulePaths, ['copy:resource:ignite_modules']); gulp.watch(appModulePaths, ['watch:ignite-modules']); http://git-wip-us.apache.org/repos/asf/ignite/blob/087f6405/modules/web-console/frontend/gulpfile.babel.js/webpack/common.js ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/gulpfile.babel.js/webpack/common.js b/modules/web-console/frontend/gulpfile.babel.js/webpack/common.js index e3d88b3..f6c2d87 100644 --- a/modules/web-console/frontend/gulpfile.babel.js/webpack/common.js +++ b/modules/web-console/frontend/gulpfile.babel.js/webpack/common.js @@ -43,7 +43,7 @@ try { } export default () => { - const assetsLoader = development ? 'url-loader' : 'file-loader'; + const assetsLoader = 'file-loader'; return { cache: true, http://git-wip-us.apache.org/repos/asf/ignite/blob/087f6405/modules/web-console/frontend/gulpfile.babel.js/webpack/environments/development.js ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/gulpfile.babel.js/webpack/environments/development.js b/modules/web-console/frontend/gulpfile.babel.js/webpack/environments/development.js index 229760e..1550dfa 100644 --- a/modules/web-console/frontend/gulpfile.babel.js/webpack/environments/development.js +++ b/modules/web-console/frontend/gulpfile.babel.js/webpack/environments/development.js @@ -20,6 +20,10 @@ import webpack from 'webpack'; import {destDir, rootDir, srcDir} from '../../paths'; +const devServerHost = 'localhost'; +const devServerPort = 9000; +const devServerUrl = `http://${devServerHost}:${devServerPort}/`; + export default () => { const plugins = [ new webpack.HotModuleReplacementPlugin() @@ -27,9 +31,12 @@ export default () => { return { entry: { - webpack: 'webpack-dev-server/client?http://localhost:9000/', + webpack: `webpack-dev-server/client?${devServerUrl}`, app: [path.join(srcDir, 'app.js'), 'webpack/hot/only-dev-server'] }, + output: { + publicPath: devServerUrl + }, context: rootDir, debug: true, devtool: 'source-map', @@ -60,10 +67,12 @@ export default () => { aggregateTimeout: 1000, poll: 2000 }, - stats: {colors: true}, - port: 9000 + stats: { + colors: true, + chunks: false + }, + port: devServerPort }, - stats: {colors: true}, plugins }; }; http://git-wip-us.apache.org/repos/asf/ignite/blob/087f6405/modules/web-console/frontend/gulpfile.babel.js/webpack/environments/test.js ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/gulpfile.babel.js/webpack/environments/test.js b/modules/web-console/frontend/gulpfile.babel.js/webpack/environments/test.js new file mode 100644 index 0000000..1c37196 --- /dev/null +++ b/modules/web-console/frontend/gulpfile.babel.js/webpack/environments/test.js @@ -0,0 +1,52 @@ +/* + * 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 webpack from 'webpack'; + +const NODE_ENV = process.env.NODE_ENV || 'production'; + +export default () => { + + return { + cache: true, + node: { + fs: 'empty' + }, + + module: { + preLoaders: null + }, + + // Entry points. + entry: null, + + // Output system. + output: null, + eslint: null, + + // Load plugins. + plugins: [ + new webpack.ProvidePlugin({ + $: 'jquery', + jQuery: 'jquery', + _: 'lodash', + nv: 'nvd3' + }), + new webpack.DefinePlugin({NODE_ENV: JSON.stringify(NODE_ENV)}) + ] + }; +}; http://git-wip-us.apache.org/repos/asf/ignite/blob/087f6405/modules/web-console/frontend/gulpfile.babel.js/webpack/index.js ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/gulpfile.babel.js/webpack/index.js b/modules/web-console/frontend/gulpfile.babel.js/webpack/index.js index 6682f9c..9b344dd 100644 --- a/modules/web-console/frontend/gulpfile.babel.js/webpack/index.js +++ b/modules/web-console/frontend/gulpfile.babel.js/webpack/index.js @@ -19,13 +19,15 @@ import _ from 'lodash'; import commonConfig from './common'; import devConfig from './environments/development'; import prodConfig from './environments/production'; +import testConfig from './environments/test'; const env = process.env.NODE_ENV || 'production'; // Config by environments. const configs = { production: prodConfig, - development: devConfig + development: devConfig, + test: testConfig }; // Load config file by environment http://git-wip-us.apache.org/repos/asf/ignite/blob/087f6405/modules/web-console/frontend/package.json ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/package.json b/modules/web-console/frontend/package.json index 7ea2893..fe8c295 100644 --- a/modules/web-console/frontend/package.json +++ b/modules/web-console/frontend/package.json @@ -5,9 +5,9 @@ "private": true, "scripts": { "dev": "cross-env NODE_ENV=development gulp watch", - "build": "cross-env NODE_ENV=production gulp build", - "test": "karma start ./test/karma.conf.js", - "eslint": "eslint --format node_modules/eslint-friendly-formatter gulpfile.babel.js/ app/ controllers/ generator/ ignite_modules/ ignite_modules_temp/ -- --eff-by-issue" + "build": "cross-env NODE_ENV=production gulp build --no-ll", + "test": "cross-env NODE_ENV=test karma start ./test/karma.conf.js", + "eslint": "eslint --format node_modules/eslint-friendly-formatter gulpfile.babel.js/ app/ controllers/ ignite_modules/ ignite_modules_temp/ -- --eff-by-issue" }, "author": "", "contributors": [ @@ -57,7 +57,6 @@ "jszip": "^3.0.0", "lodash": "^4.8.2", "nvd3": "^1.8.3", - "query-command-supported": "^1.0.0", "raleway-webfont": "^3.0.1", "roboto-font": "^0.1.0", "socket.io-client": "^1.4.6", @@ -67,7 +66,7 @@ "assets-webpack-plugin": "^3.2.0", "autoprefixer-core": "^6.0.1", "babel-core": "^6.7.6", - "babel-eslint": "^6.0.4", + "babel-eslint": "^7.0.0", "babel-loader": "^6.2.4", "babel-plugin-add-module-exports": "^0.2.1", "babel-plugin-transform-builtin-extend": "^1.1.0", @@ -79,16 +78,17 @@ "chai": "^3.5.0", "cross-env": "^1.0.7", "css-loader": "^0.23.0", - "eslint": "^2.9.0", + "eslint": "^3.0.0", "eslint-friendly-formatter": "^2.0.5", "eslint-loader": "^1.0.0", "expose-loader": "^0.7.1", "extract-text-webpack-plugin": "^1.0.1", "file-loader": "^0.9.0", "gulp": "^3.9.1", - "gulp-eslint": "^2.0.0", + "gulp-eslint": "^3.0.0", "gulp-inject": "^4.0.0", "gulp-jade": "^1.1.0", + "gulp-ll": "^1.0.4", "gulp-rimraf": "^0.2.0", "gulp-sequence": "^0.4.1", "gulp-util": "^3.0.7", @@ -102,6 +102,7 @@ "karma-babel-preprocessor": "^6.0.1", "karma-jasmine": "^1.0.2", "karma-mocha": "^1.0.1", + "karma-mocha-reporter": "^2.2.0", "karma-phantomjs-launcher": "^1.0.0", "karma-teamcity-reporter": "^1.0.0", "karma-webpack": "^1.7.0", @@ -115,7 +116,6 @@ "require-dir": "^0.3.0", "resolve-url-loader": "^1.4.3", "sass-loader": "^3.1.1", - "should": "^9.0.2", "style-loader": "^0.13.1", "url": "^0.11.0", "url-loader": "^0.5.6", http://git-wip-us.apache.org/repos/asf/ignite/blob/087f6405/modules/web-console/frontend/public/stylesheets/style.scss ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/public/stylesheets/style.scss b/modules/web-console/frontend/public/stylesheets/style.scss index 0784560..0f8f49a 100644 --- a/modules/web-console/frontend/public/stylesheets/style.scss +++ b/modules/web-console/frontend/public/stylesheets/style.scss @@ -82,6 +82,11 @@ hr { vertical-align: middle; } +.table .ui-grid-settings { + float: left; + padding-right: 10px; +} + ul.navbar-nav, .sidebar-nav { li.active > a { color: $link-color; @@ -359,6 +364,13 @@ h1, h2, h3, h4, h5, h6 { margin-right: -2px; } +// Modal icon +.modal-header h4 > i.fa { + cursor: default; + float: left; + line-height: $modal-title-line-height; +} + .modal .modal-dialog { width: 650px; } @@ -623,7 +635,7 @@ button.form-control { margin-top: 30px; } - .btn-group { + .btn-group:last-of-type { margin-right: 0; } @@ -665,6 +677,16 @@ button.form-control { border-top: 1px solid $ignite-border-color; padding: 10px 10px; + + input[type="checkbox"] { + line-height: 20px; + margin-right: 5px; + } + + label { + line-height: 20px !important; + vertical-align: middle; + } } .sql-result { @@ -686,6 +708,16 @@ button.form-control { .total { padding: 10px 10px; + + input[type="checkbox"] { + line-height: 20px; + margin-right: 5px; + } + + label { + line-height: 20px !important; + vertical-align: middle; + } } .table { @@ -1318,12 +1350,6 @@ label { margin: 0 5px; } -.fieldButton { - float: right; - margin-left: 5px; - margin-right: 0; -} - .fa { cursor: pointer; } @@ -1639,13 +1665,18 @@ th[st-sort] { z-index: 900; a { + color: $input-color-placeholder; background-color: white; margin-left: 5px; font-size: 0.9em; } - .inactive { - color: $input-color-placeholder; + a + a { + margin-left: 10px + } + + a.active { + color: $brand-primary; } } @@ -2170,3 +2201,29 @@ html,body,.splash-screen { padding: 0; } } + +// Fix for incorrect tooltip placement after fast show|hide. +.tooltip.ng-leave { + transition: none !important; /* Disable transitions. */ + animation: none 0s !important; /* Disable keyframe animations. */ +} + +// Fix for incorrect dropdown placement. +.select.dropdown-menu.ng-leave { + transition: none !important; /* Disable transitions. */ + animation: none 0s !important; /* Disable keyframe animations. */ +} +.disable-animations { + // Use this for transitions + &.ng-enter, + &.ng-leave, + &.ng-animate { + -webkit-transition: none !important; + transition: none !important; + } + // Use this for keyframe animations + &.ng-animate { + -webkit-animation: none 0s; + animation: none 0s; + } +} http://git-wip-us.apache.org/repos/asf/ignite/blob/087f6405/modules/web-console/frontend/test/karma.conf.babel.js ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/test/karma.conf.babel.js b/modules/web-console/frontend/test/karma.conf.babel.js new file mode 100644 index 0000000..76a0ba0 --- /dev/null +++ b/modules/web-console/frontend/test/karma.conf.babel.js @@ -0,0 +1,91 @@ +/* + * 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 webpackConfig from '../gulpfile.babel.js/webpack'; +import path from 'path'; + +const basePath = path.resolve('./'); + +export default (config) => { + config.set({ + // Base path that will be used to resolve all patterns (eg. files, exclude). + basePath: basePath, + + // Frameworks to use available frameworks: https://npmjs.org/browse/keyword/karma-adapter + frameworks: ['mocha'], + + // List of files / patterns to load in the browser. + files: [ + 'test/**/*.test.js' + ], + + plugins: [ + require('karma-phantomjs-launcher'), + require('karma-teamcity-reporter'), + require('karma-mocha-reporter'), + require('karma-webpack'), + require('karma-mocha') + ], + + // Preprocess matching files before serving them to the browser + // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor. + preprocessors: { + 'test/**/*.js': ['webpack'] + }, + webpack: webpackConfig, + + webpackMiddleware: { + noInfo: true + }, + + // Test results reporter to use + // possible values: 'dots', 'progress' + // available reporters: https://npmjs.org/browse/keyword/karma-reporter. + reporters: ['mocha'], + + // web server port + port: 9876, + + // enable / disable colors in the output (reporters and logs) + colors: true, + + // level of logging + // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG + logLevel: config.LOG_INFO, + + // enable / disable watching file and executing tests whenever any file changes + autoWatch: true, + + // start these browsers + // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher + browsers: ['PhantomJS'], + + // Continuous Integration mode + // if true, Karma captures browsers, runs the tests and exits + singleRun: true, + + // Concurrency level + // how many browser should be started simultaneous + concurrency: Infinity, + + client: { + mocha: { + ui: 'tdd' + } + } + }); +}; http://git-wip-us.apache.org/repos/asf/ignite/blob/087f6405/modules/web-console/frontend/test/karma.conf.js ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/test/karma.conf.js b/modules/web-console/frontend/test/karma.conf.js index e13ba00..a8b1b11 100644 --- a/modules/web-console/frontend/test/karma.conf.js +++ b/modules/web-console/frontend/test/karma.conf.js @@ -15,99 +15,5 @@ * limitations under the License. */ -const path = require('path'); -const webpack = require('webpack'); - -const basePath = path.resolve('./'); - -module.exports = function(config) { - config.set({ - // Base path that will be used to resolve all patterns (eg. files, exclude). - basePath: basePath, - - // Frameworks to use available frameworks: https://npmjs.org/browse/keyword/karma-adapter - frameworks: ['mocha'], - - // List of files / patterns to load in the browser. - files: [ - 'test/**/*.test.js' - ], - - plugins: [ - require('karma-phantomjs-launcher'), - require('karma-teamcity-reporter'), - require('karma-webpack'), - require('karma-mocha') - ], - - // Preprocess matching files before serving them to the browser - // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor. - preprocessors: { - 'test/**/*.js': ['webpack'] - }, - - webpack: { - module: { - loaders: [ - { - test: /\.json$/, - loader: 'json' - }, - { - test: /\.js$/, - loader: 'babel', - exclude: /node_modules/ - } - ] - }, - resolve: { - extensions: ["", ".js"] - }, - plugins: [ - new webpack.ProvidePlugin({ - _: 'lodash' - }) - ] - }, - - webpackMiddleware: { - noInfo: true - }, - - // Test results reporter to use - // possible values: 'dots', 'progress' - // available reporters: https://npmjs.org/browse/keyword/karma-reporter. - reporters: ['teamcity'], - - // web server port - port: 9876, - - // enable / disable colors in the output (reporters and logs) - colors: true, - - // level of logging - // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG - logLevel: config.LOG_INFO, - - // enable / disable watching file and executing tests whenever any file changes - autoWatch: true, - - // start these browsers - // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher - browsers: ['PhantomJS'], - - // Continuous Integration mode - // if true, Karma captures browsers, runs the tests and exits - singleRun: true, - - // Concurrency level - // how many browser should be started simultaneous - concurrency: Infinity, - - client: { - mocha: { - ui: 'tdd' - } - } - }); -}; +require('babel-core/register'); +module.exports = require('./karma.conf.babel.js').default; http://git-wip-us.apache.org/repos/asf/ignite/blob/087f6405/modules/web-console/frontend/test/unit/JavaTransformer.test.js ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/test/unit/JavaTransformer.test.js b/modules/web-console/frontend/test/unit/JavaTransformer.test.js new file mode 100644 index 0000000..3f39000 --- /dev/null +++ b/modules/web-console/frontend/test/unit/JavaTransformer.test.js @@ -0,0 +1,57 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import JavaTypes from '../../app/services/JavaTypes.service.js'; + +import generator from '../../app/modules/configuration/generator/ConfigurationGenerator'; +import transformer from '../../app/modules/configuration/generator/JavaTransformer.service'; + +import { assert } from 'chai'; + +suite.skip('JavaTransformerTestsSuite', () => { + test('AtomicConfiguration', () => { + const ConfigurationGenerator = generator[1](); + const JavaTransformer = transformer[1][2](JavaTypes[1](), ConfigurationGenerator); + + const acfg = { + atomicSequenceReserveSize: 1001, + backups: 1, + cacheMode: 'LOCAL' + }; + + const bean = ConfigurationGenerator.clusterAtomics(acfg); + + console.log(JavaTransformer.generateSection(bean)); + }); + + test('IgniteConfiguration', () => { + const ConfigurationGenerator = generator[1](); + const JavaTransformer = transformer[1][2](JavaTypes[1](), ConfigurationGenerator); + + const clusterCfg = { + atomics: { + atomicSequenceReserveSize: 1001, + backups: 1, + cacheMode: 'LOCAL' + } + }; + + const bean = ConfigurationGenerator.igniteConfiguration(clusterCfg); + + console.log(JavaTransformer.toClassFile(bean, 'config', 'ServerConfigurationFactory', null)); + }); +}); http://git-wip-us.apache.org/repos/asf/ignite/blob/087f6405/modules/web-console/frontend/test/unit/JavaTypes.test.js ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/test/unit/JavaTypes.test.js b/modules/web-console/frontend/test/unit/JavaTypes.test.js index 7b12168..2df8c6a 100644 --- a/modules/web-console/frontend/test/unit/JavaTypes.test.js +++ b/modules/web-console/frontend/test/unit/JavaTypes.test.js @@ -17,7 +17,11 @@ import JavaTypes from '../../app/services/JavaTypes.service.js'; -const INSTANCE = new JavaTypes(); +import ClusterDflts from '../../app/modules/configuration/generator/defaults/cluster.provider'; +import CacheDflts from '../../app/modules/configuration/generator/defaults/cache.provider'; +import IgfsDflts from '../../app/modules/configuration/generator/defaults/igfs.provider'; + +const INSTANCE = new JavaTypes((new ClusterDflts()).$get[0](), (new CacheDflts()).$get[0](), (new IgfsDflts()).$get[0]()); import { assert } from 'chai'; @@ -43,6 +47,23 @@ suite('JavaTypesTestsSuite', () => { assert.equal(INSTANCE.nonBuiltInClass('my.package.CustomClass'), true); }); + test('nonEnum', () => { + assert.equal(INSTANCE.nonEnum('org.apache.ignite.cache.CacheMode'), false); + assert.equal(INSTANCE.nonEnum('org.apache.ignite.transactions.TransactionConcurrency'), false); + assert.equal(INSTANCE.nonEnum('org.apache.ignite.cache.CacheWriteSynchronizationMode'), false); + assert.equal(INSTANCE.nonEnum('org.apache.ignite.igfs.IgfsIpcEndpointType'), false); + assert.equal(INSTANCE.nonEnum('java.io.Serializable'), true); + assert.equal(INSTANCE.nonEnum('BigDecimal'), true); + }); + + test('shortClassName', () => { + assert.equal(INSTANCE.shortClassName('java.math.BigDecimal'), 'BigDecimal'); + assert.equal(INSTANCE.shortClassName('int'), 'int'); + assert.equal(INSTANCE.shortClassName('java.lang.Integer'), 'Integer'); + assert.equal(INSTANCE.shortClassName('java.util.UUID'), 'UUID'); + assert.equal(INSTANCE.shortClassName('Abstract'), 'Abstract'); + }); + test('fullClassName', () => { assert.equal(INSTANCE.fullClassName('BigDecimal'), 'java.math.BigDecimal'); }); http://git-wip-us.apache.org/repos/asf/ignite/blob/087f6405/modules/web-console/frontend/test/unit/SharpTransformer.test.js ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/test/unit/SharpTransformer.test.js b/modules/web-console/frontend/test/unit/SharpTransformer.test.js new file mode 100644 index 0000000..20de266 --- /dev/null +++ b/modules/web-console/frontend/test/unit/SharpTransformer.test.js @@ -0,0 +1,55 @@ +/* + * 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 generator from '../../app/modules/configuration/generator/PlatformGenerator'; +import transformer from '../../app/modules/configuration/generator/SharpTransformer.service'; + +import { assert } from 'chai'; + +suite.skip('SharpTransformerTestsSuite', () => { + test('AtomicConfiguration', () => { + const PlatformGenerator = generator[1](); + const SharpTransformer = transformer[1](PlatformGenerator); + + const acfg = { + atomicSequenceReserveSize: 1001, + backups: 1, + cacheMode: 'LOCAL' + }; + + const bean = PlatformGenerator.clusterAtomics(acfg); + + console.log(SharpTransformer.generateSection(bean)); + }); + + test('IgniteConfiguration', () => { + const PlatformGenerator = generator[1](); + const SharpTransformer = transformer[1](PlatformGenerator); + + const clusterCfg = { + atomics: { + atomicSequenceReserveSize: 1001, + backups: 1, + cacheMode: 'LOCAL' + } + }; + + const bean = PlatformGenerator.igniteConfiguration(clusterCfg); + + console.log(SharpTransformer.toClassFile(bean, 'config', 'ServerConfigurationFactory', null)); + }); +}); http://git-wip-us.apache.org/repos/asf/ignite/blob/087f6405/modules/web-console/frontend/test/unit/SpringTransformer.test.js ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/test/unit/SpringTransformer.test.js b/modules/web-console/frontend/test/unit/SpringTransformer.test.js new file mode 100644 index 0000000..7998f66 --- /dev/null +++ b/modules/web-console/frontend/test/unit/SpringTransformer.test.js @@ -0,0 +1,57 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import JavaTypes from '../../app/services/JavaTypes.service.js'; + +import generator from '../../app/modules/configuration/generator/ConfigurationGenerator'; +import transformer from '../../app/modules/configuration/generator/SpringTransformer.service'; + +import { assert } from 'chai'; + +suite.skip('SpringTransformerTestsSuite', () => { + test('AtomicConfiguration', () => { + const ConfigurationGenerator = generator[1](); + const SpringTransformer = transformer[1][2](JavaTypes[1](), ConfigurationGenerator); + + const acfg = { + atomicSequenceReserveSize: 1001, + backups: 1, + cacheMode: 'LOCAL' + }; + + const bean = ConfigurationGenerator.clusterAtomics(acfg); + + console.log(SpringTransformer.generateSection(bean)); + }); + + test('IgniteConfiguration', () => { + const ConfigurationGenerator = generator[1](); + const SpringTransformer = transformer[1][2](JavaTypes[1](), ConfigurationGenerator); + + const cfg = { + atomics: { + atomicSequenceReserveSize: 1001, + backups: 1, + cacheMode: 'LOCAL' + } + }; + + const bean = ConfigurationGenerator.igniteConfiguration(cfg); + + console.log(SpringTransformer.generate(bean)); + }); +}); http://git-wip-us.apache.org/repos/asf/ignite/blob/087f6405/modules/web-console/frontend/test/unit/SqlTypes.test.js ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/test/unit/SqlTypes.test.js b/modules/web-console/frontend/test/unit/SqlTypes.test.js index 3cfaafc..2d54bdf 100644 --- a/modules/web-console/frontend/test/unit/SqlTypes.test.js +++ b/modules/web-console/frontend/test/unit/SqlTypes.test.js @@ -15,23 +15,6 @@ * limitations under the License. */ -/* - * 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 SqlTypes from '../../app/services/SqlTypes.service.js'; const INSTANCE = new SqlTypes(); http://git-wip-us.apache.org/repos/asf/ignite/blob/087f6405/modules/web-console/frontend/test/unit/Version.test.js ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/test/unit/Version.test.js b/modules/web-console/frontend/test/unit/Version.test.js new file mode 100644 index 0000000..a67fde8 --- /dev/null +++ b/modules/web-console/frontend/test/unit/Version.test.js @@ -0,0 +1,82 @@ +/* + * 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 VersionService from '../../app/modules/configuration/Version.service.js'; + +const INSTANCE = new VersionService(); + +import { assert } from 'chai'; + +suite('VersionServiceTestsSuite', () => { + test('Check patch version', () => { + assert.equal(INSTANCE.compare('1.7.2', '1.7.1'), 1); + }); + + test('Check minor version', () => { + assert.equal(INSTANCE.compare('1.8.1', '1.7.1'), 1); + }); + + test('Check major version', () => { + assert.equal(INSTANCE.compare('2.7.1', '1.7.1'), 1); + }); + + test('Version a > b', () => { + assert.equal(INSTANCE.compare('1.7.0', '1.5.0'), 1); + }); + + test('Version a = b', () => { + assert.equal(INSTANCE.compare('1.7.0', '1.7.0'), 0); + }); + + test('Version a < b', () => { + assert.equal(INSTANCE.compare('1.5.1', '1.5.2'), -1); + }); + + test('Check since call', () => { + assert.equal(INSTANCE.since('1.6.0', '1.5.0'), true); + }); + + test('Check wrong since call', () => { + assert.equal(INSTANCE.since('1.3.0', '1.5.0'), false); + }); + + test('Parse 1.7.0-SNAPSHOT', () => { + const version = INSTANCE.parse('1.7.0-SNAPSHOT'); + assert.equal(version.major, 1); + assert.equal(version.minor, 7); + assert.equal(version.maintenance, 0); + assert.equal(version.stage, 'SNAPSHOT'); + assert.equal(version.revTs, 0); + assert.isNull(version.revHash); + }); + + test('Parse strip -DEV 1.7.0-DEV', () => { + const version = INSTANCE.parse('1.7.0-DEV'); + assert.equal(version.major, 1); + assert.equal(version.minor, 7); + assert.equal(version.maintenance, 0); + assert.equal(version.stage, ''); + }); + + test('Parse strip -n/a 1.7.0-n/a', () => { + const version = INSTANCE.parse('1.7.0-n/a'); + assert.equal(version.major, 1); + assert.equal(version.minor, 7); + assert.equal(version.maintenance, 0); + assert.equal(version.stage, ''); + }); +}); http://git-wip-us.apache.org/repos/asf/ignite/blob/087f6405/modules/web-console/frontend/test/unit/defaultName.filter.test.js ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/test/unit/defaultName.filter.test.js b/modules/web-console/frontend/test/unit/defaultName.filter.test.js new file mode 100644 index 0000000..5f28290 --- /dev/null +++ b/modules/web-console/frontend/test/unit/defaultName.filter.test.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. + */ + +import defaultName from '../../app/filters/default-name.filter'; + +import { assert } from 'chai'; + +const INSTANCE = defaultName[0](); + +suite('defaultName', () => { + test('defaultName filter', () => { + assert.equal(INSTANCE(''), '<default>'); + assert.equal(INSTANCE(null), '<default>'); + assert.equal(INSTANCE(undefined), '<default>'); + assert.equal(INSTANCE('', false), '<default>'); + assert.equal(INSTANCE(null, false), '<default>'); + assert.equal(INSTANCE(undefined, false), '<default>'); + assert.equal(INSTANCE('', true), '<default>'); + assert.equal(INSTANCE(null, true), '<default>'); + assert.equal(INSTANCE(undefined, true), '<default>'); + assert.equal(INSTANCE("name", false), 'name'); + assert.equal(INSTANCE("name", true), 'name'); + }); +}); http://git-wip-us.apache.org/repos/asf/ignite/blob/087f6405/modules/web-console/frontend/views/configuration/caches.jade ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/views/configuration/caches.jade b/modules/web-console/frontend/views/configuration/caches.jade index a1218ec..74d5505 100644 --- a/modules/web-console/frontend/views/configuration/caches.jade +++ b/modules/web-console/frontend/views/configuration/caches.jade @@ -45,9 +45,10 @@ include ../../app/helpers/jade/mixins.jade div(ng-show='ui.expanded') include ../../app/modules/states/configuration/caches/concurrency.jade + include ../../app/modules/states/configuration/caches/near-cache-client.jade + include ../../app/modules/states/configuration/caches/near-cache-server.jade include ../../app/modules/states/configuration/caches/node-filter.jade include ../../app/modules/states/configuration/caches/rebalance.jade - include ../../app/modules/states/configuration/caches/server-near-cache.jade include ../../app/modules/states/configuration/caches/statistics.jade +advanced-options-toggle-default http://git-wip-us.apache.org/repos/asf/ignite/blob/087f6405/modules/web-console/frontend/views/configuration/clusters.jade ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/views/configuration/clusters.jade b/modules/web-console/frontend/views/configuration/clusters.jade index b79b1ea..8a3a194 100644 --- a/modules/web-console/frontend/views/configuration/clusters.jade +++ b/modules/web-console/frontend/views/configuration/clusters.jade @@ -41,10 +41,10 @@ include ../../app/helpers/jade/mixins.jade +advanced-options-toggle-default div(ng-show='ui.expanded') - include ../../app/modules/states/configuration/clusters/atomic.jade include ../../app/modules/states/configuration/clusters/binary.jade include ../../app/modules/states/configuration/clusters/cache-key-cfg.jade + include ../../app/modules/states/configuration/clusters/checkpoint.jade include ../../app/modules/states/configuration/clusters/collision.jade include ../../app/modules/states/configuration/clusters/communication.jade include ../../app/modules/states/configuration/clusters/connector.jade @@ -53,6 +53,7 @@ include ../../app/helpers/jade/mixins.jade include ../../app/modules/states/configuration/clusters/events.jade include ../../app/modules/states/configuration/clusters/failover.jade include ../../app/modules/states/configuration/clusters/igfs.jade + include ../../app/modules/states/configuration/clusters/load-balancing.jade include ../../app/modules/states/configuration/clusters/logger.jade include ../../app/modules/states/configuration/clusters/marshaller.jade include ../../app/modules/states/configuration/clusters/metrics.jade http://git-wip-us.apache.org/repos/asf/ignite/blob/087f6405/modules/web-console/frontend/views/configuration/domains-import.jade ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/views/configuration/domains-import.jade b/modules/web-console/frontend/views/configuration/domains-import.jade index e2eaf97..99014bc 100644 --- a/modules/web-console/frontend/views/configuration/domains-import.jade +++ b/modules/web-console/frontend/views/configuration/domains-import.jade @@ -28,8 +28,10 @@ mixin td-ellipses-lbl(w, lbl) .modal-content(ignite-loading='importDomainFromDb' ignite-loading-text='{{importDomain.loadingOptions.text}}') #errors-container.modal-header.header button.close(ng-click='$hide()' aria-hidden='true') × - h4.modal-title(ng-if='!importDomain.demo') Import domain models from database - h4.modal-title(ng-if='importDomain.demo') Import domain models from demo database + h4.modal-title() + i.fa.fa-database + span(ng-if='!importDomain.demo') Import domain models from database + span(ng-if='importDomain.demo') Import domain models from demo database .modal-body .import-domain-model-wizard-page(ng-if='importDomain.action == "drivers" && !importDomain.jdbcDriversNotFound') .import-domain-model-wizard-page(ng-if='importDomain.action == "drivers" && importDomain.jdbcDriversNotFound') @@ -144,14 +146,16 @@ mixin td-ellipses-lbl(w, lbl) -var form = 'optionsForm' form.form-horizontal(name=form novalidate) - .settings-row.settings-row_small-label - +java-package('Package:', 'ui.packageName', '"domainPackageName"', true, true, 'Package that will be used for POJOs generation')(data-container='.modal-domain-import') .settings-row +checkbox('Use Java built-in types for keys', 'ui.builtinKeys', '"domainBuiltinKeys"', 'Use Java built-in types like "Integer", "Long", "String" instead of POJO generation in case when table primary key contains only one field') .settings-row +checkbox('Use primitive types for NOT NULL table columns', 'ui.usePrimitives', '"domainUsePrimitives"', 'Use primitive types like "int", "long", "double" for POJOs fields generation in case of NOT NULL columns') .settings-row +checkbox('Generate aliases for query fields', 'ui.generateAliases', '"domainGenerateAliases"', 'Generate aliases for query fields with database field names when database field name differ from Java field name') + .settings-row + +checkbox('Generate POJO classes', 'ui.generatePojo', '"domainGeneratePojo"', 'If selected then POJO classes will be generated from database tables') + .settings-row.settings-row_small-label(ng-show='ui.generatePojo') + +java-package('Package:', 'ui.packageName', '"domainPackageName"', true, true, 'Package that will be used for POJOs generation')(data-container='.modal-domain-import') .settings-row.settings-row_small-label +ignite-form-field-dropdown('Clusters:', 'ui.generatedCachesClusters', '"generatedCachesClusters"', false, false, true, 'Choose clusters for generated caches', '', 'clusters', @@ -160,4 +164,4 @@ mixin td-ellipses-lbl(w, lbl) .modal-footer label(ng-hide='importDomain.action == "drivers" || (importDomain.action == "connect" && importDomain.demo)').labelField {{importDomain.info}} a.btn.btn-primary(ng-hide='importDomain.action == "drivers" || importDomain.action == "connect"' ng-click='importDomainPrev()' bs-tooltip='' data-title='{{prevTooltipText()}}' data-placement='bottom') Prev - a.btn.btn-primary(ng-click='importDomainNext()' ng-disabled='!importDomainNextAvailable()' bs-tooltip='' data-title='{{nextTooltipText()}}' data-placement='bottom') {{importDomain.button}} + a.btn.btn-primary(ng-click='importDomainNext(optionsForm)' ng-disabled='!importDomainNextAvailable()' bs-tooltip='' data-title='{{nextTooltipText()}}' data-placement='bottom') {{importDomain.button}} http://git-wip-us.apache.org/repos/asf/ignite/blob/087f6405/modules/web-console/frontend/views/configuration/summary-project-structure.jade ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/views/configuration/summary-project-structure.jade b/modules/web-console/frontend/views/configuration/summary-project-structure.jade index aa09437..29d4538 100644 --- a/modules/web-console/frontend/views/configuration/summary-project-structure.jade +++ b/modules/web-console/frontend/views/configuration/summary-project-structure.jade @@ -19,7 +19,7 @@ button.close(id='summary-project-structure-close' ng-click='$hide()') × .popover-content treecontrol.tree-classic(tree-model='projectStructure' options='projectStructureOptions' expanded-nodes='projectStructureExpanded') - span(ng-switch='' on='node.type') + span(ng-switch='node.type') span(ng-switch-when='folder') label {{node.name}} span(ng-switch-when='file') http://git-wip-us.apache.org/repos/asf/ignite/blob/087f6405/modules/web-console/frontend/views/configuration/summary.jade ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/views/configuration/summary.jade b/modules/web-console/frontend/views/configuration/summary.jade index 0d30df8..d041fea 100644 --- a/modules/web-console/frontend/views/configuration/summary.jade +++ b/modules/web-console/frontend/views/configuration/summary.jade @@ -53,16 +53,16 @@ mixin hard-link(ref, txt) label Server .panel-collapse(id='server' role='tabpanel' bs-collapse-target) - ignite-ui-ace-tabs.summary-tabs + .summary-tabs(ignite-ui-ace-tabs) div(bs-tabs data-bs-active-pane="tabsServer.activeTab" template='configuration/summary-tabs.html') div(bs-pane title='XML') - ignite-ui-ace-xml(ng-if='tabsServer.activeTab == 0 || tabsServer.init[0]' ng-init='tabsServer.init[0] = true' data-master='cluster' data-no-deep-watch) + ignite-ui-ace-spring(ng-if='tabsServer.activeTab == 0 || tabsServer.init[0]' ng-init='tabsServer.init[0] = true' data-master='cluster' data-generator='igniteConfiguration' data-no-deep-watch) div(bs-pane title='Java') - ignite-ui-ace-java(ng-if='tabsServer.activeTab == 1 || tabsServer.init[1]' ng-init='tabsServer.init[1] = true' data-master='cluster' data-no-deep-watch) + ignite-ui-ace-java(ng-if='tabsServer.activeTab == 1 || tabsServer.init[1]' ng-init='tabsServer.init[1] = true' data-master='cluster' data-generator='igniteConfiguration' data-no-deep-watch) div(bs-pane title='POM') - ignite-ui-ace-pom(ng-if='tabsServer.activeTab == 2 || tabsServer.init[2]' ng-init='tabsServer.init[2] = true' data-cluster='cluster' data-no-deep-watch) + ignite-ui-ace-pom(ng-if='tabsServer.activeTab == 2 || tabsServer.init[2]' ng-init='tabsServer.init[2] = true' data-cluster='cluster' data-generator='igniteConfiguration' data-no-deep-watch) div(bs-pane title='Dockerfile') - ignite-ui-ace-docker(ng-if='tabsServer.activeTab == 3 || tabsServer.init[3]' ng-init='tabsServer.init[3] = true' data-cluster='cluster' data-no-deep-watch ng-model='ctrl.data.docker') + ignite-ui-ace-docker(ng-if='tabsServer.activeTab == 3 || tabsServer.init[3]' ng-init='tabsServer.init[3] = true' data-cluster='cluster' data-generator='igniteConfiguration' data-no-deep-watch ng-model='ctrl.data.docker') .panel.panel-default .panel-heading(role='tab' bs-collapse-toggle) @@ -70,53 +70,14 @@ mixin hard-link(ref, txt) label Client .panel-collapse(id='client' role='tabpanel' bs-collapse-target) - -var form = 'clientForm' - form(name=form novalidate) - -var nearCfg = 'ctrl.cluster.clientNearCfg' - -var nearCfgEvictionPolicy = nearCfg + '.nearEvictionPolicy[' + nearCfg + '.nearEvictionPolicy.kind]' - - .group-content - .settings-row(ng-if='true') - .col-xs-8.col-sm-8.col-md-7 - +ignite-form-field-number('Near cache start size:', nearCfg + '.nearStartSize', '"nearStartSize"', false, false, '375000', false, false, false, 'Initial cache size for near cache which will be used to pre-create internal hash table after start') - - .settings-row(ng-if='true') - .col-xs-8.col-sm-8.col-md-7 - +ignite-form-field-dropdown('Near cache eviction policy', nearCfg + '.nearEvictionPolicy.kind', '"evictionPolicies"', false, false, false, 'Not set', false, '[\ - {value: "LRU", label: "LRU"},\ - {value: "FIFO", label: "FIFO"},\ - {value: "SORTED", label: "Sorted"},\ - {value: undefined, label: "Not set"}\ - ]', 'Near cache eviction policy') - - span(ng-if='#{nearCfg}.nearEvictionPolicy.kind') - a.customize( - ng-show='ctrl.__form.expanded' - ng-click='ctrl.__form.expanded = false' - ) Hide settings - a.customize( - ng-hide='ctrl.__form.expanded' - ng-click='ctrl.__form.expanded = true' - ) Show settings - - .settings-row - .panel-details.col-xs-12.col-sm-12.col-md-7(ng-if='ctrl.__form.expanded && #{nearCfg}.nearEvictionPolicy.kind') - .details-row - +ignite-form-field-number('Batch size:', nearCfgEvictionPolicy + '.batchSize', '"batchSize"', false, false, '1', false, false, false, 'Number of entries to remove on shrink') - - .details-row - +ignite-form-field-number('Max memory size:', nearCfgEvictionPolicy + '.maxMemorySize', '"maxMemorySize"', false, false, '0', false, false, false, 'Maximum allowed cache size in bytes') - - .details-row - +ignite-form-field-number('Max size:', nearCfgEvictionPolicy + '.maxSize', '"maxSize"', false, false, '100000', false, false, false, 'Maximum allowed size of cache before entry will start getting evicted') - .summary-tabs(ignite-ui-ace-tabs) div(bs-tabs data-bs-active-pane="tabsClient.activeTab" template='configuration/summary-tabs.html') div(bs-pane title='XML') - ignite-ui-ace-xml(ng-if='tabsClient.activeTab == 0 || tabsClient.init[0]' ng-init='tabsClient.init[0] = true' data-master='cluster' data-no-deep-watch data-cluster-cfg='#{nearCfg}') + ignite-ui-ace-spring(ng-if='tabsClient.activeTab == 0 || tabsClient.init[0]' ng-init='tabsClient.init[0] = true' data-master='cluster' data-generator='igniteConfiguration' data-client='true' data-no-deep-watch) div(bs-pane title='Java') - ignite-ui-ace-java(ng-if='tabsClient.activeTab == 1 || tabsClient.init[1]' ng-init='tabsClient.init[1] = true' data-master='cluster' data-no-deep-watch data-cluster-cfg='#{nearCfg}') + ignite-ui-ace-java(ng-if='tabsClient.activeTab == 1 || tabsClient.init[1]' ng-init='tabsClient.init[1] = true' data-master='cluster' data-generator='igniteConfiguration' data-client='true' data-no-deep-watch) div(bs-pane title='POM') - ignite-ui-ace-pom(ng-if='tabsClient.activeTab == 2 || tabsClient.init[2]' ng-init='tabsClient.init[2] = true' data-cluster='cluster' data-no-deep-watch) + ignite-ui-ace-pom(ng-if='tabsClient.activeTab == 2 || tabsClient.init[2]' ng-init='tabsClient.init[2] = true' data-cluster='cluster' data-generator='igniteConfiguration' data-client='true' data-no-deep-watch) div(bs-pane title='POJO' ng-if='cluster | hasPojo') ignite-ui-ace-pojos(ng-if='tabsClient.activeTab == 3 || tabsClient.init[3]' ng-init='tabsClient.init[3] = true' data-cluster='cluster' data-no-deep-watch ng-model='ctrl.data.pojos') + http://git-wip-us.apache.org/repos/asf/ignite/blob/087f6405/modules/web-console/frontend/views/sql/cache-metadata.jade ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/views/sql/cache-metadata.jade b/modules/web-console/frontend/views/sql/cache-metadata.jade index 450c178..385960a 100644 --- a/modules/web-console/frontend/views/sql/cache-metadata.jade +++ b/modules/web-console/frontend/views/sql/cache-metadata.jade @@ -21,7 +21,7 @@ input.form-control(type='text' ng-model='metaFilter' placeholder='Filter metadata...') .popover-content(ng-if='metadata && metadata.length > 0') treecontrol.tree-classic(tree-model='metadata' options='metaOptions' filter-expression='metaFilter') - span(ng-switch='' on='node.type') + span(ng-switch='node.type') span(ng-switch-when='type' ng-dblclick='dblclickMetadata(paragraph, node)') i.fa.fa-table label.clickable(ng-bind='node.displayName') http://git-wip-us.apache.org/repos/asf/ignite/blob/087f6405/modules/web-console/frontend/views/sql/notebook-new.jade ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/views/sql/notebook-new.jade b/modules/web-console/frontend/views/sql/notebook-new.jade index 09b2dae..8d9e8c4 100644 --- a/modules/web-console/frontend/views/sql/notebook-new.jade +++ b/modules/web-console/frontend/views/sql/notebook-new.jade @@ -19,7 +19,9 @@ .modal-content .modal-header button.close(ng-click='$hide()') × - h4.modal-title New SQL notebook + h4.modal-title + i.fa.fa-file-o + | New SQL notebook form.form-horizontal.modal-body.row(name='ui.inputForm' novalidate) div .col-sm-2 http://git-wip-us.apache.org/repos/asf/ignite/blob/087f6405/modules/web-console/frontend/views/sql/sql.jade ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/views/sql/sql.jade b/modules/web-console/frontend/views/sql/sql.jade index 81acdfd..4a596b9 100644 --- a/modules/web-console/frontend/views/sql/sql.jade +++ b/modules/web-console/frontend/views/sql/sql.jade @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. +include ../../app/directives/ui-grid-settings/ui-grid-settings.jade + mixin btn-toolbar(btn, click, tip, focusId) i.btn.btn-default.fa(class=btn ng-click=click bs-tooltip='' data-title=tip ignite-on-click-focus=focusId data-trigger='hover' data-placement='bottom') @@ -82,36 +84,70 @@ mixin paragraph-rename .input-tip input.form-control(id='paragraph-name-{{paragraph.id}}' ng-model='paragraph.editName' required ng-click='$event.stopPropagation();' ignite-on-enter='renameParagraph(paragraph, paragraph.editName)' ignite-on-escape='paragraph.edit = false') +mixin query-settings + label.tipLabel Refresh rate: + button.btn.btn-default.fa.fa-clock-o.tipLabel(title='Click to show refresh rate dialog' ng-class='{"btn-info": paragraph.rate && paragraph.rate.installed}' bs-popover data-template-url='/sql/paragraph-rate.html' data-placement='left' data-auto-close='1' data-trigger='click') {{rateAsString(paragraph)}} + label.tipLabel Page size: + button.btn.btn-default.select-toggle.tipLabel(ng-model='paragraph.pageSize' bs-options='item for item in pageSizes' bs-select bs-tooltip data-placement='bottom-right' data-title='Max number of rows to show in query result as one page') + label.margin-left-dflt(title='Fetch first page of results only') + input(type='checkbox' ng-model='paragraph.firstPageOnly') + span Fetch first page only + label.margin-left-dflt(title='Execute query locally on selected node.\nNode selection dialog will be shown before query execution.') + input(type='checkbox' ng-model='paragraph.localQry') + span Local query + +mixin query-actions + .btn-group(bs-tooltip='' data-title='{{actionTooltip(paragraph, "execute", true)}}' data-placement='bottom') + button.btn.btn-primary(ng-disabled='!actionAvailable(paragraph, true)' ng-click='execute(paragraph)') Execute + button.btn.btn-primary.dropdown-toggle( + ng-disabled='!actionAvailable(paragraph, true)' + bs-dropdown='' + data-container='body' + data-placement='bottom-right' + ) + span.caret + ul.dropdown-menu(role='menu') + li #[a(href='javascript:void(0)' ng-click='execute(paragraph)') Execute] + li #[a(href='javascript:void(0)' ng-if='nonCollocatedJoinsAvailable(paragraph)' ng-click='execute(paragraph, true)') Execute non collocated joins] + .btn-group(bs-tooltip='' data-title='{{actionTooltip(paragraph, "execute scan", false)}}' data-placement='bottom') + button.btn.btn-primary(ng-disabled='!actionAvailable(paragraph, false)' ng-click='scan(paragraph)') Scan + button.btn.btn-primary.dropdown-toggle( + ng-disabled='!actionAvailable(paragraph, false)' + bs-dropdown='' + data-container='body' + data-placement='bottom-right' + ) + span.caret + ul.dropdown-menu(role='menu') + li #[a(href='javascript:void(0)' ng-click='scan(paragraph)') Scan] + li #[a(href='javascript:void(0)' ng-click='actionAvailable(paragraph, false) && scanWithFilter(paragraph)') Scan with filter] + a.btn.btn-default(ng-disabled='!actionAvailable(paragraph, true)' ng-click='explain(paragraph)' data-placement='bottom' bs-tooltip='' data-title='{{actionTooltip(paragraph, "explain", true)}}') Explain + mixin query-controls .sql-controls - a.btn.btn-primary(ng-disabled='!actionAvailable(paragraph, true)' ng-click='execute(paragraph)' data-placement='bottom' bs-tooltip='' data-title='{{actionTooltip(paragraph, "execute", true)}}') Execute - a.btn.btn-primary(ng-disabled='!actionAvailable(paragraph, true)' ng-click='explain(paragraph)' data-placement='bottom' bs-tooltip='' data-title='{{actionTooltip(paragraph, "explain", true)}}') Explain - .btn-group(bs-tooltip='' data-title='{{actionTooltip(paragraph, "execute scan", false)}}' data-placement='bottom') - a.btn.btn-primary.fieldButton(ng-disabled='!actionAvailable(paragraph, false)' ng-click='scan(paragraph)') Scan - a.btn.btn-primary(ng-disabled='!actionAvailable(paragraph, false)' data-toggle='dropdown' data-container='body' bs-dropdown='[{ text: "Scan with filter", click: "actionAvailable(paragraph, false) && scanWithFilter(paragraph)" }]') - span.caret - + +query-actions() .pull-right - label.tipLabel System columns: - a.btn.btn-default.fa.fa-bars.tipLabel(ng-class='{"btn-info": paragraph.systemColumns}' ng-click='toggleSystemColumns(paragraph)' ng-disabled='paragraph.disabledSystemColumns' bs-tooltip data-title='Show "_KEY", "_VAL" columns') - label.tipLabel Refresh rate: - button.btn.btn-default.fa.fa-clock-o.tipLabel(title='Click to show refresh rate dialog' ng-class='{"btn-info": paragraph.rate && paragraph.rate.installed}' bs-popover data-template-url='/sql/paragraph-rate.html' data-placement='left' data-auto-close='1' data-trigger='click') {{rateAsString(paragraph)}} - label.tipLabel Page size: - button.select-toggle.fieldButton.btn.btn-default(ng-model='paragraph.pageSize' bs-options='item for item in pageSizes' bs-select bs-tooltip data-placement='bottom-right' data-title='Max number of rows to show in query result as one page') + +query-settings() mixin table-result .total.row .col-xs-4 + +ui-grid-settings label Page: #[b {{paragraph.page}}] label.margin-left-dflt Results so far: #[b {{paragraph.rows.length + paragraph.total}}] label.margin-left-dflt Duration: #[b {{paragraph.duration | duration}}] .col-xs-4 +result-toolbar .col-xs-4 - .btn-group.pull-right(ng-disabled='paragraph.loading') - button.btn.btn-primary.fieldButton(ng-click='exportCsv(paragraph)' bs-tooltip data-title='{{actionTooltip(paragraph, "export", false)}}') Export - button.btn.btn-primary(id='export-item-dropdown' data-toggle='dropdown' data-container='body' bs-dropdown='exportDropdown' data-placement='bottom-right') - span.caret + .pull-right + label(style='margin-right: 10px;') + input(type='checkbox' ng-model='paragraph.systemColumns' ng-change='toggleSystemColumns(paragraph)' ng-disabled='paragraph.disabledSystemColumns') + span Show _KEY, _VAL columns + .btn-group(ng-disabled='paragraph.loading') + button.btn.btn-primary(ng-click='exportCsv(paragraph)' bs-tooltip data-title='{{actionTooltip(paragraph, "export", false)}}') Export + button.btn.btn-primary.dropdown-toggle(id='export-item-dropdown' data-toggle='dropdown' data-container='body' bs-dropdown='exportDropdown' data-placement='bottom-right') + span.caret + .grid(ui-grid='paragraph.gridOptions' ui-grid-resize-columns ui-grid-exporter) mixin chart-result @@ -161,15 +197,15 @@ mixin chart-result .col-xs-4.col-sm-3 div(ng-show='caches.length > 0' style='padding: 5px 10px' st-table='displayedCaches' st-safe-src='caches') lable.labelField.labelFormField Caches: - i.fa.fa-database.tipField(title='Click to show cache types metadata dialog' bs-popover data-template-url='/sql/cache-metadata.html' data-placement='bottom' data-trigger='click' data-container='#{{ paragraph.id}}') + i.fa.fa-database.tipField(title='Click to show cache types metadata dialog' bs-popover data-template-url='/sql/cache-metadata.html' data-placement='bottom' data-trigger='click' data-container='#{{ paragraph.id }}') .input-tip input.form-control(type='text' st-search='label' placeholder='Filter caches...') table.links tbody.scrollable-y(style='max-height: 15em; display: block;') tr(ng-repeat='cache in displayedCaches track by cache.name') td(style='width: 100%') - input.labelField(id='cache{{$index}}' type='radio' value='{{cache.name}}' ng-model='paragraph.cacheName') - label(for='cache{{$index}}' ng-bind='cache.label') + input.labelField(id='cache_{{ [paragraph.id, $index].join("_") }}' type='radio' value='{{cache.name}}' ng-model='paragraph.cacheName') + label(for='cache_{{ [paragraph.id, $index].join("_") }} ' ng-bind='cache.label') .empty-caches(ng-show='displayedCaches.length == 0 && caches.length != 0') label Wrong caches filter .empty-caches(ng-show='caches.length == 0') @@ -183,10 +219,10 @@ mixin chart-result +table-result .chart(ng-switch-when='chart') +chart-result - .footer.clearfix(ng-show='paragraph.nonRefresh()') + .footer.clearfix a.pull-left(ng-click='showResultQuery(paragraph)') Show query - -var nextVisibleCondition = 'paragraph.queryId && (paragraph.table() || paragraph.chart() && (paragraph.timeLineSupported() || !paragraph.chartTimeLineEnabled()))' + -var nextVisibleCondition = 'paragraph.resultType() != "error" && paragraph.queryId && paragraph.nonRefresh() && (paragraph.table() || paragraph.chart() && !paragraph.scanExplain())' .pull-right(ng-show=nextVisibleCondition ng-class='{disabled: paragraph.loading}' ng-click='!paragraph.loading && nextPage(paragraph)') i.fa.fa-chevron-circle-right http://git-wip-us.apache.org/repos/asf/ignite/blob/087f6405/modules/web-console/frontend/views/templates/agent-download.jade ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/views/templates/agent-download.jade b/modules/web-console/frontend/views/templates/agent-download.jade index 864694b..a6da3d1 100644 --- a/modules/web-console/frontend/views/templates/agent-download.jade +++ b/modules/web-console/frontend/views/templates/agent-download.jade @@ -18,8 +18,10 @@ .modal-dialog .modal-content #errors-container.modal-header.header - h4.modal-title(ng-if='!hasAgents') Connection to Ignite Web Agent is not established - h4.modal-title(ng-if='hasAgents') Connection to Ignite Node is not established + h4.modal-title + i.fa.fa-download + span(ng-if='!hasAgents') Connection to Ignite Web Agent is not established + span(ng-if='hasAgents') Connection to Ignite Node is not established .agent-download(ng-if='!hasAgents') p Please download and run #[a(href='javascript:void(0)' ng-click='downloadAgent()') ignite-web-agent] in order to {{::agentGoal}} p For run: http://git-wip-us.apache.org/repos/asf/ignite/blob/087f6405/modules/web-console/frontend/views/templates/batch-confirm.jade ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/views/templates/batch-confirm.jade b/modules/web-console/frontend/views/templates/batch-confirm.jade index 7451314..c5d3775 100644 --- a/modules/web-console/frontend/views/templates/batch-confirm.jade +++ b/modules/web-console/frontend/views/templates/batch-confirm.jade @@ -19,7 +19,9 @@ .modal-content .modal-header button.close(ng-click='cancel()' aria-hidden='true') × - h4.modal-title Confirmation + h4.modal-title + i.fa.fa-question + | Confirmation .modal-body(ng-show='content') p(ng-bind-html='content' style='text-align: center') .modal-footer http://git-wip-us.apache.org/repos/asf/ignite/blob/087f6405/modules/web-console/frontend/views/templates/clone.jade ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/views/templates/clone.jade b/modules/web-console/frontend/views/templates/clone.jade index d68bf45..6cf93ca 100644 --- a/modules/web-console/frontend/views/templates/clone.jade +++ b/modules/web-console/frontend/views/templates/clone.jade @@ -21,7 +21,9 @@ include ../../app/helpers/jade/mixins.jade .modal-content .modal-header button.close(ng-click='$hide()') × - h4.modal-title Clone + h4.modal-title + i.fa.fa-clone + | Clone form.form-horizontal.modal-body.row(name='ui.inputForm' novalidate) div .col-sm-2 http://git-wip-us.apache.org/repos/asf/ignite/blob/087f6405/modules/web-console/frontend/views/templates/confirm.jade ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/views/templates/confirm.jade b/modules/web-console/frontend/views/templates/confirm.jade index 26af061..f9f966b 100644 --- a/modules/web-console/frontend/views/templates/confirm.jade +++ b/modules/web-console/frontend/views/templates/confirm.jade @@ -19,7 +19,9 @@ .modal-content .modal-header button.close(ng-click='confirmCancel()' aria-hidden='true') × - h4.modal-title Confirmation + h4.modal-title + i.fa.fa-question-circle-o + | Confirmation .modal-body(ng-show='content') p(ng-bind-html='content' style='text-align: center;') .modal-footer http://git-wip-us.apache.org/repos/asf/ignite/blob/087f6405/modules/web-console/frontend/views/templates/demo-info.jade ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/views/templates/demo-info.jade b/modules/web-console/frontend/views/templates/demo-info.jade index 100e806..44c091c 100644 --- a/modules/web-console/frontend/views/templates/demo-info.jade +++ b/modules/web-console/frontend/views/templates/demo-info.jade @@ -19,7 +19,9 @@ .modal-content #errors-container.modal-header.header button.close(ng-click='close()' aria-hidden='true') × - h4.modal-title {{title}} + h4.modal-title + i.fa.fa-info-circle + | {{title}} .modal-body div(ng-bind-html='message') div(ng-hide='hasAgents') http://git-wip-us.apache.org/repos/asf/ignite/blob/087f6405/modules/web-console/frontend/views/templates/getting-started.jade ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/views/templates/getting-started.jade b/modules/web-console/frontend/views/templates/getting-started.jade index 98bc265..3a89035 100644 --- a/modules/web-console/frontend/views/templates/getting-started.jade +++ b/modules/web-console/frontend/views/templates/getting-started.jade @@ -19,7 +19,9 @@ .modal-content #errors-container.modal-header.header button.close(ng-click='close()' aria-hidden='true') × - h4.modal-title {{title}} + h4.modal-title + i.fa.fa-book + | {{title}} .getting-started .col-xs-12(ng-bind-html='message') .modal-footer http://git-wip-us.apache.org/repos/asf/ignite/blob/087f6405/modules/web-console/frontend/views/templates/message.jade ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/views/templates/message.jade b/modules/web-console/frontend/views/templates/message.jade index 6dcf445..6eff74b 100644 --- a/modules/web-console/frontend/views/templates/message.jade +++ b/modules/web-console/frontend/views/templates/message.jade @@ -19,7 +19,9 @@ .modal-content .modal-header button.close(ng-click='$hide()' aria-hidden='true') × - h4.modal-title {{title}} + h4.modal-title + i.fa.fa-info-circle + | {{title}} .modal-body(ng-show='content') p(ng-bind-html='content.join("<br/>")' style='text-align: left;') .modal-footer http://git-wip-us.apache.org/repos/asf/ignite/blob/087f6405/modules/web-console/frontend/views/templates/select.jade ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/views/templates/select.jade b/modules/web-console/frontend/views/templates/select.jade index 3feee61..5b6cc01 100644 --- a/modules/web-console/frontend/views/templates/select.jade +++ b/modules/web-console/frontend/views/templates/select.jade @@ -21,6 +21,6 @@ ul.select.dropdown-menu(tabindex='-1' ng-show='$isVisible()' role='select') hr(style='margin: 5px 0') li(role='presentation' ng-repeat='match in $matches') hr(ng-if='match.value == undefined' style='margin: 5px 0') - a(id='li-dropdown-item-{{$index}}' role='menuitem' tabindex='-1' ng-class='{active: $isActive($index)}' ng-click='$select($index, $event)' bs-tooltip='widthIsSufficient && !widthIsSufficient("li-dropdown-item-{{$index}}", $index, match.label) ? match.label : ""' data-placement='bottom') + a(id='li-dropdown-item-{{$index}}' role='menuitem' tabindex='-1' ng-class='{active: $isActive($index)}' ng-click='$select($index, $event)' bs-tooltip='widthIsSufficient && !widthIsSufficient("li-dropdown-item-{{$index}}", $index, match.label) ? match.label : ""' data-placement='right auto') i(class='{{$iconCheckmark}}' ng-if='$isActive($index)' ng-class='{active: $isActive($index)}') span(ng-bind='match.label') http://git-wip-us.apache.org/repos/asf/ignite/blob/087f6405/modules/web-console/web-agent/src/main/java/org/apache/ignite/console/demo/AgentClusterDemo.java ---------------------------------------------------------------------- diff --git a/modules/web-console/web-agent/src/main/java/org/apache/ignite/console/demo/AgentClusterDemo.java b/modules/web-console/web-agent/src/main/java/org/apache/ignite/console/demo/AgentClusterDemo.java index 09189b5..2fb9f56 100644 --- a/modules/web-console/web-agent/src/main/java/org/apache/ignite/console/demo/AgentClusterDemo.java +++ b/modules/web-console/web-agent/src/main/java/org/apache/ignite/console/demo/AgentClusterDemo.java @@ -333,7 +333,7 @@ public class AgentClusterDemo { private static IgniteConfiguration igniteConfiguration(int gridIdx, boolean client) { IgniteConfiguration cfg = new IgniteConfiguration(); - cfg.setGridName((client ? "demo-server-" : "demo-client-") + gridIdx); + cfg.setGridName((client ? "demo-client-" : "demo-server-" ) + gridIdx); cfg.setLocalHost("127.0.0.1"); cfg.setIncludeEventTypes(EVTS_DISCOVERY);
