2 * ============LICENSE_START=======================================================
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
12 * http://www.apache.org/licenses/LICENSE-2.0
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=========================================================
22 package org.onap.aai.schemaif.json;
24 import java.util.HashMap;
25 import java.util.HashSet;
29 import org.onap.aai.schemaif.SchemaProviderException;
30 import org.onap.aai.schemaif.definitions.EdgeSchema;
31 import org.onap.aai.schemaif.definitions.VertexSchema;
33 public class SchemaInstance {
34 // vertex-name -> vertex-schema
35 private Map<String, VertexSchema> vertexMap = new HashMap<>();
37 // source:target:type -> edge-schema
38 private Map<String, EdgeSchema> edgeKeyMap = new HashMap<>();
40 // source:target -> edge-schema
41 private Map<String, Set<EdgeSchema>> edgeSourceTargetMap = new HashMap<>();
43 // vertex-name -> edge-schema
44 private Map<String, Set<EdgeSchema>> vertexEdgeMap = new HashMap<>();
46 public VertexSchema getVertexSchema(String vertexName) {
47 return vertexMap.get(vertexName.toLowerCase());
50 public EdgeSchema getEdgeSchema(String source, String target, String type) {
51 return edgeKeyMap.get(generateEdgeKey(source, target, type));
54 public Set<EdgeSchema> getEdgeSchemas(String source, String target) {
55 return edgeSourceTargetMap.get(source.toLowerCase() + ":" + target.toLowerCase());
58 public Set<EdgeSchema> getEdgeSchema(String vertexName) {
59 return vertexEdgeMap.get(vertexName.toLowerCase());
62 public void addVertex(VertexSchema v) {
63 vertexMap.put(v.getName().toLowerCase(), v);
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);
79 private void addWildcardEdge(EdgeSchema e, VertexSchema vertex) throws SchemaProviderException {
80 FromJsonEdgeSchema newEdge = new FromJsonEdgeSchema(e);
81 newEdge.replaceWildcard(vertex.getName());
82 addEdgeInternal(newEdge);
85 private void addEdgeInternal(EdgeSchema e) {
86 edgeKeyMap.put(generateEdgeKey(e.getSource(), e.getTarget(), e.getName()), e);
88 Set<EdgeSchema> edgeListSource = vertexEdgeMap.get(e.getSource().toLowerCase());
89 Set<EdgeSchema> edgeListTarget = vertexEdgeMap.get(e.getTarget().toLowerCase());
91 if (edgeListSource == null) {
92 edgeListSource = new HashSet<EdgeSchema>();
94 if (edgeListTarget == null) {
95 edgeListTarget = new HashSet<EdgeSchema>();
98 edgeListSource.add(e);
99 edgeListTarget.add(e);
100 vertexEdgeMap.put(e.getSource().toLowerCase(), edgeListSource);
101 vertexEdgeMap.put(e.getTarget().toLowerCase(), edgeListTarget);
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>();
110 edgeSourceTargetMap.put(sourceTargetKey, edgeList);
113 private String generateEdgeKey(String source, String target, String type) {
114 String key = source + ":" + target + ":" + type;
115 return key.toLowerCase();
118 public Map<String, VertexSchema> getVertexMap() {