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=========================================================
20 package org.openecomp.sdc.be.model;
22 import java.util.List;
24 import java.util.Optional;
25 import java.util.stream.Collectors;
26 import lombok.EqualsAndHashCode;
29 import lombok.ToString;
30 import org.openecomp.sdc.be.config.ConfigurationManager;
31 import org.openecomp.sdc.be.dao.utils.MapUtil;
32 import org.openecomp.sdc.be.datatypes.components.ResourceMetadataDataDefinition;
33 import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum;
34 import org.openecomp.sdc.be.datatypes.enums.ResourceTypeEnum;
38 @EqualsAndHashCode(callSuper = true)
40 public class Resource extends Component {
43 * Please note that more than one "derivedFrom" resource is not currently supported by the app. The first list element is always addressed.
45 private List<String> derivedFrom;
47 * The derivedList is a chain of derivedFrom. e.g. if resource C is derived from resource B that is derived from resource A - then A, B is the
48 * "DerivedList" of resource C
50 private List<String> derivedList;
51 private Map<String, String> derivedFromMapOfIdToName;
52 private String toscaVersion;
55 super(new ResourceMetadataDefinition());
56 this.getComponentMetadataDefinition().getMetadataDataDefinition().setComponentType(ComponentTypeEnum.RESOURCE);
59 public Resource(ComponentMetadataDefinition componentMetadataDefinition) {
60 super(componentMetadataDefinition);
61 if (this.getComponentMetadataDefinition().getMetadataDataDefinition() == null) {
62 this.getComponentMetadataDefinition().componentMetadataDataDefinition = new ResourceMetadataDataDefinition();
64 this.getComponentMetadataDefinition().getMetadataDataDefinition().setComponentType(ComponentTypeEnum.RESOURCE);
67 public Boolean isAbstract() {
68 return ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition()).isAbstract();
71 public void setAbstract(Boolean isAbstract) {
72 ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition()).setAbstract(isAbstract);
75 public String getCost() {
76 return ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition()).getCost();
79 public void setCost(String cost) {
80 ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition()).setCost(cost);
83 public String getLicenseType() {
84 return ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition()).getLicenseType();
87 public void setLicenseType(String licenseType) {
88 ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition()).setLicenseType(licenseType);
91 public String getToscaResourceName() {
92 return ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition()).getToscaResourceName();
95 public void setToscaResourceName(String toscaResourceName) {
96 ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition()).setToscaResourceName(toscaResourceName);
99 public ResourceTypeEnum getResourceType() {
100 return ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition()).getResourceType();
103 public void setResourceType(ResourceTypeEnum resourceType) {
104 ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition()).setResourceType(resourceType);
107 public String getVendorName() {
108 return ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition()).getVendorName();
111 public void setVendorName(String vendorName) {
112 ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition()).setVendorName(vendorName);
115 public String getVendorRelease() {
116 return ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition()).getVendorRelease();
119 public void setVendorRelease(String vendorRelease) {
120 ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition()).setVendorRelease(vendorRelease);
123 public String getResourceVendorModelNumber() {
124 return ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition()).getResourceVendorModelNumber();
127 public void setResourceVendorModelNumber(String resourceVendorModelNumber) {
128 ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
129 .setResourceVendorModelNumber(resourceVendorModelNumber);
133 public String fetchGenericTypeToscaNameFromConfig() {
134 return fetchToscaNameFromConfigBasedOnCategory().orElse(fetchToscaNameFromConfigBasedOnAssetType());
137 public String fetchToscaNameFromConfigBasedOnAssetType() {
138 String result = super.fetchGenericTypeToscaNameFromConfig();
139 if (null == result) {
140 result = ConfigurationManager.getConfigurationManager().getConfiguration().getGenericAssetNodeTypes()
141 .get(ResourceTypeEnum.VFC.getValue());
146 private Optional<String> fetchToscaNameFromConfigBasedOnCategory() {
147 return getHeadOption(this.getCategories()).flatMap(category -> getHeadOption(category.getSubcategories())
148 .map(subCategory -> fetchToscaNameFromConfigBasedOnCategory(category.getName(), subCategory.getName())));
151 private String fetchToscaNameFromConfigBasedOnCategory(final String resourceCategory, final String resourceSubCategory) {
152 return Optional.ofNullable(ConfigurationManager.getConfigurationManager().getConfiguration().getResourceNodeTypes())
153 .map(categoryNames -> categoryNames.get(resourceCategory)).map(subCategoryNames -> subCategoryNames.get(resourceSubCategory))
158 public String assetType() {
159 return this.getResourceType().name();
163 public boolean shouldGenerateInputs() {
164 return !(this.getResourceType().isAtomicType());
168 public boolean deriveFromGeneric() {
169 return this.shouldGenerateInputs() || (derivedFrom != null && derivedFrom.contains(fetchGenericTypeToscaNameFromConfig()));
172 public Map<String, List<RequirementCapabilityRelDef>> groupRelationsFromCsarByInstanceName(Resource resource) {
173 List<RequirementCapabilityRelDef> componentInstanceRelationsFromCsar = resource.getComponentInstancesRelations().stream()
174 .filter(r -> !r.isOriginUI()).collect(Collectors.toList());
175 Map<String, List<RequirementCapabilityRelDef>> relationsByInstanceId = MapUtil
176 .groupListBy(componentInstanceRelationsFromCsar, RequirementCapabilityRelDef::getFromNode);
177 return MapUtil.convertMapKeys(relationsByInstanceId, instId -> getInstanceInvariantNameFromInstanceId(resource, instId));
180 private String getInstanceInvariantNameFromInstanceId(Resource resource, String instId) {
181 Optional<ComponentInstance> componentInstanceById = resource.getComponentInstanceById(instId);
182 return componentInstanceById.isPresent() ? componentInstanceById.get().getInvariantName() : null;