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;
32 import org.openecomp.sdc.be.config.ConfigurationManager;
33 import org.openecomp.sdc.be.dao.utils.MapUtil;
34 import org.openecomp.sdc.be.datatypes.components.ResourceMetadataDataDefinition;
35 import org.openecomp.sdc.be.datatypes.elements.AttributeDataDefinition;
36 import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum;
37 import org.openecomp.sdc.be.datatypes.enums.ResourceTypeEnum;
38 import org.openecomp.sdc.be.model.category.CategoryDefinition;
39 import org.openecomp.sdc.be.model.category.SubCategoryDefinition;
43 @EqualsAndHashCode(callSuper = true)
45 public class Resource extends Component {
48 * Please note that more than one "derivedFrom" resource is not currently supported by the app. The first list
49 * element is always addressed.
51 private List<String> derivedFrom;
54 * The derivedList is a chain of derivedFrom. e.g. if resource C is derived from resource B that is derived from
55 * resource A - then A, B is the "DerivedList" of resource C
57 private List<String> derivedList;
59 private Map<String, String> derivedFromMapOfIdToName;
61 private List<AttributeDataDefinition> attributes;
63 private String toscaVersion;
66 super(new ResourceMetadataDefinition());
67 this.getComponentMetadataDefinition().getMetadataDataDefinition().setComponentType(ComponentTypeEnum.RESOURCE);
70 public Resource(ComponentMetadataDefinition componentMetadataDefinition) {
71 super(componentMetadataDefinition);
72 if (this.getComponentMetadataDefinition().getMetadataDataDefinition() == null) {
73 this.getComponentMetadataDefinition().componentMetadataDataDefinition =
74 new ResourceMetadataDataDefinition();
76 this.getComponentMetadataDefinition().getMetadataDataDefinition().setComponentType(ComponentTypeEnum.RESOURCE);
79 public Boolean isAbstract() {
80 return ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
84 public void setAbstract(Boolean isAbstract) {
85 ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
86 .setAbstract(isAbstract);
89 public String getCost() {
90 return ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
94 public void setCost(String cost) {
95 ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition()).setCost(cost);
98 public String getLicenseType() {
99 return ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
103 public void setLicenseType(String licenseType) {
104 ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
105 .setLicenseType(licenseType);
108 public String getToscaResourceName() {
109 return ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
110 .getToscaResourceName();
113 public void setToscaResourceName(String toscaResourceName) {
114 ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
115 .setToscaResourceName(toscaResourceName);
118 public ResourceTypeEnum getResourceType() {
119 return ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
123 public void setResourceType(ResourceTypeEnum resourceType) {
124 ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
125 .setResourceType(resourceType);
128 public String getVendorName() {
129 return ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
133 public void setVendorName(String vendorName) {
134 ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
135 .setVendorName(vendorName);
138 public String getVendorRelease() {
139 return ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
143 public void setVendorRelease(String vendorRelease) {
144 ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
145 .setVendorRelease(vendorRelease);
148 public String getResourceVendorModelNumber() {
149 return ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
150 .getResourceVendorModelNumber();
153 public void setResourceVendorModelNumber(String resourceVendorModelNumber) {
154 ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
155 .setResourceVendorModelNumber(resourceVendorModelNumber);
159 public String fetchGenericTypeToscaNameFromConfig() {
160 return fetchToscaNameFromConfigBasedOnCategory().orElse(fetchToscaNameFromConfigBasedOnAssetType());
163 public String fetchToscaNameFromConfigBasedOnAssetType() {
164 String result = super.fetchGenericTypeToscaNameFromConfig();
165 if (null == result) {
166 result = ConfigurationManager.getConfigurationManager().getConfiguration().getGenericAssetNodeTypes()
167 .get(ResourceTypeEnum.VFC.getValue());
172 private Optional<String> fetchToscaNameFromConfigBasedOnCategory() {
173 return getHeadOption(this.getCategories()).flatMap(category -> getHeadOption(category.getSubcategories()).map(
174 subCategory -> fetchToscaNameFromConfigBasedOnCategory(category.getName(), subCategory.getName())));
177 private String fetchToscaNameFromConfigBasedOnCategory(final String resourceCategory,
178 final String resourceSubCategory) {
180 .ofNullable(ConfigurationManager.getConfigurationManager().getConfiguration().getResourceNodeTypes())
181 .map(categoryNames -> categoryNames.get(resourceCategory))
182 .map(subCategoryNames -> subCategoryNames.get(resourceSubCategory)).orElse(null);
186 public String assetType() {
187 return this.getResourceType().name();
191 public boolean shouldGenerateInputs() {
192 return !(this.getResourceType().isAtomicType());
196 public boolean deriveFromGeneric() {
197 return this.shouldGenerateInputs()
198 || (derivedFrom != null && derivedFrom.contains(fetchGenericTypeToscaNameFromConfig()));
201 public Map<String, List<RequirementCapabilityRelDef>> groupRelationsFromCsarByInstanceName(Resource resource) {
202 List<RequirementCapabilityRelDef> componentInstanceRelationsFromCsar = resource.getComponentInstancesRelations()
203 .stream().filter(r -> !r.isOriginUI()).collect(Collectors.toList());
204 Map<String, List<RequirementCapabilityRelDef>> relationsByInstanceId =
205 MapUtil.groupListBy(componentInstanceRelationsFromCsar, RequirementCapabilityRelDef::getFromNode);
206 return MapUtil.convertMapKeys(relationsByInstanceId,
207 instId -> getInstanceInvariantNameFromInstanceId(resource, instId));
210 private String getInstanceInvariantNameFromInstanceId(Resource resource, String instId) {
211 Optional<ComponentInstance> componentInstanceById = resource.getComponentInstanceById(instId);
212 return componentInstanceById.isPresent() ? componentInstanceById.get().getInvariantName() : null;