e10a9944d328cb1dd3b04b60651e6b5ecb0ee0ba
[sdc.git] /
1 'use strict';
2 import {ModalsHandler} from "app/utils";
3 import {SharingService} from "app/services";
4 import {IAppConfigurtaion, ArtifactModel, IFileDownload} from "app/models";
5 import {IWorkspaceViewModelScope} from "app/view-models/workspace/workspace-view-model";
6 import {ComponentServiceNg2} from "../../../../ng2/services/component-services/component.service";
7 import {ArtifactGroupModel} from "../../../../models/artifacts";
8 import {ComponentGenericResponse} from "../../../../ng2/services/responses/component-generic-response";
9
10 export interface IInformationArtifactsScope extends IWorkspaceViewModelScope {
11     artifacts:Array<ArtifactModel>;
12     tableHeadersList:Array<any>;
13     artifactType:string;
14     isResourceInstance:boolean;
15     downloadFile:IFileDownload;
16     isLoading:boolean;
17     sortBy:string;
18     reverse:boolean;
19
20     getTitle():string;
21     addOrUpdate(artifact:ArtifactModel):void;
22     delete(artifact:ArtifactModel):void;
23     download(artifact:ArtifactModel):void;
24     clickArtifactName(artifact:any):void;
25     openEditEnvParametersModal(artifactResource:ArtifactModel):void;
26     sort(sortBy:string):void;
27     showNoArtifactMessage():boolean;
28 }
29
30 export class InformationArtifactsViewModel {
31
32     static '$inject' = [
33         '$scope',
34         '$filter',
35         '$state',
36         'sdcConfig',
37         'ModalsHandler',
38         'ComponentServiceNg2'
39     ];
40
41     constructor(private $scope:IInformationArtifactsScope,
42                 private $filter:ng.IFilterService,
43                 private $state:any,
44                 private sdcConfig:IAppConfigurtaion,
45                 private ModalsHandler:ModalsHandler,
46                 private ComponentServiceNg2: ComponentServiceNg2) {
47         this.initInformationalArtifacts();
48         this.$scope.updateSelectedMenuItem();
49     }
50
51     private initInformationalArtifacts = ():void => {
52         if(!this.$scope.component.artifacts) {
53             this.$scope.isLoading = true;
54             this.ComponentServiceNg2.getComponentInformationalArtifacts(this.$scope.component).subscribe((response:ComponentGenericResponse) => {
55                 this.$scope.component.artifacts = response.artifacts;
56                 this.initScope();
57                 this.$scope.isLoading = false;
58             });
59         } else {
60             this.initScope();
61         }
62     }
63
64     private initScope = ():void => {
65
66         this.$scope.isLoading = false;
67         this.$scope.sortBy = 'artifactDisplayName';
68         this.$scope.reverse = false;
69         this.$scope.setValidState(true);
70         this.$scope.artifactType = 'informational';
71         this.$scope.getTitle = ():string => {
72             return this.$filter("resourceName")(this.$scope.component.name) + ' Artifacts';
73
74         };
75
76         this.$scope.tableHeadersList = [
77             {title: 'Name', property: 'artifactDisplayName'},
78             {title: 'Type', property: 'artifactType'},
79             {title: 'Version', property: 'artifactVersion'},
80             {title: 'UUID', property: 'artifactUUID'}
81         ];
82
83         this.$scope.artifacts = <ArtifactModel[]>_.values(this.$scope.component.artifacts);
84         this.$scope.sort = (sortBy:string):void => {
85             this.$scope.reverse = (this.$scope.sortBy === sortBy) ? !this.$scope.reverse : false;
86             this.$scope.sortBy = sortBy;
87         };
88
89
90         this.$scope.addOrUpdate = (artifact:ArtifactModel):void => {
91             artifact.artifactGroupType = 'INFORMATIONAL';
92             this.ModalsHandler.openArtifactModal(artifact, this.$scope.component).then(() => {
93                 this.$scope.artifacts = <ArtifactModel[]>_.values(this.$scope.component.artifacts);
94             });
95         };
96
97         this.$scope.showNoArtifactMessage = ():boolean => {
98             let artifacts:any = [];
99             artifacts = _.filter(this.$scope.artifacts, (artifact:ArtifactModel)=> {
100                 return artifact.esId;
101             });
102
103             if (artifacts.length === 0) {
104                 return true;
105             }
106             return false;
107         };
108
109         this.$scope.delete = (artifact:ArtifactModel):void => {
110
111             let onOk = ():void => {
112                 this.$scope.isLoading = true;
113                 let onSuccess = ():void => {
114                     this.$scope.isLoading = false;
115                     this.$scope.artifacts = <ArtifactModel[]>_.values(this.$scope.component.artifacts);
116                 };
117
118                 let onFailed = (error:any):void => {
119                     console.log('Delete artifact returned error:', error);
120                     this.$scope.isLoading = false;
121                 };
122
123                 this.$scope.component.deleteArtifact(artifact.uniqueId, artifact.artifactLabel).then(onSuccess, onFailed);
124             };
125
126             let title:string = this.$filter('translate')("ARTIFACT_VIEW_DELETE_MODAL_TITLE");
127             let message:string = this.$filter('translate')("ARTIFACT_VIEW_DELETE_MODAL_TEXT", "{'name': '" + artifact.artifactDisplayName + "'}");
128             this.ModalsHandler.openConfirmationModal(title, message, false).then(onOk);
129         };
130
131         this.$scope.clickArtifactName = (artifact:any) => {
132             if (!artifact.esId) {
133                 this.$scope.addOrUpdate(artifact);
134             }
135
136         };
137     }
138 }