97a117e8b75bfb66d85d1853b3c8c9802c8400f1
[sdc.git] /
1 /*-
2  * ============LICENSE_START=======================================================
3  * SDC
4  * ================================================================================
5  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6  * ================================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ============LICENSE_END=========================================================
19  */
20 /**
21  * Created by rcohen on 9/22/2016.
22  */
23 /// <reference path="../../../../references"/>
24 module Sdc.ViewModels {
25     'use strict';
26     import tree = d3.layout.tree;
27
28     export class SortTableDefined {
29         reverse:boolean;
30         sortByField:string;
31     }
32
33     interface IReqAndCapabilitiesViewModelScope extends IWorkspaceViewModelScope {
34         requirementsTableHeadersList: Array<any>;
35         capabilitiesTableHeadersList: Array<any>;
36         capabilityPropertiesTableHeadersList: Array<any>;
37         requirementsSortTableDefined: SortTableDefined;
38         capabilitiesSortTableDefined: SortTableDefined;
39         propertiesSortTableDefined: SortTableDefined;
40         requirements:Array<Models.Requirement>;
41         capabilities:Array<Models.Capability>;
42         mode:string;
43         filteredProperties:Array<Array<Models.PropertyModel>>;
44         searchText:string;
45
46         sort(sortBy:string, sortByTableDefined:SortTableDefined):void;
47         updateProperty(property:Models.PropertyModel, indexInFilteredProperties:number):void;
48         allCapabilitiesSelected(selected:boolean):void;
49     }
50
51     export class ReqAndCapabilitiesViewModel {
52
53         static '$inject' = [
54             '$scope',
55             '$filter',
56             '$modal',
57             '$templateCache',
58             'ModalsHandler'
59         ];
60
61
62         constructor(private $scope:IReqAndCapabilitiesViewModelScope,
63                     private $filter:ng.IFilterService,
64                     private $modal:ng.ui.bootstrap.IModalService,
65                     private $templateCache:ng.ITemplateCacheService) {
66             this.initScope();
67             this.$scope.updateSelectedMenuItem();
68         }
69
70
71         private openEditPropertyModal = (property:Models.PropertyModel, indexInFilteredProperties:number):void => {
72             let viewModelsHtmlBasePath:string = '/app/scripts/view-models/';
73             //...because there is not be api
74             _.forEach(this.$scope.filteredProperties[indexInFilteredProperties],(prop:Models.PropertyModel)=>{
75                 prop.readonly = true;
76             });
77             let modalOptions:ng.ui.bootstrap.IModalSettings = {
78                 template: this.$templateCache.get(viewModelsHtmlBasePath + 'forms/property-form/property-form-view.html'),
79                 controller: 'Sdc.ViewModels.PropertyFormViewModel',
80                 size: 'sdc-l',
81                 backdrop: 'static',
82                 keyboard: false,
83                 resolve: {
84                     property: ():Models.PropertyModel => {
85                         return property;
86                     },
87                     component: ():Models.Components.Component => {
88                         return <Models.Components.Component> this.$scope.component;
89                     },
90                     filteredProperties: ():Array<Models.PropertyModel> => {
91                         return this.$scope.filteredProperties[indexInFilteredProperties];
92                     }
93                 }
94             };
95             this.$modal.open(modalOptions);
96         };
97
98         private initScope = ():void => {
99
100             this.$scope.requirementsSortTableDefined = {
101                 reverse: false,
102                 sortByField: 'name'
103             };
104             this.$scope.capabilitiesSortTableDefined = {
105                 reverse: false,
106                 sortByField: 'name'
107             };
108             this.$scope.propertiesSortTableDefined = {
109                 reverse: false,
110                 sortByField: 'name'
111             };
112
113             this.$scope.setValidState(true);
114             this.$scope.requirementsTableHeadersList = [
115                 {title: 'Name', property: 'name'},
116                 {title: 'Capability', property: 'capability'},
117                 {title: 'Node', property: 'node'},
118                 {title: 'Relationship', property: 'relationship'},
119                 {title: 'Connected To', property: ''},
120                 {title: 'Occurrences', property: ''}
121             ];
122             this.$scope.capabilitiesTableHeadersList = [
123                 {title: 'Name', property: 'name'},
124                 {title: 'Type', property: 'type'},
125                 {title: 'Description', property: ''},
126                 {title: 'Valid Source', property: ''},
127                 {title: 'Occurrences', property: ''}
128             ];
129             this.$scope.capabilityPropertiesTableHeadersList = [
130                 {title: 'Name', property: 'name'},
131                 {title: 'Type', property: 'type'},
132                 {title: 'Schema', property: 'schema.property.type'},
133                 {title: 'Description', property: 'description'},
134             ];
135             this.$scope.filteredProperties=[];
136
137             this.$scope.mode='requirements';
138             this.$scope.requirements=[];
139             _.forEach(this.$scope.component.requirements,(req:Array<Models.Requirement>,capName)=>{
140                 this.$scope.requirements=this.$scope.requirements.concat(req);
141             });
142
143             this.$scope.capabilities=[];
144             _.forEach(this.$scope.component.capabilities,(cap:Array<Models.Capability>,capName)=>{
145                 this.$scope.capabilities=this.$scope.capabilities.concat(cap);
146             });
147
148             this.$scope.sort = (sortBy:string, sortByTableDefined:SortTableDefined):void => {
149                 sortByTableDefined.reverse = (sortByTableDefined.sortByField === sortBy) ? !sortByTableDefined.reverse : false;
150                 sortByTableDefined.sortByField = sortBy;
151             };
152
153             this.$scope.updateProperty = (property:Models.PropertyModel, indexInFilteredProperties:number):void => {
154                 this.openEditPropertyModal(property, indexInFilteredProperties);
155             };
156
157             this.$scope.allCapabilitiesSelected = (selected:boolean):void => {
158                 _.forEach(this.$scope.capabilities,(cap:Models.Capability)=>{
159                     cap.selected = selected;
160                 });
161             };
162         }
163     }
164 }
165