http://git-wip-us.apache.org/repos/asf/ignite/blob/6af6560a/modules/web-console/src/main/js/app/modules/states/configuration/summary/summary.resource.js ---------------------------------------------------------------------- diff --git a/modules/web-console/src/main/js/app/modules/states/configuration/summary/summary.resource.js b/modules/web-console/src/main/js/app/modules/states/configuration/summary/summary.resource.js deleted file mode 100644 index 0ef53ac..0000000 --- a/modules/web-console/src/main/js/app/modules/states/configuration/summary/summary.resource.js +++ /dev/null @@ -1,40 +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. - */ - -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 {}; - - _.forEach(clusters, (cluster) => { - cluster.igfss = _.filter(igfss, ({_id}) => _.includes(cluster.igfss, _id)); - cluster.caches = _.filter(caches, ({_id}) => _.includes(cluster.caches, _id)); - }); - - return {clusters}; - }) - .catch((err) => $q.reject(err)); - } - }; -}]];
http://git-wip-us.apache.org/repos/asf/ignite/blob/6af6560a/modules/web-console/src/main/js/app/modules/states/logout.state.js ---------------------------------------------------------------------- diff --git a/modules/web-console/src/main/js/app/modules/states/logout.state.js b/modules/web-console/src/main/js/app/modules/states/logout.state.js deleted file mode 100644 index 7f24a45..0000000 --- a/modules/web-console/src/main/js/app/modules/states/logout.state.js +++ /dev/null @@ -1,36 +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. - */ - -import angular from 'angular'; - -angular -.module('ignite-console.states.logout', [ - 'ui.router' -]) -.config(['$stateProvider', function($stateProvider) { - // set up the states - $stateProvider - .state('logout', { - url: '/logout', - controller: ['Auth', function(Auth) { - Auth.logout(); - }], - metaTags: { - title: 'Logout' - } - }); -}]); http://git-wip-us.apache.org/repos/asf/ignite/blob/6af6560a/modules/web-console/src/main/js/app/modules/states/password.state.js ---------------------------------------------------------------------- diff --git a/modules/web-console/src/main/js/app/modules/states/password.state.js b/modules/web-console/src/main/js/app/modules/states/password.state.js deleted file mode 100644 index 48d01df..0000000 --- a/modules/web-console/src/main/js/app/modules/states/password.state.js +++ /dev/null @@ -1,46 +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. - */ - -import angular from 'angular'; - -angular -.module('ignite-console.states.password', [ - 'ui.router' -]) -.config(['$stateProvider', function($stateProvider) { - // set up the states - $stateProvider - .state('password', { - url: '/password', - abstract: true, - template: '<ui-view></ui-view>' - }) - .state('password.reset', { - url: '/reset?{token}', - templateUrl: '/reset.html', - metaTags: { - title: 'Reset password' - } - }) - .state('password.send', { - url: '/send', - templateUrl: '/reset.html', - metaTags: { - title: 'Password Send' - } - }); -}]); http://git-wip-us.apache.org/repos/asf/ignite/blob/6af6560a/modules/web-console/src/main/js/app/modules/states/profile.state.js ---------------------------------------------------------------------- diff --git a/modules/web-console/src/main/js/app/modules/states/profile.state.js b/modules/web-console/src/main/js/app/modules/states/profile.state.js deleted file mode 100644 index 8b6cdfe..0000000 --- a/modules/web-console/src/main/js/app/modules/states/profile.state.js +++ /dev/null @@ -1,34 +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. - */ - -import angular from 'angular'; - -angular -.module('ignite-console.states.profile', [ - 'ui.router' -]) -.config(['$stateProvider', function($stateProvider) { - // set up the states - $stateProvider - .state('settings.profile', { - url: '/profile', - templateUrl: '/settings/profile.html', - metaTags: { - title: 'User profile' - } - }); -}]); http://git-wip-us.apache.org/repos/asf/ignite/blob/6af6560a/modules/web-console/src/main/js/app/modules/states/signin.state.js ---------------------------------------------------------------------- diff --git a/modules/web-console/src/main/js/app/modules/states/signin.state.js b/modules/web-console/src/main/js/app/modules/states/signin.state.js deleted file mode 100644 index a23a496..0000000 --- a/modules/web-console/src/main/js/app/modules/states/signin.state.js +++ /dev/null @@ -1,53 +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. - */ - -import angular from 'angular'; -import templateUrl from 'views/signin.jade'; - -angular -.module('ignite-console.states.login', [ - 'ui.router', - // services - 'ignite-console.user' -]) -.config(['$stateProvider', function($stateProvider) { - // set up the states - $stateProvider - .state('signin', { - url: '/', - templateUrl, - metaTags: { - } - }); -}]) -.run(['$rootScope', '$state', 'Auth', 'IgniteBranding', function($root, $state, Auth, branding) { - $root.$on('$stateChangeStart', function(event, toState) { - if (toState.name === branding.termsState) - return; - - if (!Auth.authorized && (toState.name !== 'signin' && !_.startsWith(toState.name, 'password.'))) { - event.preventDefault(); - - $state.go('signin'); - } - else if (Auth.authorized && toState.name === 'signin') { - event.preventDefault(); - - $state.go('base.configuration.clusters'); - } - }); -}]); http://git-wip-us.apache.org/repos/asf/ignite/blob/6af6560a/modules/web-console/src/main/js/app/modules/states/sql.state.js ---------------------------------------------------------------------- diff --git a/modules/web-console/src/main/js/app/modules/states/sql.state.js b/modules/web-console/src/main/js/app/modules/states/sql.state.js deleted file mode 100644 index 1aa4f47..0000000 --- a/modules/web-console/src/main/js/app/modules/states/sql.state.js +++ /dev/null @@ -1,46 +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. - */ - -import angular from 'angular'; - -angular -.module('ignite-console.states.sql', [ - 'ui.router' -]) -.config(['$stateProvider', function($stateProvider) { - // set up the states - $stateProvider - .state('base.sql', { - url: '/sql', - abstract: true, - template: '<ui-view></ui-view>' - }) - .state('base.sql.notebook', { - url: '/notebook/{noteId}', - templateUrl: '/sql/sql.html', - metaTags: { - title: 'Query notebook' - } - }) - .state('base.sql.demo', { - url: '/demo', - templateUrl: '/sql/sql.html', - metaTags: { - title: 'SQL demo' - } - }); -}]); http://git-wip-us.apache.org/repos/asf/ignite/blob/6af6560a/modules/web-console/src/main/js/app/modules/user/Auth.service.js ---------------------------------------------------------------------- diff --git a/modules/web-console/src/main/js/app/modules/user/Auth.service.js b/modules/web-console/src/main/js/app/modules/user/Auth.service.js deleted file mode 100644 index 080f4af..0000000 --- a/modules/web-console/src/main/js/app/modules/user/Auth.service.js +++ /dev/null @@ -1,76 +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. - */ - -export default ['Auth', ['$http', '$rootScope', '$state', '$window', 'IgniteLegacyUtils', 'IgniteMessages', 'gettingStarted', 'User', 'IgniteAgentMonitor', - ($http, $root, $state, $window, LegacyUtils, Messages, gettingStarted, User, agentMonitor) => { - let _auth = false; - - try { - _auth = localStorage.authorized === 'true'; - } - catch (ignore) { - // No-op. - } - - function _authorized(value) { - try { - return _auth = localStorage.authorized = !!value; - } catch (ignore) { - return _auth = !!value; - } - } - - return { - get authorized() { - return _auth; - }, - set authorized(auth) { - _authorized(auth); - }, - forgotPassword(userInfo) { - return $http.post('/api/v1/password/forgot', userInfo) - .success(() => $state.go('password.send')) - .error((err) => LegacyUtils.showPopoverMessage(null, null, 'forgot_email', Messages.errorMessage(null, err))); - }, - auth(action, userInfo) { - return $http.post('/api/v1/' + action, userInfo) - .success(() => { - return User.read().then((user) => { - _authorized(true); - - $root.$broadcast('user', user); - - $state.go('base.configuration.clusters'); - - $root.gettingStarted.tryShow(); - - agentMonitor.init(); - }); - }) - .error((err) => LegacyUtils.showPopoverMessage(null, null, action + '_email', Messages.errorMessage(null, err))); - }, - logout() { - return $http.post('/api/v1/logout') - .then(() => { - User.clean(); - - $window.open($state.href('signin'), '_self'); - }) - .catch(Messages.showError); - } - }; - }]]; http://git-wip-us.apache.org/repos/asf/ignite/blob/6af6560a/modules/web-console/src/main/js/app/modules/user/User.service.js ---------------------------------------------------------------------- diff --git a/modules/web-console/src/main/js/app/modules/user/User.service.js b/modules/web-console/src/main/js/app/modules/user/User.service.js deleted file mode 100644 index d1f8083..0000000 --- a/modules/web-console/src/main/js/app/modules/user/User.service.js +++ /dev/null @@ -1,65 +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. - */ - -export default ['User', ['$q', '$injector', '$rootScope', '$state', '$http', function($q, $injector, $root, $state, $http) { - let _user; - - try { - _user = JSON.parse(localStorage.user); - - if (_user) - $root.user = _user; - } - catch (ignore) { - // No-op. - } - - return { - read() { - return $http.post('/api/v1/user').then(({data}) => { - if (_.isEmpty(data)) { - const Auth = $injector.get('Auth'); - - Auth.authorized = false; - - this.clean(); - - if ($state.current.name !== 'signin') - $state.go('signin'); - } - - try { - localStorage.user = JSON.stringify(data); - } - catch (ignore) { - // No-op. - } - - return _user = $root.user = data; - }); - }, - clean() { - delete $root.user; - - delete localStorage.user; - - delete $root.IgniteDemoMode; - - sessionStorage.removeItem('IgniteDemoMode'); - } - }; -}]]; http://git-wip-us.apache.org/repos/asf/ignite/blob/6af6560a/modules/web-console/src/main/js/app/modules/user/user.module.js ---------------------------------------------------------------------- diff --git a/modules/web-console/src/main/js/app/modules/user/user.module.js b/modules/web-console/src/main/js/app/modules/user/user.module.js deleted file mode 100644 index 2387f20..0000000 --- a/modules/web-console/src/main/js/app/modules/user/user.module.js +++ /dev/null @@ -1,28 +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. - */ - -import angular from 'angular'; - -import Auth from './Auth.service'; -import User from './User.service'; - -angular -.module('ignite-console.user', [ - -]) -.service(...Auth) -.service(...User); http://git-wip-us.apache.org/repos/asf/ignite/blob/6af6560a/modules/web-console/src/main/js/app/services/ChartColors.service.js ---------------------------------------------------------------------- diff --git a/modules/web-console/src/main/js/app/services/ChartColors.service.js b/modules/web-console/src/main/js/app/services/ChartColors.service.js deleted file mode 100644 index 843aa5c..0000000 --- a/modules/web-console/src/main/js/app/services/ChartColors.service.js +++ /dev/null @@ -1,22 +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. - */ - -import COLORS from 'app/data/colors.json'; - -export default ['IgniteChartColors', function() { - return COLORS; -}]; http://git-wip-us.apache.org/repos/asf/ignite/blob/6af6560a/modules/web-console/src/main/js/app/services/Clone.service.js ---------------------------------------------------------------------- diff --git a/modules/web-console/src/main/js/app/services/Clone.service.js b/modules/web-console/src/main/js/app/services/Clone.service.js deleted file mode 100644 index 52a4e4e..0000000 --- a/modules/web-console/src/main/js/app/services/Clone.service.js +++ /dev/null @@ -1,64 +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. - */ - -// Service for clone objects. -export default ['IgniteClone', ['$rootScope', '$q', '$modal', ($root, $q, $modal) => { - const scope = $root.$new(); - - let _names = []; - let deferred; - let _validator; - - function _nextAvailableName(name) { - let num = 1; - let tmpName = name; - - while (_.includes(_names, tmpName)) { - tmpName = name + '_' + num.toString(); - - num++; - } - - return tmpName; - } - - const cloneModal = $modal({templateUrl: '/templates/clone.html', scope, placement: 'center', show: false}); - - scope.ok = function(newName) { - if (!_validator || _validator(newName)) { - deferred.resolve(_nextAvailableName(newName)); - - cloneModal.hide(); - } - }; - - cloneModal.confirm = function(oldName, names, validator) { - _names = names; - - scope.newName = _nextAvailableName(oldName); - - _validator = validator; - - deferred = $q.defer(); - - cloneModal.$promise.then(cloneModal.show); - - return deferred.promise; - }; - - return cloneModal; -}]]; http://git-wip-us.apache.org/repos/asf/ignite/blob/6af6560a/modules/web-console/src/main/js/app/services/Confirm.service.js ---------------------------------------------------------------------- diff --git a/modules/web-console/src/main/js/app/services/Confirm.service.js b/modules/web-console/src/main/js/app/services/Confirm.service.js deleted file mode 100644 index c4e25a8..0000000 --- a/modules/web-console/src/main/js/app/services/Confirm.service.js +++ /dev/null @@ -1,70 +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. - */ - -// Confirm popup service. -export default ['IgniteConfirm', ['$rootScope', '$q', '$modal', '$animate', ($root, $q, $modal, $animate) => { - const scope = $root.$new(); - - const modal = $modal({templateUrl: '/templates/confirm.html', scope, placement: 'center', show: false}); - - let deferred; - - const _hide = (animate) => { - $animate.enabled(modal.$element, animate); - - modal.hide(); - }; - - scope.confirmYes = () => { - _hide(scope.animate); - - deferred.resolve(true); - }; - - scope.confirmNo = () => { - _hide(scope.animate); - - deferred.resolve(false); - }; - - scope.confirmCancel = () => { - _hide(true); - - deferred.reject('cancelled'); - }; - - /** - * - * @param {String } content - * @param {Boolean} [yesNo] - * @param {Boolean} [animate] - * @returns {Promise} - */ - modal.confirm = (content, yesNo, animate) => { - scope.animate = !!animate; - scope.content = content || 'Confirm?'; - scope.yesNo = !!yesNo; - - deferred = $q.defer(); - - modal.$promise.then(modal.show); - - return deferred.promise; - }; - - return modal; -}]]; http://git-wip-us.apache.org/repos/asf/ignite/blob/6af6560a/modules/web-console/src/main/js/app/services/ConfirmBatch.service.js ---------------------------------------------------------------------- diff --git a/modules/web-console/src/main/js/app/services/ConfirmBatch.service.js b/modules/web-console/src/main/js/app/services/ConfirmBatch.service.js deleted file mode 100644 index ef66335..0000000 --- a/modules/web-console/src/main/js/app/services/ConfirmBatch.service.js +++ /dev/null @@ -1,92 +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. - */ - -// Service for confirm or skip several steps. -export default ['IgniteConfirmBatch', ['$rootScope', '$q', '$modal', ($root, $q, $modal) => { - const scope = $root.$new(); - - scope.confirmModal = $modal({ - templateUrl: '/templates/batch-confirm.html', - scope, - placement: 'center', - show: false, - backdrop: 'static', - keyboard: false - }); - - const _done = (cancel) => { - scope.confirmModal.hide(); - - if (cancel) - scope.deferred.reject('cancelled'); - else - scope.deferred.resolve(); - }; - - const _nextElement = (skip) => { - scope.items[scope.curIx++].skip = skip; - - if (scope.curIx < scope.items.length) - scope.content = scope.contentGenerator(scope.items[scope.curIx]); - else - _done(); - }; - - scope.cancel = () => { - _done(true); - }; - - scope.skip = (applyToAll) => { - if (applyToAll) { - for (let i = scope.curIx; i < scope.items.length; i++) - scope.items[i].skip = true; - - _done(); - } - else - _nextElement(true); - }; - - scope.overwrite = (applyToAll) => { - if (applyToAll) - _done(); - else - _nextElement(false); - }; - - return { - /** - * Show confirm all dialog. - * - * @param confirmMessageFn Function to generate a confirm message. - * @param itemsToConfirm Array of element to process by confirm. - */ - confirm(confirmMessageFn, itemsToConfirm) { - scope.deferred = $q.defer(); - - scope.contentGenerator = confirmMessageFn; - - scope.items = itemsToConfirm; - scope.curIx = 0; - scope.content = (scope.items && scope.items.length > 0) ? scope.contentGenerator(scope.items[0]) : null; - - scope.confirmModal.$promise.then(scope.confirmModal.show); - - return scope.deferred.promise; - } - }; -}]]; http://git-wip-us.apache.org/repos/asf/ignite/blob/6af6560a/modules/web-console/src/main/js/app/services/CopyToClipboard.service.js ---------------------------------------------------------------------- diff --git a/modules/web-console/src/main/js/app/services/CopyToClipboard.service.js b/modules/web-console/src/main/js/app/services/CopyToClipboard.service.js deleted file mode 100644 index 74c4764..0000000 --- a/modules/web-console/src/main/js/app/services/CopyToClipboard.service.js +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// Service to copy some value to OS clipboard. -export default ['IgniteCopyToClipboard', ['$window', 'IgniteMessages', ($window, Messages) => { - const body = angular.element($window.document.body); - - const textArea = angular.element('<textarea/>'); - - textArea.css({ - position: 'fixed', - opacity: '0' - }); - - return { - copy(toCopy) { - textArea.val(toCopy); - - body.append(textArea); - - textArea[0].select(); - - try { - if (document.execCommand('copy')) - Messages.showInfo('Value copied to clipboard'); - else - window.prompt('Copy to clipboard: Ctrl+C, Enter', toCopy); // eslint-disable-line no-alert - } - catch (err) { - window.prompt('Copy to clipboard: Ctrl+C, Enter', toCopy); // eslint-disable-line no-alert - } - - textArea.remove(); - } - }; -}]]; http://git-wip-us.apache.org/repos/asf/ignite/blob/6af6560a/modules/web-console/src/main/js/app/services/Countries.service.js ---------------------------------------------------------------------- diff --git a/modules/web-console/src/main/js/app/services/Countries.service.js b/modules/web-console/src/main/js/app/services/Countries.service.js deleted file mode 100644 index 5ad3e6a..0000000 --- a/modules/web-console/src/main/js/app/services/Countries.service.js +++ /dev/null @@ -1,31 +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. - */ - -import COUNTRIES from 'app/data/countries.json'; - -export default ['IgniteCountries', function() { - const indexByName = _.keyBy(COUNTRIES, 'name'); - const UNDEFINED_COUNTRY = {name: '', code: ''}; - - const getByName = (name) => (indexByName[name] || UNDEFINED_COUNTRY); - const getAll = () => (COUNTRIES); - - return { - getByName, - getAll - }; -}]; http://git-wip-us.apache.org/repos/asf/ignite/blob/6af6560a/modules/web-console/src/main/js/app/services/Focus.service.js ---------------------------------------------------------------------- diff --git a/modules/web-console/src/main/js/app/services/Focus.service.js b/modules/web-console/src/main/js/app/services/Focus.service.js deleted file mode 100644 index a07e181..0000000 --- a/modules/web-console/src/main/js/app/services/Focus.service.js +++ /dev/null @@ -1,33 +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. - */ - -// Service to transfer focus for specified element. -export default ['IgniteFocus', ['$timeout', ($timeout) => { - return { - move(id) { - // Timeout makes sure that is invoked after any other event has been triggered. - // E.g. click events that need to run before the focus or inputs elements that are - // in a disabled state but are enabled when those events are triggered. - $timeout(() => { - const elem = $('#' + id); - - if (elem.length > 0) - elem[0].focus(); - }, 100); - } - }; -}]]; http://git-wip-us.apache.org/repos/asf/ignite/blob/6af6560a/modules/web-console/src/main/js/app/services/InetAddress.service.js ---------------------------------------------------------------------- diff --git a/modules/web-console/src/main/js/app/services/InetAddress.service.js b/modules/web-console/src/main/js/app/services/InetAddress.service.js deleted file mode 100644 index abdd8a3..0000000 --- a/modules/web-console/src/main/js/app/services/InetAddress.service.js +++ /dev/null @@ -1,53 +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. - */ - -export default ['IgniteInetAddress', function() { - return { - /** - * @param {String} ip IP address to check. - * @returns {boolean} 'true' if given ip address is valid. - */ - validIp(ip) { - const regexp = /^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/; - - return regexp.test(ip); - }, - /** - * @param {String} hostNameOrIp host name or ip address to check. - * @returns {boolean} 'true' if given is host name or ip. - */ - validHost(hostNameOrIp) { - const regexp = /^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-9])$/; - - return regexp.test(hostNameOrIp) || this.validIp(hostNameOrIp); - }, - /** - * @param {int} port Port value to check. - * @returns boolean 'true' if given port is valid tcp/udp port range. - */ - validPort(port) { - return _.isInteger(port) && port > 0 && port <= 65535; - }, - /** - * @param {int} port Port value to check. - * @returns {boolean} 'true' if given port in non system port range(user+dynamic). - */ - validNonSystemPort(port) { - return _.isInteger(port) && port >= 1024 && port <= 65535; - } - }; -}]; http://git-wip-us.apache.org/repos/asf/ignite/blob/6af6560a/modules/web-console/src/main/js/app/services/JavaTypes.service.js ---------------------------------------------------------------------- diff --git a/modules/web-console/src/main/js/app/services/JavaTypes.service.js b/modules/web-console/src/main/js/app/services/JavaTypes.service.js deleted file mode 100644 index d34d669..0000000 --- a/modules/web-console/src/main/js/app/services/JavaTypes.service.js +++ /dev/null @@ -1,84 +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. - */ - -// Java built-in class names. -import JAVA_CLASSES from 'app/data/java-classes.json'; - -// Java build-in primitive. -import JAVA_PRIMITIVES from 'app/data/java-primitives.json'; - -import JAVA_KEYWORDS from 'app/data/java-keywords.json'; - -export default ['JavaTypes', function() { - return { - /** - * @param {String} clsName Class name to check. - * @returns boolean 'true' if given class name non a Java built-in type. - */ - nonBuiltInClass(clsName) { - return _.isNil(_.find(JAVA_CLASSES, (clazz) => clsName === clazz.short || clsName === clazz.full)); - }, - /** - * @param clsName Class name to check. - * @returns Full class name for java build-in types or source class otherwise. - */ - fullClassName(clsName) { - const type = _.find(JAVA_CLASSES, (clazz) => clsName === clazz.short); - - return type ? type.full : clsName; - }, - /** - * @param {String} value text to check. - * @returns boolean 'true' if given text is valid Java identifier. - */ - validIdentifier(value) { - const regexp = /^(([a-zA-Z_$][a-zA-Z0-9_$]*)\.)*([a-zA-Z_$][a-zA-Z0-9_$]*)$/igm; - - return value === '' || regexp.test(value); - }, - /** - * @param {String} value text to check. - * @returns boolean 'true' if given text is valid Java package. - */ - validPackage(value) { - const regexp = /^(([a-zA-Z_$][a-zA-Z0-9_$]*)\.)*([a-zA-Z_$][a-zA-Z0-9_$]*(\.?\*)?)$/igm; - - return value === '' || regexp.test(value); - }, - /** - * @param {String} value text to check. - * @returns boolean 'true' if given text is a Java type with package. - */ - packageSpecified(value) { - return value.split('.').length >= 2; - }, - /** - * @param {String} value text to check. - * @returns boolean 'true' if given text non Java keyword. - */ - isKeywords(value) { - return _.includes(JAVA_KEYWORDS, value); - }, - /** - * @param {String} clsName Class name to check. - * @returns {boolean} 'true' if givent class name is java primitive. - */ - isJavaPrimitive(clsName) { - return _.includes(JAVA_PRIMITIVES, clsName); - } - }; -}]; http://git-wip-us.apache.org/repos/asf/ignite/blob/6af6560a/modules/web-console/src/main/js/app/services/LegacyTable.service.js ---------------------------------------------------------------------- diff --git a/modules/web-console/src/main/js/app/services/LegacyTable.service.js b/modules/web-console/src/main/js/app/services/LegacyTable.service.js deleted file mode 100644 index 8f3b791..0000000 --- a/modules/web-console/src/main/js/app/services/LegacyTable.service.js +++ /dev/null @@ -1,205 +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. - */ - -// TODO: Refactor this service for legacy tables with more than one input field. -export default ['IgniteLegacyTable', ['IgniteLegacyUtils', 'IgniteFocus', (LegacyUtils, Focus) => { - function _model(item, field) { - return LegacyUtils.getModel(item, field); - } - - const table = {name: 'none', editIndex: -1}; - - function _tableReset() { - delete table.field; - table.name = 'none'; - table.editIndex = -1; - - LegacyUtils.hidePopover(); - } - - function _tableSaveAndReset() { - const field = table.field; - - const save = LegacyUtils.isDefined(field) && LegacyUtils.isDefined(field.save); - - if (!save || !LegacyUtils.isDefined(field) || field.save(field, table.editIndex, true)) { - _tableReset(); - - return true; - } - - return false; - } - - function _tableState(field, editIndex, specName) { - table.field = field; - table.name = specName || field.model; - table.editIndex = editIndex; - } - - function _tableUI(field) { - const ui = field.ui; - - return ui ? ui : field.type; - } - - function _tableFocus(focusId, index) { - Focus.move((index < 0 ? 'new' : 'cur') + focusId + (index >= 0 ? index : '')); - } - - function _tablePairValue(filed, index) { - return index < 0 ? {key: filed.newKey, value: filed.newValue} : {key: filed.curKey, value: filed.curValue}; - } - - function _tableStartEdit(item, tbl, index, save) { - _tableState(tbl, index); - - const val = _.get(_model(item, tbl), tbl.model)[index]; - - const ui = _tableUI(tbl); - - tbl.save = save; - - if (ui === 'table-pair') { - tbl.curKey = val[tbl.keyName]; - tbl.curValue = val[tbl.valueName]; - - _tableFocus('Key' + tbl.focusId, index); - } - else if (ui === 'table-db-fields') { - tbl.curDatabaseFieldName = val.databaseFieldName; - tbl.curDatabaseFieldType = val.databaseFieldType; - tbl.curJavaFieldName = val.javaFieldName; - tbl.curJavaFieldType = val.javaFieldType; - - _tableFocus('DatabaseFieldName' + tbl.focusId, index); - } - else if (ui === 'table-indexes') { - tbl.curIndexName = val.name; - tbl.curIndexType = val.indexType; - tbl.curIndexFields = val.fields; - - _tableFocus(tbl.focusId, index); - } - } - - function _tableNewItem(tbl) { - _tableState(tbl, -1); - - const ui = _tableUI(tbl); - - if (ui === 'table-pair') { - tbl.newKey = null; - tbl.newValue = null; - - _tableFocus('Key' + tbl.focusId, -1); - } - else if (ui === 'table-db-fields') { - tbl.newDatabaseFieldName = null; - tbl.newDatabaseFieldType = null; - tbl.newJavaFieldName = null; - tbl.newJavaFieldType = null; - - _tableFocus('DatabaseFieldName' + tbl.focusId, -1); - } - else if (ui === 'table-indexes') { - tbl.newIndexName = null; - tbl.newIndexType = 'SORTED'; - tbl.newIndexFields = null; - - _tableFocus(tbl.focusId, -1); - } - } - - return { - tableState: _tableState, - tableReset: _tableReset, - tableSaveAndReset: _tableSaveAndReset, - tableNewItem: _tableNewItem, - tableNewItemActive(tbl) { - return table.name === tbl.model && table.editIndex < 0; - }, - tableEditing(tbl, index) { - return table.name === tbl.model && table.editIndex === index; - }, - tableEditedRowIndex() { - return table.editIndex; - }, - tableField() { - return table.field; - }, - tableStartEdit: _tableStartEdit, - tableRemove(item, field, index) { - _tableReset(); - - _.get(_model(item, field), field.model).splice(index, 1); - }, - tablePairValue: _tablePairValue, - tablePairSave(pairValid, item, field, index, stopEdit) { - const valid = pairValid(item, field, index); - - if (valid) { - const pairValue = _tablePairValue(field, index); - - let pairModel = {}; - - const container = _.get(item, field.model); - - if (index < 0) { - pairModel[field.keyName] = pairValue.key; - pairModel[field.valueName] = pairValue.value; - - if (container) - container.push(pairModel); - else - _.set(item, field.model, [pairModel]); - - if (!stopEdit) - _tableNewItem(field); - } - else { - pairModel = container[index]; - - pairModel[field.keyName] = pairValue.key; - pairModel[field.valueName] = pairValue.value; - - if (!stopEdit) { - if (index < container.length - 1) - _tableStartEdit(item, field, index + 1); - else - _tableNewItem(field); - } - } - } - - return valid; - }, - tablePairSaveVisible(field, index) { - const pairValue = _tablePairValue(field, index); - - return !LegacyUtils.isEmptyString(pairValue.key) && !LegacyUtils.isEmptyString(pairValue.value); - }, - tableFocusInvalidField(index, id) { - _tableFocus(id, index); - - return false; - }, - tableFieldId(index, id) { - return (index < 0 ? 'new' : 'cur') + id + (index >= 0 ? index : ''); - } - }; -}]]; http://git-wip-us.apache.org/repos/asf/ignite/blob/6af6560a/modules/web-console/src/main/js/app/services/LegacyUtils.service.js ---------------------------------------------------------------------- diff --git a/modules/web-console/src/main/js/app/services/LegacyUtils.service.js b/modules/web-console/src/main/js/app/services/LegacyUtils.service.js deleted file mode 100644 index c4c83e9..0000000 --- a/modules/web-console/src/main/js/app/services/LegacyUtils.service.js +++ /dev/null @@ -1,948 +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. - */ - -// TODO: Refactor this service for legacy tables with more than one input field. -export default ['IgniteLegacyUtils', [ - '$alert', '$popover', '$anchorScroll', '$location', '$timeout', '$window', 'IgniteFocus', - ($alert, $popover, $anchorScroll, $location, $timeout, $window, Focus) => { - $anchorScroll.yOffset = 55; - - function isDefined(v) { - return !_.isNil(v); - } - - function isEmptyString(s) { - if (isDefined(s)) - return s.trim().length === 0; - - return true; - } - - const javaBuiltInClasses = [ - 'BigDecimal', 'Boolean', 'Byte', 'Date', 'Double', 'Float', 'Integer', 'Long', 'Object', 'Short', 'String', 'Time', 'Timestamp', 'UUID' - ]; - - const javaBuiltInTypes = [ - 'BigDecimal', 'boolean', 'Boolean', 'byte', 'Byte', 'Date', 'double', 'Double', 'float', 'Float', - 'int', 'Integer', 'long', 'Long', 'Object', 'short', 'Short', 'String', 'Time', 'Timestamp', 'UUID' - ]; - - const javaBuiltInFullNameClasses = [ - 'java.math.BigDecimal', 'java.lang.Boolean', 'java.lang.Byte', 'java.sql.Date', 'java.lang.Double', - 'java.lang.Float', 'java.lang.Integer', 'java.lang.Long', 'java.lang.Object', 'java.lang.Short', - 'java.lang.String', 'java.sql.Time', 'java.sql.Timestamp', 'java.util.UUID' - ]; - - /** - * @param clsName Class name to check. - * @returns {Boolean} 'true' if given class name is a java build-in type. - */ - function isJavaBuiltInClass(clsName) { - if (isEmptyString(clsName)) - return false; - - return _.includes(javaBuiltInClasses, clsName) || _.includes(javaBuiltInFullNameClasses, clsName); - } - - const SUPPORTED_JDBC_TYPES = [ - 'BIGINT', - 'BIT', - 'BOOLEAN', - 'BLOB', - 'CHAR', - 'CLOB', - 'DATE', - 'DECIMAL', - 'DOUBLE', - 'FLOAT', - 'INTEGER', - 'LONGNVARCHAR', - 'LONGVARCHAR', - 'NCHAR', - 'NUMERIC', - 'NVARCHAR', - 'REAL', - 'SMALLINT', - 'TIME', - 'TIMESTAMP', - 'TINYINT', - 'VARCHAR' - ]; - - const ALL_JDBC_TYPES = [ - {dbName: 'BIT', dbType: -7, javaType: 'Boolean', primitiveType: 'boolean'}, - {dbName: 'TINYINT', dbType: -6, javaType: 'Byte', primitiveType: 'byte'}, - {dbName: 'SMALLINT', dbType: 5, javaType: 'Short', primitiveType: 'short'}, - {dbName: 'INTEGER', dbType: 4, javaType: 'Integer', primitiveType: 'int'}, - {dbName: 'BIGINT', dbType: -5, javaType: 'Long', primitiveType: 'long'}, - {dbName: 'FLOAT', dbType: 6, javaType: 'Float', primitiveType: 'float'}, - {dbName: 'REAL', dbType: 7, javaType: 'Double', primitiveType: 'double'}, - {dbName: 'DOUBLE', dbType: 8, javaType: 'Double', primitiveType: 'double'}, - {dbName: 'NUMERIC', dbType: 2, javaType: 'BigDecimal'}, - {dbName: 'DECIMAL', dbType: 3, javaType: 'BigDecimal'}, - {dbName: 'CHAR', dbType: 1, javaType: 'String'}, - {dbName: 'VARCHAR', dbType: 12, javaType: 'String'}, - {dbName: 'LONGVARCHAR', dbType: -1, javaType: 'String'}, - {dbName: 'DATE', dbType: 91, javaType: 'Date'}, - {dbName: 'TIME', dbType: 92, javaType: 'Time'}, - {dbName: 'TIMESTAMP', dbType: 93, javaType: 'Timestamp'}, - {dbName: 'BINARY', dbType: -2, javaType: 'Object'}, - {dbName: 'VARBINARY', dbType: -3, javaType: 'Object'}, - {dbName: 'LONGVARBINARY', dbType: -4, javaType: 'Object'}, - {dbName: 'NULL', dbType: 0, javaType: 'Object'}, - {dbName: 'OTHER', dbType: 1111, javaType: 'Object'}, - {dbName: 'JAVA_OBJECT', dbType: 2000, javaType: 'Object'}, - {dbName: 'DISTINCT', dbType: 2001, javaType: 'Object'}, - {dbName: 'STRUCT', dbType: 2002, javaType: 'Object'}, - {dbName: 'ARRAY', dbType: 2003, javaType: 'Object'}, - {dbName: 'BLOB', dbType: 2004, javaType: 'Object'}, - {dbName: 'CLOB', dbType: 2005, javaType: 'String'}, - {dbName: 'REF', dbType: 2006, javaType: 'Object'}, - {dbName: 'DATALINK', dbType: 70, javaType: 'Object'}, - {dbName: 'BOOLEAN', dbType: 16, javaType: 'Boolean', primitiveType: 'boolean'}, - {dbName: 'ROWID', dbType: -8, javaType: 'Object'}, - {dbName: 'NCHAR', dbType: -15, javaType: 'String'}, - {dbName: 'NVARCHAR', dbType: -9, javaType: 'String'}, - {dbName: 'LONGNVARCHAR', dbType: -16, javaType: 'String'}, - {dbName: 'NCLOB', dbType: 2011, javaType: 'String'}, - {dbName: 'SQLXML', dbType: 2009, javaType: 'Object'} - ]; - - /*eslint-disable */ - const JAVA_KEYWORDS = [ - 'abstract', 'assert', 'boolean', 'break', 'byte', - 'case', 'catch', 'char', 'class', 'const', - 'continue', 'default', 'do', 'double', 'else', - 'enum', 'extends', 'false', 'final', 'finally', - 'float', 'for', 'goto', 'if', 'implements', - 'import', 'instanceof', 'int', 'interface', 'long', - 'native', 'new', 'null', 'package', 'private', - 'protected', 'public', 'return', 'short', 'static', - 'strictfp', 'super', 'switch', 'synchronized', 'this', - 'throw', 'throws', 'transient', 'true', 'try', - 'void', 'volatile', 'while' - ]; - /*eslint-enable */ - - const VALID_JAVA_IDENTIFIER = new RegExp('^[a-zA-Z_$][a-zA-Z\\d_$]*$'); - - let popover = null; - - function isElementInViewport(el) { - const rect = el.getBoundingClientRect(); - - return ( - rect.top >= 0 && - rect.left >= 0 && - rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) && - rect.right <= (window.innerWidth || document.documentElement.clientWidth) - ); - } - - const _showPopoverMessage = (id, message, showTime) => { - const body = $('body'); - - let el = body.find('#' + id); - - if (!el || el.length === 0) - el = body.find('[name="' + id + '"]'); - - if (el && el.length > 0) { - if (!isElementInViewport(el[0])) { - $location.hash(el[0].id); - - $anchorScroll(); - } - - const newPopover = $popover(el, {content: message}); - - popover = newPopover; - - $timeout(() => newPopover.$promise.then(() => { - newPopover.show(); - - // Workaround to fix popover location when content is longer than content template. - // https://github.com/mgcrea/angular-strap/issues/1497 - $timeout(newPopover.$applyPlacement); - }), 400); - $timeout(() => newPopover.hide(), showTime || 5000); - } - }; - - function ensureActivePanel(ui, pnl, focusId) { - if (ui) { - const collapses = $('div.panel-collapse'); - - ui.loadPanel(pnl); - - const idx = _.findIndex(collapses, function(collapse) { - return collapse.id === pnl; - }); - - if (idx >= 0) { - const activePanels = ui.activePanels; - - if (!_.includes(ui.topPanels, idx)) { - ui.expanded = true; - - const customExpanded = ui[pnl]; - - if (customExpanded) - ui[customExpanded] = true; - } - - if (!activePanels || activePanels.length < 1) - ui.activePanels = [idx]; - else if (!_.includes(activePanels, idx)) { - const newActivePanels = angular.copy(activePanels); - - newActivePanels.push(idx); - - ui.activePanels = newActivePanels; - } - } - - if (isDefined(focusId)) - Focus.move(focusId); - } - } - - function showPopoverMessage(ui, panelId, id, message, showTime) { - if (popover) - popover.hide(); - - if (ui) { - ensureActivePanel(ui, panelId); - - $timeout(() => _showPopoverMessage(id, message, showTime), ui.isPanelLoaded(panelId) ? 200 : 500); - } - else - _showPopoverMessage(id, message, showTime); - - return false; - } - - function isValidJavaIdentifier(msg, ident, elemId, panels, panelId) { - if (isEmptyString(ident)) - return showPopoverMessage(panels, panelId, elemId, msg + ' is invalid!'); - - if (_.includes(JAVA_KEYWORDS, ident)) - return showPopoverMessage(panels, panelId, elemId, msg + ' could not contains reserved java keyword: "' + ident + '"!'); - - if (!VALID_JAVA_IDENTIFIER.test(ident)) - return showPopoverMessage(panels, panelId, elemId, msg + ' contains invalid identifier: "' + ident + '"!'); - - return true; - } - - let context = null; - - /** - * Calculate width of specified text in body's font. - * - * @param text Text to calculate width. - * @returns {Number} Width of text in pixels. - */ - function measureText(text) { - if (!context) { - const canvas = document.createElement('canvas'); - - context = canvas.getContext('2d'); - - const style = window.getComputedStyle(document.getElementsByTagName('body')[0]); - - context.font = style.fontSize + ' ' + style.fontFamily; - } - - return context.measureText(text).width; - } - - /** - * Compact java full class name by max number of characters. - * - * @param names Array of class names to compact. - * @param nameLength Max available width in characters for simple name. - * @returns {*} Array of compacted class names. - */ - function compactByMaxCharts(names, nameLength) { - for (let nameIx = 0; nameIx < names.length; nameIx++) { - const s = names[nameIx]; - - if (s.length > nameLength) { - let totalLength = s.length; - - const packages = s.split('.'); - - const packageCnt = packages.length - 1; - - for (let i = 0; i < packageCnt && totalLength > nameLength; i++) { - if (packages[i].length > 0) { - totalLength -= packages[i].length - 1; - - packages[i] = packages[i][0]; - } - } - - if (totalLength > nameLength) { - const className = packages[packageCnt]; - - const classNameLen = className.length; - - let remains = Math.min(nameLength - totalLength + classNameLen, classNameLen); - - if (remains < 3) - remains = Math.min(3, classNameLen); - - packages[packageCnt] = className.substring(0, remains) + '...'; - } - - let result = packages[0]; - - for (let i = 1; i < packages.length; i++) - result += '.' + packages[i]; - - names[nameIx] = result; - } - } - - return names; - } - - /** - * Compact java full class name by max number of pixels. - * - * @param names Array of class names to compact. - * @param nameLength Max available width in characters for simple name. Used for calculation optimization. - * @param nameWidth Maximum available width in pixels for simple name. - * @returns {*} Array of compacted class names. - */ - function compactByMaxPixels(names, nameLength, nameWidth) { - if (nameWidth <= 0) - return names; - - const fitted = []; - - const widthByName = []; - - const len = names.length; - - let divideTo = len; - - for (let nameIx = 0; nameIx < len; nameIx++) { - fitted[nameIx] = false; - - widthByName[nameIx] = nameWidth; - } - - // Try to distribute space from short class names to long class names. - let remains = 0; - - do { - for (let nameIx = 0; nameIx < len; nameIx++) { - if (!fitted[nameIx]) { - const curNameWidth = measureText(names[nameIx]); - - if (widthByName[nameIx] > curNameWidth) { - fitted[nameIx] = true; - - remains += widthByName[nameIx] - curNameWidth; - - divideTo -= 1; - - widthByName[nameIx] = curNameWidth; - } - } - } - - const remainsByName = remains / divideTo; - - for (let nameIx = 0; nameIx < len; nameIx++) { - if (!fitted[nameIx]) - widthByName[nameIx] += remainsByName; - } - } - while (remains > 0); - - // Compact class names to available for each space. - for (let nameIx = 0; nameIx < len; nameIx++) { - const s = names[nameIx]; - - if (s.length > (nameLength / 2 | 0)) { - let totalWidth = measureText(s); - - if (totalWidth > widthByName[nameIx]) { - const packages = s.split('.'); - - const packageCnt = packages.length - 1; - - for (let i = 0; i < packageCnt && totalWidth > widthByName[nameIx]; i++) { - if (packages[i].length > 1) { - totalWidth -= measureText(packages[i].substring(1, packages[i].length)); - - packages[i] = packages[i][0]; - } - } - - let shortPackage = ''; - - for (let i = 0; i < packageCnt; i++) - shortPackage += packages[i] + '.'; - - const className = packages[packageCnt]; - - const classLen = className.length; - - let minLen = Math.min(classLen, 3); - - totalWidth = measureText(shortPackage + className); - - // Compact class name if shorten package path is very long. - if (totalWidth > widthByName[nameIx]) { - let maxLen = classLen; - let middleLen = (minLen + (maxLen - minLen) / 2 ) | 0; - - while (middleLen !== minLen && middleLen !== maxLen) { - const middleLenPx = measureText(shortPackage + className.substr(0, middleLen) + '...'); - - if (middleLenPx > widthByName[nameIx]) - maxLen = middleLen; - else - minLen = middleLen; - - middleLen = (minLen + (maxLen - minLen) / 2 ) | 0; - } - - names[nameIx] = shortPackage + className.substring(0, middleLen) + '...'; - } - else - names[nameIx] = shortPackage + className; - } - } - } - - return names; - } - - /** - * Compact any string by max number of pixels. - * - * @param label String to compact. - * @param nameWidth Maximum available width in pixels for simple name. - * @returns {*} Compacted string. - */ - function compactLabelByPixels(label, nameWidth) { - if (nameWidth <= 0) - return label; - - const totalWidth = measureText(label); - - if (totalWidth > nameWidth) { - let maxLen = label.length; - let minLen = Math.min(maxLen, 3); - let middleLen = (minLen + (maxLen - minLen) / 2 ) | 0; - - while (middleLen !== minLen && middleLen !== maxLen) { - const middleLenPx = measureText(label.substr(0, middleLen) + '...'); - - if (middleLenPx > nameWidth) - maxLen = middleLen; - else - minLen = middleLen; - - middleLen = (minLen + (maxLen - minLen) / 2 ) | 0; - } - - return label.substring(0, middleLen) + '...'; - } - - return label; - } - - /** - * Calculate available width for text in link to edit element. - * - * @param index Showed index of element for calculation of maximum width in pixels. - * @param id Id of contains link table. - * @returns {*[]} First element is length of class for single value, second element is length for pair vlaue. - */ - function availableWidth(index, id) { - const idElem = $('#' + id); - - let width = 0; - - switch (idElem.prop('tagName')) { - // Detection of available width in presentation table row. - case 'TABLE': - const cont = $(idElem.find('tr')[index - 1]).find('td')[0]; - - width = cont.clientWidth; - - if (width > 0) { - const children = $(cont).children(':not("a")'); - - _.forEach(children, function(child) { - if ('offsetWidth' in child) - width -= $(child).outerWidth(true); - }); - } - - break; - - // Detection of available width in dropdown row. - case 'A': - width = idElem.width(); - - $(idElem).children(':not("span")').each(function(ix, child) { - if ('offsetWidth' in child) - width -= child.offsetWidth; - }); - - break; - - default: - } - - return width | 0; - } - - function getModel(obj, field) { - let path = field.path; - - if (!isDefined(path) || !isDefined(obj)) - return obj; - - path = path.replace(/\[(\w+)\]/g, '.$1'); // convert indexes to properties - path = path.replace(/^\./, ''); // strip a leading dot - - const segs = path.split('.'); - let root = obj; - - while (segs.length > 0) { - const pathStep = segs.shift(); - - if (typeof root[pathStep] === 'undefined') - root[pathStep] = {}; - - root = root[pathStep]; - } - - return root; - } - - function extractDataSource(cache) { - if (cache.cacheStoreFactory && cache.cacheStoreFactory.kind) { - const storeFactory = cache.cacheStoreFactory[cache.cacheStoreFactory.kind]; - - if (storeFactory.dialect || (storeFactory.connectVia === 'DataSource')) - return storeFactory; - } - - return null; - } - - const cacheStoreJdbcDialects = [ - {value: 'Generic', label: 'Generic JDBC'}, - {value: 'Oracle', label: 'Oracle'}, - {value: 'DB2', label: 'IBM DB2'}, - {value: 'SQLServer', label: 'Microsoft SQL Server'}, - {value: 'MySQL', label: 'MySQL'}, - {value: 'PostgreSQL', label: 'PostgreSQL'}, - {value: 'H2', label: 'H2 database'} - ]; - - function domainForStoreConfigured(domain) { - const isEmpty = !isDefined(domain) || (isEmptyString(domain.databaseSchema) && - isEmptyString(domain.databaseTable) && - _.isEmpty(domain.keyFields) && - _.isEmpty(domain.valueFields)); - - return !isEmpty; - } - - const DS_CHECK_SUCCESS = { checked: true }; - - function compareDataSources(firstCache, secondCache) { - const firstDs = extractDataSource(firstCache); - const secondDs = extractDataSource(secondCache); - - if (firstDs && secondDs) { - const firstDB = firstDs.dialect; - const secondDB = secondDs.dialect; - - if (firstDs.dataSourceBean === secondDs.dataSourceBean && firstDB !== secondDB) - return {checked: false, firstCache, firstDB, secondCache, secondDB}; - } - - return DS_CHECK_SUCCESS; - } - - function compareSQLSchemaNames(firstCache, secondCache) { - const firstName = firstCache.sqlSchema; - const secondName = secondCache.sqlSchema; - - if (firstName && secondName && (firstName === secondName)) - return {checked: false, firstCache, secondCache}; - - return DS_CHECK_SUCCESS; - } - - function toJavaName(prefix, name) { - const javaName = name ? name.replace(/[^A-Za-z_0-9]+/g, '_') : 'dflt'; - - return prefix + javaName.charAt(0).toLocaleUpperCase() + javaName.slice(1); - } - - return { - getModel, - mkOptions(options) { - return _.map(options, (option) => { - return {value: option, label: isDefined(option) ? option : 'Not set'}; - }); - }, - isDefined, - hasProperty(obj, props) { - for (const propName in props) { - if (props.hasOwnProperty(propName)) { - if (obj[propName]) - return true; - } - } - - return false; - }, - isEmptyString, - SUPPORTED_JDBC_TYPES, - findJdbcType(jdbcType) { - const res = _.find(ALL_JDBC_TYPES, function(item) { - return item.dbType === jdbcType; - }); - - return res ? res : {dbName: 'Unknown', javaType: 'Unknown'}; - }, - javaBuiltInClasses, - javaBuiltInTypes, - isJavaBuiltInClass, - isValidJavaIdentifier, - isValidJavaClass(msg, ident, allowBuiltInClass, elemId, packageOnly, panels, panelId) { - if (isEmptyString(ident)) - return showPopoverMessage(panels, panelId, elemId, msg + ' could not be empty!'); - - const parts = ident.split('.'); - - const len = parts.length; - - if (!allowBuiltInClass && isJavaBuiltInClass(ident)) - return showPopoverMessage(panels, panelId, elemId, msg + ' should not be the Java build-in class!'); - - if (len < 2 && !isJavaBuiltInClass(ident) && !packageOnly) - return showPopoverMessage(panels, panelId, elemId, msg + ' does not have package specified!'); - - for (let i = 0; i < parts.length; i++) { - const part = parts[i]; - - if (!isValidJavaIdentifier(msg, part, elemId, panels, panelId)) - return false; - } - - return true; - }, - domainForQueryConfigured(domain) { - const isEmpty = !isDefined(domain) || (_.isEmpty(domain.fields) && - _.isEmpty(domain.aliases) && - _.isEmpty(domain.indexes)); - - return !isEmpty; - }, - domainForStoreConfigured, - /** - * Cut class name by width in pixel or width in symbol count. - * - * @param id Id of parent table. - * @param index Row number in table. - * @param maxLength Maximum length in symbols for all names. - * @param names Array of class names to compact. - * @param divider String to visualy divide items. - * @returns {*} Array of compacted class names. - */ - compactJavaName(id, index, maxLength, names, divider) { - divider = ' ' + divider + ' '; - - const prefix = index + ') '; - - const nameCnt = names.length; - - const nameLength = ((maxLength - 3 * (nameCnt - 1)) / nameCnt) | 0; - - try { - const nameWidth = (availableWidth(index, id) - measureText(prefix) - (nameCnt - 1) * measureText(divider)) / - nameCnt | 0; - - // HTML5 calculation of showed message width. - names = compactByMaxPixels(names, nameLength, nameWidth); - } - catch (err) { - names = compactByMaxCharts(names, nameLength); - } - - let result = prefix + names[0]; - - for (let nameIx = 1; nameIx < names.length; nameIx++) - result += divider + names[nameIx]; - - return result; - }, - /** - * Compact text by width in pixels or symbols count. - * - * @param id Id of parent table. - * @param index Row number in table. - * @param maxLength Maximum length in symbols for all names. - * @param label Text to compact. - * @returns Compacted label text. - */ - compactTableLabel(id, index, maxLength, label) { - label = index + ') ' + label; - - try { - const nameWidth = availableWidth(index, id) | 0; - - // HTML5 calculation of showed message width. - label = compactLabelByPixels(label, nameWidth); - } - catch (err) { - const nameLength = maxLength - 3 | 0; - - label = label.length > maxLength ? label.substr(0, nameLength) + '...' : label; - } - - return label; - }, - widthIsSufficient(id, index, text) { - try { - const available = availableWidth(index, id); - - const required = measureText(text); - - return !available || available >= Math.floor(required); - } - catch (err) { - return true; - } - }, - ensureActivePanel(panels, id, focusId) { - ensureActivePanel(panels, id, focusId); - }, - showPopoverMessage, - hidePopover() { - if (popover) - popover.hide(); - }, - confirmUnsavedChanges(dirty, selectFunc) { - if (dirty) { - if ($window.confirm('You have unsaved changes.\n\nAre you sure you want to discard them?')) - selectFunc(); - } - else - selectFunc(); - }, - saveBtnTipText(dirty, objectName) { - if (dirty) - return 'Save ' + objectName; - - return 'Nothing to save'; - }, - download(type, name, data) { - const file = document.createElement('a'); - - file.setAttribute('href', 'data:' + type + ';charset=utf-8,' + data); - file.setAttribute('download', name); - file.setAttribute('target', '_self'); - - file.style.display = 'none'; - - document.body.appendChild(file); - - file.click(); - - document.body.removeChild(file); - }, - formUI() { - return { - ready: false, - expanded: false, - loadedPanels: [], - loadPanel(pnl) { - if (!_.includes(this.loadedPanels, pnl)) - this.loadedPanels.push(pnl); - }, - isPanelLoaded(pnl) { - return _.includes(this.loadedPanels, pnl); - } - }; - }, - getQueryVariable(name) { - const attrs = window.location.search.substring(1).split('&'); - const attr = _.find(attrs, (a) => a === name || (a.indexOf('=') >= 0 && a.substr(0, a.indexOf('=')) === name)); - - if (!isDefined(attr)) - return null; - - if (attr === name) - return true; - - return attr.substr(attr.indexOf('=') + 1); - }, - cacheStoreJdbcDialects, - cacheStoreJdbcDialectsLabel(dialect) { - const found = _.find(cacheStoreJdbcDialects, function(dialectVal) { - return dialectVal.value === dialect; - }); - - return found ? found.label : null; - }, - checkCachesDataSources(caches, checkCacheExt) { - let res = DS_CHECK_SUCCESS; - - _.find(caches, function(curCache, curIx) { - if (isDefined(checkCacheExt)) { - if (checkCacheExt._id !== curCache._id) { - res = compareDataSources(checkCacheExt, curCache); - - return !res.checked; - } - - return false; - } - - return _.find(caches, function(checkCache, checkIx) { - if (checkIx < curIx) { - res = compareDataSources(checkCache, curCache); - - return !res.checked; - } - - return false; - }); - }); - - return res; - }, - checkCacheSQLSchemas(caches, checkCacheExt) { - let res = DS_CHECK_SUCCESS; - - _.find(caches, (curCache, curIx) => { - if (isDefined(checkCacheExt)) { - if (checkCacheExt._id !== curCache._id) { - res = compareSQLSchemaNames(checkCacheExt, curCache); - - return !res.checked; - } - - return false; - } - - return _.find(caches, function(checkCache, checkIx) { - if (checkIx < curIx) { - res = compareSQLSchemaNames(checkCache, curCache); - - return !res.checked; - } - - return false; - }); - }); - - return res; - }, - autoCacheStoreConfiguration(cache, domains) { - const cacheStoreFactory = isDefined(cache.cacheStoreFactory) && - isDefined(cache.cacheStoreFactory.kind); - - if (!cacheStoreFactory && _.findIndex(domains, domainForStoreConfigured) >= 0) { - const dflt = !cache.readThrough && !cache.writeThrough; - - return { - cacheStoreFactory: { - kind: 'CacheJdbcPojoStoreFactory', - CacheJdbcPojoStoreFactory: { - dataSourceBean: toJavaName('ds', cache.name), - dialect: 'Generic' - }, - CacheJdbcBlobStoreFactory: { connectVia: 'DataSource' } - }, - readThrough: dflt || cache.readThrough, - writeThrough: dflt || cache.writeThrough - }; - } - }, - autoClusterSwapSpiConfiguration(cluster, caches) { - const swapConfigured = cluster.swapSpaceSpi && cluster.swapSpaceSpi.kind; - - if (!swapConfigured && _.find(caches, (cache) => cache.swapEnabled)) - return {swapSpaceSpi: {kind: 'FileSwapSpaceSpi'}}; - - return null; - }, - randomString(len) { - const possible = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; - const possibleLen = possible.length; - - let res = ''; - - for (let i = 0; i < len; i++) - res += possible.charAt(Math.floor(Math.random() * possibleLen)); - - return res; - }, - checkFieldValidators(ui) { - const form = ui.inputForm; - const errors = form.$error; - const errKeys = Object.keys(errors); - - if (errKeys && errKeys.length > 0) { - const firstErrorKey = errKeys[0]; - - const firstError = errors[firstErrorKey][0]; - const actualError = firstError.$error[firstErrorKey][0]; - - const errNameFull = actualError.$name; - const errNameShort = errNameFull.endsWith('TextInput') ? errNameFull.substring(0, errNameFull.length - 9) : errNameFull; - - const extractErrorMessage = function(errName) { - try { - return errors[firstErrorKey][0].$errorMessages[errName][firstErrorKey]; - } - catch (ignored) { - try { - return form[firstError.$name].$errorMessages[errName][firstErrorKey]; - } - catch (ignited) { - return false; - } - } - }; - - const msg = extractErrorMessage(errNameFull) || extractErrorMessage(errNameShort) || 'Invalid value!'; - - return showPopoverMessage(ui, firstError.$name, errNameFull, msg); - } - - return true; - } - }; - } -]]; http://git-wip-us.apache.org/repos/asf/ignite/blob/6af6560a/modules/web-console/src/main/js/app/services/Messages.service.js ---------------------------------------------------------------------- diff --git a/modules/web-console/src/main/js/app/services/Messages.service.js b/modules/web-console/src/main/js/app/services/Messages.service.js deleted file mode 100644 index e679488..0000000 --- a/modules/web-console/src/main/js/app/services/Messages.service.js +++ /dev/null @@ -1,63 +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. - */ - -// Service to show various information and error messages. -export default ['IgniteMessages', ['$alert', ($alert) => { - // Common instance of alert modal. - let msgModal; - - const errorMessage = (prefix, err) => { - prefix = prefix || ''; - - if (err) { - if (err.hasOwnProperty('message')) - return prefix + err.message; - - return prefix + err; - } - - return prefix + 'Internal error.'; - }; - - const hideAlert = () => { - if (msgModal) - msgModal.hide(); - }; - - const _showMessage = (err, type, duration, icon) => { - hideAlert(); - - const title = errorMessage(null, err); - - msgModal = $alert({type, title, duration}); - - msgModal.$scope.icon = icon; - }; - - return { - errorMessage, - hideAlert, - showError(err) { - _showMessage(err, 'danger', 10, 'fa-exclamation-triangle'); - - return false; - }, - showInfo(err) { - _showMessage(err, 'success', 3, 'fa-check-circle-o'); - } - }; -}]];
