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.enums.ComponentTypeEnum;
36 import org.openecomp.sdc.be.datatypes.enums.ResourceTypeEnum;
37 import org.openecomp.sdc.be.model.category.CategoryDefinition;
38 import org.openecomp.sdc.be.model.category.SubCategoryDefinition;
42 @EqualsAndHashCode(callSuper = true)
44 public class Resource extends Component {
47 * Please note that more than one "derivedFrom" resource is not currently supported by the app. The first list
48 * element is always addressed.
50 private List<String> derivedFrom;
53 * The derivedList is a chain of derivedFrom. e.g. if resource C is derived from resource B that is derived from
54 * resource A - then A, B is the "DerivedList" of resource C
56 private List<String> derivedList;
58 private Map<String, String> derivedFromMapOfIdToName;
60 private List<PropertyDefinition> attributes;
62 private String toscaVersion;
65 super(new ResourceMetadataDefinition());
66 this.getComponentMetadataDefinition().getMetadataDataDefinition().setComponentType(ComponentTypeEnum.RESOURCE);
69 public Resource(ComponentMetadataDefinition componentMetadataDefinition) {
70 super(componentMetadataDefinition);
71 if (this.getComponentMetadataDefinition().getMetadataDataDefinition() == null) {
72 this.getComponentMetadataDefinition().componentMetadataDataDefinition =
73 new ResourceMetadataDataDefinition();
75 this.getComponentMetadataDefinition().getMetadataDataDefinition().setComponentType(ComponentTypeEnum.RESOURCE);
78 public Boolean isAbstract() {
79 return ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
83 public void setAbstract(Boolean isAbstract) {
84 ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
85 .setAbstract(isAbstract);
88 public String getCost() {
89 return ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
93 public void setCost(String cost) {
94 ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition()).setCost(cost);
97 public String getLicenseType() {
98 return ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
102 public void setLicenseType(String licenseType) {
103 ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
104 .setLicenseType(licenseType);
107 public String getToscaResourceName() {
108 return ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
109 .getToscaResourceName();
112 public void setToscaResourceName(String toscaResourceName) {
113 ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
114 .setToscaResourceName(toscaResourceName);
117 public ResourceTypeEnum getResourceType() {
118 return ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
122 public void setResourceType(ResourceTypeEnum resourceType) {
123 ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
124 .setResourceType(resourceType);
127 public String getVendorName() {
128 return ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
132 public void setVendorName(String vendorName) {
133 ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
134 .setVendorName(vendorName);
137 public String getVendorRelease() {
138 return ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
142 public void setVendorRelease(String vendorRelease) {
143 ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
144 .setVendorRelease(vendorRelease);
147 public String getResourceVendorModelNumber() {
148 return ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
149 .getResourceVendorModelNumber();
152 public void setResourceVendorModelNumber(String resourceVendorModelNumber) {
153 ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
154 .setResourceVendorModelNumber(resourceVendorModelNumber);
158 public String fetchGenericTypeToscaNameFromConfig() {
159 return fetchToscaNameFromConfigBasedOnCategory().orElse(fetchToscaNameFromConfigBasedOnAssetType());
162 public String fetchToscaNameFromConfigBasedOnAssetType() {
163 String result = super.fetchGenericTypeToscaNameFromConfig();
164 if (null == result) {
165 result = ConfigurationManager.getConfigurationManager().getConfiguration().getGenericAssetNodeTypes()
166 .get(ResourceTypeEnum.VFC.getValue());
171 private Optional<String> fetchToscaNameFromConfigBasedOnCategory() {
172 return getHeadOption(this.getCategories()).flatMap(category -> getHeadOption(category.getSubcategories()).map(
173 subCategory -> fetchToscaNameFromConfigBasedOnCategory(category.getName(), subCategory.getName())));
176 private String fetchToscaNameFromConfigBasedOnCategory(final String resourceCategory,
177 final String resourceSubCategory) {
179 .ofNullable(ConfigurationManager.getConfigurationManager().getConfiguration().getResourceNodeTypes())
180 .map(categoryNames -> categoryNames.get(resourceCategory))
181 .map(subCategoryNames -> subCategoryNames.get(resourceSubCategory)).orElse(null);
185 public String assetType() {
186 return this.getResourceType().name();
190 public boolean shouldGenerateInputs() {
191 return !(this.getResourceType().isAtomicType());
195 public boolean deriveFromGeneric() {
196 return this.shouldGenerateInputs()
197 || (derivedFrom != null && derivedFrom.contains(fetchGenericTypeToscaNameFromConfig()));
200 public Map<String, List<RequirementCapabilityRelDef>> groupRelationsFromCsarByInstanceName(Resource resource) {
201 List<RequirementCapabilityRelDef> componentInstanceRelationsFromCsar = resource.getComponentInstancesRelations()
202 .stream().filter(r -> !r.isOriginUI()).collect(Collectors.toList());
203 Map<String, List<RequirementCapabilityRelDef>> relationsByInstanceId =
204 MapUtil.groupListBy(componentInstanceRelationsFromCsar, RequirementCapabilityRelDef::getFromNode);
205 return MapUtil.convertMapKeys(relationsByInstanceId,
206 instId -> getInstanceInvariantNameFromInstanceId(resource, instId));
209 private String getInstanceInvariantNameFromInstanceId(Resource resource, String instId) {
210 Optional<ComponentInstance> componentInstanceById = resource.getComponentInstanceById(instId);
211 return componentInstanceById.isPresent() ? componentInstanceById.get().getInvariantName() : null;