DCAE-D be initial commit
[sdc/dcae-d/dt-be-main.git] / dcaedt_be / src / test / java / org / onap / sdc / dcae / VesStructureLoaderMock.java
1 package org.onap.sdc.dcae;
2
3 import com.google.gson.Gson;
4 import com.google.gson.GsonBuilder;
5 import com.google.gson.JsonIOException;
6 import com.google.gson.JsonSyntaxException;
7 import com.google.gson.reflect.TypeToken;
8 import org.apache.commons.lang.ArrayUtils;
9 import org.apache.commons.lang.StringUtils;
10 import org.onap.sdc.dcae.ves.EventListenerDefinition;
11 import org.onap.sdc.dcae.ves.VesDataItemsDefinition;
12 import org.onap.sdc.dcae.ves.VesDataTypeDefinition;
13 import org.onap.sdc.dcae.ves.VesJsonDeserializer;
14
15 import java.io.File;
16 import java.io.FileNotFoundException;
17 import java.io.FileReader;
18 import java.io.FilenameFilter;
19 import java.lang.reflect.Type;
20 import java.util.*;
21 import java.util.stream.Collectors;
22
23 public class VesStructureLoaderMock {
24
25         private Map<String, EventListenerDefinition> eventListeners = new HashMap<>();
26         private Type type = new TypeToken<VesDataItemsDefinition>() {
27         }.getType();
28         private Gson gson = new GsonBuilder().registerTypeAdapter(type, new VesJsonDeserializer()).create();
29         private final String schemaNamePrefix = "CommonEventFormat_v";
30         private final String schemaNameSuffix = ".json";
31         private List<String> initErrors;
32
33         public VesStructureLoaderMock() {
34                 this(true);
35         }
36
37         public VesStructureLoaderMock(boolean validateAndResolve) {
38                 this(validateAndResolve, System.getProperty("user.dir") + "/src/test/resources/ves-schema");
39         }
40
41         public VesStructureLoaderMock(boolean validateAndResolve, String path) {
42                 initErrors = init(validateAndResolve, path);
43         }
44
45         public List<String> init(boolean validateAndResolve, String pathToSchemaDir) {
46
47                 List<String> parseErrors = new ArrayList<>();
48                 File dir = new File(pathToSchemaDir);
49                 File[] files = dir.listFiles(new FilenameFilter() {
50                         @Override public boolean accept(File dir, String name) {
51                                 return name.startsWith(schemaNamePrefix) && name.endsWith(schemaNameSuffix);
52                         }
53                 });
54                 if (ArrayUtils.isEmpty(files)) {
55                         parseErrors.add("No VES schema files found");
56                 } else {
57                         for (File f : files) {
58                                 String error = parseJsonFileAndSaveToMap(f, validateAndResolve);
59                                 if (StringUtils.isNotBlank(error)) {
60                                         parseErrors.add("Error: parsing VES schema file " + f.getName() + " failed due to " + error);
61                                 }
62                         }
63                 }
64                 return parseErrors;
65
66         }
67
68         public Map<String, VesDataTypeDefinition> getEventListenerDefinitionByVersion(String version) {
69                 return eventListeners.get(version).getProperties().get(EventListenerDefinition.EVENT_ROOT).getProperties();
70         }
71
72         public Set<String> getAvailableVersionsList() {
73                 return eventListeners.keySet();
74         }
75
76         public Map<String, Set<String>> getAvailableVersionsAndEventTypes() {
77                 return eventListeners.entrySet().stream().collect(Collectors.toMap(Map.Entry::getKey, e -> getEventListenerDefinitionByVersion(e.getKey()).keySet()));
78         }
79
80         public Set<String> getEventTypeListByVersion(String version) {
81                 return getEventListenerDefinitionByVersion(version).keySet();
82         }
83
84         public String getVersionFromFileName(String fileName) {
85                 return fileName.replace(schemaNamePrefix, "").replace(schemaNameSuffix, "");
86         }
87
88         private String parseJsonFileAndSaveToMap(File file, boolean validateAndResolve) {
89                 String validationError = null;
90                 try {
91                         EventListenerDefinition eventListener = gson.fromJson(new FileReader(file), EventListenerDefinition.class);
92                         if (validateAndResolve)
93                                 validationError = getValidatorMessage(eventListener);
94                         if (StringUtils.isEmpty(validationError))
95                                 eventListeners.put(getVersionFromFileName(file.getName()), eventListener);
96                 } catch (FileNotFoundException | JsonIOException | JsonSyntaxException e) {
97                         validationError = e.getMessage();
98                 }
99                 return validationError;
100         }
101
102         public Map<String, EventListenerDefinition> getEventListeners() {
103                 return eventListeners;
104         }
105
106         public List<String> getInitErrors() {
107                 return initErrors;
108         }
109
110         private String getValidatorMessage(EventListenerDefinition eventListenerDefinition) {
111                 String validationError = eventListenerDefinition.validate();
112                 if (StringUtils.isBlank(validationError))
113                         validationError = eventListenerDefinition.resolveRefTypes();
114                 return validationError;
115         }
116 }