2 * ============LICENSE_START=======================================================
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
11 * http://www.apache.org/licenses/LICENSE-2.0
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=========================================================
21 package org.openecomp.sdc.be.model;
23 import java.io.Serializable;
24 import java.util.List;
27 import org.openecomp.sdc.be.config.ConfigurationManager;
28 import org.openecomp.sdc.be.dao.utils.MapUtil;
29 import org.openecomp.sdc.be.datatypes.components.ResourceMetadataDataDefinition;
30 import org.openecomp.sdc.be.datatypes.elements.InterfaceOperationDataDefinition;
31 import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum;
32 import org.openecomp.sdc.be.datatypes.enums.ResourceTypeEnum;
34 public class Resource extends Component implements Serializable {
36 private static final long serialVersionUID = -6811540567661368482L;
37 public static final String ROOT_RESOURCE = "tosca.nodes.Root";
40 super(new ResourceMetadataDefinition());
41 this.getComponentMetadataDefinition().getMetadataDataDefinition().setComponentType(ComponentTypeEnum.RESOURCE);
44 public Resource(ComponentMetadataDefinition componentMetadataDefinition) {
45 super(componentMetadataDefinition);
46 this.getComponentMetadataDefinition().getMetadataDataDefinition().setComponentType(ComponentTypeEnum.RESOURCE);
49 private List<String> derivedFrom;
51 private List<String> derivedList;
53 private List<PropertyDefinition> properties;
55 private List<PropertyDefinition> attributes;
58 private Map<String, InterfaceDefinition> interfaces;
60 private List<String> defaultCapabilities;
62 private Map<String, InterfaceOperationDataDefinition> interfaceOperations;
64 // private List<AdditionalInformationDefinition> additionalInformation;
67 * Please note that more than one "derivedFrom" resource is not currently
68 * supported by the app. The first list element is always addressed.
72 public List<String> getDerivedFrom() {
76 public void setDerivedFrom(List<String> derivedFrom) {
77 this.derivedFrom = derivedFrom;
81 * The derivedList is a chain of derivedFrom. e.g. if resource C is derived
82 * from resource B that is derived from resource A - then A, B is the
83 * "DerivedList" of resource C
87 public List<String> getDerivedList() {
91 public void setDerivedList(List<String> derivedList) {
92 this.derivedList = derivedList;
95 public List<PropertyDefinition> getProperties() {
99 public void setProperties(List<PropertyDefinition> properties) {
100 this.properties = properties;
103 public List<PropertyDefinition> getAttributes() {
107 public void setAttributes(List<PropertyDefinition> attributes) {
108 this.attributes = attributes;
111 public Map<String, InterfaceDefinition> getInterfaces() {
115 public void setInterfaces(Map<String, InterfaceDefinition> interfaces) {
116 this.interfaces = interfaces;
119 public Boolean isAbstract() {
120 return ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
124 public void setAbstract(Boolean isAbstract) {
125 ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
126 .setAbstract(isAbstract);
129 public List<String> getDefaultCapabilities() {
130 return defaultCapabilities;
133 public void setDefaultCapabilities(List<String> defaultCapabilities) {
134 this.defaultCapabilities = defaultCapabilities;
137 public String getCost() {
138 return ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
142 public void setCost(String cost) {
143 ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition()).setCost(cost);
147 public String getLicenseType() {
148 return ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
152 public void setLicenseType(String licenseType) {
153 ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
154 .setLicenseType(licenseType);
157 public Map<String, InterfaceOperationDataDefinition> getInterfaceOperations() {
158 return interfaceOperations;
161 public void setInterfaceOperations(Map<String, InterfaceOperationDataDefinition> interfaceOperations) {
162 this.interfaceOperations = interfaceOperations;
166 public int hashCode() {
167 final int prime = 31;
169 result = prime * result + super.hashCode();
171 result = prime * result + ((attributes == null) ? 0 : attributes.hashCode());
172 // result = prime * result + ((capabilities == null) ? 0 :
173 // capabilities.hashCode());
174 result = prime * result + ((defaultCapabilities == null) ? 0 : defaultCapabilities.hashCode());
175 result = prime * result + ((derivedFrom == null) ? 0 : derivedFrom.hashCode());
176 result = prime * result + ((interfaces == null) ? 0 : interfaces.hashCode());
177 result = prime * result + ((properties == null) ? 0 : properties.hashCode());
178 result = prime * result + ((derivedList == null) ? 0 : derivedList.hashCode());
179 result = prime * result + ((interfaceOperations == null) ? 0 : interfaceOperations.hashCode());
180 // result = prime * result + ((requirements == null) ? 0 :
181 // requirements.hashCode());
186 public boolean equals(Object obj) {
191 if (getClass() != obj.getClass())
194 Resource other = (Resource) obj;
195 if (attributes == null) {
196 if (other.attributes != null)
198 } else if (!attributes.equals(other.attributes))
200 if (defaultCapabilities == null) {
201 if (other.defaultCapabilities != null)
203 } else if (!defaultCapabilities.equals(other.defaultCapabilities))
205 if (derivedFrom == null) {
206 if (other.derivedFrom != null)
208 } else if (!derivedFrom.equals(other.derivedFrom))
210 if (derivedList == null) {
211 if (other.derivedList != null)
213 } else if (!derivedList.equals(other.derivedList))
215 if (interfaces == null) {
216 if (other.interfaces != null)
218 } else if (!interfaces.equals(other.interfaces))
220 if (properties == null) {
221 if (other.properties != null)
223 } else if (!properties.equals(other.properties))
225 if (interfaceOperations == null) {
226 if (other.interfaceOperations != null)
228 } else if (!interfaceOperations.equals(other.interfaceOperations))
230 return super.equals(obj);
234 public String toString() {
235 return "Resource [derivedFrom=" + derivedFrom + ", properties=" + properties + ", attributes=" + attributes
236 + ", interfaces=" + interfaces
237 // + ", capabilities=" + capabilities + ", requirements=" +
239 + ", defaultCapabilities=" + defaultCapabilities + ", additionalInformation=" + additionalInformation
240 + ", interfaceOperations=" + interfaceOperations
241 + "Metadata [" + getComponentMetadataDefinition().getMetadataDataDefinition().toString() + "]";
244 public String getToscaResourceName() {
245 return ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
246 .getToscaResourceName();
249 public void setToscaResourceName(String toscaResourceName) {
250 ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
251 .setToscaResourceName(toscaResourceName);
254 public ResourceTypeEnum getResourceType() {
255 return ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
259 public void setResourceType(ResourceTypeEnum resourceType) {
260 ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
261 .setResourceType(resourceType);
264 public void setVendorName(String vendorName) {
265 ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
266 .setVendorName(vendorName);
269 public void setVendorRelease(String vendorRelease) {
270 ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
271 .setVendorRelease(vendorRelease);
274 public void setResourceVendorModelNumber(String resourceVendorModelNumber){
275 ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition()).
276 setResourceVendorModelNumber(resourceVendorModelNumber);
279 public String getVendorName() {
280 return ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
284 public String getVendorRelease() {
285 return ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
289 public String getResourceVendorModelNumber(){
290 return ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
291 .getResourceVendorModelNumber();
295 public String fetchGenericTypeToscaNameFromConfig(){
296 String result = super.fetchGenericTypeToscaNameFromConfig();
298 result = ConfigurationManager.getConfigurationManager().getConfiguration().getGenericAssetNodeTypes().get(ResourceTypeEnum.VFC.getValue());
303 public String assetType(){
304 return this.getResourceType().name();
308 public boolean shouldGenerateInputs(){
309 //TODO add complex VFC condition when supported
310 return !(this.getResourceType().isAtomicType());
314 public boolean deriveFromGeneric(){
315 return this.shouldGenerateInputs() || (derivedFrom != null && derivedFrom.contains(fetchGenericTypeToscaNameFromConfig()));
318 public Map<String, List<RequirementCapabilityRelDef>> groupRelationsByInstanceName(Resource resource) {
319 Map<String, List<RequirementCapabilityRelDef>> relationsByInstanceId = MapUtil.groupListBy(resource.getComponentInstancesRelations(), RequirementCapabilityRelDef::getFromNode);
320 return MapUtil.convertMapKeys(relationsByInstanceId, (instId) -> getInstanceNameFromInstanceId(resource, instId));
323 private String getInstanceNameFromInstanceId(Resource resource, String instId) {
324 return resource.getComponentInstanceById(instId).get().getName();