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.enums.ComponentTypeEnum;
31 import org.openecomp.sdc.be.datatypes.enums.OriginTypeEnum;
32 import org.openecomp.sdc.be.datatypes.enums.ResourceTypeEnum;
33 import org.openecomp.sdc.be.datatypes.elements.WorkflowOperationDataDefinition;
34 import static java.util.stream.Collectors.groupingBy;
35 public class Resource extends Component implements Serializable {
37 private static final long serialVersionUID = -6811540567661368482L;
38 public static final String ROOT_RESOURCE = "tosca.nodes.Root";
41 super(new ResourceMetadataDefinition());
42 this.getComponentMetadataDefinition().getMetadataDataDefinition().setComponentType(ComponentTypeEnum.RESOURCE);
45 public Resource(ComponentMetadataDefinition componentMetadataDefinition) {
46 super(componentMetadataDefinition);
47 this.getComponentMetadataDefinition().getMetadataDataDefinition().setComponentType(ComponentTypeEnum.RESOURCE);
50 private List<String> derivedFrom;
52 private List<String> derivedList;
54 private List<PropertyDefinition> properties;
56 private List<PropertyDefinition> attributes;
59 private Map<String, InterfaceDefinition> interfaces;
61 private List<String> defaultCapabilities;
63 private Map<String, WorkflowOperationDataDefinition> workflowOperations;
65 // private List<AdditionalInformationDefinition> additionalInformation;
68 * Please note that more than one "derivedFrom" resource is not currently
69 * supported by the app. The first list element is always addressed.
73 public List<String> getDerivedFrom() {
77 public void setDerivedFrom(List<String> derivedFrom) {
78 this.derivedFrom = derivedFrom;
82 * The derivedList is a chain of derivedFrom. e.g. if resource C is derived
83 * from resource B that is derived from resource A - then A, B is the
84 * "DerivedList" of resource C
88 public List<String> getDerivedList() {
92 public void setDerivedList(List<String> derivedList) {
93 this.derivedList = derivedList;
96 public List<PropertyDefinition> getProperties() {
100 public void setProperties(List<PropertyDefinition> properties) {
101 this.properties = properties;
104 public List<PropertyDefinition> getAttributes() {
108 public void setAttributes(List<PropertyDefinition> attributes) {
109 this.attributes = attributes;
112 public Map<String, InterfaceDefinition> getInterfaces() {
116 public void setInterfaces(Map<String, InterfaceDefinition> interfaces) {
117 this.interfaces = interfaces;
120 public Boolean isAbstract() {
121 return ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
125 public void setAbstract(Boolean isAbstract) {
126 ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
127 .setAbstract(isAbstract);
130 public List<String> getDefaultCapabilities() {
131 return defaultCapabilities;
134 public void setDefaultCapabilities(List<String> defaultCapabilities) {
135 this.defaultCapabilities = defaultCapabilities;
138 public String getCost() {
139 return ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
143 public void setCost(String cost) {
144 ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition()).setCost(cost);
148 public String getLicenseType() {
149 return ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
153 public void setLicenseType(String licenseType) {
154 ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
155 .setLicenseType(licenseType);
158 public Map<String, WorkflowOperationDataDefinition> getWorkflowOperations() {
159 return workflowOperations;
162 public void setWorkflowOperations(Map<String, WorkflowOperationDataDefinition> workflowOperations) {
163 this.workflowOperations = workflowOperations;
167 public int hashCode() {
168 final int prime = 31;
170 result = prime * result + super.hashCode();
172 result = prime * result + ((attributes == null) ? 0 : attributes.hashCode());
173 // result = prime * result + ((capabilities == null) ? 0 :
174 // capabilities.hashCode());
175 result = prime * result + ((defaultCapabilities == null) ? 0 : defaultCapabilities.hashCode());
176 result = prime * result + ((derivedFrom == null) ? 0 : derivedFrom.hashCode());
177 result = prime * result + ((interfaces == null) ? 0 : interfaces.hashCode());
178 result = prime * result + ((properties == null) ? 0 : properties.hashCode());
179 result = prime * result + ((derivedList == null) ? 0 : derivedList.hashCode());
180 result = prime * result + ((workflowOperations == null) ? 0 : workflowOperations.hashCode());
181 // result = prime * result + ((requirements == null) ? 0 :
182 // requirements.hashCode());
187 public boolean equals(Object obj) {
192 if (getClass() != obj.getClass())
195 Resource other = (Resource) obj;
196 if (attributes == null) {
197 if (other.attributes != null)
199 } else if (!attributes.equals(other.attributes))
201 if (defaultCapabilities == null) {
202 if (other.defaultCapabilities != null)
204 } else if (!defaultCapabilities.equals(other.defaultCapabilities))
206 if (derivedFrom == null) {
207 if (other.derivedFrom != null)
209 } else if (!derivedFrom.equals(other.derivedFrom))
211 if (derivedList == null) {
212 if (other.derivedList != null)
214 } else if (!derivedList.equals(other.derivedList))
216 if (interfaces == null) {
217 if (other.interfaces != null)
219 } else if (!interfaces.equals(other.interfaces))
221 if (properties == null) {
222 if (other.properties != null)
224 } else if (!properties.equals(other.properties))
226 if (workflowOperations == null) {
227 if (other.workflowOperations != null)
229 } else if (!workflowOperations.equals(other.workflowOperations))
231 return super.equals(obj);
235 public String toString() {
236 return "Resource [derivedFrom=" + derivedFrom + ", properties=" + properties + ", attributes=" + attributes
237 + ", interfaces=" + interfaces
238 // + ", capabilities=" + capabilities + ", requirements=" +
240 + ", defaultCapabilities=" + defaultCapabilities + ", additionalInformation=" + additionalInformation
241 + ", workflowOperations=" + workflowOperations
242 + "Metadata [" + getComponentMetadataDefinition().getMetadataDataDefinition().toString() + "]";
245 public String getToscaResourceName() {
246 return ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
247 .getToscaResourceName();
250 public void setToscaResourceName(String toscaResourceName) {
251 ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
252 .setToscaResourceName(toscaResourceName);
255 public ResourceTypeEnum getResourceType() {
256 return ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
260 public void setResourceType(ResourceTypeEnum resourceType) {
261 ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
262 .setResourceType(resourceType);
265 public void setVendorName(String vendorName) {
266 ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
267 .setVendorName(vendorName);
270 public void setVendorRelease(String vendorRelease) {
271 ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
272 .setVendorRelease(vendorRelease);
275 public void setResourceVendorModelNumber(String resourceVendorModelNumber){
276 ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition()).
277 setResourceVendorModelNumber(resourceVendorModelNumber);
280 public String getVendorName() {
281 return ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
285 public String getVendorRelease() {
286 return ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
290 public String getResourceVendorModelNumber(){
291 return ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
292 .getResourceVendorModelNumber();
296 public String fetchGenericTypeToscaNameFromConfig(){
297 String result = super.fetchGenericTypeToscaNameFromConfig();
299 result = ConfigurationManager.getConfigurationManager().getConfiguration().getGenericAssetNodeTypes().get(ResourceTypeEnum.VFC.getValue());
304 public String assetType(){
305 return this.getResourceType().name();
309 public boolean shouldGenerateInputs(){
310 //TODO add complex VFC condition when supported
311 return !(this.getResourceType().isAtomicType());
315 public boolean deriveFromGeneric(){
316 return this.shouldGenerateInputs() || (derivedFrom != null && derivedFrom.contains(fetchGenericTypeToscaNameFromConfig()));
319 public Map<String, List<RequirementCapabilityRelDef>> groupRelationsByInstanceName(Resource resource) {
320 Map<String, List<RequirementCapabilityRelDef>> relationsByInstanceId = MapUtil.groupListBy(resource.getComponentInstancesRelations(), RequirementCapabilityRelDef::getFromNode);
321 return MapUtil.convertMapKeys(relationsByInstanceId, (instId) -> getInstanceNameFromInstanceId(resource, instId));
324 private String getInstanceNameFromInstanceId(Resource resource, String instId) {
325 return resource.getComponentInstanceById(instId).get().getName();