44d6eff4fb3897d378121da3b304b21db7d54020
[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
21 package org.openecomp.sdc.be.model;
22
23 import java.util.List;
24 import java.util.Map;
25 import java.util.Optional;
26 import java.util.stream.Collectors;
27 import lombok.EqualsAndHashCode;
28 import lombok.Getter;
29 import lombok.Setter;
30 import lombok.ToString;
31
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;
39
40 @Getter
41 @Setter
42 @EqualsAndHashCode(callSuper = true)
43 @ToString
44 public class Resource extends Component {
45
46     /**
47      * Please note that more than one "derivedFrom" resource is not currently supported by the app. The first list
48      * element is always addressed.
49      */
50     private List<String> derivedFrom;
51
52     /**
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
55      */
56     private List<String> derivedList;
57
58     private Map<String, String> derivedFromMapOfIdToName;
59
60     private List<PropertyDefinition> attributes;
61
62     private String toscaVersion;
63
64     public Resource() {
65         super(new ResourceMetadataDefinition());
66         this.getComponentMetadataDefinition().getMetadataDataDefinition().setComponentType(ComponentTypeEnum.RESOURCE);
67     }
68
69     public Resource(ComponentMetadataDefinition componentMetadataDefinition) {
70         super(componentMetadataDefinition);
71         if (this.getComponentMetadataDefinition().getMetadataDataDefinition() == null) {
72             this.getComponentMetadataDefinition().componentMetadataDataDefinition =
73                     new ResourceMetadataDataDefinition();
74         }
75         this.getComponentMetadataDefinition().getMetadataDataDefinition().setComponentType(ComponentTypeEnum.RESOURCE);
76     }
77
78     public Boolean isAbstract() {
79         return ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
80                 .isAbstract();
81     }
82
83     public void setAbstract(Boolean isAbstract) {
84         ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
85                 .setAbstract(isAbstract);
86     }
87
88     public String getCost() {
89         return ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
90                 .getCost();
91     }
92
93     public void setCost(String cost) {
94         ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition()).setCost(cost);
95     }
96
97     public String getLicenseType() {
98         return ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
99                 .getLicenseType();
100     }
101
102     public void setLicenseType(String licenseType) {
103         ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
104                 .setLicenseType(licenseType);
105     }
106
107     public String getToscaResourceName() {
108         return ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
109                 .getToscaResourceName();
110     }
111
112     public void setToscaResourceName(String toscaResourceName) {
113         ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
114                 .setToscaResourceName(toscaResourceName);
115     }
116
117     public ResourceTypeEnum getResourceType() {
118         return ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
119                 .getResourceType();
120     }
121
122     public void setResourceType(ResourceTypeEnum resourceType) {
123         ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
124                 .setResourceType(resourceType);
125     }
126
127     public String getVendorName() {
128         return ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
129                 .getVendorName();
130     }
131
132     public void setVendorName(String vendorName) {
133         ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
134                 .setVendorName(vendorName);
135     }
136
137     public String getVendorRelease() {
138         return ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
139                 .getVendorRelease();
140     }
141
142     public void setVendorRelease(String vendorRelease) {
143         ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
144                 .setVendorRelease(vendorRelease);
145     }
146
147     public String getResourceVendorModelNumber() {
148         return ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
149                 .getResourceVendorModelNumber();
150     }
151
152     public void setResourceVendorModelNumber(String resourceVendorModelNumber) {
153         ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
154                 .setResourceVendorModelNumber(resourceVendorModelNumber);
155     }
156
157     @Override
158     public String fetchGenericTypeToscaNameFromConfig() {
159         return fetchToscaNameFromConfigBasedOnCategory().orElse(fetchToscaNameFromConfigBasedOnAssetType());
160     }
161
162     public String fetchToscaNameFromConfigBasedOnAssetType() {
163         String result = super.fetchGenericTypeToscaNameFromConfig();
164         if (null == result) {
165             result = ConfigurationManager.getConfigurationManager().getConfiguration().getGenericAssetNodeTypes()
166                     .get(ResourceTypeEnum.VFC.getValue());
167         }
168         return result;
169     }
170
171     private Optional<String> fetchToscaNameFromConfigBasedOnCategory() {
172         return getHeadOption(this.getCategories()).flatMap(category -> getHeadOption(category.getSubcategories()).map(
173                 subCategory -> fetchToscaNameFromConfigBasedOnCategory(category.getName(), subCategory.getName())));
174     }
175
176     private String fetchToscaNameFromConfigBasedOnCategory(final String resourceCategory,
177             final String resourceSubCategory) {
178         return Optional
179                 .ofNullable(ConfigurationManager.getConfigurationManager().getConfiguration().getResourceNodeTypes())
180                 .map(categoryNames -> categoryNames.get(resourceCategory))
181                 .map(subCategoryNames -> subCategoryNames.get(resourceSubCategory)).orElse(null);
182     }
183
184     @Override
185     public String assetType() {
186         return this.getResourceType().name();
187     }
188
189     @Override
190     public boolean shouldGenerateInputs() {
191         return !(this.getResourceType().isAtomicType());
192     }
193
194     @Override
195     public boolean deriveFromGeneric() {
196         return this.shouldGenerateInputs()
197                 || (derivedFrom != null && derivedFrom.contains(fetchGenericTypeToscaNameFromConfig()));
198     }
199
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));
207     }
208
209     private String getInstanceInvariantNameFromInstanceId(Resource resource, String instId) {
210         Optional<ComponentInstance> componentInstanceById = resource.getComponentInstanceById(instId);
211         return componentInstanceById.isPresent() ? componentInstanceById.get().getInvariantName() : null;
212     }
213
214 }