Fix sonar issues + merge
[aai/schema-service.git] / aai-schema-gen / src / main / java / org / onap / aai / schemagen / genxsd / PutRelationPathSet.java
index 2b3fcf2..43abb1e 100644 (file)
@@ -7,9 +7,9 @@
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * limitations under the License.
  * ============LICENSE_END=========================================================
  */
+
 package org.onap.aai.schemagen.genxsd;
 
 import com.google.common.collect.Multimap;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.SortedSet;
+import java.util.TreeSet;
 import org.apache.commons.text.similarity.LevenshteinDistance;
 import org.onap.aai.edges.EdgeIngestor;
 import org.onap.aai.edges.EdgeRule;
 import org.onap.aai.edges.EdgeRuleQuery;
-import org.onap.aai.setup.SchemaVersion;
 import org.onap.aai.schemagen.GenerateXsd;
+import org.onap.aai.setup.SchemaVersion;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.util.*;
-
 public class PutRelationPathSet {
-       EdgeIngestor ei;
-       private static final Logger logger = LoggerFactory.getLogger("PutRelationPathSet.class");
-       protected static HashMap<String, String> putRelationPaths = new HashMap<String, String>();
-       public static void add(String useOpId, String path) {
-               putRelationPaths.put(useOpId, path);
-       }
-
-       String apiPath;
-       String opId;
-       SchemaVersion version;
-       protected ArrayList<String> relations = new ArrayList<String>();
-       String objectName = "";
-
-       public PutRelationPathSet(SchemaVersion v) {
-               this.version = v;
-       }
-
-       public PutRelationPathSet(String opId, String path, SchemaVersion v) {
-               this.apiPath = path.replace("/relationship-list/relationship", "");
-               this.opId = opId;
-               this.version = v;
-               objectName = DeleteOperation.deletePaths.get(apiPath);
-               logger.debug("II-apiPath: "+apiPath+"\nPath: "+path+"\nopId="+opId+"\nobjectName="+objectName);
-       }
-       private void process(EdgeIngestor edgeIngestor) {
-               this.ei =  edgeIngestor;
-               this.toRelations();
-               this.fromRelations();
-               this.writeRelationsFile();
-
-       }
-       private void toRelations() {
-               logger.debug("{“comment”: “Valid TO Relations that can be added”},");
-               logger.debug("apiPath: "+apiPath+"\nopId="+opId+"\nobjectName="+objectName);
-               try {
-
-                       EdgeRuleQuery q1 = new EdgeRuleQuery.Builder("ToOnly",objectName).version(version).build();
-                       Multimap<String, EdgeRule> results = ei.getRules(q1);
-                       relations.add("{\"comment\": \"Valid TO Relations that can be added\"}\n");
-                       SortedSet<String> ss=new TreeSet<String>(results.keySet());
-                       for(String key : ss) {
-                               results.get(key).stream().filter((i) -> ("NONE".equals(i.getContains()) &&! i.isPrivateEdge())).forEach((i) ->{ String rel = selectedRelation(i); relations.add(rel); logger.debug("Relation added: "+rel); } );
-                       }
-               } catch(Exception e) {
-                       logger.debug("objectName: "+objectName+"\n"+e);
-               }
-       }
-       private String selectedRelation(EdgeRule rule) {
-               String selectedRelation = "";
-               EdgeDescription ed = new EdgeDescription(rule);
-               logger.debug(ed.getRuleKey()+"Type="+ed.getType());
-               String obj = ed.getRuleKey().replace(objectName,"").replace("|","");
-
-               if(ed.getType() == EdgeDescription.LineageType.UNRELATED) {
-                       String selectObj = getUnrelatedObjectPaths(obj, apiPath);
-                       logger.debug("SelectedObj"+selectObj);
-                       selectedRelation = formatObjectRelationSet(obj,selectObj);
-                       logger.trace("ObjectRelationSet"+selectedRelation);
-               } else {
-                       String selectObj = getKinObjectPath(obj, apiPath);
-                       logger.debug("SelectedObj"+selectObj);
-                       selectedRelation = formatObjectRelation(obj,selectObj);
-                       logger.trace("ObjectRelationSet"+selectedRelation);
-               }
-               return selectedRelation;
-       }
-
-       private void fromRelations() {
-               logger.debug("“comment”: “Valid FROM Relations that can be added”");
-               try {
-
-                       EdgeRuleQuery q1 = new EdgeRuleQuery.Builder(objectName,"FromOnly").version(version).build();
-                       Multimap<String, EdgeRule> results = ei.getRules(q1);
-                       relations.add("{\"comment\": \"Valid FROM Relations that can be added\"}\n");
-                       SortedSet<String> ss=new TreeSet<String>(results.keySet());
-                       for(String key : ss) {
-                               results.get(key).stream().filter((i) -> (! i.isPrivateEdge())).forEach((i) ->{ String rel = selectedRelation(i); relations.add(rel); logger.debug("Relation added: "+rel); } );
-                       }
-               } catch(Exception e) {
-                       logger.debug("objectName: "+objectName+"\n"+e);
-               }
-       }
-       private void writeRelationsFile() {
-               File examplefilePath = new File(GenerateXsd.getYamlDir() + "/relations/" + version.toString()+"/"+opId.replace("RelationshipListRelationship", "") + ".json");
-
-               logger.debug(String.join("exampleFilePath: ", examplefilePath.toString()));
-               FileOutputStream fop = null;
-               try {
-                       if (!examplefilePath.exists()) {
-                               examplefilePath.getParentFile().mkdirs();
-                               examplefilePath.createNewFile();
-                       }
-                       fop = new FileOutputStream(examplefilePath);
-               } catch(Exception e) {
-                       e.printStackTrace();
-                       return;
-               }
-               try {
-                       if(relations.size() > 0) {fop.write("[\n".getBytes());}
-                       fop.write(String.join(",\n", relations).getBytes());
-                       if(relations.size() > 0) {fop.write("\n]\n".getBytes());}
-                       fop.flush();
-                       fop.close();
-               } catch (Exception e) {
-                       e.printStackTrace();
-                       return;
-               }
-               finally{
-                       try {
-                               fop.close();
-                       } catch (IOException e) {
-                               e.printStackTrace();
-                       }
-               }
-               logger.debug(String.join(",\n", relations));
-               return;
-       }
-
-       private static String formatObjectRelationSet(String obj, String selectObj) {
-               StringBuffer pathSb = new StringBuffer();
-               String[] paths = selectObj.split("[|]");
-               for (String s: paths) {
-                       logger.trace("SelectOBJ"+s);
-                       pathSb.append(formatObjectRelation(obj, s)+",\n");
-               }
-               pathSb.deleteCharAt(pathSb.length()-2);
-               return pathSb.toString();
-       }
-
-       private static String formatObjectRelation(String obj, String selectObj) {
-               StringBuffer pathSb = new StringBuffer();
-               pathSb.append("{\n");
-               pathSb.append("\"related-to\" : \""+obj+"\",\n");
-               pathSb.append("\"related-link\" : \""+selectObj+"\"\n");
-               pathSb.append("}");
-               return pathSb.toString();
-       }
-
-       private static String getKinObjectPath(String obj, String apiPath) {
-               LevenshteinDistance proximity = new LevenshteinDistance();
-               String targetPath = "";
-               int targetScore = Integer.MAX_VALUE;
-               int targetMaxScore = 0;
-               for (Map.Entry<String, String> p : DeleteOperation.deletePaths.entrySet()) {
-                               if(p.getValue().equals(obj)) {
-                                       targetScore = (targetScore >= proximity.apply(apiPath, p.getKey())) ? proximity.apply(apiPath, p.getKey()) : targetScore;
-                                       targetPath = (targetScore >= proximity.apply(apiPath, p.getKey())) ? p.getKey() : targetPath;
-                                       targetMaxScore = (targetMaxScore <= proximity.apply(apiPath, p.getKey())) ? proximity.apply(apiPath, p.getKey()) : targetScore;
-                                       logger.trace(proximity.apply(apiPath, p.getKey())+":"+p.getKey());
-                                       logger.trace(proximity.apply(apiPath, p.getKey())+":"+apiPath);
-                               }
-               }
-               return targetPath;
-       }
-
-       private static String getUnrelatedObjectPaths(String obj, String apiPath) {
-               String targetPath = "";
-               logger.trace("Obj:"+obj +"\n" + apiPath);
-               for (Map.Entry<String, String> p : DeleteOperation.deletePaths.entrySet()) {
-                               if(p.getValue().equals(obj)) {
-                                       logger.trace("p.getvalue:"+p.getValue()+"p.getkey:"+p.getKey());
-                                       targetPath +=  ((targetPath.length() == 0 ? "" : "|") + p.getKey());
-                                       logger.trace("Match:"+apiPath +"\n" + targetPath);
-                               }
-               }
-               return targetPath;
-       }
-
-       public void generateRelations(EdgeIngestor edgeIngestor) {
-               putRelationPaths.forEach((k,v)->{
-                       logger.trace("k="+k+"\n"+"v="+v+v.equals("/business/customers/customer/{global-customer-id}/service-subscriptions/service-subscription/{service-type}/service-instances/service-instance/{service-instance-id}/allotted-resources/allotted-resource/{id}/relationship-list/relationship"));
-                       logger.debug("apiPath(Operation): "+v);
-                       logger.debug("Target object: "+v.replace("/relationship-list/relationship", ""));
-                       logger.debug("Relations: ");
-                       PutRelationPathSet prp = new PutRelationPathSet(k, v, this.version);
-                       prp.process(edgeIngestor);
-               });
-       }
+    EdgeIngestor ei;
+    private static final Logger logger = LoggerFactory.getLogger("PutRelationPathSet.class");
+    protected static HashMap<String, String> putRelationPaths = new HashMap<String, String>();
+
+    public static void add(String useOpId, String path) {
+        putRelationPaths.put(useOpId, path);
+    }
+
+    String apiPath;
+    String opId;
+    SchemaVersion version;
+    protected ArrayList<String> relations = new ArrayList<String>();
+    String objectName = "";
+
+    public PutRelationPathSet(SchemaVersion v) {
+        this.version = v;
+    }
+
+    public PutRelationPathSet(String opId, String path, SchemaVersion v) {
+        this.apiPath = path.replace("/relationship-list/relationship", "");
+        this.opId = opId;
+        this.version = v;
+        objectName = DeleteOperation.deletePaths.get(apiPath);
+        logger.debug(
+            "II-apiPath: " + apiPath + "\nPath: " + path + "\nopId=" + opId + "\nobjectName=" +
+                objectName);
+    }
+
+    private void process(EdgeIngestor edgeIngestor) {
+        this.ei = edgeIngestor;
+        this.toRelations();
+        this.fromRelations();
+        this.writeRelationsFile();
+
+    }
+
+    private void toRelations() {
+        logger.debug("{“comment”: “Valid TO Relations that can be added”},");
+        logger.debug("apiPath: " + apiPath + "\nopId=" + opId + "\nobjectName=" + objectName);
+        try {
+
+            EdgeRuleQuery q1 =
+                new EdgeRuleQuery.Builder("ToOnly", objectName).version(version).build();
+            Multimap<String, EdgeRule> results = ei.getRules(q1);
+            relations.add("{\"comment\": \"Valid TO Relations that can be added\"}\n");
+            SortedSet<String> ss = new TreeSet<String>(results.keySet());
+            for (String key : ss) {
+                results.get(key).stream()
+                    .filter((i) -> ("NONE".equals(i.getContains()) && !i.isPrivateEdge()))
+                    .forEach((i) -> {
+                        String rel = selectedRelation(i);
+                        relations.add(rel);
+                        logger.debug("Relation added: " + rel);
+                    });
+            }
+        } catch (Exception e) {
+            logger.debug("objectName: " + objectName + "\n" + e);
+        }
+    }
+
+    private String selectedRelation(EdgeRule rule) {
+        String selectedRelation = "";
+        EdgeDescription ed = new EdgeDescription(rule);
+        logger.debug(ed.getRuleKey() + "Type=" + ed.getType());
+        String obj = ed.getRuleKey().replace(objectName, "").replace("|", "");
+
+        if (ed.getType() == EdgeDescription.LineageType.UNRELATED) {
+            String selectObj = getUnrelatedObjectPaths(obj, apiPath);
+            logger.debug("SelectedObj" + selectObj);
+            selectedRelation = formatObjectRelationSet(obj, selectObj);
+            logger.trace("ObjectRelationSet" + selectedRelation);
+        } else {
+            String selectObj = getKinObjectPath(obj, apiPath);
+            logger.debug("SelectedObj" + selectObj);
+            selectedRelation = formatObjectRelation(obj, selectObj);
+            logger.trace("ObjectRelationSet" + selectedRelation);
+        }
+        return selectedRelation;
+    }
+
+    private void fromRelations() {
+        logger.debug("“comment”: “Valid FROM Relations that can be added”");
+        try {
+
+            EdgeRuleQuery q1 =
+                new EdgeRuleQuery.Builder(objectName, "FromOnly").version(version).build();
+            Multimap<String, EdgeRule> results = ei.getRules(q1);
+            relations.add("{\"comment\": \"Valid FROM Relations that can be added\"}\n");
+            SortedSet<String> ss = new TreeSet<String>(results.keySet());
+            for (String key : ss) {
+                results.get(key).stream().filter((i) -> (!i.isPrivateEdge())).forEach((i) -> {
+                    String rel = selectedRelation(i);
+                    relations.add(rel);
+                    logger.debug("Relation added: " + rel);
+                });
+            }
+        } catch (Exception e) {
+            logger.debug("objectName: " + objectName + "\n" + e);
+        }
+    }
+
+    private void writeRelationsFile() {
+        File examplefilePath = new File(
+            GenerateXsd.getYamlDir() + "/relations/" + version.toString() + "/" +
+                opId.replace("RelationshipListRelationship", "") + ".json");
+
+        logger.debug(String.join("exampleFilePath: ", examplefilePath.toString()));
+        try {
+            if (!examplefilePath.exists()) {
+                examplefilePath.getParentFile().mkdirs();
+                if(!examplefilePath.createNewFile()) {
+                    logger.debug("examplefilePath create file error");
+                }
+            }
+        } catch (Exception e) {
+            logger.debug("examplefilePath create file error", e);
+            return;
+        }
+        try (FileOutputStream fop = new FileOutputStream(examplefilePath)) {
+            if (relations.size() > 0) {
+                fop.write("[\n".getBytes());
+            }
+            fop.write(String.join(",\n", relations).getBytes());
+            if (relations.size() > 0) {
+                fop.write("\n]\n".getBytes());
+            }
+            fop.flush();
+        } catch (Exception e) {
+            logger.debug("examplefilePath write error", e);
+            return;
+        }
+        logger.debug(String.join(",\n", relations));
+    }
+
+    private static String formatObjectRelationSet(String obj, String selectObj) {
+        StringBuilder pathSb = new StringBuilder();
+        String[] paths = selectObj.split("[|]");
+        for (String s : paths) {
+            logger.trace("SelectOBJ" + s);
+            pathSb.append(formatObjectRelation(obj, s)).append(",\n");
+        }
+        pathSb.deleteCharAt(pathSb.length() - 2);
+        return pathSb.toString();
+    }
+
+    private static String formatObjectRelation(String obj, String selectObj) {
+        StringBuilder pathSb = new StringBuilder();
+        pathSb.append("{\n");
+        pathSb.append("\"related-to\" : \"").append(obj).append("\",\n");
+        pathSb.append("\"related-link\" : \"").append(selectObj).append("\"\n");
+        pathSb.append("}");
+        return pathSb.toString();
+    }
+
+    private static String getKinObjectPath(String obj, String apiPath) {
+        LevenshteinDistance proximity = new LevenshteinDistance();
+        String targetPath = "";
+        int targetScore = Integer.MAX_VALUE;
+        int targetMaxScore = 0;
+        for (Map.Entry<String, String> p : DeleteOperation.deletePaths.entrySet()) {
+            if (p.getValue().equals(obj)) {
+                targetScore = (targetScore >= proximity.apply(apiPath, p.getKey())) ?
+                    proximity.apply(apiPath, p.getKey()) : targetScore;
+                targetPath =
+                    (targetScore >= proximity.apply(apiPath, p.getKey())) ? p.getKey() : targetPath;
+                targetMaxScore = (targetMaxScore <= proximity.apply(apiPath, p.getKey())) ?
+                    proximity.apply(apiPath, p.getKey()) : targetScore;
+                logger.trace(proximity.apply(apiPath, p.getKey()) + ":" + p.getKey());
+                logger.trace(proximity.apply(apiPath, p.getKey()) + ":" + apiPath);
+            }
+        }
+        return targetPath;
+    }
+
+    private static String getUnrelatedObjectPaths(String obj, String apiPath) {
+        StringBuilder targetPath = new StringBuilder();
+        logger.trace("Obj:" + obj + "\n" + apiPath);
+        for (Map.Entry<String, String> p : DeleteOperation.deletePaths.entrySet()) {
+            if (p.getValue().equals(obj)) {
+                logger.trace("p.getvalue:" + p.getValue() + "p.getkey:" + p.getKey());
+                targetPath.append(targetPath.length() == 0 ? "" : "|").append(p.getKey());
+                logger.trace("Match:" + apiPath + "\n" + targetPath);
+            }
+        }
+        return targetPath.toString();
+    }
+
+    public void generateRelations(EdgeIngestor edgeIngestor) {
+        putRelationPaths.forEach((k, v) -> {
+            logger.trace("k=" + k + "\n" + "v=" + v + v.equals(
+                "/business/customers/customer/{global-customer-id}/service-subscriptions/service-subscription/{service-type}/service-instances/service-instance/{service-instance-id}/allotted-resources/allotted-resource/{id}/relationship-list/relationship"));
+            logger.debug("apiPath(Operation): " + v);
+            logger.debug("Target object: " + v.replace("/relationship-list/relationship", ""));
+            logger.debug("Relations: ");
+            PutRelationPathSet prp = new PutRelationPathSet(k, v, this.version);
+            prp.process(edgeIngestor);
+        });
+    }
 
 }