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.enums.ComponentTypeEnum;
35 import org.openecomp.sdc.be.datatypes.enums.ResourceTypeEnum;
39 @EqualsAndHashCode(callSuper = true)
41 public class Resource extends Component {
44 * Please note that more than one "derivedFrom" resource is not currently supported by the app. The first list
45 * element is always addressed.
47 private List<String> derivedFrom;
50 * The derivedList is a chain of derivedFrom. e.g. if resource C is derived from resource B that is derived from
51 * resource A - then A, B is the "DerivedList" of resource C
53 private List<String> derivedList;
55 private Map<String, String> derivedFromMapOfIdToName;
57 private String toscaVersion;
60 super(new ResourceMetadataDefinition());
61 this.getComponentMetadataDefinition().getMetadataDataDefinition().setComponentType(ComponentTypeEnum.RESOURCE);
64 public Resource(ComponentMetadataDefinition componentMetadataDefinition) {
65 super(componentMetadataDefinition);
66 if (this.getComponentMetadataDefinition().getMetadataDataDefinition() == null) {
67 this.getComponentMetadataDefinition().componentMetadataDataDefinition =
68 new ResourceMetadataDataDefinition();
70 this.getComponentMetadataDefinition().getMetadataDataDefinition().setComponentType(ComponentTypeEnum.RESOURCE);
73 public Boolean isAbstract() {
74 return ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
78 public void setAbstract(Boolean isAbstract) {
79 ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
80 .setAbstract(isAbstract);
83 public String getCost() {
84 return ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
88 public void setCost(String cost) {
89 ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition()).setCost(cost);
92 public String getLicenseType() {
93 return ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
97 public void setLicenseType(String licenseType) {
98 ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
99 .setLicenseType(licenseType);
102 public String getToscaResourceName() {
103 return ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
104 .getToscaResourceName();
107 public void setToscaResourceName(String toscaResourceName) {
108 ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
109 .setToscaResourceName(toscaResourceName);
112 public ResourceTypeEnum getResourceType() {
113 return ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
117 public void setResourceType(ResourceTypeEnum resourceType) {
118 ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
119 .setResourceType(resourceType);
122 public String getVendorName() {
123 return ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
127 public void setVendorName(String vendorName) {
128 ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
129 .setVendorName(vendorName);
132 public String getVendorRelease() {
133 return ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
137 public void setVendorRelease(String vendorRelease) {
138 ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
139 .setVendorRelease(vendorRelease);
142 public String getResourceVendorModelNumber() {
143 return ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
144 .getResourceVendorModelNumber();
147 public void setResourceVendorModelNumber(String resourceVendorModelNumber) {
148 ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
149 .setResourceVendorModelNumber(resourceVendorModelNumber);
153 public String fetchGenericTypeToscaNameFromConfig() {
154 return fetchToscaNameFromConfigBasedOnCategory().orElse(fetchToscaNameFromConfigBasedOnAssetType());
157 public String fetchToscaNameFromConfigBasedOnAssetType() {
158 String result = super.fetchGenericTypeToscaNameFromConfig();
159 if (null == result) {
160 result = ConfigurationManager.getConfigurationManager().getConfiguration().getGenericAssetNodeTypes()
161 .get(ResourceTypeEnum.VFC.getValue());
166 private Optional<String> fetchToscaNameFromConfigBasedOnCategory() {
167 return getHeadOption(this.getCategories()).flatMap(category -> getHeadOption(category.getSubcategories()).map(
168 subCategory -> fetchToscaNameFromConfigBasedOnCategory(category.getName(), subCategory.getName())));
171 private String fetchToscaNameFromConfigBasedOnCategory(final String resourceCategory,
172 final String resourceSubCategory) {
174 .ofNullable(ConfigurationManager.getConfigurationManager().getConfiguration().getResourceNodeTypes())
175 .map(categoryNames -> categoryNames.get(resourceCategory))
176 .map(subCategoryNames -> subCategoryNames.get(resourceSubCategory)).orElse(null);
180 public String assetType() {
181 return this.getResourceType().name();
185 public boolean shouldGenerateInputs() {
186 return !(this.getResourceType().isAtomicType());
190 public boolean deriveFromGeneric() {
191 return this.shouldGenerateInputs()
192 || (derivedFrom != null && derivedFrom.contains(fetchGenericTypeToscaNameFromConfig()));
195 public Map<String, List<RequirementCapabilityRelDef>> groupRelationsFromCsarByInstanceName(Resource resource) {
196 List<RequirementCapabilityRelDef> componentInstanceRelationsFromCsar = resource.getComponentInstancesRelations()
197 .stream().filter(r -> !r.isOriginUI()).collect(Collectors.toList());
198 Map<String, List<RequirementCapabilityRelDef>> relationsByInstanceId =
199 MapUtil.groupListBy(componentInstanceRelationsFromCsar, RequirementCapabilityRelDef::getFromNode);
200 return MapUtil.convertMapKeys(relationsByInstanceId,
201 instId -> getInstanceInvariantNameFromInstanceId(resource, instId));
204 private String getInstanceInvariantNameFromInstanceId(Resource resource, String instId) {
205 Optional<ComponentInstance> componentInstanceById = resource.getComponentInstanceById(instId);
206 return componentInstanceById.isPresent() ? componentInstanceById.get().getInvariantName() : null;