Sync Integ to Master
[sdc.git] / ui-ci / src / main / java / org / openecomp / sdc / ci / tests / businesslogic / ArtifactBusinessLogic.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.ci.tests.businesslogic;
22
23 import static org.junit.Assert.assertTrue;
24
25 import java.io.File;
26 import java.io.IOException;
27 import java.util.ArrayList;
28 import java.util.HashMap;
29 import java.util.LinkedList;
30 import java.util.List;
31 import java.util.Map;
32 import java.util.Map.Entry;
33
34 import ch.qos.logback.classic.util.ContextInitializer;
35 import com.google.gson.Gson;
36 import org.openecomp.sdc.be.datatypes.elements.HeatParameterDataDefinition;
37 import org.openecomp.sdc.be.model.ArtifactDefinition;
38 import org.openecomp.sdc.ci.tests.datatypes.HeatAndHeatEnvNamesPair;
39 import org.openecomp.sdc.ci.tests.datatypes.HeatMetaFirstLevelDefinition;
40 import org.openecomp.sdc.ci.tests.datatypes.HeatWithParametersDefinition;
41 import org.openecomp.sdc.ci.tests.datatypes.enums.ArtifactTypeEnum;
42 import org.openecomp.sdc.ci.tests.execute.devCI.ArtifactFromCsar;
43 import org.openecomp.sdc.ci.tests.pages.HomePage;
44 import org.openecomp.sdc.ci.tests.utilities.FileHandling;
45
46 import com.clearspring.analytics.util.Pair;
47 import com.google.gson.Gson;
48
49 public class ArtifactBusinessLogic {
50
51         private final static String[] okFileExtensions = new String[] {"yaml", "yml", "env"};
52         private static final String PARAMETERS = "parameters";
53         private static final String DEPLOYMENT = "Deployment";
54         
55         public static synchronized Map<String, File> createEnvFilesListFromCsar(String vspName, String filePath) throws Exception{
56                 Map<String, File> generatedEnvFiles = new HashMap<>();
57                 File csarFile= HomePage.downloadVspCsarToDefaultDirectory(vspName); 
58                 FileHandling.unzip(csarFile.toString(), filePath);
59                 List<File> yamlList = getHeatFilesCreatedFromCsar(csarFile, filePath);
60                 Map<String, HeatAndHeatEnvNamesPair> filesPairMap = getFilesPairMap(yamlList);
61                 generatedEnvFiles = generateDefaultEnvFiles(filesPairMap, filePath);
62                 return generatedEnvFiles;
63         }
64         
65         public static synchronized List<File> getHeatFilesCreatedFromCsar(File pathToDirectory, String filePath) throws Exception {
66                 List<File> fileList = new ArrayList<>();
67                 String artifactsFilePath = filePath + "Artifacts" + File.separator;
68                 List<File> fileListFromArtifactsDirectory = FileHandling.getHeatAndHeatEnvArtifactsFromZip(new File(artifactsFilePath), okFileExtensions);
69                 Map<String, Object> combinedMap = ArtifactFromCsar.combineHeatArtifacstWithFolderArtifacsToMap(pathToDirectory.toString());
70                 LinkedList<HeatMetaFirstLevelDefinition> deploymentArtifacts = (LinkedList<HeatMetaFirstLevelDefinition>) combinedMap.get(DEPLOYMENT);
71                 for(HeatMetaFirstLevelDefinition deploymentArtifact : deploymentArtifacts){
72                         String type = deploymentArtifact.getType();
73                         if(type.equals(ArtifactTypeEnum.HEAT.getType()) || 
74                            type.equals(ArtifactTypeEnum.HEAT_ENV.getType()) || 
75                            type.equals(ArtifactTypeEnum.HEAT_VOL.getType()) || 
76                            type.equals(ArtifactTypeEnum.HEAT_NET.getType())){
77                                 File file = new File(artifactsFilePath + deploymentArtifact.getFileName());
78                                 if(fileListFromArtifactsDirectory.contains(file)){
79                                         fileList.add(file);
80                                 }else{
81                                         assertTrue("File " + file + " does not exist", false);
82                                 }
83                         }
84                 }
85                 return fileList;
86         }
87         public static synchronized Map<String, HeatAndHeatEnvNamesPair> getFilesPairMap(List<File> generatedEnvFiles) {
88                 
89                 Map<String, HeatAndHeatEnvNamesPair> heatAndHeatEnvPairs= new HashMap<>();
90                 for(File file : generatedEnvFiles){
91                         String[] fileName = file.getName().split("\\.");
92                         String currentKey = fileName[0];
93                         String currentExtension = fileName[1];
94                         HeatAndHeatEnvNamesPair pair;
95                         if(!heatAndHeatEnvPairs.containsKey(currentKey)){
96                                 pair = new HeatAndHeatEnvNamesPair();
97                                 heatAndHeatEnvPairs.put(currentKey, pair);
98                         }else{
99                                 pair = heatAndHeatEnvPairs.get(currentKey);
100                         }
101                         setFileToPair(file, currentExtension, pair);
102                 }
103                 return heatAndHeatEnvPairs;
104         }
105         
106         /**
107          * The method fill list of HeatWithParametersDefinition parameters
108          * @param deploymentArtifacts
109          * @return
110          */
111         public static synchronized List<HeatWithParametersDefinition> extractHeatWithParametersDefinition(Map<String, ArtifactDefinition> deploymentArtifacts) {
112
113                 List<HeatWithParametersDefinition> heatAndEnvLabelList = new ArrayList<>();
114                 
115                 for (Entry<String, ArtifactDefinition> artifactDefinitionChild : deploymentArtifacts.entrySet()){
116                         if(artifactDefinitionChild.getValue().getArtifactType().equals(ArtifactTypeEnum.HEAT_ENV.getType())){
117                                 for(Entry<String, ArtifactDefinition> artifactDefinitionParent : deploymentArtifacts.entrySet()){
118                                         if(artifactDefinitionChild.getValue().getGeneratedFromId().equals(artifactDefinitionParent.getValue().getUniqueId())){
119                                                 String heatLabel = artifactDefinitionParent.getValue().getArtifactLabel();
120                                                 String heatArtifactType = artifactDefinitionParent.getValue().getArtifactType();
121                                                 String heatArtifactDisplayName = artifactDefinitionParent.getValue().getArtifactDisplayName();
122                                                 List<HeatParameterDataDefinition> heatParameterDefinition = artifactDefinitionParent.getValue().getHeatParameters();
123                                                 String heatEnvLabel = artifactDefinitionChild.getValue().getArtifactLabel();
124                                                 String heatEnvArtifactType = artifactDefinitionChild.getValue().getArtifactType();
125                                                 heatAndEnvLabelList.add(new HeatWithParametersDefinition(heatLabel, heatEnvLabel, heatArtifactType, heatEnvArtifactType, heatArtifactDisplayName, heatParameterDefinition));
126                                                 break;
127                                         }
128                                 }
129                         }
130                 }
131                 return heatAndEnvLabelList;
132         }
133         
134
135         public static synchronized void setFileToPair(File file, String currentExtension, HeatAndHeatEnvNamesPair pair) {
136                 if(!currentExtension.equals("env")){
137                         pair.setHeatFileName(file);
138                 }else{
139                         pair.setHeatEnvFileName(file);
140                 }
141         }
142
143         public static synchronized Map<String, File> generateDefaultEnvFiles(Map<String, HeatAndHeatEnvNamesPair> filesPairMap, String filePath) throws Exception {
144                 
145                 Map<String, File> generatedEnvFilesMap = new HashMap<>();
146                 for(Entry<String, HeatAndHeatEnvNamesPair> pair : filesPairMap.entrySet()){
147                         Map<String, Pair<String, Object>> envParametersMap = getEnvParametersMap(pair);
148                         File generatedEnvFile = createEnvFile(envParametersMap, new File(filePath + pair.getKey() + ".env"));
149                         generatedEnvFilesMap.put(pair.getKey(), generatedEnvFile);
150                 }
151                 return generatedEnvFilesMap;
152         }
153
154         public static synchronized File createEnvFile(Map<String, Pair<String, Object>> envParametersMap, File fileToWrite) throws IOException {
155
156                 FileHandling.writeToFile(fileToWrite, PARAMETERS+":", 0);
157                 FileHandling.writeToFile(fileToWrite, envParametersMap, 2);
158                 return fileToWrite;
159         }
160
161         public static synchronized Map<String, Pair<String, Object>> getEnvParametersMap(Entry<String, HeatAndHeatEnvNamesPair> pair) throws Exception {
162                 File heatFileName = pair.getValue().getHeatFileName();
163                 File heatEnvFileName = pair.getValue().getHeatEnvFileName();
164                 Map<String, Pair<String, Object>> envParametersMap = new HashMap<>();
165                 fillParametersMapFromHeatFile(heatFileName, envParametersMap);
166                 fillParametersMapFromHeatEnvFile(heatEnvFileName, envParametersMap);
167                 return envParametersMap;
168         }
169
170         public static synchronized void fillParametersMapFromHeatEnvFile(File heatEnvFileName, Map<String, Pair<String, Object>> envParametersMap) throws Exception {
171                 if(heatEnvFileName != null){
172                         Map<String, Object> mapHeatEnvFileParameters = FileHandling.parseYamlFileToMapByPattern(heatEnvFileName, PARAMETERS);
173                         for (Map.Entry<String, Object> parameter : mapHeatEnvFileParameters.entrySet()){
174                                 String key = parameter.getKey();
175                                 Pair<String, Object> pair;
176                                 if(envParametersMap.containsKey(key)){
177                                         if(envParametersMap.get(key).left.equals("string") && parameter.getValue() != null){
178                                                 pair = Pair.create(envParametersMap.get(key).left, "\"" + parameter.getValue() + "\"");
179                                         }else if(envParametersMap.get(key).left.equals("string") && parameter.getValue() == null){
180                                                 pair = Pair.create(envParametersMap.get(key).left, "");
181                                         }else if(parameter.getValue() == null) {
182                                                 pair = Pair.create(envParametersMap.get(key).left, "");
183                                         } else if(envParametersMap.get(key).left.equals("json") && parameter.getValue() != null){
184                                                 String pairValue = "";
185                                                 Gson gson = new Gson();
186                                                 if(parameter.getValue() instanceof java.util.LinkedHashMap){
187                                                         pairValue = gson.toJson(parameter.getValue());
188                                                 }
189                                                 pair = Pair.create(envParametersMap.get(key).left, pairValue );
190
191                                         }else if(envParametersMap.get(key).left.equals("json") && parameter.getValue() == null){
192                                                 pair = Pair.create(envParametersMap.get(key).left, "");
193                                         }else{
194                                                 pair = Pair.create(envParametersMap.get(key).left, parameter.getValue());
195                                         }
196                                         envParametersMap.put(key, pair);
197                                 }
198                         }
199                 }
200         }
201
202         @SuppressWarnings("unchecked")
203         public static synchronized void fillParametersMapFromHeatFile(File heatFileName, Map<String, Pair<String, Object>> envParametersMap) throws Exception {
204                 Map<String, Object> mapHeatFileParameters = FileHandling.parseYamlFileToMapByPattern(heatFileName, PARAMETERS);
205                 for (Map.Entry<String, Object> parameter : mapHeatFileParameters.entrySet()){
206                         Map<String, Object> value = (Map<String, Object>) parameter.getValue();
207                         Pair<String, Object> pair;
208                         if(value.get("type").toString().equals("string") && value.get("default") != null ){
209                                 pair = Pair.create(value.get("type").toString(), "\"" + value.get("default") + "\"");
210                         }else if(value.get("type").toString().equals("string") && value.get("default") == null){
211                                 pair = Pair.create(value.get("type").toString(), "");
212                         }else if(value.get("default") == null){
213                                 pair = Pair.create(value.get("type").toString(), "");
214                         }else{
215                                 pair = Pair.create(value.get("type").toString(), value.get("default"));
216                         }
217                         envParametersMap.put(parameter.getKey(), pair);
218                 }
219         }
220         
221 }