summaryrefslogtreecommitdiffstats
path: root/catalog-ui/src/app/view-models/workspace/workspace-view-model.ts
diff options
context:
space:
mode:
Diffstat (limited to 'catalog-ui/src/app/view-models/workspace/workspace-view-model.ts')
-rw-r--r--catalog-ui/src/app/view-models/workspace/workspace-view-model.ts585
1 files changed, 301 insertions, 284 deletions
diff --git a/catalog-ui/src/app/view-models/workspace/workspace-view-model.ts b/catalog-ui/src/app/view-models/workspace/workspace-view-model.ts
index f4bbed2c96..11667283b2 100644
--- a/catalog-ui/src/app/view-models/workspace/workspace-view-model.ts
+++ b/catalog-ui/src/app/view-models/workspace/workspace-view-model.ts
@@ -22,103 +22,110 @@
* Created by obarda on 3/30/2016.
*/
'use strict';
-import * as _ from "lodash";
+import * as _ from 'lodash';
import {
- IUserProperties, IAppMenu, Resource, Component, Plugin, PluginsConfiguration, PluginDisplayOptions,
- RelationshipTypeModel, NodeTypeModel, CapabilityTypeModel
-} from "app/models";
+ IUserProperties,
+ IAppMenu,
+ Resource,
+ Component,
+ Plugin,
+ PluginsConfiguration,
+ PluginDisplayOptions
+} from 'app/models';
import {
- WorkspaceMode, ComponentFactory, ChangeLifecycleStateHandler, Role, ComponentState, MenuItemGroup, MenuHandler,
- MenuItem, ModalsHandler, States, EVENTS, CHANGE_COMPONENT_CSAR_VERSION_FLAG, ResourceType, PREVIOUS_CSAR_COMPONENT
-} from "app/utils";
+ MenuItem, ModalsHandler, States, EVENTS, CHANGE_COMPONENT_CSAR_VERSION_FLAG, ResourceType, PREVIOUS_CSAR_COMPONENT,
+ WorkspaceMode, ComponentFactory, ChangeLifecycleStateHandler, Role, ComponentState, MenuItemGroup, MenuHandler
+} from 'app/utils';
import {
EventListenerService,
- EntityService,
- ProgressService,
- CacheService,
- LeftPaletteLoaderService
-} from "app/services";
-import {FileUploadModel} from "../../directives/file-upload/file-upload";
-import {AutomatedUpgradeService} from "../../ng2/pages/automated-upgrade/automated-upgrade.service";
-import {ComponentServiceNg2} from "../../ng2/services/component-services/component.service";
-import {EventBusService} from "../../ng2/services/event-bus.service";
-import {PluginsService} from "../../ng2/services/plugins.service";
-import {IDependenciesServerResponse} from "../../ng2/services/responses/dependencies-server-response";
+ LeftPaletteLoaderService,
+ ProgressService
+} from 'app/services';
+import {
+ CacheService
+} from 'app/services-ng2';
+import { AutomatedUpgradeService } from '../../ng2/pages/automated-upgrade/automated-upgrade.service';
+import { CatalogService } from '../../ng2/services/catalog.service';
+import { ComponentServiceNg2 } from '../../ng2/services/component-services/component.service';
+import { EventBusService } from '../../ng2/services/event-bus.service';
+import { HomeService } from '../../ng2/services/home.service';
+import { PluginsService } from '../../ng2/services/plugins.service';
+import { IDependenciesServerResponse } from '../../ng2/services/responses/dependencies-server-response';
+import { WorkspaceNg1BridgeService } from '../../ng2/pages/workspace/workspace-ng1-bridge-service';
+import { WorkspaceService } from '../../ng2/pages/workspace/workspace.service';
export interface IWorkspaceViewModelScope extends ng.IScope {
- isLoading:boolean;
- isCreateProgress:boolean;
- component:Component;
- originComponent:Component;
- componentType:string;
- importFile:any;
- leftBarTabs:MenuItemGroup;
- isNew:boolean;
- isFromImport:boolean;
- isValidForm:boolean;
- isActiveTopBar:boolean;
- mode:WorkspaceMode;
- breadcrumbsModel:Array<MenuItemGroup>;
- sdcMenu:IAppMenu;
- changeLifecycleStateButtons:any;
- version:string;
- versionsList:Array<any>;
- changeVersion:any;
- isComposition:boolean;
- isDeployment:boolean;
- isPlugins:boolean;
- $state:ng.ui.IStateService;
- user:IUserProperties;
- thirdParty:boolean;
- disabledButtons:boolean;
- menuComponentTitle:string;
- progressService:ProgressService;
- progressMessage:string;
+ isLoading: boolean;
+ isCreateProgress: boolean;
+ component: Component;
+ originComponent: Component;
+ componentType: string;
+ importFile: any;
+ leftBarTabs: MenuItemGroup;
+ isNew: boolean;
+ isFromImport: boolean;
+ isValidForm: boolean;
+ isActiveTopBar: boolean;
+ mode: WorkspaceMode;
+ breadcrumbsModel: Array<MenuItemGroup>;
+ sdcMenu: IAppMenu;
+ changeLifecycleStateButtons: any;
+ version: string;
+ versionsList: Array<any>;
+ changeVersion: any;
+ isComposition: boolean;
+ isDeployment: boolean;
+ isPlugins: boolean;
+ $state: ng.ui.IStateService;
+ user: IUserProperties;
+ thirdParty: boolean;
+ disabledButtons: boolean;
+ menuComponentTitle: string;
+ progressService: ProgressService;
+ progressMessage: string;
ComponentServiceNg2: ComponentServiceNg2;
// leftPanelComponents:Array<Models.Components.Component>; //this is in order to load the left panel once, and not wait long time when moving to composition
- unsavedChanges:boolean;
- unsavedChangesCallback:Function;
- unsavedFile:boolean;
- capabilityTypesList: Array<CapabilityTypeModel>;
- relationshipTypesList: Array<RelationshipTypeModel>;
- nodeTypesList: Array<NodeTypeModel>;
-
-
- startProgress(message:string):void;
- stopProgress():void;
- updateBreadcrumbs(component:Component):void;
- updateUnsavedFileFlag(isUnsaved:boolean):void;
- showChangeStateButton():boolean;
- getComponent():Component;
- setComponent(component:Component):void;
- setOriginComponent(component:Component):void;
- onMenuItemPressed(state:string, params:any):ng.IPromise<boolean>;
- create():void;
- save():Promise<void>;
- setValidState(isValid:boolean):void;
- changeLifecycleState(state:string):void;
- handleChangeLifecycleState(state:string, newCsarVersion?:string):void;
- disableMenuItems():void;
- enableMenuItems():void;
- isDesigner():boolean;
- isViewMode():boolean;
- isEditMode():boolean;
- isCreateMode():boolean;
- isDisableMode():boolean;
- isGeneralView():boolean;
- goToBreadcrumbHome():void;
- onVersionChanged(selectedId:string):void;
- getLatestVersion():void;
- getStatus():string;
- showLifecycleIcon():boolean;
- updateSelectedMenuItem(state:string):void;
- isSelected(menuItem:MenuItem):boolean;
- uploadFileChangedInGeneralTab():void;
- updateMenuComponentName(ComponentName:string):void;
- getTabTitle():string;
- reload(component:Component):void;
+ unsavedChanges: boolean;
+ unsavedChangesCallback: Function;
+ unsavedFile: boolean;
+ hasNoDependencies: boolean;
+
+
+ startProgress(message: string): void;
+ stopProgress(): void;
+ updateBreadcrumbs(component: Component): void;
+ updateUnsavedFileFlag(isUnsaved: boolean): void;
+ showChangeStateButton(): boolean;
+ getComponent(): Component;
+ setComponent(component: Component): void;
+ setOriginComponent(component: Component): void;
+ onMenuItemPressed(state: string, params: any): ng.IPromise<boolean>;
+ create(): void;
+ save(): Promise<void>;
+ setValidState(isValid: boolean): void;
+ changeLifecycleState(state: string): void;
+ handleChangeLifecycleState(state: string, newCsarVersion?: string, errorFunction?: Function): void;
+ disableMenuItems(): void;
+ enableMenuItems(): void;
+ isDesigner(): boolean;
+ isViewMode(): boolean;
+ isEditMode(): boolean;
+ isCreateMode(): boolean;
+ isDisableMode(): boolean;
+ isGeneralView(): boolean;
+ goToBreadcrumbHome(): void;
+ onVersionChanged(selectedId: string): void;
+ getLatestVersion(): void;
+ getStatus(): string;
+ showLifecycleIcon(): boolean;
+ updateSelectedMenuItem(state: string): void;
+ isSelected(menuItem: MenuItem): boolean;
+ uploadFileChangedInGeneralTab(): void;
+ updateMenuComponentName(ComponentName: string): void;
+ getTabTitle(): string;
+ reload(component: Component): void;
}
export class WorkspaceViewModel {
@@ -133,53 +140,55 @@ export class WorkspaceViewModel {
'MenuHandler',
'Sdc.Services.CacheService',
'ChangeLifecycleStateHandler',
- 'ModalsHandler',
'LeftPaletteLoaderService',
'$filter',
'EventListenerService',
- 'Sdc.Services.EntityService',
'Notification',
'$stateParams',
+ 'HomeService',
+ 'CatalogService',
'Sdc.Services.ProgressService',
'ComponentServiceNg2',
'AutomatedUpgradeService',
'EventBusService',
- 'PluginsService'
+ 'PluginsService',
+ 'WorkspaceNg1BridgeService',
+ 'workspaceService'
];
- constructor(private $scope:IWorkspaceViewModelScope,
- private injectComponent:Component,
- private ComponentFactory:ComponentFactory,
- private $state:ng.ui.IStateService,
- private sdcMenu:IAppMenu,
- private $q:ng.IQService,
- private MenuHandler:MenuHandler,
- private cacheService:CacheService,
- private ChangeLifecycleStateHandler:ChangeLifecycleStateHandler,
- private ModalsHandler:ModalsHandler,
- private LeftPaletteLoaderService:LeftPaletteLoaderService,
- private $filter:ng.IFilterService,
- private EventListenerService:EventListenerService,
- private EntityService:EntityService,
- private Notification:any,
- private $stateParams:any,
- private progressService:ProgressService,
- private ComponentServiceNg2:ComponentServiceNg2,
- private AutomatedUpgradeService:AutomatedUpgradeService,
- private eventBusService:EventBusService,
- private pluginsService:PluginsService) {
-
-
-
- this.initScope();
- this.initAfterScope();
- this.$scope.updateSelectedMenuItem(this.$state.current.name);
+ constructor(private $scope: IWorkspaceViewModelScope,
+ private injectComponent: Component,
+ private ComponentFactory: ComponentFactory,
+ private $state: ng.ui.IStateService,
+ private sdcMenu: IAppMenu,
+ private $q: ng.IQService,
+ private MenuHandler: MenuHandler,
+ private cacheService: CacheService,
+ private ChangeLifecycleStateHandler: ChangeLifecycleStateHandler,
+ private LeftPaletteLoaderService: LeftPaletteLoaderService,
+ private $filter: ng.IFilterService,
+ private EventListenerService: EventListenerService,
+ private Notification: any,
+ private $stateParams: any,
+ private homeService: HomeService,
+ private catalogService: CatalogService,
+ private progressService: ProgressService,
+ private ComponentServiceNg2: ComponentServiceNg2,
+ private AutomatedUpgradeService: AutomatedUpgradeService,
+ private eventBusService: EventBusService,
+ private pluginsService: PluginsService,
+ private workspaceNg1BridgeService: WorkspaceNg1BridgeService,
+ private workspaceService: WorkspaceService) {
+
+ this.initScope();
+ // this.initAfterScope();
+ this.$scope.updateSelectedMenuItem(this.$state.current.name);
}
- private role:string;
- private category:string;
- private components:Array<Component>;
-
+ private role: string;
+ private category: string;
+ private components: Component[];
+
private initViewMode = ():WorkspaceMode => {
let mode = WorkspaceMode.VIEW;
@@ -187,35 +196,34 @@ export class WorkspaceViewModel {
mode = WorkspaceMode.CREATE;
} else {
if (this.$scope.component.lifecycleState === ComponentState.NOT_CERTIFIED_CHECKOUT &&
- this.$scope.component.lastUpdaterUserId === this.cacheService.get("user").userId) {
- if ((this.$scope.component.isService() || this.$scope.component.isResource()) && this.role == Role.DESIGNER) {
+ this.$scope.component.lastUpdaterUserId === this.cacheService.get('user').userId) {
+ if ((this.$scope.component.isService() || this.$scope.component.isResource()) && this.role === Role.DESIGNER) {
mode = WorkspaceMode.EDIT;
}
}
}
+ this.workspaceNg1BridgeService.updateIsViewOnly(mode === WorkspaceMode.VIEW);
return mode;
- };
+ }
- private initChangeLifecycleStateButtons = ():void => {
- let state = this.$scope.component.isService() && (Role.OPS == this.role || Role.GOVERNOR == this.role) ? this.$scope.component.distributionStatus : this.$scope.component.lifecycleState;
+ private initChangeLifecycleStateButtons = (): void => {
+ let state: string;
+ if (this.$scope.component.isService() && this.$scope.component.lifecycleState === 'CERTIFIED') {
+ state = this.$scope.component.distributionStatus;
+ } else {
+ state = this.$scope.component.lifecycleState;
+ }
this.$scope.changeLifecycleStateButtons = (this.sdcMenu.roles[this.role].changeLifecycleStateButtons[state] || [])[this.$scope.component.componentType.toUpperCase()];
+ }
- };
-
- private initLeftPalette = ():void => {
- //this.LeftPaletteLoaderService.loadLeftPanel(this.$scope.component);
- };
-
- private initScope = ():void => {
-
+ private initScope = (): void => {
this.$scope.component = this.injectComponent;
- //this.initLeftPalette();
this.$scope.menuComponentTitle = this.$scope.component.name;
this.$scope.disabledButtons = false;
this.$scope.originComponent = this.ComponentFactory.createComponent(this.$scope.component);
this.$scope.componentType = this.$scope.component.componentType;
this.$scope.version = this.cacheService.get('version');
- this.$scope.user = this.cacheService.get("user");
+ this.$scope.user = this.cacheService.get('user');
this.role = this.$scope.user.role;
this.category = this.$scope.component.selectedCategory;
this.$scope.mode = this.initViewMode();
@@ -229,10 +237,11 @@ export class WorkspaceViewModel {
this.$scope.progressService = this.progressService;
this.$scope.unsavedChanges = false;
- this.EventListenerService.registerObserverCallback(EVENTS.ON_WORKSPACE_UNSAVED_CHANGES, this.setWorkspaceButtonState);
- //this.EventListenerService.registerObserverCallback(EVENTS.ON_UPDATE_VSP_FILE, this.updateVspFlag);
+ this.$scope.hasNoDependencies = true;
+ this.verifyIfDependenciesExist();
- this.$scope.getComponent = ():Component => {
+ this.EventListenerService.registerObserverCallback(EVENTS.ON_WORKSPACE_UNSAVED_CHANGES, this.setWorkspaceButtonState);
+ this.$scope.getComponent = (): Component => {
return this.$scope.component;
};
@@ -261,17 +270,17 @@ export class WorkspaceViewModel {
this.$scope.archiveComponent = ():void => {
this.$scope.isLoading = true;
const typeComponent = this.$scope.component.componentType;
- this.ComponentServiceNg2.archiveComponent(typeComponent, this.$scope.component.uniqueId).subscribe(()=>{
+ this.ComponentServiceNg2.archiveComponent(typeComponent, this.$scope.component.uniqueId).subscribe(()=> {
this.$scope.isLoading = false;
- if(this.$state.params.previousState){
- switch(this.$state.params.previousState){
+ if (this.$state.params.previousState) {
+ switch (this.$state.params.previousState) {
case 'catalog':
case 'dashboard':
this.$state.go(this.$state.params.previousState);
break;
default:
break;
- }
+ }
}
this.$scope.component.archived = true;
this.deleteArchiveCache();
@@ -281,17 +290,17 @@ export class WorkspaceViewModel {
title: this.$filter('translate')("ARCHIVE_SUCCESS_MESSAGE_TITLE")
});
}, (error) => { this.$scope.isLoading = false; });
- }
+ }
this.$scope.restoreComponent = ():void => {
this.$scope.isLoading = true;
const typeComponent = this.$scope.component.componentType;
- this.ComponentServiceNg2.restoreComponent(typeComponent, this.$scope.component.uniqueId).subscribe(()=>{
+ this.ComponentServiceNg2.restoreComponent(typeComponent, this.$scope.component.uniqueId).subscribe(()=> {
this.$scope.isLoading = false;
this.Notification.success({
- message: this.$scope.component.name + ' ' + this.$filter('translate')("RESTORE_SUCCESS_MESSAGE_TEXT"),
- title: this.$filter('translate')("RESTORE_SUCCESS_MESSAGE_TITLE")
- });
+ message: this.$scope.component.name + ' ' + this.$filter('translate')("RESTORE_SUCCESS_MESSAGE_TEXT"),
+ title: this.$filter('translate')("RESTORE_SUCCESS_MESSAGE_TITLE")
+ });
});
this.$scope.component.archived = false;
this.deleteArchiveCache();
@@ -304,13 +313,13 @@ export class WorkspaceViewModel {
if(this.$scope.isValidForm){
this.$scope.save().then(() => {
this.$scope.onMenuItemPressed(toState.name, toParams);
- }, ()=> {
+ }, ()=> {
console.error("Save failed, unable to navigate to " + toState.name);
})
} else {
console.error("Form is invalid, unable to navigate to " + toState.name);
}
- }
+ }
}
});
@@ -384,7 +393,7 @@ export class WorkspaceViewModel {
};
this.$scope.create = () => {
-
+
this.$scope.startProgress("Creating Asset...");
_.first(this.$scope.leftBarTabs.menuItems).isDisabled = true;//disabled click on general tab (DE246274)
@@ -429,7 +438,7 @@ export class WorkspaceViewModel {
};
this.$scope.save = ():Promise<void> => {
-
+
this.EventListenerService.notifyObservers(EVENTS.ON_WORKSPACE_SAVE_BUTTON_CLICK);
this.$scope.startProgress("Updating Asset...");
@@ -445,6 +454,7 @@ export class WorkspaceViewModel {
let onFailed = () => {
stopProgressAndEnableUI();
+ this.$scope.updateUnsavedFileFlag(true);
this.EventListenerService.notifyObservers(EVENTS.ON_WORKSPACE_SAVE_BUTTON_ERROR);
reject();
@@ -459,7 +469,7 @@ export class WorkspaceViewModel {
});
this.$scope.updateBreadcrumbs(component);
-
+
//update the component
this.$scope.setComponent(component);
this.$scope.originComponent = this.ComponentFactory.createComponent(this.$scope.component);
@@ -467,13 +477,14 @@ export class WorkspaceViewModel {
if (this.cacheService.contains(CHANGE_COMPONENT_CSAR_VERSION_FLAG)) {
this.cacheService.remove(CHANGE_COMPONENT_CSAR_VERSION_FLAG);
}
- if (this.cacheService.contains(PREVIOUS_CSAR_COMPONENT)){
+ if (this.cacheService.contains(PREVIOUS_CSAR_COMPONENT)) {
this.cacheService.remove(PREVIOUS_CSAR_COMPONENT);
}
//clear edit flags
this.$state.current.data.unsavedChanges = false;
this.$scope.unsavedFile = false;
+ this.$scope.reload(component);
resolve();
};
@@ -497,35 +508,40 @@ export class WorkspaceViewModel {
this.$state.go('dashboard');
};
- this.$scope.handleChangeLifecycleState = (state:string, newCsarVersion?:string) => {
+ this.$scope.handleChangeLifecycleState = (state:string, newCsarVersion?:string, onError?: Function) => {
if ('monitor' === state) {
this.$state.go('workspace.distribution');
return;
}
let data = this.$scope.changeLifecycleStateButtons[state];
- let onSuccess = (component:Component, url:string):void => {
- //Updating the component from server response
-
+ if (!data && this.$stateParams.componentCsar && !this.$scope.isCreateMode()) {
+ data = {text: 'Check Out', url: 'lifecycleState/CHECKOUT'};
+ }
+ const onSuccess = (component, url:string):void => {
+ // Updating the component from server response
+
// Creating the data object to notify the plugins with
- let eventData: any = {
+ const eventData: any = {
uuid: this.$scope.component.uuid,
version: this.$scope.component.version
};
- //the server returns only metaData (small component) except checkout (Full component) ,so we update only the statuses of distribution & lifecycle
+ // the server returns only metaData (small component) except checkout (Full component) ,so we update only the statuses of distribution & lifecycle
this.$scope.component.lifecycleState = component.lifecycleState;
this.$scope.component.distributionStatus = component.distributionStatus;
switch (url) {
case 'lifecycleState/CHECKOUT':
+ this.workspaceNg1BridgeService.updateIsViewOnly(false);
this.eventBusService.notify("CHECK_OUT", eventData, false).subscribe(() => {
// only checkOut get the full component from server
// this.$scope.component = component;
// Work around to change the csar version
if(newCsarVersion) {
this.cacheService.set(CHANGE_COMPONENT_CSAR_VERSION_FLAG, newCsarVersion);
- }
+ (this.$scope.component as Resource).csarVersion = newCsarVersion;
+ }
//when checking out a minor version uuid remains
const bcIdx = _.findIndex(this.components, (item) => {
@@ -542,6 +558,7 @@ export class WorkspaceViewModel {
this.initVersionObject();
this.$scope.isLoading = false;
this.EventListenerService.notifyObservers(EVENTS.ON_CHECKOUT, component);
+ this.workspaceService.setComponentMetadata(component);
this.Notification.success({
message: this.$filter('translate')("CHECKOUT_SUCCESS_MESSAGE_TEXT"),
@@ -551,6 +568,7 @@ export class WorkspaceViewModel {
});
break;
case 'lifecycleState/CHECKIN':
+ this.workspaceNg1BridgeService.updateIsViewOnly(true);
defaultActionAfterChangeLifecycleState();
this.Notification.success({
message: this.$filter('translate')("CHECKIN_SUCCESS_MESSAGE_TEXT"),
@@ -566,77 +584,25 @@ export class WorkspaceViewModel {
});
});
break;
- case 'lifecycleState/certificationRequest':
- defaultActionAfterChangeLifecycleState();
- this.Notification.success({
- message: this.$filter('translate')("SUBMIT_FOR_TESTING_SUCCESS_MESSAGE_TEXT"),
- title: this.$filter('translate')("SUBMIT_FOR_TESTING_SUCCESS_MESSAGE_TITLE")
- });
- break;
- //Tester Role
- case 'lifecycleState/failCertification':
- defaultActionAfterChangeLifecycleState();
- this.Notification.success({
- message: this.$filter('translate')("REJECT_SUCCESS_MESSAGE_TEXT"),
- title: this.$filter('translate')("REJECT_SUCCESS_MESSAGE_TITLE")
- });
- break;
case 'lifecycleState/certify':
-
this.$scope.handleCertification(component);
-
+ this.verifyIfDependenciesExist();
+ this.$scope.reload(component);
break;
- //DE203504 Bug Fix Start
- case 'lifecycleState/startCertification':
- this.initChangeLifecycleStateButtons();
- this.Notification.success({
- message: this.$filter('translate')("START_TESTING_SUCCESS_MESSAGE_TEXT"),
- title: this.$filter('translate')("START_TESTING_SUCCESS_MESSAGE_TITLE")
- });
- break;
- case 'lifecycleState/cancelCertification':
- this.initChangeLifecycleStateButtons();
- this.Notification.success({
- message: this.$filter('translate')("CANCEL_TESTING_SUCCESS_MESSAGE_TEXT"),
- title: this.$filter('translate')("CANCEL_TESTING_SUCCESS_MESSAGE_TITLE")
- });
- break;
- //Ops Role
- case 'distribution/PROD/activate':
- this.initChangeLifecycleStateButtons();
+ case 'distribution/PROD/activate':
this.Notification.success({
message: this.$filter('translate')("DISTRIBUTE_SUCCESS_MESSAGE_TEXT"),
title: this.$filter('translate')("DISTRIBUTE_SUCCESS_MESSAGE_TITLE")
});
- break;
- //Governor Role
- case 'distribution-state/reject':
this.initChangeLifecycleStateButtons();
- this.Notification.success({
- message: this.$filter('translate')("REJECT_SUCCESS_MESSAGE_TEXT"),
- title: this.$filter('translate')("REJECT_SUCCESS_MESSAGE_TITLE")
- });
break;
- case 'distribution-state/approve':
- this.initChangeLifecycleStateButtons();
- this.$state.go('catalog');
- this.Notification.success({
- message: this.$filter('translate')("APPROVE_SUCCESS_MESSAGE_TEXT"),
- title: this.$filter('translate')("APPROVE_SUCCESS_MESSAGE_TITLE")
- });
- break;
- //DE203504 Bug Fix End
-
default :
defaultActionAfterChangeLifecycleState();
-
}
- if (data.url != 'lifecycleState/CHECKOUT') {
+ if (data.url !== 'lifecycleState/CHECKOUT') {
this.$scope.isLoading = false;
}
};
- //this.$scope.isLoading = true;
-
this.ChangeLifecycleStateHandler.changeLifecycleState(this.$scope.component, data, this.$scope, onSuccess);
};
@@ -663,6 +629,21 @@ export class WorkspaceViewModel {
return this.$scope.mode === WorkspaceMode.CREATE;
};
+ this.$scope.checkDisableButton = (button: any):boolean => {
+ // Logic moved from html to component
+ if (this.$scope.isCreateMode() || button.disabled || this.$scope.disabledButtons || !this.$scope.isValidForm || this.$scope.unsavedChanges || this.$scope.component.archived){
+ return true;
+ }
+
+ // Specific verification for Checkout - enabled only in case the component is the latest version.
+ let result: boolean = false;
+
+ if (button.url === 'lifecycleState/CHECKOUT') {
+ result = !this.$scope.component.isLatestVersion();
+ }
+ return result;
+ };
+
this.$scope.isEditMode = ():boolean => {
return this.$scope.mode === WorkspaceMode.EDIT;
};
@@ -686,18 +667,14 @@ export class WorkspaceViewModel {
this.initMenuItems();
- this.$scope.showChangeStateButton = ():boolean => {
- let result:boolean = true;
- if (!this.$scope.component.isLatestVersion() && Role.OPS != this.role && Role.GOVERNOR != this.role) {
+ this.$scope.showLatestVersion = (): boolean => {
+ let result: boolean = true;
+ if (!this.$scope.component.isLatestVersion()) {
result = false;
}
if (ComponentState.NOT_CERTIFIED_CHECKOUT === this.$scope.component.lifecycleState && this.$scope.isViewMode()) {
result = false;
}
- if (ComponentState.CERTIFIED != this.$scope.component.lifecycleState &&
- (Role.OPS == this.role || Role.GOVERNOR == this.role)) {
- result = false;
- }
return result;
};
@@ -705,20 +682,20 @@ export class WorkspaceViewModel {
let stateArray:Array<string> = state.split('.', 2);
let stateWithoutInternalNavigate:string = stateArray[0] + '.' + stateArray[1];
let selectedItem:MenuItem = _.find(this.$scope.leftBarTabs.menuItems, (item:MenuItem) => {
- let itemStateArray: Array<string> = item.state.split('.', 2);
+ let itemStateArray:Array<string> = item.state.split('.', 2);
let itemStateWithoutNavigation:string = itemStateArray[0] + '.' + itemStateArray[1];
return (itemStateWithoutNavigation === stateWithoutInternalNavigate);
});
let selectedIndex = selectedItem ? this.$scope.leftBarTabs.menuItems.indexOf(selectedItem) : 0;
- if (stateArray[1] === 'plugins') {
+ if (stateArray[1] === 'plugins') {
_.forEach(PluginsConfiguration.plugins, (plugin) => {
if (plugin.pluginStateUrl == this.$state.params.path) {
return false;
}
else if (this.pluginsService.isPluginDisplayedInContext(plugin, this.role, this.$scope.component.getComponentSubType())) {
- selectedIndex++;
+ selectedIndex++;
}
});
}
@@ -726,11 +703,11 @@ export class WorkspaceViewModel {
this.$scope.leftBarTabs.selectedIndex = selectedIndex;
};
- this.$scope.isSelected = (menuItem:MenuItem): boolean => {
+ this.$scope.isSelected = (menuItem: MenuItem): boolean => {
return this.$scope.leftBarTabs.selectedIndex === _.indexOf(this.$scope.leftBarTabs.menuItems, menuItem);
};
- this.$scope.$watch('$state.current.name', (newVal:string):void => {
+ this.$scope.$watch('$state.current.name', (newVal: string): void => {
if (newVal) {
this.$scope.isComposition = (newVal.indexOf(States.WORKSPACE_COMPOSITION) > -1);
this.$scope.isDeployment = newVal == States.WORKSPACE_DEPLOYMENT;
@@ -738,20 +715,26 @@ export class WorkspaceViewModel {
}
});
- this.$scope.getTabTitle = ():string => {
- return this.$scope.leftBarTabs.menuItems.find((menuItem:MenuItem) => {
+ this.$scope.getTabTitle = (): string => {
+ return this.$scope.leftBarTabs.menuItems.find((menuItem: MenuItem) => {
return menuItem.state == this.$scope.$state.current.name;
}).text;
};
- this.$scope.reload = (component:Component):void => {
- this.$state.go(this.$state.current.name, {id: component.uniqueId}, {reload: true});
+ this.$scope.reload = (component: Component): void => {
+ const isGeneralTab = this.$state.current.name === 'workspace.general';
+ // nullify the componentCsar in case we are in general tab so we know we didnt came from updateVsp Modal
+ if (isGeneralTab) {
+ this.$state.go(this.$state.current.name, {id: component.uniqueId, componentCsar: null}, {reload: true});
+ } else {
+ this.$state.go(this.$state.current.name, {id: component.uniqueId}, {reload: true});
+ }
};
this.$scope.$on('$destroy', () => {
this.EventListenerService.unRegisterObserver(EVENTS.ON_WORKSPACE_UNSAVED_CHANGES);
});
-
+
this.$scope.openAutomatedUpgradeModal = ():void => {
this.$scope.isLoading = true;
this.ComponentServiceNg2.getDependencies(this.$scope.component.componentType, this.$scope.component.uniqueId).subscribe((response:Array<IDependenciesServerResponse>)=> {
@@ -761,14 +744,14 @@ export class WorkspaceViewModel {
}
this.$scope.handleCertification = (certifyComponent): void => {
- if (this.$scope.component.getComponentSubType() === ResourceType.VF) {
+ if (this.$scope.component.getComponentSubType() === ResourceType.VF || this.$scope.component.isService()) {
this.ComponentServiceNg2.getDependencies(this.$scope.component.componentType, this.$scope.component.uniqueId).subscribe((response:Array<IDependenciesServerResponse>) => {
this.$scope.isLoading = false;
- let isUpgradeNeeded = _.filter(response, (componentToUpgrade:IDependenciesServerResponse) => {
+ const isUpgradeNeeded = _.filter(response, (componentToUpgrade:IDependenciesServerResponse) => {
return componentToUpgrade.dependencies && componentToUpgrade.dependencies.length > 0;
});
- if(isUpgradeNeeded.length === 0) {
+ if (isUpgradeNeeded.length === 0) {
this.onSuccessWithoutUpgradeNeeded();
return;
}
@@ -781,52 +764,54 @@ export class WorkspaceViewModel {
}
this.$scope.disableMenuItems = () => {
- this.$scope.leftBarTabs.menuItems.forEach((item:MenuItem) => {
- item.isDisabled = (States.WORKSPACE_GENERAL != item.state);
+ this.$scope.leftBarTabs.menuItems.forEach((item: MenuItem) => {
+ item.isDisabled = (States.WORKSPACE_GENERAL !== item.state);
});
}
-
+
this.$scope.enableMenuItems = () => {
- this.$scope.leftBarTabs.menuItems.forEach((item:MenuItem) => {
+ this.$scope.leftBarTabs.menuItems.forEach((item: MenuItem) => {
item.isDisabled = false;
});
- }
+ };
- this.$scope.startProgress = (message:string):void => {
+ this.$scope.startProgress = (message: string): void => {
this.progressService.initCreateComponentProgress(this.$scope.component.uniqueId);
this.$scope.isCreateProgress = true;
this.$scope.progressMessage = message;
};
- this.$scope.stopProgress = ():void => {
+ this.$scope.stopProgress = (): void => {
this.$scope.isCreateProgress = false;
this.progressService.deleteProgressValue(this.$scope.component.uniqueId);
}
- this.$scope.updateBreadcrumbs = (component:Component):void => {
+ this.$scope.updateBreadcrumbs = (component: Component): void => {
// Update the components list for breadcrumbs
const bcIdx = this.MenuHandler.findBreadcrumbComponentIndex(this.components, component);
if (bcIdx !== -1) {
this.components[bcIdx] = component;
this.initBreadcrumbs(); // re-calculate breadcrumbs
}
- }
+ };
this.$scope.updateUnsavedFileFlag = (isUnsaved:boolean) => {
this.$scope.unsavedFile = isUnsaved;
- }
+ };
- };
+ }
- private onSuccessWithoutUpgradeNeeded = ():void => {
+ private onSuccessWithoutUpgradeNeeded = (): void => {
this.$scope.isLoading = false;
this.Notification.success({
- message: this.$filter('translate')("ACCEPT_TESTING_SUCCESS_MESSAGE_TEXT"),
- title: this.$filter('translate')("ACCEPT_TESTING_SUCCESS_MESSAGE_TITLE")
+ message: this.$filter('translate')('SERVICE_CERTIFICATION_STATUS_TEXT'),
+ title: this.$filter('translate')('SERVICE_CERTIFICATION_STATUS_TITLE')
});
- this.$state.go('dashboard');
+ this.initVersionObject();
+ this.initChangeLifecycleStateButtons();
}
+
private refreshDataAfterChangeLifecycleState = (component:Component):void => {
this.$scope.isLoading = false;
this.$scope.mode = this.initViewMode();
@@ -835,42 +820,42 @@ export class WorkspaceViewModel {
this.EventListenerService.notifyObservers(EVENTS.ON_LIFECYCLE_CHANGE, component);
}
- private initAfterScope = ():void => {
+ private initAfterScope = (): void => {
// In case user select csar from the onboarding modal, need to disable checkout and submit for testing.
if (this.$state.params['disableButtons'] === true) {
this.$scope.uploadFileChangedInGeneralTab();
}
};
- private initVersionObject = ():void => {
+ private initVersionObject = (): void => {
this.$scope.versionsList = (this.$scope.component.getAllVersionsAsSortedArray()).reverse();
this.$scope.changeVersion = {
- selectedVersion: _.find(this.$scope.versionsList, (versionObj)=> {
+ selectedVersion: _.find(this.$scope.versionsList, (versionObj) => {
return versionObj.versionId === this.$scope.component.uniqueId;
})
};
- };
+ }
- private getNewComponentBreadcrumbItem = ():MenuItem => {
- let text = "";
+ private getNewComponentBreadcrumbItem = (): MenuItem => {
+ let text = '';
if (this.$scope.component.isResource() && (<Resource>this.$scope.component).isCsarComponent()) {
text = this.$scope.component.getComponentSubType() + ': ' + this.$scope.component.name;
} else {
text = 'Create new ' + this.$state.params['type'];
}
return new MenuItem(text, null, States.WORKSPACE_GENERAL, 'goToState', [this.$state.params]);
- };
+ }
- private updateMenuItemByRole = (menuItems:Array<any>, role:string) => {
- let tempMenuItems:Array<any> = new Array<any>();
- menuItems.forEach((item:any) => {
+ private updateMenuItemByRole = (menuItems: any[], role: string) => {
+ const tempMenuItems: any[] = new Array<any>();
+ menuItems.forEach((item: any) => {
//remove item if role is disabled
if (!(item.disabledRoles && item.disabledRoles.indexOf(role) > -1)) {
tempMenuItems.push(item);
}
});
return tempMenuItems;
- };
+ }
private updateMenuItemByCategory = (menuItems:Array<any>, category:string) => {
let tempMenuItems:Array<any> = new Array<any>();
@@ -888,15 +873,15 @@ export class WorkspaceViewModel {
private deleteArchiveCache = () => {
- this.cacheService.remove("archiveComponents"); //delete the cache to ensure the archive is reloaded from server
- };
+ this.cacheService.remove('archiveComponents'); // delete the cache to ensure the archive is reloaded from server
+ }
private initBreadcrumbs = () => {
this.components = this.cacheService.get('breadcrumbsComponents');
- let breadcrumbsComponentsLvl = this.MenuHandler.generateBreadcrumbsModelFromComponents(this.components, this.$scope.component);
+ const breadcrumbsComponentsLvl = this.MenuHandler.generateBreadcrumbsModelFromComponents(this.components, this.$scope.component);
if (this.$scope.isCreateMode()) {
- let createItem = this.getNewComponentBreadcrumbItem();
+ const createItem = this.getNewComponentBreadcrumbItem();
if (!breadcrumbsComponentsLvl.menuItems) {
breadcrumbsComponentsLvl.menuItems = [];
}
@@ -905,25 +890,23 @@ export class WorkspaceViewModel {
}
this.$scope.breadcrumbsModel = [breadcrumbsComponentsLvl, this.$scope.leftBarTabs];
- };
+ }
private initMenuItems() {
- let inCreateMode = this.$scope.isCreateMode();
+ const inCreateMode = this.$scope.isCreateMode();
this.$scope.leftBarTabs = new MenuItemGroup();
- //const menuItemsObjects:Array<any> = this.updateMenuItemByRole(this.sdcMenu.component_workspace_menu_option[this.$scope.component.getComponentSubType()], this.role);
- let menuItemsObjects:Array<any> = this.updateMenuItemByRole(this.sdcMenu.component_workspace_menu_option[this.$scope.component.getComponentSubType()], this.role);
- if(this.$scope.component.getComponentSubType()==="SERVICE")
- {
- let menuItemsObjectsCategory:Array<any> = this.updateMenuItemByCategory(menuItemsObjects, this.category);
- menuItemsObjects = menuItemsObjectsCategory;
+ let menuItemsObjects: any[] = this.updateMenuItemByRole(this.sdcMenu.component_workspace_menu_option[this.$scope.component.getComponentSubType()], this.role);
+ if (this.$scope.component.getComponentSubType() === 'SERVICE') {
+ const menuItemsObjectsCategory: any[] = this.updateMenuItemByCategory(menuItemsObjects, this.category);
+ menuItemsObjects = menuItemsObjectsCategory;
}
// Only adding plugins to the workspace if they can be displayed for the current user role
_.each(PluginsConfiguration.plugins, (plugin: Plugin) => {
if (this.pluginsService.isPluginDisplayedInContext(plugin, this.role, this.$scope.component.getComponentSubType())) {
menuItemsObjects.push({
- text: plugin.pluginDisplayOptions["context"].displayName,
+ text: plugin.pluginDisplayOptions['context'].displayName,
action: 'onMenuItemPressed',
state: 'workspace.plugins',
params: {path: plugin.pluginStateUrl}
@@ -931,7 +914,7 @@ export class WorkspaceViewModel {
}
});
- this.$scope.leftBarTabs.menuItems = menuItemsObjects.map((item:MenuItem) => {
+ this.$scope.leftBarTabs.menuItems = menuItemsObjects.map((item: MenuItem) => {
const menuItem = new MenuItem(item.text, item.callback, item.state, item.action, item.params, item.blockedForTypes, item.disabledCategory);
if (menuItem.params) {
menuItem.params.state = menuItem.state;
@@ -940,7 +923,7 @@ export class WorkspaceViewModel {
menuItem.params = {state: menuItem.state};
}
menuItem.callback = () => this.$scope[menuItem.action](menuItem.state, menuItem.params);
- menuItem.isDisabled = (inCreateMode && States.WORKSPACE_GENERAL != menuItem.state) ||
+ menuItem.isDisabled = (inCreateMode && States.WORKSPACE_GENERAL !== menuItem.state) ||
(States.WORKSPACE_DEPLOYMENT === menuItem.state && this.$scope.component.modules
&& this.$scope.component.modules.length === 0 && this.$scope.component.isResource()) ||
(menuItem.disabledCategory === true);
@@ -950,20 +933,54 @@ export class WorkspaceViewModel {
if (this.cacheService.get('breadcrumbsComponents')) {
this.initBreadcrumbs();
}
+ else {
+ this.initBreadcrumbsComponents();
+ }
}
-
-
private showSuccessNotificationMessage = ():void => {
this.Notification.success({
- message: this.$filter('translate')("IMPORT_VF_MESSAGE_CREATE_FINISHED_DESCRIPTION"),
- title: this.$filter('translate')("IMPORT_VF_MESSAGE_CREATE_FINISHED_TITLE")
+ message: this.$filter('translate')('IMPORT_VF_MESSAGE_CREATE_FINISHED_DESCRIPTION'),
+ title: this.$filter('translate')('IMPORT_VF_MESSAGE_CREATE_FINISHED_TITLE')
});
- };
+ }
- private setWorkspaceButtonState = (newState:boolean, callback?:Function) => {
+ private setWorkspaceButtonState = (newState: boolean, callback?: Function) => {
this.$scope.unsavedChanges = newState;
this.$scope.unsavedChangesCallback = callback;
}
+ private initBreadcrumbsComponents = (): void => {
+ let breadcrumbsComponentsObservable;
+ if (this.$stateParams.previousState === 'dashboard') {
+ breadcrumbsComponentsObservable = this.homeService.getAllComponents(true);
+ } else if (this.$stateParams.previousState === 'catalog') {
+ breadcrumbsComponentsObservable = this.catalogService.getCatalog();
+ } else {
+ this.cacheService.remove('breadcrumbsComponentsState');
+ this.cacheService.remove('breadcrumbsComponents');
+ return;
+ }
+ breadcrumbsComponentsObservable.subscribe((components) => {
+ this.cacheService.set('breadcrumbsComponentsState', this.$stateParams.previousState);
+ this.cacheService.set('breadcrumbsComponents', components);
+ this.initBreadcrumbs();
+ });
+
+ }
+
+ private verifyIfDependenciesExist(): void {
+ let containsDependencies = [];
+ if (this.$scope.component.componentType && this.$scope.component.uniqueId &&
+ this.$scope.component.lifecycleState === 'CERTIFIED' && (this.$scope.component.isService() || this.$scope.component.getComponentSubType() === 'VF')) {
+ this.ComponentServiceNg2.getDependencies(this.$scope.component.componentType, this.$scope.component.uniqueId).subscribe((response: IDependenciesServerResponse[]) => {
+ containsDependencies = response.filter((version) => version.dependencies);
+ if (containsDependencies.length > 0) {
+ this.$scope.hasNoDependencies = false;
+ } else {
+ this.$scope.hasNoDependencies = true;
+ }
+ });
+ }
+ }
}