3e3b9e260f0211806f54118b52267b6787d57438
[sdc.git] /
1 /*
2  * -
3  *  * ============LICENSE_START=======================================================
4  *  *  Copyright (C) 2019 Nordix Foundation.
5  *  * ================================================================================
6  *  * Licensed under the Apache License, Version 2.0 (the "License");
7  *  * you may not use this file except in compliance with the License.
8  *  * You may obtain a copy of the License at
9  *  *
10  *  *      http://www.apache.org/licenses/LICENSE-2.0
11  *  *
12  *  * Unless required by applicable law or agreed to in writing, software
13  *  * distributed under the License is distributed on an "AS IS" BASIS,
14  *  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  *  * See the License for the specific language governing permissions and
16  *  * limitations under the License.
17  *  *
18  *  * SPDX-License-Identifier: Apache-2.0
19  *  * ============LICENSE_END=========================================================
20  *
21  */
22
23 package org.openecomp.sdc.be.components.impl.artifact;
24
25 import org.openecomp.sdc.common.api.ArtifactTypeEnum;
26
27 import java.util.HashMap;
28 import java.util.Map;
29 import java.util.Objects;
30
31 import static org.openecomp.sdc.be.components.impl.artifact.PayloadTypeEnum.HEAT_YAML;
32 import static org.openecomp.sdc.be.components.impl.artifact.PayloadTypeEnum.NOT_DEFINED;
33 import static org.openecomp.sdc.common.api.ArtifactTypeEnum.DCAE_INVENTORY_JSON;
34 import static org.openecomp.sdc.common.api.ArtifactTypeEnum.DCAE_INVENTORY_TOSCA;
35 import static org.openecomp.sdc.common.api.ArtifactTypeEnum.HEAT;
36 import static org.openecomp.sdc.common.api.ArtifactTypeEnum.HEAT_ENV;
37 import static org.openecomp.sdc.common.api.ArtifactTypeEnum.HEAT_NET;
38 import static org.openecomp.sdc.common.api.ArtifactTypeEnum.HEAT_VOL;
39 import static org.openecomp.sdc.common.api.ArtifactTypeEnum.LIFECYCLE_OPERATIONS;
40 import static org.openecomp.sdc.common.api.ArtifactTypeEnum.MODEL_INVENTORY_PROFILE;
41 import static org.openecomp.sdc.common.api.ArtifactTypeEnum.MODEL_QUERY_SPEC;
42 import static org.openecomp.sdc.common.api.ArtifactTypeEnum.PM_DICTIONARY;
43 import static org.openecomp.sdc.common.api.ArtifactTypeEnum.UCPE_LAYER_2_CONFIGURATION;
44 import static org.openecomp.sdc.common.api.ArtifactTypeEnum.VENDOR_LICENSE;
45 import static org.openecomp.sdc.common.api.ArtifactTypeEnum.VES_EVENTS;
46 import static org.openecomp.sdc.common.api.ArtifactTypeEnum.VF_LICENSE;
47 import static org.openecomp.sdc.common.api.ArtifactTypeEnum.VNF_CATALOG;
48 import static org.openecomp.sdc.common.api.ArtifactTypeEnum.YANG_XML;
49
50 public class ArtifactTypeToPayloadTypeSelector {
51
52     private static final Map<ArtifactTypeWithExtension, PayloadTypeEnum> artifactTypeWithExtension2PayloadType = new HashMap<>();
53     private static final Map<String, PayloadTypeEnum> artifactType2PayloadType = new HashMap<>();
54     private static final String XML = "xml";
55     private static final String JSON = "json";
56     private static final String YML = "yml";
57     private static final String YAML = "yaml";
58
59     static {
60         populateArtifactTypeWithExtensionMap();
61         populateArtifactsTypeOnlyMap();
62     }
63
64     private static void populateArtifactTypeWithExtensionMap() {
65         artifactTypeWithExtension2PayloadType.put(createArtifactTypeWithExtension(DCAE_INVENTORY_JSON, XML), PayloadTypeEnum.XML);
66         artifactTypeWithExtension2PayloadType.put(createArtifactTypeWithExtension(DCAE_INVENTORY_JSON, JSON), PayloadTypeEnum.JSON);
67         artifactTypeWithExtension2PayloadType.put(createArtifactTypeWithExtension(DCAE_INVENTORY_JSON, YML), PayloadTypeEnum.YAML);
68         artifactTypeWithExtension2PayloadType.put(createArtifactTypeWithExtension(DCAE_INVENTORY_JSON, YAML), PayloadTypeEnum.YAML);
69
70         artifactTypeWithExtension2PayloadType.put(createArtifactTypeWithExtension(DCAE_INVENTORY_TOSCA, XML), PayloadTypeEnum.XML);
71         artifactTypeWithExtension2PayloadType.put(createArtifactTypeWithExtension(DCAE_INVENTORY_TOSCA, JSON), PayloadTypeEnum.JSON);
72         artifactTypeWithExtension2PayloadType.put(createArtifactTypeWithExtension(DCAE_INVENTORY_TOSCA, YML), PayloadTypeEnum.YAML);
73         artifactTypeWithExtension2PayloadType.put(createArtifactTypeWithExtension(DCAE_INVENTORY_TOSCA, YAML), PayloadTypeEnum.YAML);
74
75         artifactTypeWithExtension2PayloadType.put(createArtifactTypeWithExtension(VES_EVENTS, XML), PayloadTypeEnum.XML);
76         artifactTypeWithExtension2PayloadType.put(createArtifactTypeWithExtension(VES_EVENTS, JSON), PayloadTypeEnum.JSON);
77         artifactTypeWithExtension2PayloadType.put(createArtifactTypeWithExtension(VES_EVENTS, YML), PayloadTypeEnum.YAML);
78         artifactTypeWithExtension2PayloadType.put(createArtifactTypeWithExtension(VES_EVENTS, YAML), PayloadTypeEnum.YAML);
79
80         artifactTypeWithExtension2PayloadType.put(createArtifactTypeWithExtension(LIFECYCLE_OPERATIONS, XML), PayloadTypeEnum.XML);
81         artifactTypeWithExtension2PayloadType.put(createArtifactTypeWithExtension(LIFECYCLE_OPERATIONS, JSON), PayloadTypeEnum.JSON);
82         artifactTypeWithExtension2PayloadType.put(createArtifactTypeWithExtension(LIFECYCLE_OPERATIONS, YML), PayloadTypeEnum.YAML);
83         artifactTypeWithExtension2PayloadType.put(createArtifactTypeWithExtension(LIFECYCLE_OPERATIONS, YAML), PayloadTypeEnum.YAML);
84     }
85
86     private static void populateArtifactsTypeOnlyMap() {
87         artifactType2PayloadType.put(HEAT.getType().toLowerCase(), HEAT_YAML);
88         artifactType2PayloadType.put(HEAT_VOL.getType().toLowerCase(), HEAT_YAML);
89         artifactType2PayloadType.put(HEAT_NET.getType().toLowerCase(), HEAT_YAML);
90         artifactType2PayloadType.put(HEAT_ENV.getType().toLowerCase(), PayloadTypeEnum.HEAT_ENV);
91
92         artifactType2PayloadType.put(YANG_XML.getType().toLowerCase(), PayloadTypeEnum.XML);
93         artifactType2PayloadType.put(VNF_CATALOG.getType().toLowerCase(), PayloadTypeEnum.XML);
94         artifactType2PayloadType.put(VF_LICENSE.getType().toLowerCase(), PayloadTypeEnum.XML);
95         artifactType2PayloadType.put(VENDOR_LICENSE.getType().toLowerCase(), PayloadTypeEnum.XML);
96         artifactType2PayloadType.put(MODEL_INVENTORY_PROFILE.getType().toLowerCase(), PayloadTypeEnum.XML);
97         artifactType2PayloadType.put(MODEL_QUERY_SPEC.getType().toLowerCase(), PayloadTypeEnum.XML);
98         artifactType2PayloadType.put(UCPE_LAYER_2_CONFIGURATION.getType().toLowerCase(), PayloadTypeEnum.XML);
99         artifactType2PayloadType.put(PM_DICTIONARY.getType().toLowerCase(), PayloadTypeEnum.YAML);
100     }
101
102     private static ArtifactTypeWithExtension createArtifactTypeWithExtension(ArtifactTypeEnum artifactTypeEnum, String extension) {
103         return createArtifactTypeWithExtension(artifactTypeEnum.getType(), extension);
104     }
105
106     private static ArtifactTypeWithExtension createArtifactTypeWithExtension(String artifactType, String extension) {
107         return new ArtifactTypeToPayloadTypeSelector().new ArtifactTypeWithExtension(artifactType.toLowerCase(), extension.toLowerCase());
108     }
109
110     public static PayloadTypeEnum getPayloadType(String artifactType, String fileExtension) {
111         PayloadTypeEnum payloadType = artifactTypeWithExtension2PayloadType.get(createArtifactTypeWithExtension(artifactType, fileExtension));
112         payloadType = payloadType != null ? payloadType : artifactType2PayloadType.get(artifactType.toLowerCase());
113         return payloadType != null ? payloadType : NOT_DEFINED;
114     }
115
116     private class ArtifactTypeWithExtension {
117         private String artifactType;
118         private String fileExtension;
119
120         public ArtifactTypeWithExtension(String artifactType, String fileExtension) {
121             this.artifactType = artifactType;
122             this.fileExtension = fileExtension;
123         }
124
125         public String getArtifactType() {
126             return artifactType;
127         }
128
129         public String getFileExtension() {
130             return fileExtension;
131         }
132
133         @Override
134         public boolean equals(Object other) {
135             if (!(other instanceof ArtifactTypeWithExtension)) {
136                 return false;
137             }
138             ArtifactTypeWithExtension otherArtifactTypeWithExtension = (ArtifactTypeWithExtension) other;
139
140             return isArtifactTypeEqual(otherArtifactTypeWithExtension.getArtifactType()) &&
141                     isFileExtensionEqual(otherArtifactTypeWithExtension.getFileExtension());
142         }
143
144         @Override
145         public int hashCode() {
146             return Objects.hash(artifactType, fileExtension);
147         }
148
149         private boolean isArtifactTypeEqual(String otherArtifactType) {
150             if (artifactType == null) {
151                 return otherArtifactType == null;
152             }
153             return artifactType.equalsIgnoreCase(otherArtifactType);
154         }
155
156         private boolean isFileExtensionEqual(String otherFileExtension) {
157             if (fileExtension == null) {
158                 return otherFileExtension == null;
159             }
160             return fileExtension.equalsIgnoreCase(otherFileExtension);
161         }
162     }
163 }