From ccd90cd0098e5546c2cefc389f1ff33419acc169 Mon Sep 17 00:00:00 2001 From: jczestochowska Date: Wed, 1 Aug 2018 16:13:10 +0200 Subject: [PATCH] Fix sonar issues in SchemaGenerator fixed formatting removed unused JanusGraph graph parameter deleted usage of print that were accompanied by a logger reduced loadSchemaIntoJanusGraph complexity by cutting it into smaller methods added private constructor to prevent instantiation optimized imports Change-Id: I4645a7fed266afbe6c2b21df20b40574aa9f31fd Issue-ID: AAI-1437 Signed-off-by: jczestochowska --- .../main/java/org/onap/aai/dbgen/GenTester.java | 2 +- .../java/org/onap/aai/dbgen/SchemaGenerator.java | 290 +++++++++++---------- .../src/main/java/org/onap/aai/dbmap/AAIGraph.java | 4 +- .../java/org/onap/aai/dbmap/InMemoryGraph.java | 3 +- 4 files changed, 154 insertions(+), 145 deletions(-) diff --git a/aai-core/src/main/java/org/onap/aai/dbgen/GenTester.java b/aai-core/src/main/java/org/onap/aai/dbgen/GenTester.java index 9a726ec5..1abd4708 100644 --- a/aai-core/src/main/java/org/onap/aai/dbgen/GenTester.java +++ b/aai-core/src/main/java/org/onap/aai/dbgen/GenTester.java @@ -128,7 +128,7 @@ public class GenTester { imsg = "-- Loading new schema elements into JanusGraph --"; System.out.println(imsg); LOGGER.info(imsg); - SchemaGenerator.loadSchemaIntoJanusGraph( graph, graphMgt, addDefaultCR ); + SchemaGenerator.loadSchemaIntoJanusGraph(graphMgt, addDefaultCR ); } catch(Exception ex) { ErrorLogHelper.logError("AAI_4000", ex.getMessage()); diff --git a/aai-core/src/main/java/org/onap/aai/dbgen/SchemaGenerator.java b/aai-core/src/main/java/org/onap/aai/dbgen/SchemaGenerator.java index 6336edd3..c9813384 100644 --- a/aai-core/src/main/java/org/onap/aai/dbgen/SchemaGenerator.java +++ b/aai-core/src/main/java/org/onap/aai/dbgen/SchemaGenerator.java @@ -8,7 +8,7 @@ * 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 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -20,13 +20,19 @@ package org.onap.aai.dbgen; +import com.att.eelf.configuration.EELFLogger; +import com.att.eelf.configuration.EELFManager; +import com.google.common.collect.Multimap; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Optional; import java.util.Set; - import org.apache.tinkerpop.gremlin.structure.Vertex; +import org.janusgraph.core.Cardinality; +import org.janusgraph.core.Multiplicity; +import org.janusgraph.core.PropertyKey; +import org.janusgraph.core.schema.JanusGraphManagement; import org.onap.aai.db.props.AAIProperties; import org.onap.aai.introspection.Introspector; import org.onap.aai.introspection.Loader; @@ -38,156 +44,162 @@ import org.onap.aai.serialization.db.EdgeRule; import org.onap.aai.serialization.db.EdgeRules; import org.onap.aai.util.AAIConfig; -import com.att.eelf.configuration.EELFLogger; -import com.att.eelf.configuration.EELFManager; -import com.google.common.collect.Multimap; -import org.janusgraph.core.Cardinality; -import org.janusgraph.core.Multiplicity; -import org.janusgraph.core.PropertyKey; -import org.janusgraph.core.JanusGraph; -import org.janusgraph.core.schema.JanusGraphManagement; +public class SchemaGenerator { + + private static final EELFLogger LOGGER = EELFManager.getInstance().getLogger(SchemaGenerator.class); + private static boolean addDefaultCR = true; + + private SchemaGenerator() { + + } + /** + * Load schema into JanusGraph. + * @param graphMgmt the graph mgmt + * @param addDefaultCloudRegion the add default cloud region + */ + public static void loadSchemaIntoJanusGraph(final JanusGraphManagement graphMgmt, + boolean addDefaultCloudRegion) { + addDefaultCR = addDefaultCloudRegion; + loadSchemaIntoJanusGraph(graphMgmt); + } -public class SchemaGenerator{ - - private static final EELFLogger LOGGER = EELFManager.getInstance().getLogger(SchemaGenerator.class); - private static boolean addDefaultCR = true; - - - /** - * Load schema into JanusGraph. - * - * @param graph the graph - * @param graphMgmt the graph mgmt - * @param addDefaultCloudRegion the add default cloud region - */ - public static void loadSchemaIntoJanusGraph(final JanusGraph graph, final JanusGraphManagement graphMgmt, boolean addDefaultCloudRegion) { - addDefaultCR = addDefaultCloudRegion; - loadSchemaIntoJanusGraph(graph, graphMgmt); - } - /** * Load schema into JanusGraph. * - * @param graph the graph * @param graphMgmt the graph mgmt */ - public static void loadSchemaIntoJanusGraph(final JanusGraph graph, final JanusGraphManagement graphMgmt) { - - try { - AAIConfig.init(); - } - catch (Exception ex){ - LOGGER.error(" ERROR - Could not run AAIConfig.init(). " + LogFormatTools.getStackTop(ex)); - System.out.println(" ERROR - Could not run AAIConfig.init(). "); - System.exit(1); - } - - // NOTE - JanusGraph 0.5.3 doesn't keep a list of legal node Labels. - // They are only used when a vertex is actually being created. JanusGraph 1.1 will keep track (we think). - - - // Use EdgeRules to make sure edgeLabels are defined in the db. NOTE: the multiplicty used here is - // always "MULTI". This is not the same as our internal "Many2Many", "One2One", "One2Many" or "Many2One" - // We use the same edge-label for edges between many different types of nodes and our internal - // multiplicty definitions depends on which two types of nodes are being connected. - - Multimap edges = null; - Set labels = new HashSet<>(); - - edges = EdgeRules.getInstance().getAllRules(); - for (EdgeRule rule : edges.values()) { - labels.add(rule.getLabel()); - } - - for( String label: labels){ - if( graphMgmt.containsRelationType(label) ) { - String dmsg = " EdgeLabel [" + label + "] already existed. "; - System.out.println(dmsg); - LOGGER.debug(dmsg); - } else { - String dmsg = "Making EdgeLabel: [" + label + "]"; - System.out.println(dmsg); - LOGGER.debug(dmsg); - graphMgmt.makeEdgeLabel(label).multiplicity(Multiplicity.valueOf("MULTI")).make(); + public static void loadSchemaIntoJanusGraph(final JanusGraphManagement graphMgmt) { + + try { + AAIConfig.init(); + } catch (Exception ex) { + LOGGER.error(" ERROR - Could not run AAIConfig.init(). " + LogFormatTools.getStackTop(ex)); + System.exit(1); + } + + // NOTE - JanusGraph 0.5.3 doesn't keep a list of legal node Labels. + // They are only used when a vertex is actually being created. JanusGraph 1.1 will keep track (we think). + + // Use EdgeRules to make sure edgeLabels are defined in the db. NOTE: the multiplicty used here is + // always "MULTI". This is not the same as our internal "Many2Many", "One2One", "One2Many" or "Many2One" + // We use the same edge-label for edges between many different types of nodes and our internal + // multiplicty definitions depends on which two types of nodes are being connected. + + Multimap edges = null; + Set labels = new HashSet<>(); + + edges = EdgeRules.getInstance().getAllRules(); + for (EdgeRule rule : edges.values()) { + labels.add(rule.getLabel()); + } + + for (String label : labels) { + addEdgeLabel(graphMgmt, label); + } + + Loader loader = LoaderFactory.createLoaderForVersion(ModelType.MOXY, AAIProperties.LATEST); + Map objs = loader.getAllObjects(); + Map seenProps = new HashMap<>(); + + for (Introspector obj : objs.values()) { + for (String propertyName : obj.getProperties()) { + String dbPropertyName = propertyName; + Optional alias = obj.getPropertyMetadata(propertyName, PropertyMetadata.DB_ALIAS); + if (alias.isPresent()) { + dbPropertyName = alias.get(); + } + if (graphMgmt.containsRelationType(propertyName)) { + handleExistingProperty(propertyName); + } else { + handleUnknownProperty(graphMgmt, seenProps, obj, propertyName, dbPropertyName); + } } - } - - Loader loader = LoaderFactory.createLoaderForVersion(ModelType.MOXY, AAIProperties.LATEST); - Map objs = loader.getAllObjects(); - Map seenProps = new HashMap<>(); - - for (Introspector obj : objs.values()) { - for (String propName : obj.getProperties()) { - String dbPropName = propName; - Optional alias = obj.getPropertyMetadata(propName, PropertyMetadata.DB_ALIAS); - if (alias.isPresent()) { - dbPropName = alias.get(); - } - if( graphMgmt.containsRelationType(propName) ){ - String dmsg = " PropertyKey [" + propName + "] already existed in the DB. "; - System.out.println(dmsg); - LOGGER.debug(dmsg); - } else { - Class type = obj.getClass(propName); - Cardinality cardinality = Cardinality.SINGLE; - boolean process = false; - if (obj.isListType(propName) && obj.isSimpleGenericType(propName)) { - cardinality = Cardinality.SET; - type = obj.getGenericTypeClass(propName); - process = true; - } else if (obj.isSimpleType(propName)) { - process = true; - } - - if (process) { - - String imsg = "Creating PropertyKey: [" + dbPropName + "], ["+ type.getSimpleName() + "], [" + cardinality + "]"; - System.out.println(imsg); - LOGGER.info(imsg); - PropertyKey propK; - if (!seenProps.containsKey(dbPropName)) { - propK = graphMgmt.makePropertyKey(dbPropName).dataType(type).cardinality(cardinality).make(); - seenProps.put(dbPropName, propK); - } else { - propK = seenProps.get(dbPropName); - } - if (graphMgmt.containsGraphIndex(dbPropName)) { - String dmsg = " Index [" + dbPropName + "] already existed in the DB. "; - System.out.println(dmsg); - LOGGER.debug(dmsg); - } else { - if( obj.getIndexedProperties().contains(propName) ){ - if( obj.getUniqueProperties().contains(propName) ){ - imsg = "Add Unique index for PropertyKey: [" + dbPropName + "]"; - System.out.println(imsg); - LOGGER.info(imsg); - graphMgmt.buildIndex(dbPropName,Vertex.class).addKey(propK).unique().buildCompositeIndex(); - } else { - imsg = "Add index for PropertyKey: [" + dbPropName + "]"; - System.out.println(imsg); - LOGGER.info(imsg); - graphMgmt.buildIndex(dbPropName,Vertex.class).addKey(propK).buildCompositeIndex(); - } - } else { - imsg = "No index added for PropertyKey: [" + dbPropName + "]"; - System.out.println(imsg); - LOGGER.info(imsg); - } - } - } - } - } - } - + } + String imsg = "-- About to call graphMgmt commit"; - System.out.println(imsg); - LOGGER.info(imsg); - + LOGGER.info(imsg); + graphMgmt.commit(); }// End of loadSchemaIntoJanusGraph() + private static void handleUnknownProperty(JanusGraphManagement graphMgmt, Map seenProps, + Introspector obj, String propertyName, String dbPropertyName) { + + Class type = obj.getClass(propertyName); + Cardinality cardinality = Cardinality.SINGLE; + boolean process = false; + if (obj.isListType(propertyName) && obj.isSimpleGenericType(propertyName)) { + cardinality = Cardinality.SET; + type = obj.getGenericTypeClass(propertyName); + process = true; + } else if (obj.isSimpleType(propertyName)) { + process = true; + } + + if (process) { + String imsg = + "Creating PropertyKey: [" + dbPropertyName + "], [" + type.getSimpleName() + "], [" + cardinality + "]"; + LOGGER.info(imsg); + PropertyKey propK; + propK = getPropertyKey(graphMgmt, seenProps, dbPropertyName, type, cardinality); + buildIndex(graphMgmt, obj, propertyName, dbPropertyName, propK); + } + } + + private static void buildIndex(JanusGraphManagement graphMgmt, Introspector obj, String propertyName, + String dbPropertyName, PropertyKey propK) { + String imsg; + if (graphMgmt.containsGraphIndex(dbPropertyName)) { + String dmsg = " Index [" + dbPropertyName + "] already existed in the DB. "; + LOGGER.debug(dmsg); + } else { + if (obj.getIndexedProperties().contains(propertyName)) { + if (obj.getUniqueProperties().contains(propertyName)) { + imsg = "Add Unique index for PropertyKey: [" + dbPropertyName + "]"; + LOGGER.info(imsg); + graphMgmt.buildIndex(dbPropertyName, Vertex.class).addKey(propK).unique().buildCompositeIndex(); + } else { + imsg = "Add index for PropertyKey: [" + dbPropertyName + "]"; + LOGGER.info(imsg); + graphMgmt.buildIndex(dbPropertyName, Vertex.class).addKey(propK).buildCompositeIndex(); + } + } else { + imsg = "No index added for PropertyKey: [" + dbPropertyName + "]"; + LOGGER.info(imsg); + } + } + } + + private static PropertyKey getPropertyKey(JanusGraphManagement graphMgmt, Map seenProps, + String dbPropertyName, Class type, Cardinality cardinality) { + PropertyKey propK; + if (!seenProps.containsKey(dbPropertyName)) { + propK = graphMgmt.makePropertyKey(dbPropertyName).dataType(type).cardinality(cardinality).make(); + seenProps.put(dbPropertyName, propK); + } else { + propK = seenProps.get(dbPropertyName); + } + return propK; + } + + private static void handleExistingProperty(String propertyName) { + String dmsg = " PropertyKey [" + propertyName + "] already existed in the DB. "; + LOGGER.debug(dmsg); + } + + private static void addEdgeLabel(JanusGraphManagement graphMgmt, String label) { + if (graphMgmt.containsRelationType(label)) { + String dmsg = " EdgeLabel [" + label + "] already existed. "; + LOGGER.debug(dmsg); + } else { + String dmsg = "Making EdgeLabel: [" + label + "]"; + LOGGER.debug(dmsg); + graphMgmt.makeEdgeLabel(label).multiplicity(Multiplicity.valueOf("MULTI")).make(); + } + } + } diff --git a/aai-core/src/main/java/org/onap/aai/dbmap/AAIGraph.java b/aai-core/src/main/java/org/onap/aai/dbmap/AAIGraph.java index 0a287516..b8596eb9 100644 --- a/aai-core/src/main/java/org/onap/aai/dbmap/AAIGraph.java +++ b/aai-core/src/main/java/org/onap/aai/dbmap/AAIGraph.java @@ -19,10 +19,8 @@ */ package org.onap.aai.dbmap; -import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; -import java.io.InputStream; import java.util.HashMap; import java.util.Map; import java.util.Properties; @@ -158,7 +156,7 @@ public class AAIGraph { JanusGraphManagement graphMgt = graph.openManagement(); System.out.println("-- loading schema into JanusGraph"); - SchemaGenerator.loadSchemaIntoJanusGraph( graph, graphMgt ); + SchemaGenerator.loadSchemaIntoJanusGraph(graphMgt ); } /** diff --git a/aai-core/src/main/java/org/onap/aai/dbmap/InMemoryGraph.java b/aai-core/src/main/java/org/onap/aai/dbmap/InMemoryGraph.java index 45d0bbe4..3f002ff5 100644 --- a/aai-core/src/main/java/org/onap/aai/dbmap/InMemoryGraph.java +++ b/aai-core/src/main/java/org/onap/aai/dbmap/InMemoryGraph.java @@ -25,7 +25,6 @@ import java.io.InputStream; import java.util.Properties; -import org.apache.commons.lang.exception.ExceptionUtils; import org.apache.tinkerpop.gremlin.structure.io.IoCore; import org.onap.aai.dbgen.SchemaGenerator; import org.onap.aai.logging.LogFormatTools; @@ -57,7 +56,7 @@ public class InMemoryGraph { JanusGraphManagement graphMgt = graph.openManagement(); if(builder.isSchemaEnabled){ LOGGER.info("Schema Enabled"); - SchemaGenerator.loadSchemaIntoJanusGraph(graph, graphMgt); + SchemaGenerator.loadSchemaIntoJanusGraph(graphMgt); } JanusGraphTransaction transaction = graph.newTransaction(); LOGGER.info("Loading snapshot"); -- 2.16.6