Merge "[AAI] Fix doc config files"
[aai/aai-common.git] / aai-schema-abstraction / src / main / java / org / onap / aai / schemaif / json / SchemaInstance.java
1 /**
2  * ============LICENSE_START=======================================================
3  * org.onap.aai
4  * ================================================================================
5  * Copyright © 2019 AT&T Intellectual Property. All rights reserved.
6  * Copyright © 2019 Amdocs
7  * ================================================================================
8  * Licensed under the Apache License, Version 2.0 (the "License");
9  * you may not use this file except in compliance with the License.
10  * You may obtain a copy of the License at
11  *
12  *       http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing, software
15  * distributed under the License is distributed on an "AS IS" BASIS,
16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17  * See the License for the specific language governing permissions and
18  * limitations under the License.
19  * ============LICENSE_END=========================================================
20  */
21
22 package org.onap.aai.schemaif.json;
23
24 import java.util.HashMap;
25 import java.util.HashSet;
26 import java.util.Map;
27 import java.util.Set;
28
29 import org.onap.aai.schemaif.SchemaProviderException;
30 import org.onap.aai.schemaif.definitions.EdgeSchema;
31 import org.onap.aai.schemaif.definitions.VertexSchema;
32
33 public class SchemaInstance {
34     // vertex-name -> vertex-schema
35     private Map<String, VertexSchema> vertexMap = new HashMap<>();
36
37     // source:target:type -> edge-schema
38     private Map<String, EdgeSchema> edgeKeyMap = new HashMap<>();
39
40     // source:target -> edge-schema
41     private Map<String, Set<EdgeSchema>> edgeSourceTargetMap = new HashMap<>();
42
43     // vertex-name -> edge-schema
44     private Map<String, Set<EdgeSchema>> vertexEdgeMap = new HashMap<>();
45
46     public VertexSchema getVertexSchema(String vertexName) {
47         return vertexMap.get(vertexName.toLowerCase());
48     }
49
50     public EdgeSchema getEdgeSchema(String source, String target, String type) {
51         return edgeKeyMap.get(generateEdgeKey(source, target, type));
52     }
53
54     public Set<EdgeSchema> getEdgeSchemas(String source, String target) {
55         return edgeSourceTargetMap.get(source.toLowerCase() + ":" + target.toLowerCase());
56     }
57
58     public Set<EdgeSchema> getEdgeSchema(String vertexName) {
59         return vertexEdgeMap.get(vertexName.toLowerCase());
60     }
61
62     public void addVertex(VertexSchema v) {
63         vertexMap.put(v.getName().toLowerCase(), v);
64     }
65
66     public void addEdge(EdgeSchema e) throws SchemaProviderException {
67         if (e.getSource().equals(FromJsonEdgeSchema.WILDCARD_CHAR)
68                 || e.getTarget().equals(FromJsonEdgeSchema.WILDCARD_CHAR)) {
69             // Handle wildcard edges
70             for (VertexSchema vertex : vertexMap.values()) {
71                 addWildcardEdge(e, vertex);
72             }
73         } else {
74             addEdgeInternal(e);
75         }
76     }
77
78     private void addWildcardEdge(EdgeSchema e, VertexSchema vertex) throws SchemaProviderException {
79         FromJsonEdgeSchema newEdge = new FromJsonEdgeSchema(e);
80         newEdge.replaceWildcard(vertex.getName());
81         addEdgeInternal(newEdge);
82     }
83
84     private void addEdgeInternal(EdgeSchema e) {
85         edgeKeyMap.put(generateEdgeKey(e.getSource(), e.getTarget(), e.getName()), e);
86
87         Set<EdgeSchema> edgeListSource = vertexEdgeMap.get(e.getSource().toLowerCase());
88         Set<EdgeSchema> edgeListTarget = vertexEdgeMap.get(e.getTarget().toLowerCase());
89
90         if (edgeListSource == null) {
91             edgeListSource = new HashSet<EdgeSchema>();
92         }
93         if (edgeListTarget == null) {
94             edgeListTarget = new HashSet<EdgeSchema>();
95         }
96
97         edgeListSource.add(e);
98         edgeListTarget.add(e);
99         vertexEdgeMap.put(e.getSource().toLowerCase(), edgeListSource);
100         vertexEdgeMap.put(e.getTarget().toLowerCase(), edgeListTarget);
101
102         String sourceTargetKey = e.getSource().toLowerCase() + ":" + e.getTarget().toLowerCase();
103         Set<EdgeSchema> edgeList = edgeSourceTargetMap.get(sourceTargetKey);
104         if (edgeList == null) {
105             edgeList = new HashSet<EdgeSchema>();
106         }
107
108         edgeList.add(e);
109         edgeSourceTargetMap.put(sourceTargetKey, edgeList);
110     }
111
112     private String generateEdgeKey(String source, String target, String type) {
113         String key = source + ":" + target + ":" + type;
114         return key.toLowerCase();
115     }
116
117     public Map<String, VertexSchema> getVertexMap() {
118         return vertexMap;
119     }
120 }