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