added schema validation tools
[aai/aai-common.git] / aai-schema-ingest / src / main / java / org / onap / aai / edges / TypeAlphabetizer.java
1 /** 
2  * ============LICENSE_START=======================================================
3  * org.onap.aai
4  * ================================================================================
5  * Copyright © 2017 AT&T Intellectual Property. All rights reserved.
6  * ================================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ============LICENSE_END=========================================================
19  *
20  * ECOMP is a trademark and service mark of AT&T Intellectual Property.
21  */
22
23 package org.onap.aai.edges;
24
25 /**
26  * Helper class to produce alphabetized keys for EdgeIngestor and EdgeValidator
27  */
28 public class TypeAlphabetizer {
29         /**
30          * Builds key for edge rules, where nodetypes are alphabetically sorted
31          * (ignoring dashes).
32          * 
33          * @param nodeA - first nodetype
34          * @param nodeB - second nodetype
35          * @return {alphabetically first nodetype}|{alphabetically second nodetype}
36          *              ex: buildAlphabetizedKey("l-interface", "logical-link") -> "l-interface|logical-link"
37          *                      buildAlphabetizedKey("logical-link", "l-interface") -> "l-interface|logical-link"
38          * 
39          * This is alphabetical order to normalize the keys, as sometimes there will be multiple
40          * rules for a pair of node types but the from/to value in the json is flipped for some of them.
41          */
42         public String buildAlphabetizedKey(String nodeA, String nodeB) {
43                 if (nodeA == null) {
44                         nodeA = "";
45                 }
46                 if (nodeB == null) {
47                         nodeB = "";
48                 }
49                 
50                 //normalize
51                 String normalizedNodeA = nodeA.replace("-", "");
52                 String normalizedNodeB = nodeB.replace("-", "");
53                 int cmp = normalizedNodeA.compareTo(normalizedNodeB);
54                 
55                 StringBuilder sb = new StringBuilder();
56                 if (cmp <= 0) {
57                         sb.append(nodeA);
58                         sb.append("|");
59                         sb.append(nodeB);
60                 } else {
61                         sb.append(nodeB);
62                         sb.append("|");
63                         sb.append(nodeA);
64                 }
65                 return sb.toString();
66         }
67 }