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.util.List;
25 import java.util.Optional;
26 import java.util.stream.Collectors;
27 import lombok.EqualsAndHashCode;
30 import lombok.ToString;
31 import org.openecomp.sdc.be.config.ConfigurationManager;
32 import org.openecomp.sdc.be.dao.utils.MapUtil;
33 import org.openecomp.sdc.be.datatypes.components.ResourceMetadataDataDefinition;
34 import org.openecomp.sdc.be.datatypes.elements.AttributeDataDefinition;
35 import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum;
36 import org.openecomp.sdc.be.datatypes.enums.ResourceTypeEnum;
40 @EqualsAndHashCode(callSuper = true)
42 public class Resource extends Component {
45 * Please note that more than one "derivedFrom" resource is not currently supported by the app. The first list
46 * element is always addressed.
48 private List<String> derivedFrom;
51 * The derivedList is a chain of derivedFrom. e.g. if resource C is derived from resource B that is derived from
52 * resource A - then A, B is the "DerivedList" of resource C
54 private List<String> derivedList;
56 private Map<String, String> derivedFromMapOfIdToName;
58 private List<AttributeDataDefinition> attributes;
60 private String toscaVersion;
63 super(new ResourceMetadataDefinition());
64 this.getComponentMetadataDefinition().getMetadataDataDefinition().setComponentType(ComponentTypeEnum.RESOURCE);
67 public Resource(ComponentMetadataDefinition componentMetadataDefinition) {
68 super(componentMetadataDefinition);
69 if (this.getComponentMetadataDefinition().getMetadataDataDefinition() == null) {
70 this.getComponentMetadataDefinition().componentMetadataDataDefinition =
71 new ResourceMetadataDataDefinition();
73 this.getComponentMetadataDefinition().getMetadataDataDefinition().setComponentType(ComponentTypeEnum.RESOURCE);
76 public Boolean isAbstract() {
77 return ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
81 public void setAbstract(Boolean isAbstract) {
82 ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
83 .setAbstract(isAbstract);
86 public String getCost() {
87 return ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
91 public void setCost(String cost) {
92 ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition()).setCost(cost);
95 public String getLicenseType() {
96 return ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
100 public void setLicenseType(String licenseType) {
101 ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
102 .setLicenseType(licenseType);
105 public String getToscaResourceName() {
106 return ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
107 .getToscaResourceName();
110 public void setToscaResourceName(String toscaResourceName) {
111 ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
112 .setToscaResourceName(toscaResourceName);
115 public ResourceTypeEnum getResourceType() {
116 return ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
120 public void setResourceType(ResourceTypeEnum resourceType) {
121 ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
122 .setResourceType(resourceType);
125 public String getVendorName() {
126 return ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
130 public void setVendorName(String vendorName) {
131 ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
132 .setVendorName(vendorName);
135 public String getVendorRelease() {
136 return ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
140 public void setVendorRelease(String vendorRelease) {
141 ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
142 .setVendorRelease(vendorRelease);
145 public String getResourceVendorModelNumber() {
146 return ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
147 .getResourceVendorModelNumber();
150 public void setResourceVendorModelNumber(String resourceVendorModelNumber) {
151 ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
152 .setResourceVendorModelNumber(resourceVendorModelNumber);
156 public String fetchGenericTypeToscaNameFromConfig() {
157 return fetchToscaNameFromConfigBasedOnCategory().orElse(fetchToscaNameFromConfigBasedOnAssetType());
160 public String fetchToscaNameFromConfigBasedOnAssetType() {
161 String result = super.fetchGenericTypeToscaNameFromConfig();
162 if (null == result) {
163 result = ConfigurationManager.getConfigurationManager().getConfiguration().getGenericAssetNodeTypes()
164 .get(ResourceTypeEnum.VFC.getValue());
169 private Optional<String> fetchToscaNameFromConfigBasedOnCategory() {
170 return getHeadOption(this.getCategories()).flatMap(category -> getHeadOption(category.getSubcategories()).map(
171 subCategory -> fetchToscaNameFromConfigBasedOnCategory(category.getName(), subCategory.getName())));
174 private String fetchToscaNameFromConfigBasedOnCategory(final String resourceCategory,
175 final String resourceSubCategory) {
177 .ofNullable(ConfigurationManager.getConfigurationManager().getConfiguration().getResourceNodeTypes())
178 .map(categoryNames -> categoryNames.get(resourceCategory))
179 .map(subCategoryNames -> subCategoryNames.get(resourceSubCategory)).orElse(null);
183 public String assetType() {
184 return this.getResourceType().name();
188 public boolean shouldGenerateInputs() {
189 return !(this.getResourceType().isAtomicType());
193 public boolean deriveFromGeneric() {
194 return this.shouldGenerateInputs()
195 || (derivedFrom != null && derivedFrom.contains(fetchGenericTypeToscaNameFromConfig()));
198 public Map<String, List<RequirementCapabilityRelDef>> groupRelationsFromCsarByInstanceName(Resource resource) {
199 List<RequirementCapabilityRelDef> componentInstanceRelationsFromCsar = resource.getComponentInstancesRelations()
200 .stream().filter(r -> !r.isOriginUI()).collect(Collectors.toList());
201 Map<String, List<RequirementCapabilityRelDef>> relationsByInstanceId =
202 MapUtil.groupListBy(componentInstanceRelationsFromCsar, RequirementCapabilityRelDef::getFromNode);
203 return MapUtil.convertMapKeys(relationsByInstanceId,
204 instId -> getInstanceInvariantNameFromInstanceId(resource, instId));
207 private String getInstanceInvariantNameFromInstanceId(Resource resource, String instId) {
208 Optional<ComponentInstance> componentInstanceById = resource.getComponentInstanceById(instId);
209 return componentInstanceById.isPresent() ? componentInstanceById.get().getInvariantName() : null;