blob: 750462700a231487605e5c4aaecedcf07c545bcd [file] [log] [blame]
/*
* 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 ngAnimate from 'angular-animate';
import ngResource from "angular-resource";
import ngCookies from "angular-cookies";
import uiRouter from "angular-ui-router";
import "angular-ui-router/release/stateEvents";
import ngClipboard from "ngclipboard";
import brCore from 'brooklyn-ui-utils/br-core/br-core';
import brDragndrop from "brooklyn-ui-utils/dragndrop/dragndrop.directive.js"
import brServerStatus from 'brooklyn-ui-utils/server-status/server-status';
import brAutoFocus from 'brooklyn-ui-utils/autofocus/autofocus';
import brIconGenerator from 'brooklyn-ui-utils/icon-generator/icon-generator';
import brInterstitialSpinner from 'brooklyn-ui-utils/interstitial-spinner/interstitial-spinner';
import brooklynModuleLinks from 'brooklyn-ui-utils/module-links/module-links';
import brooklynUserManagement from 'brooklyn-ui-utils/user-management/user-management';
import brYamlEditor from 'brooklyn-ui-utils/yaml-editor/yaml-editor';
import brUtils from 'brooklyn-ui-utils/utils/general';
import mdHelper from 'brooklyn-ui-utils/md-helper';
import brSpecEditor from './components/spec-editor/spec-editor.directive';
import brooklynCatalogSaver from './components/catalog-saver/catalog-saver.directive';
import paletteApiProvider from "./components/providers/palette-api.provider";
import paletteServiceProvider from "./components/providers/palette-service.provider";
import blueprintLoaderApiProvider from "./components/providers/blueprint-loader-api.provider";
import brooklynApi from "brooklyn-ui-utils/brooklyn.api/brooklyn.api";
import designer from './components/designer/designer.directive';
import catalogSelector from './components/catalog-selector/catalog-selector.directive';
import customActionDirective from "./components/custom-action/custom-action.directive";
import customConfigSuggestionDropdown from "./components/custom-config-widget/suggestion-dropdown";
import breadcrumbs from "./components/breacrumbs/breadcrumbs.directive";
import objectCache from './components/factories/object-cache.factory';
import entityFilters from "./components/filters/entity.filter";
import locationFilter from "./components/filters/locations.filter";
import blueprintService from "./components/providers/blueprint-service.provider";
import recentlyUsedService from "./components/providers/recently-used-service.provider";
import dslService from "./components/providers/dsl-service.provider";
import paletteDragAndDropService from "./components/providers/palette-dragndrop.provider";
import actionService from "./components/providers/action-service.provider";
import tabService from "./components/providers/tab-service.provider";
import composerOverrides from "./components/providers/composer-overrides.provider";
import {mainState} from "./views/main/main.controller";
import {yamlAutodetectState, yamlCampState, yamlState} from "./views/main/yaml/yaml.state";
import {graphicalState} from "./views/main/graphical/graphical.state";
import {graphicalEditState} from "./views/main/graphical/edit/edit.controller";
import {graphicalEditAddState} from "./views/main/graphical/edit/add/add";
import {graphicalEditEntityState} from "./views/main/graphical/edit/entity/edit.entity.controller";
import {graphicalEditPolicyState} from "./views/main/graphical/edit/policy/edit.policy.controller";
import {graphicalEditEnricherState} from "./views/main/graphical/edit/enricher/edit.enricher.controller";
import {graphicalEditSpecState} from "./views/main/graphical/edit/spec/edit.spec.controller";
import {graphicalEditDslState, dslParamLabelFilter} from "./views/main/graphical/edit/dsl/edit.dsl.controller";
import bottomSheet from "brooklyn-ui-utils/bottom-sheet/bottom-sheet";
import stackViewer from 'angular-java-stack-viewer';
import {EntityFamily} from "./components/util/model/entity.model";
import scriptTagDecorator from 'brooklyn-ui-utils/script-tag-non-overwrite/script-tag-non-overwrite';
import brandAngularJs from 'brand-angular-js';
const IS_PRODUCTION = process.env.NODE_ENV === 'production' || false;
angular.module('brooklynBlueprintComposer', [ngAnimate, ngResource, ngCookies, ngClipboard, uiRouter, 'ui.router.state.events', brCore,
brServerStatus, brAutoFocus, brIconGenerator, brInterstitialSpinner, brooklynModuleLinks, brooklynUserManagement,
brYamlEditor, brUtils, brSpecEditor, brooklynCatalogSaver, brooklynApi, bottomSheet, stackViewer, brDragndrop, mdHelper,
customActionDirective, customConfigSuggestionDropdown, paletteApiProvider, paletteServiceProvider, blueprintLoaderApiProvider,
breadcrumbs, catalogSelector, designer, objectCache, entityFilters, locationFilter, actionService, tabService, composerOverrides, blueprintService,
dslService, paletteDragAndDropService, recentlyUsedService, scriptTagDecorator, brandAngularJs])
.filter('dslParamLabel', ['$filter', dslParamLabelFilter])
.config(['$urlRouterProvider', '$stateProvider', '$logProvider', '$compileProvider', applicationConfig])
.config(['actionServiceProvider', actionConfig])
.config(['tabServiceProvider', 'composerOverridesProvider', tabConfig])
.config(['paletteServiceProvider', paletteConfig])
.run(['$rootScope', '$state', 'brSnackbar', errorHandler])
.run(['$http', httpConfig]);
function applicationConfig($urlRouterProvider, $stateProvider, $logProvider, $compileProvider) {
$logProvider.debugEnabled(!IS_PRODUCTION);
$compileProvider.debugInfoEnabled(!IS_PRODUCTION);
$urlRouterProvider
.otherwise(graphicalState.url);
$stateProvider
.state(mainState)
.state(yamlAutodetectState)
.state(yamlCampState)
.state(graphicalState)
.state(graphicalEditAddState)
.state(graphicalEditState)
.state(graphicalEditEntityState)
.state(graphicalEditPolicyState)
.state(graphicalEditEnricherState)
.state(graphicalEditSpecState)
.state(graphicalEditDslState);
}
function actionConfig(actionServiceProvider) {
actionServiceProvider.addAction("deploy", {html: '<button class="btn btn-outline btn-success" ng-click="vm.deployApplication()" ng-disabled="vm.deploying">Deploy</button>'});
actionServiceProvider.addAction("add", {html: '<catalog-saver config="vm.saveToCatalogConfig"></catalog-saver>'});
}
function tabConfig(tabServiceProvider, composerOverridesProvider) {
tabServiceProvider.addTab('graphical', {
title: 'Graphical Designer',
icon: 'fa-object-group',
stateKey: 'main.graphical'
});
tabServiceProvider.addTab('yaml', {
title: 'YAML Editor',
icon: 'fa-pencil',
stateKey: 'main.yaml_camp',
});
(composerOverridesProvider.$get().tabServiceProviderCustomization || (()=>{}))(tabServiceProvider);
}
function paletteConfig(paletteServiceProvider) {
paletteServiceProvider.addSection('entities', {
title: 'Entities',
type: EntityFamily.ENTITY,
icon: 'fa-square-o'
});
paletteServiceProvider.addSection('policies', {
title: 'Policies',
type: EntityFamily.POLICY,
icon: 'fa-heartbeat'
});
paletteServiceProvider.addSection('enrichers', {
title: 'Enrichers',
type: EntityFamily.ENRICHER,
icon: 'fa-puzzle-piece'
});
paletteServiceProvider.addSection('locations', {
title: 'Locations',
type: EntityFamily.LOCATION,
icon: 'fa-map-pin'
});
}
function errorHandler($rootScope, $state, brSnackbar) {
$rootScope.$on('$stateChangeError', (event, toState, toParams, fromState, fromParams, error) => {
brSnackbar.create(error.detail);
if (toState && toState.name && toState.name.startsWith(yamlAutodetectState.name)) {
$state.go(toState);
} else {
$state.go(graphicalState);
}
});
}
function httpConfig($http) {
$http.defaults.headers.common['X-Csrf-Token-Required-For-Requests'] = 'write';
}