4ac99edf8abd9fa6f89241aa2a8ec4806f96a0b6
[sdc.git] /
1 /**
2  * Created by rcohen on 9/22/2016.
3  */
4 'use strict';
5 import {IWorkspaceViewModelScope} from "app/view-models/workspace/workspace-view-model";
6 import {ModalsHandler} from "app/utils";
7 import {Capability, PropertyModel, Requirement} from "app/models";
8 import {ComponentGenericResponse} from "../../../../ng2/services/responses/component-generic-response";
9 import {ComponentServiceNg2} from "../../../../ng2/services/component-services/component.service";
10
11 export class SortTableDefined {
12     reverse:boolean;
13     sortByField:string;
14 }
15
16 interface IReqAndCapabilitiesViewModelScope extends IWorkspaceViewModelScope {
17     requirementsTableHeadersList:Array<any>;
18     capabilitiesTableHeadersList:Array<any>;
19     capabilityPropertiesTableHeadersList:Array<any>;
20     requirementsSortTableDefined:SortTableDefined;
21     capabilitiesSortTableDefined:SortTableDefined;
22     propertiesSortTableDefined:SortTableDefined;
23     requirements:Array<Requirement>;
24     capabilities:Array<Capability>;
25     mode:string;
26     filteredProperties:Array<Array<PropertyModel>>;
27     searchText:string;
28
29     sort(sortBy:string, sortByTableDefined:SortTableDefined):void;
30     updateProperty(property:PropertyModel, indexInFilteredProperties:number):void;
31     allCapabilitiesSelected(selected:boolean):void;
32 }
33
34 export class ReqAndCapabilitiesViewModel {
35
36     static '$inject' = [
37         '$scope',
38         '$filter',
39         'ModalsHandler',
40         'ComponentServiceNg2'
41     ];
42
43
44     constructor(private $scope:IReqAndCapabilitiesViewModelScope,
45                 private $filter:ng.IFilterService,
46                 private ModalsHandler:ModalsHandler,
47                 private ComponentServiceNg2: ComponentServiceNg2) {
48
49         this.initCapabilitiesAndRequirements();
50         this.$scope.updateSelectedMenuItem();
51     }
52
53     private initCapabilitiesAndRequirements = (): void => {
54
55         if(!this.$scope.component.capabilities || !this.$scope.component.requirements) {
56             this.$scope.isLoading = true;
57             this.ComponentServiceNg2.getCapabilitiesAndRequirements(this.$scope.component.componentType, this.$scope.component.uniqueId).subscribe((response:ComponentGenericResponse) => {
58                 this.$scope.component.capabilities = response.capabilities;
59                 this.$scope.component.requirements = response.requirements;
60                 this.initScope();
61                 this.$scope.isLoading = false;
62             }, () => {
63                 this.$scope.isLoading = false;
64             });
65         } else {
66             this.initScope();
67         }
68
69     }
70
71     private openEditPropertyModal = (property:PropertyModel, indexInFilteredProperties:number):void => {
72         //...because there is not be api
73         _.forEach(this.$scope.filteredProperties[indexInFilteredProperties], (prop:PropertyModel)=> {
74             prop.readonly = true;
75         });
76         this.ModalsHandler.openEditPropertyModal(property, this.$scope.component, this.$scope.filteredProperties[indexInFilteredProperties], false).then(() => {
77
78         });
79     };
80
81     private initScope = ():void => {
82
83         this.$scope.requirementsSortTableDefined = {
84             reverse: false,
85             sortByField: 'name'
86         };
87         this.$scope.capabilitiesSortTableDefined = {
88             reverse: false,
89             sortByField: 'name'
90         };
91         this.$scope.propertiesSortTableDefined = {
92             reverse: false,
93             sortByField: 'name'
94         };
95
96         this.$scope.setValidState(true);
97         this.$scope.requirementsTableHeadersList = [
98             {title: 'Name', property: 'name'},
99             {title: 'Capability', property: 'capability'},
100             {title: 'Node', property: 'node'},
101             {title: 'Relationship', property: 'relationship'},
102             {title: 'Connected To', property: ''},
103             {title: 'Occurrences', property: ''}
104         ];
105         this.$scope.capabilitiesTableHeadersList = [
106             {title: 'Name', property: 'name'},
107             {title: 'Type', property: 'type'},
108             {title: 'Description', property: ''},
109             {title: 'Valid Source', property: ''},
110             {title: 'Occurrences', property: ''}
111         ];
112         this.$scope.capabilityPropertiesTableHeadersList = [
113             {title: 'Name', property: 'name'},
114             {title: 'Type', property: 'type'},
115             {title: 'Schema', property: 'schema.property.type'},
116             {title: 'Description', property: 'description'},
117         ];
118         this.$scope.filteredProperties = [];
119
120         this.$scope.mode = 'requirements';
121         this.$scope.requirements = [];
122         _.forEach(this.$scope.component.requirements, (req:Array<Requirement>, capName)=> {
123             this.$scope.requirements = this.$scope.requirements.concat(req);
124         });
125
126         this.$scope.capabilities = [];
127         _.forEach(this.$scope.component.capabilities, (cap:Array<Capability>, capName)=> {
128             this.$scope.capabilities = this.$scope.capabilities.concat(cap);
129         });
130
131         this.$scope.sort = (sortBy:string, sortByTableDefined:SortTableDefined):void => {
132             sortByTableDefined.reverse = (sortByTableDefined.sortByField === sortBy) ? !sortByTableDefined.reverse : false;
133             sortByTableDefined.sortByField = sortBy;
134         };
135
136         this.$scope.updateProperty = (property:PropertyModel, indexInFilteredProperties:number):void => {
137             this.openEditPropertyModal(property, indexInFilteredProperties);
138         };
139
140         this.$scope.allCapabilitiesSelected = (selected:boolean):void => {
141             _.forEach(this.$scope.capabilities, (cap:Capability)=> {
142                 cap.selected = selected;
143             });
144         };
145     }
146 }
147