1 package org.onap.sdc.dcae;
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;
16 import java.io.FileNotFoundException;
17 import java.io.FileReader;
18 import java.io.FilenameFilter;
19 import java.lang.reflect.Type;
21 import java.util.stream.Collectors;
23 public class VesStructureLoaderMock {
25 private Map<String, EventListenerDefinition> eventListeners = new HashMap<>();
26 private Type type = new TypeToken<VesDataItemsDefinition>() {
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;
33 public VesStructureLoaderMock() {
37 public VesStructureLoaderMock(boolean validateAndResolve) {
38 this(validateAndResolve, System.getProperty("user.dir") + "/src/test/resources/ves-schema");
41 public VesStructureLoaderMock(boolean validateAndResolve, String path) {
42 initErrors = init(validateAndResolve, path);
45 public List<String> init(boolean validateAndResolve, String pathToSchemaDir) {
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);
54 if (ArrayUtils.isEmpty(files)) {
55 parseErrors.add("No VES schema files found");
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);
68 public Map<String, VesDataTypeDefinition> getEventListenerDefinitionByVersion(String version) {
69 return eventListeners.get(version).getProperties().get(EventListenerDefinition.EVENT_ROOT).getProperties();
72 public Set<String> getAvailableVersionsList() {
73 return eventListeners.keySet();
76 public Map<String, Set<String>> getAvailableVersionsAndEventTypes() {
77 return eventListeners.entrySet().stream().collect(Collectors.toMap(Map.Entry::getKey, e -> getEventListenerDefinitionByVersion(e.getKey()).keySet()));
80 public Set<String> getEventTypeListByVersion(String version) {
81 return getEventListenerDefinitionByVersion(version).keySet();
84 public String getVersionFromFileName(String fileName) {
85 return fileName.replace(schemaNamePrefix, "").replace(schemaNameSuffix, "");
88 private String parseJsonFileAndSaveToMap(File file, boolean validateAndResolve) {
89 String validationError = null;
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();
99 return validationError;
102 public Map<String, EventListenerDefinition> getEventListeners() {
103 return eventListeners;
106 public List<String> getInitErrors() {
110 private String getValidatorMessage(EventListenerDefinition eventListenerDefinition) {
111 String validationError = eventListenerDefinition.validate();
112 if (StringUtils.isBlank(validationError))
113 validationError = eventListenerDefinition.resolveRefTypes();
114 return validationError;