Reformat catalog-model
[sdc.git] / catalog-model / src / main / java / org / openecomp / sdc / be / model / Resource.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * SDC
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
10  *
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  *
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=========================================================
19  */
20 package org.openecomp.sdc.be.model;
21
22 import java.util.List;
23 import java.util.Map;
24 import java.util.Optional;
25 import java.util.stream.Collectors;
26 import lombok.EqualsAndHashCode;
27 import lombok.Getter;
28 import lombok.Setter;
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;
35
36 @Getter
37 @Setter
38 @EqualsAndHashCode(callSuper = true)
39 @ToString
40 public class Resource extends Component {
41
42     /**
43      * Please note that more than one "derivedFrom" resource is not currently supported by the app. The first list element is always addressed.
44      */
45     private List<String> derivedFrom;
46     /**
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
49      */
50     private List<String> derivedList;
51     private Map<String, String> derivedFromMapOfIdToName;
52     private String toscaVersion;
53
54     public Resource() {
55         super(new ResourceMetadataDefinition());
56         this.getComponentMetadataDefinition().getMetadataDataDefinition().setComponentType(ComponentTypeEnum.RESOURCE);
57     }
58
59     public Resource(ComponentMetadataDefinition componentMetadataDefinition) {
60         super(componentMetadataDefinition);
61         if (this.getComponentMetadataDefinition().getMetadataDataDefinition() == null) {
62             this.getComponentMetadataDefinition().componentMetadataDataDefinition = new ResourceMetadataDataDefinition();
63         }
64         this.getComponentMetadataDefinition().getMetadataDataDefinition().setComponentType(ComponentTypeEnum.RESOURCE);
65     }
66
67     public Boolean isAbstract() {
68         return ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition()).isAbstract();
69     }
70
71     public void setAbstract(Boolean isAbstract) {
72         ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition()).setAbstract(isAbstract);
73     }
74
75     public String getCost() {
76         return ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition()).getCost();
77     }
78
79     public void setCost(String cost) {
80         ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition()).setCost(cost);
81     }
82
83     public String getLicenseType() {
84         return ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition()).getLicenseType();
85     }
86
87     public void setLicenseType(String licenseType) {
88         ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition()).setLicenseType(licenseType);
89     }
90
91     public String getToscaResourceName() {
92         return ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition()).getToscaResourceName();
93     }
94
95     public void setToscaResourceName(String toscaResourceName) {
96         ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition()).setToscaResourceName(toscaResourceName);
97     }
98
99     public ResourceTypeEnum getResourceType() {
100         return ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition()).getResourceType();
101     }
102
103     public void setResourceType(ResourceTypeEnum resourceType) {
104         ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition()).setResourceType(resourceType);
105     }
106
107     public String getVendorName() {
108         return ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition()).getVendorName();
109     }
110
111     public void setVendorName(String vendorName) {
112         ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition()).setVendorName(vendorName);
113     }
114
115     public String getVendorRelease() {
116         return ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition()).getVendorRelease();
117     }
118
119     public void setVendorRelease(String vendorRelease) {
120         ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition()).setVendorRelease(vendorRelease);
121     }
122
123     public String getResourceVendorModelNumber() {
124         return ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition()).getResourceVendorModelNumber();
125     }
126
127     public void setResourceVendorModelNumber(String resourceVendorModelNumber) {
128         ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
129             .setResourceVendorModelNumber(resourceVendorModelNumber);
130     }
131
132     @Override
133     public String fetchGenericTypeToscaNameFromConfig() {
134         return fetchToscaNameFromConfigBasedOnCategory().orElse(fetchToscaNameFromConfigBasedOnAssetType());
135     }
136
137     public String fetchToscaNameFromConfigBasedOnAssetType() {
138         String result = super.fetchGenericTypeToscaNameFromConfig();
139         if (null == result) {
140             result = ConfigurationManager.getConfigurationManager().getConfiguration().getGenericAssetNodeTypes()
141                 .get(ResourceTypeEnum.VFC.getValue());
142         }
143         return result;
144     }
145
146     private Optional<String> fetchToscaNameFromConfigBasedOnCategory() {
147         return getHeadOption(this.getCategories()).flatMap(category -> getHeadOption(category.getSubcategories())
148             .map(subCategory -> fetchToscaNameFromConfigBasedOnCategory(category.getName(), subCategory.getName())));
149     }
150
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))
154             .orElse(null);
155     }
156
157     @Override
158     public String assetType() {
159         return this.getResourceType().name();
160     }
161
162     @Override
163     public boolean shouldGenerateInputs() {
164         return !(this.getResourceType().isAtomicType());
165     }
166
167     @Override
168     public boolean deriveFromGeneric() {
169         return this.shouldGenerateInputs() || (derivedFrom != null && derivedFrom.contains(fetchGenericTypeToscaNameFromConfig()));
170     }
171
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));
178     }
179
180     private String getInstanceInvariantNameFromInstanceId(Resource resource, String instId) {
181         Optional<ComponentInstance> componentInstanceById = resource.getComponentInstanceById(instId);
182         return componentInstanceById.isPresent() ? componentInstanceById.get().getInvariantName() : null;
183     }
184 }