Interface operation screen enhancements
[sdc.git] / catalog-ui / src / app / utils / common-utils.ts
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 import * as _ from "lodash";
22 import { ComponentInstanceFactory } from "./component-instance-factory";
23 import { Module, AttributeModel, ResourceInstance, PropertyModel, InputFEModel, InterfaceModel, OperationModel } from "../models";
24 import { InputBEModel, PropertyBEModel, RelationshipModel } from "app/models";
25 import { PolicyInstance } from "app/models/graph/zones/policy-instance";
26 import { GroupInstance } from "../models/graph/zones/group-instance";
27
28 export class CommonUtils {
29
30     static initProperties(propertiesObj:Array<PropertyModel>, uniqueId?:string):Array<PropertyModel> {
31
32         let properties = new Array<PropertyModel>();
33         if (propertiesObj) {
34             _.forEach(propertiesObj, (property:PropertyModel):void => {
35                 if (uniqueId) {
36                     property.readonly = property.parentUniqueId != uniqueId;
37                 }
38                 properties.push(new PropertyModel(property));
39             });
40         }
41         return properties;
42     };
43
44     static initAttributes(attributesObj:Array<AttributeModel>, uniqueId?:string):Array<AttributeModel> {
45
46         let attributes = new Array<AttributeModel>();
47         if (attributesObj) {
48             _.forEach(attributesObj, (attribute:AttributeModel):void => {
49                 if (uniqueId) {
50                     attribute.readonly = attribute.parentUniqueId != uniqueId;
51                 }
52                 attributes.push(new AttributeModel(attribute));
53             });
54         }
55         return attributes;
56     };
57
58     static initComponentInstances(componentInstanceObj:Array<ResourceInstance>):Array<ResourceInstance> {
59
60         let componentInstances = new Array<ResourceInstance>();
61         if (componentInstanceObj) {
62             _.forEach(componentInstanceObj, (instance:ResourceInstance):void => {
63                 componentInstances.push(ComponentInstanceFactory.createComponentInstance(instance));
64             });
65         }
66         return componentInstances;
67     };
68
69     static initModules(moduleArrayObj:Array<Module>):Array<Module> {
70
71         let modules = new Array<Module>();
72
73         if (moduleArrayObj) {
74             _.forEach(moduleArrayObj, (module:Module):void => {
75                 if (module.type === "org.openecomp.groups.VfModule") {
76                     modules.push(new Module(module));
77                 }
78             });
79         }
80         return modules;
81     };
82
83     static initInputs(inputsObj: Array<InputBEModel>): Array<InputBEModel> {
84
85         let inputs = new Array<InputBEModel>();
86
87         if(inputsObj) {
88             _.forEach(inputsObj, (input: InputBEModel):void => {
89                 inputs.push(new InputBEModel(input));
90             })
91         }
92
93         return inputs;
94     }
95
96     static initBeProperties(propertiesObj: Array<PropertyBEModel>): Array<PropertyBEModel> {
97
98         let properties = new Array<PropertyBEModel>();
99
100         if (propertiesObj) {
101             _.forEach(propertiesObj, (property: PropertyBEModel): void => {
102                 properties.push(new PropertyBEModel(property));
103             })
104         }
105
106         return properties;
107     }
108
109     static initComponentInstanceRelations = (componentInstanceRelationsObj:Array<RelationshipModel>):Array<RelationshipModel> => {
110         if (componentInstanceRelationsObj) {
111              let componentInstancesRelations: Array<RelationshipModel> = [];
112             _.forEach(componentInstanceRelationsObj, (instanceRelation:RelationshipModel):void => {
113                 componentInstancesRelations.push(new RelationshipModel(instanceRelation));
114             });
115             return componentInstancesRelations;
116         }
117     };
118
119     static initPolicies = (policiesObj: Array<PolicyInstance>):Array<PolicyInstance> => {
120         let policies = new Array<PolicyInstance>();
121
122         if (policiesObj) {
123             _.forEach(policiesObj, (policy: PolicyInstance): void => {
124                 policies.push(new PolicyInstance(policy));
125             })
126         }
127
128         return policies;
129     }
130     static initGroups = (groupsObj: Array<GroupInstance>):Array<GroupInstance> => {
131         let groups = new Array<GroupInstance>();
132
133         if(groupsObj) {
134             _.forEach(groupsObj, (group: GroupInstance):void => {
135                 groups.push(new GroupInstance(group));
136             });
137         }
138
139         return groups;
140     }
141
142     static initInterfaces(interfaces: Array<InterfaceModel>): Array<InterfaceModel> {
143
144         return _.map(interfaces, (interf: InterfaceModel) => {
145
146             return new InterfaceModel({
147                 type: interf.type,
148                 uniqueId: interf.uniqueId,
149                 operations: _.map(interf.operations,
150                     (operation: OperationModel) => {
151                         const newOperation = new OperationModel(operation);
152                         newOperation.interfaceType = interf.type;
153                         newOperation.interfaceId = interf.uniqueId;
154
155                         const {inputs, outputs} = operation;
156                         if (inputs) {
157                             newOperation.createInputsList(inputs.listToscaDataDefinition);
158                         }
159                         if (outputs) {
160                             newOperation.createOutputsList(outputs.listToscaDataDefinition);
161                         }
162
163                         return newOperation;
164                     }
165                 )
166             });
167
168         });
169     }
170
171     static initInterfaceOperations(interfaces: Array<InterfaceModel>): Array<OperationModel> {
172
173         return _.reduce(interfaces, (acc, interf: InterfaceModel) => {
174
175             return acc.concat(
176                 _.map(interf.operations,
177                     (operation: OperationModel) => {
178                         const newOperation = new OperationModel(operation);
179                         newOperation.interfaceType = interf.type;
180                         newOperation.interfaceId = interf.uniqueId;
181
182                         const {inputs, outputs} = operation;
183                         if (inputs) {
184                             newOperation.createInputsList(inputs.listToscaDataDefinition);
185                         }
186                         if (outputs) {
187                             newOperation.createOutputsList(outputs.listToscaDataDefinition);
188                         }
189
190                         return newOperation;
191                     }
192                 )
193             );
194
195         }, []);
196     }
197 }
198