[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         }
74         else {
75             addEdgeInternal(e);
76         }
77     }
78     
79     private void addWildcardEdge(EdgeSchema e, VertexSchema vertex) throws SchemaProviderException {
80         FromJsonEdgeSchema newEdge = new FromJsonEdgeSchema(e);
81         newEdge.replaceWildcard(vertex.getName());
82         addEdgeInternal(newEdge);
83     }
84
85     private void addEdgeInternal(EdgeSchema e) {
86         edgeKeyMap.put(generateEdgeKey(e.getSource(), e.getTarget(), e.getName()), e);
87         
88         Set<EdgeSchema> edgeListSource = vertexEdgeMap.get(e.getSource().toLowerCase());
89         Set<EdgeSchema> edgeListTarget = vertexEdgeMap.get(e.getTarget().toLowerCase());
90         
91         if (edgeListSource == null) {
92             edgeListSource = new HashSet<EdgeSchema>();
93         }
94         if (edgeListTarget == null) {
95             edgeListTarget = new HashSet<EdgeSchema>();
96         }
97         
98         edgeListSource.add(e);
99         edgeListTarget.add(e);
100         vertexEdgeMap.put(e.getSource().toLowerCase(), edgeListSource);
101         vertexEdgeMap.put(e.getTarget().toLowerCase(), edgeListTarget);
102         
103         String sourceTargetKey = e.getSource().toLowerCase() + ":" + e.getTarget().toLowerCase();
104         Set<EdgeSchema> edgeList = edgeSourceTargetMap.get(sourceTargetKey);
105         if (edgeList == null) {
106             edgeList = new HashSet<EdgeSchema>();
107         }
108         
109         edgeList.add(e);
110         edgeSourceTargetMap.put(sourceTargetKey, edgeList);
111     }
112     
113     private String generateEdgeKey(String source, String target, String type) {
114         String key = source + ":" + target + ":" + type;
115         return key.toLowerCase();
116     }
117
118     public Map<String, VertexSchema> getVertexMap() {
119       return vertexMap;
120     }
121 }