1 package org.onap.sdc.dcae.ves;
3 import com.google.gson.Gson;
4 import org.apache.commons.lang.StringUtils;
6 import java.util.HashSet;
9 import java.util.function.Predicate;
10 import java.util.stream.Collectors;
12 public class EventListenerDefinition extends VesDataTypeDefinition {
14 public static final String EVENT_ROOT = "event";
15 private String $schema;
16 private Map<String, VesDataTypeDefinition> definitions;
18 public String get$schema() {
22 public void set$schema(String $schema) {
23 this.$schema = $schema;
26 public Map<String, VesDataTypeDefinition> getDefinitions() {
30 public void setDefinitions(Map<String, VesDataTypeDefinition> definitions) {
31 this.definitions = definitions;
34 // returns error message detailing unresolvable types - or null (success)
35 public String resolveRefTypes() {
37 Predicate<Map.Entry<String, VesDataTypeDefinition>> isFullyResolved = dt -> !dt.getValue().containsAnyReferenceItem();
38 Map<String, VesDataTypeDefinition> resolved = definitions.entrySet().stream()
39 .filter(isFullyResolved)
40 .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
42 int initialUnresolvedItems = -1;
43 int remainingUnresolvedItems = 0;
45 while (resolved.size() != definitions.size() && initialUnresolvedItems != remainingUnresolvedItems) {
46 initialUnresolvedItems = definitions.size() - resolved.size();
47 definitions.entrySet().forEach(definition -> {
48 if (!resolved.containsKey(definition.getKey()) && definition.getValue().isResolvable(resolved)) {
49 definition.getValue().resolveAllReferences(resolved);
50 resolved.put(definition.getKey(), definition.getValue());
53 remainingUnresolvedItems = definitions.size() - resolved.size();
56 if (resolved.size() != definitions.size()) {
57 definitions.keySet().removeAll(resolved.keySet());
58 return constructErrorMessage(definitions.keySet());
60 return resolveRootRefTypes();
64 private String constructErrorMessage(Set<String> unresolvable) {
65 return "the following definitions containing unresolvable references: " + new Gson().toJson(unresolvable);
68 private String resolveRootRefTypes() {
69 Set<String> unresolvable = new HashSet<>();
70 getProperties().forEach((k, v) -> {
71 if (isResolvable(definitions))
72 resolveAllReferences(definitions);
76 return unresolvable.isEmpty() ? null : constructErrorMessage(unresolvable);
81 public String validate() {
82 String error = getProperties().containsKey(EVENT_ROOT) ? null : "schema not containing property: event";
83 if (StringUtils.isBlank(error))
84 error = super.validate();
85 if (StringUtils.isBlank(error))
86 error = validateDefinitions();
90 private String validateDefinitions() {
92 for (VesDataTypeDefinition def : definitions.values()) {
93 if (StringUtils.isBlank(error))
94 error = def.validate();