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