Catalog alignment
[sdc.git] / catalog-model / src / main / java / org / openecomp / sdc / be / model / Resource.java
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 package org.openecomp.sdc.be.model;
22
23 import org.openecomp.sdc.be.config.ConfigurationManager;
24 import org.openecomp.sdc.be.dao.utils.MapUtil;
25 import org.openecomp.sdc.be.datatypes.components.ResourceMetadataDataDefinition;
26 import org.openecomp.sdc.be.datatypes.elements.InterfaceInstanceDataDefinition;
27 import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum;
28 import org.openecomp.sdc.be.datatypes.enums.ResourceTypeEnum;
29
30 import java.util.List;
31 import java.util.Map;
32 import java.util.Objects;
33 import java.util.Optional;
34 import java.util.stream.Collectors;
35
36 public class Resource extends Component {
37
38     private List<String> derivedFrom;
39
40     private List<String> derivedList;
41
42     private List<PropertyDefinition> attributes;
43
44     private Map<String, InterfaceInstanceDataDefinition> instInterfaces;
45
46     private List<String> defaultCapabilities;
47
48     public Resource() {
49         super(new ResourceMetadataDefinition());
50         this.getComponentMetadataDefinition().getMetadataDataDefinition()
51                 .setComponentType(ComponentTypeEnum.RESOURCE);
52     }
53
54     public Resource(ComponentMetadataDefinition componentMetadataDefinition) {
55         super(componentMetadataDefinition);
56         if (this.getComponentMetadataDefinition().getMetadataDataDefinition() == null) {
57             this.getComponentMetadataDefinition().componentMetadataDataDefinition = new ResourceMetadataDataDefinition();
58         }
59         this.getComponentMetadataDefinition().getMetadataDataDefinition().setComponentType(ComponentTypeEnum.RESOURCE);
60     }
61
62     /**
63      * Please note that more than one "derivedFrom" resource is not currently
64      * supported by the app. The first list element is always addressed.
65      *
66      * @return
67      */
68     public List<String> getDerivedFrom() {
69         return derivedFrom;
70     }
71
72     public void setDerivedFrom(List<String> derivedFrom) {
73         this.derivedFrom = derivedFrom;
74     }
75
76     /**
77      * The derivedList is a chain of derivedFrom. e.g. if resource C is derived
78      * from resource B that is derived from resource A - then A, B is the
79      * "DerivedList" of resource C
80      *
81      * @return
82      */
83     public List<String> getDerivedList() {
84         return derivedList;
85     }
86
87     public void setDerivedList(List<String> derivedList) {
88         this.derivedList = derivedList;
89     }
90
91     public List<PropertyDefinition> getProperties() {
92         return properties;
93     }
94
95     public void setProperties(List<PropertyDefinition> properties) {
96         this.properties = properties;
97     }
98
99     public List<PropertyDefinition> getAttributes() {
100         return attributes;
101     }
102
103     public void setAttributes(List<PropertyDefinition> attributes) {
104         this.attributes = attributes;
105     }
106
107     public Map<String, InterfaceInstanceDataDefinition> getInstInterfaces() {
108         return instInterfaces;
109     }
110
111     public void setInstInterfaces(
112             Map<String, InterfaceInstanceDataDefinition> instInterfaces) {
113         this.instInterfaces = instInterfaces;
114     }
115
116     public Boolean isAbstract() {
117         return ((ResourceMetadataDataDefinition) getComponentMetadataDefinition()
118                 .getMetadataDataDefinition())
119                 .isAbstract();
120     }
121
122     public void setAbstract(Boolean isAbstract) {
123         ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
124                 .setAbstract(isAbstract);
125     }
126
127     public List<String> getDefaultCapabilities() {
128         return defaultCapabilities;
129     }
130
131     public void setDefaultCapabilities(List<String> defaultCapabilities) {
132         this.defaultCapabilities = defaultCapabilities;
133     }
134
135     public String getCost() {
136         return ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
137                 .getCost();
138     }
139
140     public void setCost(String cost) {
141         ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition()).setCost(cost);
142     }
143
144     public String getLicenseType() {
145         return ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
146                 .getLicenseType();
147     }
148
149     public void setLicenseType(String licenseType) {
150         ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
151                 .setLicenseType(licenseType);
152     }
153
154     @Override
155     public int hashCode() {
156         final int prime = 31;
157         int result = 1;
158         result = prime * result + super.hashCode();
159         result = prime * result + ((attributes == null) ? 0 : attributes.hashCode());
160         result = prime * result + ((defaultCapabilities == null) ? 0 : defaultCapabilities.hashCode());
161         result = prime * result + ((derivedFrom == null) ? 0 : derivedFrom.hashCode());
162         result = prime * result + ((properties == null) ? 0 : properties.hashCode());
163         result = prime * result + ((derivedList == null) ? 0 : derivedList.hashCode());
164         return result;
165     }
166
167     @Override
168     public boolean equals(Object o) {
169         if (this == o) return true;
170         if (o == null || getClass() != o.getClass()) return false;
171         if (!super.equals(o)) return false;
172         Resource resource = (Resource) o;
173         return Objects.equals(derivedFrom, resource.derivedFrom) &&
174                 Objects.equals(derivedList, resource.derivedList) &&
175                 Objects.equals(properties, resource.properties) &&
176                 Objects.equals(attributes, resource.attributes) &&
177                 Objects.equals(defaultCapabilities, resource.defaultCapabilities);
178     }
179
180
181     @Override
182     public String toString() {
183         return "Resource [derivedFrom=" + derivedFrom + ", properties=" + properties + ", attributes=" + attributes
184                 + ", defaultCapabilities=" + defaultCapabilities + ", additionalInformation=" + additionalInformation
185                 + "Metadata [" + getComponentMetadataDefinition().getMetadataDataDefinition().toString() + "]";
186     }
187
188     public String getToscaResourceName() {
189         return ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
190                 .getToscaResourceName();
191     }
192
193     public void setToscaResourceName(String toscaResourceName) {
194         ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
195                 .setToscaResourceName(toscaResourceName);
196     }
197
198     public ResourceTypeEnum getResourceType() {
199         return ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
200                 .getResourceType();
201     }
202
203     public void setResourceType(ResourceTypeEnum resourceType) {
204         ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
205                 .setResourceType(resourceType);
206     }
207
208     public void setVendorName(String vendorName) {
209         ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
210                 .setVendorName(vendorName);
211     }
212
213     public void setVendorRelease(String vendorRelease) {
214         ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
215                 .setVendorRelease(vendorRelease);
216     }
217
218     public void setResourceVendorModelNumber(String resourceVendorModelNumber) {
219         ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition()).
220                 setResourceVendorModelNumber(resourceVendorModelNumber);
221     }
222
223     public String getVendorName() {
224         return ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
225                 .getVendorName();
226     }
227
228     public String getVendorRelease() {
229         return ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
230                 .getVendorRelease();
231     }
232
233     public String getResourceVendorModelNumber() {
234         return ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
235                 .getResourceVendorModelNumber();
236     }
237
238     @Override
239     public String fetchGenericTypeToscaNameFromConfig() {
240         String result = super.fetchGenericTypeToscaNameFromConfig();
241         if (null == result)
242             result = ConfigurationManager.getConfigurationManager().getConfiguration().getGenericAssetNodeTypes().get(ResourceTypeEnum.VFC.getValue());
243         return result;
244     }
245
246     @Override
247     public String assetType() {
248         return this.getResourceType().name();
249     }
250
251     @Override
252     public boolean shouldGenerateInputs(){
253         return !(this.getResourceType().isAtomicType());
254     }
255
256     @Override
257     public boolean deriveFromGeneric() {
258         return this.shouldGenerateInputs() || (derivedFrom != null && derivedFrom.contains(fetchGenericTypeToscaNameFromConfig()));
259     }
260
261     public Map<String, List<RequirementCapabilityRelDef>> groupRelationsFromCsarByInstanceName(Resource resource) {
262         List<RequirementCapabilityRelDef> componentInstanceRelationsFromCsar = resource.getComponentInstancesRelations().stream().filter(r->!r.isOriginUI()).collect(Collectors.toList());
263         Map<String, List<RequirementCapabilityRelDef>> relationsByInstanceId = MapUtil.groupListBy(componentInstanceRelationsFromCsar, RequirementCapabilityRelDef::getFromNode);
264         return MapUtil.convertMapKeys(relationsByInstanceId, instId -> getInstanceInvariantNameFromInstanceId(resource, instId));
265     }
266
267     private String getInstanceNameFromInstanceId(Resource resource, String instId) {
268         Optional<ComponentInstance> componentInstanceById = resource.getComponentInstanceById(instId);
269         return componentInstanceById.isPresent() ? componentInstanceById.get().getName() : null;
270     }
271
272     private String getInstanceInvariantNameFromInstanceId(Resource resource, String instId) {
273         Optional<ComponentInstance> componentInstanceById = resource.getComponentInstanceById(instId);
274         return componentInstanceById.isPresent() ? componentInstanceById.get().getInvariantName() : null;
275     }
276 }