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 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;
29 import java.util.List;
31 import java.util.Optional;
33 public class Resource extends Component {
37 private List<String> derivedFrom;
39 private List<String> derivedList;
41 private List<PropertyDefinition> properties;
43 private List<PropertyDefinition> attributes;
45 private List<String> defaultCapabilities;
48 super(new ResourceMetadataDefinition());
49 this.getComponentMetadataDefinition().getMetadataDataDefinition().setComponentType(ComponentTypeEnum.RESOURCE);
52 public Resource(ComponentMetadataDefinition componentMetadataDefinition) {
53 super(componentMetadataDefinition);
54 if(this.getComponentMetadataDefinition().getMetadataDataDefinition() == null) {
55 this.getComponentMetadataDefinition().componentMetadataDataDefinition = new ResourceMetadataDataDefinition();
57 this.getComponentMetadataDefinition().getMetadataDataDefinition().setComponentType(ComponentTypeEnum.RESOURCE);
60 * Please note that more than one "derivedFrom" resource is not currently
61 * supported by the app. The first list element is always addressed.
65 public List<String> getDerivedFrom() {
69 public void setDerivedFrom(List<String> derivedFrom) {
70 this.derivedFrom = derivedFrom;
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
80 public List<String> getDerivedList() {
84 public void setDerivedList(List<String> derivedList) {
85 this.derivedList = derivedList;
88 public List<PropertyDefinition> getProperties() {
92 public void setProperties(List<PropertyDefinition> properties) {
93 this.properties = properties;
96 public List<PropertyDefinition> getAttributes() {
100 public void setAttributes(List<PropertyDefinition> attributes) {
101 this.attributes = attributes;
104 public Boolean isAbstract() {
105 return ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
109 public void setAbstract(Boolean isAbstract) {
110 ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
111 .setAbstract(isAbstract);
114 public List<String> getDefaultCapabilities() {
115 return defaultCapabilities;
118 public void setDefaultCapabilities(List<String> defaultCapabilities) {
119 this.defaultCapabilities = defaultCapabilities;
122 public String getCost() {
123 return ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
127 public void setCost(String cost) {
128 ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition()).setCost(cost);
132 public String getLicenseType() {
133 return ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
137 public void setLicenseType(String licenseType) {
138 ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
139 .setLicenseType(licenseType);
143 public int hashCode() {
144 final int prime = 31;
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());
156 public boolean equals(Object obj) {
161 if (getClass() != obj.getClass())
164 Resource other = (Resource) obj;
165 if (attributes == null) {
166 if (other.attributes != null)
168 } else if (!attributes.equals(other.attributes))
170 if (defaultCapabilities == null) {
171 if (other.defaultCapabilities != null)
173 } else if (!defaultCapabilities.equals(other.defaultCapabilities))
175 if (derivedFrom == null) {
176 if (other.derivedFrom != null)
178 } else if (!derivedFrom.equals(other.derivedFrom))
180 if (derivedList == null) {
181 if (other.derivedList != null)
183 } else if (!derivedList.equals(other.derivedList))
185 if (properties == null) {
186 if (other.properties != null)
188 } else if (!properties.equals(other.properties))
190 return super.equals(obj);
194 public String toString() {
195 return "Resource [derivedFrom=" + derivedFrom + ", properties=" + properties + ", attributes=" + attributes
196 + ", defaultCapabilities=" + defaultCapabilities + ", additionalInformation=" + additionalInformation
197 + "Metadata [" + getComponentMetadataDefinition().getMetadataDataDefinition().toString() + "]";
200 public String getToscaResourceName() {
201 return ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
202 .getToscaResourceName();
205 public void setToscaResourceName(String toscaResourceName) {
206 ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
207 .setToscaResourceName(toscaResourceName);
210 public ResourceTypeEnum getResourceType() {
211 return ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
215 public void setResourceType(ResourceTypeEnum resourceType) {
216 ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
217 .setResourceType(resourceType);
220 public void setVendorName(String vendorName) {
221 ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
222 .setVendorName(vendorName);
225 public void setVendorRelease(String vendorRelease) {
226 ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
227 .setVendorRelease(vendorRelease);
230 public void setResourceVendorModelNumber(String resourceVendorModelNumber){
231 ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition()).
232 setResourceVendorModelNumber(resourceVendorModelNumber);
235 public String getVendorName() {
236 return ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
240 public String getVendorRelease() {
241 return ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
245 public String getResourceVendorModelNumber(){
246 return ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
247 .getResourceVendorModelNumber();
251 public String fetchGenericTypeToscaNameFromConfig(){
252 String result = super.fetchGenericTypeToscaNameFromConfig();
254 result = ConfigurationManager.getConfigurationManager().getConfiguration().getGenericAssetNodeTypes().get(ResourceTypeEnum.VFC.getValue());
259 public String assetType(){
260 return this.getResourceType().name();
264 public boolean shouldGenerateInputs(){
265 //TODO add complex VFC condition when supported
266 return !(this.getResourceType().isAtomicType());
270 public boolean deriveFromGeneric(){
271 return this.shouldGenerateInputs() || (derivedFrom != null && derivedFrom.contains(fetchGenericTypeToscaNameFromConfig()));
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));
279 private String getInstanceNameFromInstanceId(Resource resource, String instId) {
280 Optional<ComponentInstance> componentInstanceById = resource.getComponentInstanceById(instId);
281 return componentInstanceById.isPresent() ? componentInstanceById.get().getName() : null;