aboutsummaryrefslogtreecommitdiffstats
path: root/catalog-ui/app/scripts/view-models/component-viewer/component-viewer-view-model.ts
diff options
context:
space:
mode:
Diffstat (limited to 'catalog-ui/app/scripts/view-models/component-viewer/component-viewer-view-model.ts')
-rw-r--r--catalog-ui/app/scripts/view-models/component-viewer/component-viewer-view-model.ts211
1 files changed, 211 insertions, 0 deletions
diff --git a/catalog-ui/app/scripts/view-models/component-viewer/component-viewer-view-model.ts b/catalog-ui/app/scripts/view-models/component-viewer/component-viewer-view-model.ts
new file mode 100644
index 0000000000..3ae8ad70fb
--- /dev/null
+++ b/catalog-ui/app/scripts/view-models/component-viewer/component-viewer-view-model.ts
@@ -0,0 +1,211 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed 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.
+ * ============LICENSE_END=========================================================
+ */
+/// <reference path="../../references"/>
+
+module Sdc.ViewModels {
+ 'use strict';
+
+ interface IComponentViewerViewModelScope extends ng.IScope {
+ component: Models.Components.Component;
+ additionalInformations: Array<Models.AdditionalInformationModel>;
+ activityLog: any;
+ activityDateArray: Array<any>; //this is in order to sort the dates
+ inputs: Array<any>;
+ isLoading: boolean;
+ templateUrl: string;
+ currentTab:string;
+ preVersion:string;
+ sdcMenu:Models.IAppMenu;
+ versionsList:Array<any>;
+ close(): void;
+ hasItems(obj:any): boolean;
+ onVersionChanged(version:any) : void;
+ moveToTab(tab:string):void;
+ isSelected(tab:string):boolean;
+ getActivityLog(uniqueId:string):void;
+ parseAction(action:string):string;
+ }
+
+ export class ComponentViewerViewModel {
+
+ static '$inject' = [
+ '$scope',
+ '$modalInstance',
+ 'component',
+ 'Sdc.Services.ActivityLogService',
+ 'sdcMenu',
+ 'ComponentFactory'
+ ];
+
+ constructor(private $scope:IComponentViewerViewModelScope,
+ private $modalInstance:ng.ui.bootstrap.IModalServiceInstance,
+ private component:Models.Components.Component,
+ private activityLogService:Services.ActivityLogService,
+ private sdcMenu:Models.IAppMenu,
+ private ComponentFactory: Utils.ComponentFactory) {
+ this.initScope(component);
+ }
+
+ //creating objects for versions
+ private initVersionObject:Function = ():void => {
+ this.$scope.versionsList = [];
+ for (let version in this.$scope.component.allVersions) {
+ this.$scope.versionsList.push({
+ versionNumber: version,
+ versioning: this.versioning(version),
+ versionId: this.$scope.component.allVersions[version]
+ });
+ }
+
+ };
+
+ private versioning:Function = (versionNumber:string):string => {
+ let version:Array<string> = versionNumber.split('.');
+ return '00000000'.slice(version[0].length) + version[0] + '.' + '00000000'.slice(version[1].length) + version[1];
+ };
+
+ private showComponentInformationView:Function = ():void => {
+ if (this.$scope.component.isResource()) {
+ this.$scope.templateUrl = '/app/scripts/view-models/component-viewer/properties/resource-properties-view.html';
+ } else if(this.$scope.component.isService()) {
+ this.$scope.templateUrl = '/app/scripts/view-models/component-viewer/properties/service-properties-view.html';
+ } else {
+ this.$scope.templateUrl = '/app/scripts/view-models/component-viewer/properties/product-properties-view.html';
+ }
+ };
+
+ private showActivityLogView:Function = ():void => {
+ this.$scope.templateUrl = '/app/scripts/view-models/component-viewer/activity-log/activity-log-view.html';
+ };
+
+ private initComponent = (component:Models.Components.Component):void => {
+ this.$scope.component = component;
+ this.$scope.additionalInformations = component.getAdditionalInformation();
+ this.initVersionObject();
+ this.$scope.isLoading = false;
+ };
+
+ private initScope = (component:Models.Components.Component):void => {
+ this.$scope.isLoading = false;
+ this.initComponent(component);
+ this.$scope.currentTab = 'PROPERTIES';
+ this.$scope.preVersion = component.version;
+ this.$scope.sdcMenu = this.sdcMenu;
+ this.showComponentInformationView();
+ //service inputs
+ if (component.isService()) {
+ let inputs:Array<any> = [];
+
+ for (let group in component.componentInstancesProperties) {
+ if (component.componentInstancesProperties[group]) {
+ component.componentInstancesProperties[group].forEach((property:Models.PropertyModel):void => {
+ if (!property.value) {
+ property.value = property.defaultValue;
+ }
+ inputs.push({
+ name: property.name,
+ value: property.value,
+ type: property.type
+ });
+ });
+ }
+ }
+ this.$scope.inputs = inputs;
+ }
+
+ this.$scope.hasItems = (obj:any):boolean => {
+ return Object.keys(obj).length > 0;
+ };
+
+ this.$scope.close = ():void => {
+ this.$modalInstance.dismiss();
+ };
+
+ this.$scope.onVersionChanged = (version:any):void => {
+ if (version.versionNumber != this.$scope.component.version) {
+ this.$scope.isLoading = true;
+ this.ComponentFactory.getComponentFromServer(this.component.componentType, version.versionId).then((component: Models.Components.Component):void => {
+ this.initComponent(component);
+ });
+ if (this.$scope.currentTab === 'ACTIVITY_LOG') {
+ this.$scope.getActivityLog(version.versionId);
+ }
+
+ }
+ };
+
+ this.$scope.getActivityLog = (uniqueId:any):void => {
+
+ let onError = (response) => {
+ this.$scope.isLoading = false;
+ console.info('onFaild', response);
+
+ };
+ let onSuccess = (response:Array<Models.Activity>) => {
+ this.$scope.activityLog = _.groupBy(response, function (activity:Models.Activity) { //group by date only
+ let dateTime:Date = new Date(activity.TIMESTAMP.replace(" UTC", '').replace(" ", 'T'));
+ // let date:Date = new Date(dateTime.getFullYear(), dateTime.getMonth(), dateTime.getDate());
+ return dateTime.getTime();
+ });
+ /*this is in order to sort the jsonObject by date*/
+ this.$scope.activityDateArray = Object.keys(this.$scope.activityLog);
+ this.$scope.activityDateArray.sort().reverse();
+ this.$scope.isLoading = false;
+ };
+
+ this.$scope.isLoading = true;
+ if (this.$scope.component.isResource()) {
+ this.activityLogService.getActivityLogService('resources', uniqueId).then(onSuccess, onError);
+ }
+ if (this.$scope.component.isService()) {
+ this.activityLogService.getActivityLogService('services', uniqueId).then(onSuccess, onError);
+ }
+
+ };
+
+ this.$scope.moveToTab = (tab:string):void => {
+ if (tab === this.$scope.currentTab) {
+ return;
+ } else if (tab === 'PROPERTIES') {
+ this.showComponentInformationView();
+ this.$scope.preVersion = this.$scope.component.version;
+ } else if (tab === 'ACTIVITY_LOG') {
+ if (!this.$scope.activityLog || this.$scope.preVersion != this.$scope.component.version) {
+ this.$scope.activityLog = this.$scope.getActivityLog(this.$scope.component.uniqueId);
+ }
+ this.showActivityLogView();
+ } else {
+ console.error("Tab " + tab + " not found!");
+ return;
+ }
+ this.$scope.currentTab = tab;
+ };
+
+ this.$scope.isSelected = (tab:string):boolean => {
+ return tab === this.$scope.currentTab;
+ };
+
+ this.$scope.parseAction = (action:string) => {
+ return action ? action.split(/(?=[A-Z])/).join(' ') : '';
+ };
+
+ }
+ }
+}