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