re base code
[sdc.git] / openecomp-be / lib / openecomp-heat-lib / src / main / java / org / openecomp / sdc / heat / services / manifest / ManifestUtil.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.heat.services.manifest;
22
23
24 import org.apache.commons.collections4.CollectionUtils;
25 import org.openecomp.sdc.heat.datatypes.manifest.FileData;
26 import org.openecomp.sdc.heat.datatypes.manifest.ManifestContent;
27
28 import java.util.HashMap;
29 import java.util.HashSet;
30 import java.util.List;
31 import java.util.Map;
32 import java.util.Set;
33
34 public class ManifestUtil {
35
36
37   /**
38    * Gets file and its env.
39    *
40    * @param manifestContent the manifest content
41    * @return the file and its env
42    */
43   public static Map<String, FileData> getFileAndItsEnv(ManifestContent manifestContent) {
44     Map<String, FileData> fileEnvMap = new HashMap<>();
45     scanFileEnvMap(null, manifestContent.getData(), fileEnvMap);
46     return fileEnvMap;
47   }
48
49
50   /**
51    * Scan file env map.
52    *
53    * @param fileData     the file data
54    * @param fileDataList the file data list
55    * @param fileEnvMap   the file env map
56    */
57   public static void scanFileEnvMap(FileData fileData, List<FileData> fileDataList,
58                                     Map<String, FileData> fileEnvMap) {
59
60     if (CollectionUtils.isEmpty(fileDataList)) {
61       return;
62     }
63
64     for (FileData childFileData : fileDataList) {
65       FileData.Type childType = childFileData.getType();
66       if (fileData != null) {
67         if (childType != null && childType.equals(FileData.Type.HEAT_ENV)) {
68           fileEnvMap.put(fileData.getFile(), childFileData);
69         }
70       }
71       scanFileEnvMap(childFileData, childFileData.getData(), fileEnvMap);
72     }
73   }
74
75
76   /**
77    * Gets file type map.
78    *
79    * @param manifestContent the manifest content
80    * @return the file type map
81    */
82   public static Map<String, FileData.Type> getFileTypeMap(ManifestContent manifestContent) {
83     Map<String, FileData.Type> fileTypeMap = new HashMap<>();
84     scanFileTypeMap(null, manifestContent.getData(), fileTypeMap);
85     return fileTypeMap;
86   }
87
88   private static FileData.Type scanFileTypeMap(FileData fileData, List<FileData> data,
89                                                Map<String, FileData.Type> fileTypeMap) {
90     if (fileData != null) {
91       fileTypeMap.put(fileData.getFile(), fileData.getType());
92     }
93     if (data == null) {
94       return null;
95     }
96
97     for (FileData chileFileData : data) {
98       FileData.Type type = scanFileTypeMap(chileFileData, chileFileData.getData(), fileTypeMap);
99       if (type != null) {
100         return type;
101       }
102     }
103     return null;
104   }
105
106
107   /**
108    * Gets artifacts.
109    *
110    * @param manifestContent the manifest content
111    * @return the artifacts
112    */
113   public static Set<String> getArtifacts(ManifestContent manifestContent) {
114     Set<String> artifacts = new HashSet<>();
115     scanArtifacts(null, manifestContent.getData(), artifacts);
116
117     return artifacts;
118   }
119
120
121   private static void scanArtifacts(FileData fileData, List<FileData> data, Set<String> artifacts) {
122     if (fileData != null && fileData.getType() != null) {
123       if (isArtifact(fileData)) {
124         artifacts.add(fileData.getFile());
125       }
126     }
127
128     if (data == null) {
129       return;
130     }
131
132     for (FileData chileFileData : data) {
133       scanArtifacts(chileFileData, chileFileData.getData(), artifacts);
134     }
135   }
136
137   private static boolean isArtifact(FileData fileData) {
138     if (FileData.Type.valueOf(fileData.getType().name()) != null
139         && !fileData.getType().equals(FileData.Type.HEAT)
140         && !fileData.getType().equals(FileData.Type.HEAT_ENV)
141         && !fileData.getType().equals(FileData.Type.HEAT_NET)
142         && !fileData.getType().equals(FileData.Type.HEAT_VOL)) {
143       return true;
144     }
145     return false;
146   }
147
148   /**
149    * Gets base files.
150    *
151    * @param manifestContent the manifest content
152    * @return the base files
153    */
154   public static Set<String> getBaseFiles(ManifestContent manifestContent) {
155     Set<String> baseFiles = new HashSet<>();
156     scanBase(null, manifestContent.getData(), baseFiles);
157     return baseFiles;
158   }
159
160   private static void scanBase(FileData fileData, List<FileData> data, Set<String> baseFiles) {
161     if (fileData != null && fileData.getBase() != null) {
162       if (fileData.getBase()) {
163         baseFiles.add(fileData.getFile());
164       }
165     }
166
167     if (data == null) {
168       return;
169     }
170
171     for (FileData chileFileData : data) {
172       scanBase(chileFileData, chileFileData.getData(), baseFiles);
173     }
174   }
175 }