diff options
Diffstat (limited to 'aai-core/src')
11 files changed, 191 insertions, 198 deletions
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 e6b6fbaf..af81c2d2 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 @@ -1,4 +1,4 @@ -/** +/* * ============LICENSE_START======================================================= * org.onap.aai * ================================================================================ @@ -23,7 +23,6 @@ package org.onap.aai.dbgen; import com.google.common.collect.Multimap; import org.apache.tinkerpop.gremlin.structure.Vertex; import org.janusgraph.core.Cardinality; -import org.janusgraph.core.JanusGraph; import org.janusgraph.core.Multiplicity; import org.janusgraph.core.PropertyKey; import org.janusgraph.core.schema.JanusGraphManagement; @@ -32,7 +31,6 @@ import org.onap.aai.edges.EdgeIngestor; import org.onap.aai.edges.EdgeRule; import org.onap.aai.edges.exceptions.EdgeRuleNotFoundException; import org.onap.aai.introspection.Introspector; -import org.onap.aai.introspection.Loader; import org.onap.aai.introspection.LoaderUtil; import org.onap.aai.logging.LogFormatTools; import org.onap.aai.schema.enums.PropertyMetadata; @@ -40,14 +38,19 @@ import org.onap.aai.util.AAIConfig; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.*; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Optional; +import java.util.Set; +import java.util.function.Function; +import java.util.stream.Collectors; public class SchemaGenerator { private static final Logger LOGGER = LoggerFactory.getLogger(SchemaGenerator.class); private SchemaGenerator() { - } /** @@ -56,13 +59,12 @@ public class SchemaGenerator { * @param graphMgmt * the graph mgmt */ - public static void loadSchemaIntoJanusGraph(final JanusGraphManagement graphMgmt, - String backend) { + public static void loadSchemaIntoJanusGraph(final JanusGraphManagement graphMgmt, String backend) { try { AAIConfig.init(); } catch (Exception ex) { - LOGGER.error(" ERROR - Could not run AAIConfig.init(). " + LogFormatTools.getStackTop(ex)); + LOGGER.error(" ERROR - Could not run AAIConfig.init(). {}", LogFormatTools.getStackTop(ex)); System.exit(1); } @@ -79,35 +81,10 @@ public class SchemaGenerator { // multiplicty definitions depends on which two types of nodes are being // connected. - Multimap<String, EdgeRule> edges = null; - Set<String> labels = new HashSet<>(); - - EdgeIngestor edgeIngestor = SpringContextAware.getBean(EdgeIngestor.class); - - try { - edges = edgeIngestor.getAllCurrentRules(); - } catch (EdgeRuleNotFoundException e) { - LOGGER.error("Unable to find all rules {}", LogFormatTools.getStackTop(e)); - } - - for (EdgeRule rule : edges.values()) { - labels.add(rule.getLabel()); - } + makeEdgeLabels(graphMgmt); - for (String label : labels) { - 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(); - } - } - Loader loader = LoaderUtil.getLatestVersion(); - - Map<String, Introspector> objs = loader.getAllObjects(); + Map<String, Introspector> objs = LoaderUtil.getLatestVersion().getAllObjects(); Map<String, PropertyKey> seenProps = new HashMap<>(); for (Introspector obj : objs.values()) { @@ -118,8 +95,7 @@ public class SchemaGenerator { dbPropName = alias.get(); } if (graphMgmt.containsRelationType(dbPropName)) { - String dmsg = " PropertyKey [" + dbPropName + "] already existed in the DB. "; - LOGGER.debug(dmsg); + LOGGER.debug(" PropertyKey [{}] already existed in the DB. ", dbPropName); } else { Class<?> type = obj.getClass(propName); Cardinality cardinality = Cardinality.SINGLE; @@ -134,9 +110,8 @@ public class SchemaGenerator { if (process) { - String imsg = "Creating PropertyKey: [" + dbPropName + "], [" + type.getSimpleName() + "], [" - + cardinality + "]"; - LOGGER.info(imsg); + LOGGER.info("Creating PropertyKey: [{}], [{}], [{}]", + dbPropName, type.getSimpleName(), cardinality); PropertyKey propK; if (!seenProps.containsKey(dbPropName)) { propK = graphMgmt.makePropertyKey(dbPropName).dataType(type).cardinality(cardinality) @@ -146,23 +121,19 @@ public class SchemaGenerator { propK = seenProps.get(dbPropName); } if (graphMgmt.containsGraphIndex(dbPropName)) { - String dmsg = " Index [" + dbPropName + "] already existed in the DB. "; - LOGGER.debug(dmsg); + LOGGER.debug(" Index [{}] already existed in the DB. ", dbPropName); } else { if (obj.getIndexedProperties().contains(propName)) { if (obj.getUniqueProperties().contains(propName)) { - imsg = "Add Unique index for PropertyKey: [" + dbPropName + "]"; - LOGGER.info(imsg); + LOGGER.info("Add Unique index for PropertyKey: [{}]", dbPropName); graphMgmt.buildIndex(dbPropName, Vertex.class).addKey(propK).unique() .buildCompositeIndex(); } else { - imsg = "Add index for PropertyKey: [" + dbPropName + "]"; - LOGGER.info(imsg); + LOGGER.info("Add index for PropertyKey: [{}]", dbPropName); graphMgmt.buildIndex(dbPropName, Vertex.class).addKey(propK).buildCompositeIndex(); } } else { - imsg = "No index added for PropertyKey: [" + dbPropName + "]"; - LOGGER.info(imsg); + LOGGER.info("No index added for PropertyKey: [{}]", dbPropName); } } } @@ -170,13 +141,46 @@ public class SchemaGenerator { } } - String imsg = "-- About to call graphMgmt commit"; - LOGGER.info(imsg); + LOGGER.info("-- About to call graphMgmt commit"); if (backend != null) { - LOGGER.info(String.format("Successfully loaded the schema to %s", backend)); + LOGGER.info("Successfully loaded the schema to {}", backend); } graphMgmt.commit(); } + private static void makeEdgeLabels(JanusGraphManagement graphMgmt) { + try { + EdgeIngestor edgeIngestor = SpringContextAware.getBean(EdgeIngestor.class); + + Set<String> labels = Optional.ofNullable(edgeIngestor.getAllCurrentRules()) + .map(collectValues(EdgeRule::getLabel)) + .orElseGet(HashSet::new); + + labels.forEach(label -> { + if (graphMgmt.containsRelationType(label)) { + LOGGER.debug(" EdgeLabel [{}] already existed. ", label); + } else { + LOGGER.debug("Making EdgeLabel: [{}]", label); + graphMgmt.makeEdgeLabel(label).multiplicity(Multiplicity.valueOf("MULTI")).make(); + } + }); + } catch (EdgeRuleNotFoundException e) { + LOGGER.error("Unable to find all rules {}", LogFormatTools.getStackTop(e)); + } + } + + /** + * Returns a function collecting all the values in a {@link com.google.common.collect.Multimap} + * given a mapping function + * + * @param f The mapper function + * @param <K> The type of key used by the provided {@link com.google.common.collect.Multimap} + * @param <V> The type of value used by the provided {@link com.google.common.collect.Multimap} + * @param <V0> The type which <V> is mapped to + */ + private static <K, V, V0> Function<Multimap<K, V>, Set<V0>> collectValues(Function<V, V0> f) { + return as -> as.values().stream().map(f).collect(Collectors.toSet()); + } + } diff --git a/aai-core/src/main/java/org/onap/aai/dbgen/SchemaGenerator4Hist.java b/aai-core/src/main/java/org/onap/aai/dbgen/SchemaGenerator4Hist.java index 0f88de24..a35625f6 100644 --- a/aai-core/src/main/java/org/onap/aai/dbgen/SchemaGenerator4Hist.java +++ b/aai-core/src/main/java/org/onap/aai/dbgen/SchemaGenerator4Hist.java @@ -20,12 +20,9 @@ package org.onap.aai.dbgen; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import com.google.common.collect.Multimap; import org.apache.tinkerpop.gremlin.structure.Vertex; import org.janusgraph.core.Cardinality; -import org.janusgraph.core.JanusGraph; import org.janusgraph.core.Multiplicity; import org.janusgraph.core.PropertyKey; import org.janusgraph.core.schema.JanusGraphManagement; @@ -39,8 +36,14 @@ import org.onap.aai.introspection.LoaderUtil; import org.onap.aai.logging.LogFormatTools; import org.onap.aai.schema.enums.PropertyMetadata; import org.onap.aai.util.AAIConfig; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; -import java.util.*; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Optional; +import java.util.Set; import static org.onap.aai.db.props.AAIProperties.*; @@ -48,22 +51,21 @@ public class SchemaGenerator4Hist { private static final Logger LOGGER = LoggerFactory.getLogger(SchemaGenerator4Hist.class); + private SchemaGenerator4Hist(){ + + } /** * Load schema into JanusGraph. * - * @param graph - * the graph * @param graphMgmt * the graph mgmt */ - public static void loadSchemaIntoJanusGraph(final JanusGraph graph, final JanusGraphManagement graphMgmt, - String backend) { + public static void loadSchemaIntoJanusGraph(final JanusGraphManagement graphMgmt, String backend) { 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(). "); + LOGGER.error(" ERROR - Could not run AAIConfig.init(). {}", LogFormatTools.getStackTop(ex)); System.exit(1); } @@ -97,11 +99,9 @@ public class SchemaGenerator4Hist { for (String label : labels) { if (graphMgmt.containsRelationType(label)) { - String dmsg = " EdgeLabel [" + label + "] already existed. "; - LOGGER.debug(dmsg); + LOGGER.debug(" EdgeLabel [{}] already existed. ", label); } else { - String dmsg = "Making EdgeLabel: [" + label + "]"; - LOGGER.debug(dmsg); + LOGGER.debug("Making EdgeLabel: [{}]", label); graphMgmt.makeEdgeLabel(label).multiplicity(Multiplicity.valueOf("MULTI")).make(); } } @@ -119,8 +119,7 @@ public class SchemaGenerator4Hist { dbPropName = alias.get(); } if (graphMgmt.containsRelationType(dbPropName)) { - String dmsg = " PropertyKey [" + dbPropName + "] already existed in the DB. "; - LOGGER.debug(dmsg); + LOGGER.debug(" PropertyKey [{}] already existed in the DB. ", dbPropName); } else { Class<?> type = obj.getClass(propName); Cardinality cardinality = Cardinality.LIST; @@ -132,7 +131,6 @@ public class SchemaGenerator4Hist { // above) will be stored in our db as a single String. And that // single string will have Cardinality = LIST so we can track its // history. - //cardinality = Cardinality.SET; type = obj.getGenericTypeClass(propName); process = true; } else if (obj.isSimpleType(propName)) { @@ -141,9 +139,8 @@ public class SchemaGenerator4Hist { if (process) { - String imsg = " Creating PropertyKey: [" + dbPropName + "], [" + type.getSimpleName() + "], [" - + cardinality + "]"; - LOGGER.info(imsg); + LOGGER.info(" Creating PropertyKey: [{}], [{}], [{}]", + dbPropName, type.getSimpleName(), cardinality); PropertyKey propK; if (!seenProps.containsKey(dbPropName)) { propK = graphMgmt.makePropertyKey(dbPropName).dataType(type).cardinality(cardinality) @@ -153,17 +150,14 @@ public class SchemaGenerator4Hist { propK = seenProps.get(dbPropName); } if (graphMgmt.containsGraphIndex(dbPropName)) { - String dmsg = " Index [" + dbPropName + "] already existed in the DB. "; - LOGGER.debug(dmsg); + LOGGER.debug(" Index [{}] already existed in the DB. ", dbPropName); } else { if (obj.getIndexedProperties().contains(propName)) { // NOTE - for History we never add a unique index - just a regular index - imsg = "Add index for PropertyKey: [" + dbPropName + "]"; - LOGGER.info(imsg); + LOGGER.info("Add index for PropertyKey: [{}]", dbPropName); graphMgmt.buildIndex(dbPropName, Vertex.class).addKey(propK).buildCompositeIndex(); } else { - imsg = "No index needed/added for PropertyKey: [" + dbPropName + "]"; - LOGGER.info(imsg); + LOGGER.info("No index needed/added for PropertyKey: [{}]", dbPropName); } } } @@ -176,63 +170,33 @@ public class SchemaGenerator4Hist { // only have one of them. That is, a Property can show up many times in a // node, but each instance of that property will only have a single start-ts, // end-ts, end-source-of-truth. Same goes for a node or edge itself. - if (graphMgmt.containsRelationType(END_SOT)) { - String dmsg = "PropertyKey [" + END_SOT + "] already existed in the DB. "; - LOGGER.debug(dmsg); - } else if (!seenProps.containsKey(END_SOT) ) { - String imsg = " Creating PropertyKey: [" + END_SOT + "], [String], [SINGLE]"; - LOGGER.info(imsg); - graphMgmt.makePropertyKey(END_SOT).dataType(String.class) - .cardinality(Cardinality.SINGLE).make(); - } - - if (graphMgmt.containsRelationType(START_TS)) { - String dmsg = " PropertyKey [" + START_TS + "] already existed in the DB. "; - LOGGER.debug(dmsg); - } else if (!seenProps.containsKey(START_TS) ) { - String imsg = " Creating PropertyKey: [" + START_TS + "], [Long], [SINGLE]"; - LOGGER.info(imsg); - graphMgmt.makePropertyKey(START_TS).dataType(Long.class) - .cardinality(Cardinality.SINGLE).make(); - } - - if (graphMgmt.containsRelationType(END_TS)) { - String dmsg = "PropertyKey [" + END_TS + "] already existed in the DB. "; - LOGGER.debug(dmsg); - } else if (!seenProps.containsKey(END_TS) ) { - String imsg = " Creating PropertyKey: [" + END_TS + "], [Long], [SINGLE]"; - LOGGER.info(imsg); - graphMgmt.makePropertyKey(END_TS).dataType(Long.class) - .cardinality(Cardinality.SINGLE).make(); - } - - if (graphMgmt.containsRelationType(START_TX_ID)) { - String dmsg = "PropertyKey [" + START_TX_ID + "] already existed in the DB. "; - LOGGER.debug(dmsg); - } else if (!seenProps.containsKey(START_TX_ID) ) { - String imsg = " Creating PropertyKey: [" + START_TX_ID + "], [String], [SINGLE]"; - LOGGER.info(imsg); - graphMgmt.makePropertyKey(START_TX_ID).dataType(String.class) - .cardinality(Cardinality.SINGLE).make(); - } + makeNewProperty(graphMgmt, seenProps, String.class, END_SOT); + makeNewProperty(graphMgmt, seenProps, Long.class, START_TS); + makeNewProperty(graphMgmt, seenProps, Long.class, END_TS); + makeNewProperty(graphMgmt, seenProps, String.class, START_TX_ID); + makeNewProperty(graphMgmt, seenProps, String.class, END_TX_ID); - if (graphMgmt.containsRelationType(END_TX_ID)) { - String dmsg = "PropertyKey [" + END_TX_ID + "] already existed in the DB. "; - LOGGER.debug(dmsg); - } else if (!seenProps.containsKey(END_TX_ID) ) { - String imsg = " Creating PropertyKey: [" + END_TX_ID + "], [String], [SINGLE]"; - LOGGER.info(imsg); - graphMgmt.makePropertyKey(END_TX_ID).dataType(String.class) - .cardinality(Cardinality.SINGLE).make(); - } String imsg = "-- About to call graphMgmt commit"; LOGGER.info(imsg); graphMgmt.commit(); if (backend != null) { - LOGGER.info("Successfully loaded the schema to " + backend); + LOGGER.info("Successfully loaded the schema to {}", backend); } } + private static <T> void makeNewProperty(JanusGraphManagement graphMgmt, + Map<String, PropertyKey> seenProps, + Class<T> type, + String propertyName) { + if (graphMgmt.containsRelationType(propertyName)) { + LOGGER.debug("PropertyKey [{}] already existed in the DB.", propertyName); + } else if (!seenProps.containsKey(propertyName)) { + LOGGER.info("Creating PropertyKey: [{}], [{}], [{}]", + propertyName, type.getSimpleName(), Cardinality.SINGLE); + graphMgmt.makePropertyKey(propertyName).dataType(type).cardinality(Cardinality.SINGLE) + .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 13040d30..f2f24334 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 @@ -152,7 +152,7 @@ public class AAIGraph { logger.info("-- loading schema into JanusGraph"); if ("true".equals(SpringContextAware.getApplicationContext().getEnvironment().getProperty("history.enabled", "false"))) { - SchemaGenerator4Hist.loadSchemaIntoJanusGraph(graph, graphMgt, IN_MEMORY); + SchemaGenerator4Hist.loadSchemaIntoJanusGraph(graphMgt, IN_MEMORY); } else { SchemaGenerator.loadSchemaIntoJanusGraph(graphMgt, IN_MEMORY); } diff --git a/aai-core/src/main/java/org/onap/aai/introspection/exceptions/AAIUnmarshallingException.java b/aai-core/src/main/java/org/onap/aai/introspection/exceptions/AAIUnmarshallingException.java index 5dfc5d3e..6ce42e4e 100644 --- a/aai-core/src/main/java/org/onap/aai/introspection/exceptions/AAIUnmarshallingException.java +++ b/aai-core/src/main/java/org/onap/aai/introspection/exceptions/AAIUnmarshallingException.java @@ -26,18 +26,19 @@ public class AAIUnmarshallingException extends AAIException { private static final long serialVersionUID = -5615651557821878103L; + private static final String AAI_MSG="AAI_3000"; public AAIUnmarshallingException() { } public AAIUnmarshallingException(String message) { - super("AAI_3000", message); + super(AAI_MSG, message); } public AAIUnmarshallingException(Throwable cause) { - super("AAI_3000", cause); + super(AAI_MSG, cause); } public AAIUnmarshallingException(String message, Throwable cause) { - super("AAI_3000", cause, message); + super(AAI_MSG, cause, message); } } diff --git a/aai-core/src/main/java/org/onap/aai/rest/RestHandlerService.java b/aai-core/src/main/java/org/onap/aai/rest/RestHandlerService.java index aeb58c4b..e3ac2b26 100644 --- a/aai-core/src/main/java/org/onap/aai/rest/RestHandlerService.java +++ b/aai-core/src/main/java/org/onap/aai/rest/RestHandlerService.java @@ -1,4 +1,4 @@ -/** +/* * ============LICENSE_START======================================================= * org.onap.aai * ================================================================================ @@ -24,10 +24,9 @@ import java.util.concurrent.Executors; import java.util.concurrent.ThreadPoolExecutor; public class RestHandlerService { - private static RestHandlerService single_instance = null; + private static RestHandlerService singleInstance = null; public ThreadPoolExecutor executor; - // private constructor restricted to this class itself private RestHandlerService() { executor = (ThreadPoolExecutor) Executors.newFixedThreadPool(50); } @@ -38,9 +37,9 @@ public class RestHandlerService { * @return single instance of RestHandlerService */ public static RestHandlerService getInstance() { - if (single_instance == null) { - single_instance = new RestHandlerService(); + if (singleInstance == null) { + singleInstance = new RestHandlerService(); } - return single_instance; + return singleInstance; } } diff --git a/aai-core/src/main/java/org/onap/aai/serialization/engines/query/QueryEngine.java b/aai-core/src/main/java/org/onap/aai/serialization/engines/query/QueryEngine.java index b250d8f3..41d97077 100644 --- a/aai-core/src/main/java/org/onap/aai/serialization/engines/query/QueryEngine.java +++ b/aai-core/src/main/java/org/onap/aai/serialization/engines/query/QueryEngine.java @@ -1,4 +1,4 @@ -/** +/* * ============LICENSE_START======================================================= * org.onap.aai * ================================================================================ @@ -34,7 +34,7 @@ import org.onap.aai.introspection.Loader; public abstract class QueryEngine { - final protected GraphTraversalSource g; + protected final GraphTraversalSource g; protected double dbTimeMsecs = 0; /** @@ -177,5 +177,4 @@ public abstract class QueryEngine { public abstract List<Path> findCousinsAsPath(Vertex start); public abstract double getDBTimeMsecs(); - } diff --git a/aai-core/src/main/java/org/onap/aai/serialization/queryformats/Aggregate.java b/aai-core/src/main/java/org/onap/aai/serialization/queryformats/Aggregate.java index b7627267..9ce343f6 100644 --- a/aai-core/src/main/java/org/onap/aai/serialization/queryformats/Aggregate.java +++ b/aai-core/src/main/java/org/onap/aai/serialization/queryformats/Aggregate.java @@ -129,7 +129,7 @@ public class Aggregate extends MultiFormatMapper { json.addProperty(prop.key(), gson.toJson(prop.value())); } else { // throw exception? - return null; + return Optional.empty(); } } } else { @@ -214,7 +214,7 @@ public class Aggregate extends MultiFormatMapper { json.add(inner); } else { Optional<JsonObject> obj = this.getJsonFromVertex((Vertex)l, properties); - json.add(obj.get()); + if(obj.isPresent()) json.add(obj.get()); } } return Optional.of(json); diff --git a/aai-core/src/main/java/org/onap/aai/serialization/queryformats/MultiFormatMapper.java b/aai-core/src/main/java/org/onap/aai/serialization/queryformats/MultiFormatMapper.java index 847c832a..4977cb86 100644 --- a/aai-core/src/main/java/org/onap/aai/serialization/queryformats/MultiFormatMapper.java +++ b/aai-core/src/main/java/org/onap/aai/serialization/queryformats/MultiFormatMapper.java @@ -23,6 +23,9 @@ package org.onap.aai.serialization.queryformats; import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; +import java.util.stream.Collectors; +import org.apache.commons.lang3.tuple.ImmutableTriple; +import org.apache.commons.lang3.tuple.Pair; import org.apache.tinkerpop.gremlin.process.traversal.Path; import org.apache.tinkerpop.gremlin.process.traversal.step.util.Tree; import org.apache.tinkerpop.gremlin.structure.Vertex; @@ -38,6 +41,11 @@ public abstract class MultiFormatMapper implements FormatMapper { Logger logger = LoggerFactory.getLogger(MultiFormatMapper.class); protected boolean isTree = false; + protected static final String PROPERTIES_KEY = "properties"; + protected static final String NODE_TYPE_KEY = "node-type"; + + protected static final String RETURNED_EMPTY_JSONARRAY_MSG = + "Returned empty JsonArray - Could not populate nested json objects for wrapper: {}"; @Override public Optional<JsonObject> formatObject(Object input) @@ -118,7 +126,7 @@ public abstract class MultiFormatMapper implements FormatMapper { if (ja.size() > 0) { t.add("nodes", ja); } else { - logger.debug("Returned empty JsonArray - Could not populate nested json objects for wrapper: {}", nodeIdentifier); + logger.debug(RETURNED_EMPTY_JSONARRAY_MSG, nodeIdentifier); } return Optional.of(t); @@ -147,7 +155,7 @@ public abstract class MultiFormatMapper implements FormatMapper { t.add("results", ja); return Optional.of(t); } else { - logger.debug("Returned empty JsonArray - Could not populate nested json objects for wrapper: {}", nodeIdentifier); + logger.debug(RETURNED_EMPTY_JSONARRAY_MSG, nodeIdentifier); } return Optional.empty(); @@ -177,7 +185,7 @@ public abstract class MultiFormatMapper implements FormatMapper { if (ja.size() > 0) { me.add(nodeIdentifier, ja); } else { - logger.debug("Returned empty JsonArray - Could not populate nested json objects for wrapper: {}", nodeIdentifier); + logger.debug(RETURNED_EMPTY_JSONARRAY_MSG, nodeIdentifier); } nodes.add(me); } @@ -193,18 +201,15 @@ public abstract class MultiFormatMapper implements FormatMapper { if (properties == null) return new HashMap<>(); - Map<String, Set<String>> filterPropertiesMap = new HashMap<>(); - for (String key : properties.keySet()) { - if (!filterPropertiesMap.containsKey(key)) { - Set<String> newSet = new HashSet<>(); - for (String currProperty : properties.get(key)) { - currProperty = truncateApostrophes(currProperty); - newSet.add(currProperty); + return properties.entrySet().stream() + .map(entry -> { + Set<String> newSet = entry.getValue().stream() + .map(this::truncateApostrophes) + .collect(Collectors.toSet()); + + return Pair.of(entry.getKey(), newSet); } - filterPropertiesMap.put(key, newSet); - } - } - return filterPropertiesMap; + ).collect(Collectors.toMap(Pair::getKey, Pair::getValue)); } /** @@ -229,37 +234,55 @@ public abstract class MultiFormatMapper implements FormatMapper { * @param filterPropertiesMap * @return */ - protected JsonObject getPropertyFilteredObject(Optional<JsonObject> obj, Map<String, Set<String>> filterPropertiesMap) { - if (filterPropertiesMap == null || filterPropertiesMap.isEmpty()) { - return obj.get(); - } - JsonObject jsonObj = obj.get(); - JsonObject result = new JsonObject(); - if (jsonObj != null) { - String nodeType = ""; - JsonObject properties = null; - // clone object - for (Map.Entry<String, JsonElement> mapEntry : jsonObj.entrySet()) { - String key = mapEntry.getKey(); JsonElement value = mapEntry.getValue(); - - // also, check if payload has node-type and properties fields - if (key.equals("node-type") && value != null) { - nodeType = value.getAsString(); - } else if (key.equals("properties") && value != null && value.isJsonObject()) { - properties = value.getAsJsonObject(); + protected JsonObject getPropertyFilteredObject(Optional<JsonObject> obj, + Map<String, Set<String>> filterPropertiesMap) { + return obj.map( + jsonObj -> { + if (filterPropertiesMap == null || filterPropertiesMap.isEmpty()) { + return jsonObj; + } else { + ImmutableTriple<JsonObject, Optional<String>, Optional<JsonObject>> triple = + cloneObjectAndExtractNodeTypeAndProperties(jsonObj); + + JsonObject result = triple.left; + Optional<String> nodeType = triple.middle; + Optional<JsonObject> properties = triple.right; + + // Filter current object based on it containing fields: "node-type" and "properties" + if (nodeType.isPresent() && properties.isPresent()) { + filterByNodeTypeAndProperties(result, nodeType.get(), properties.get(), filterPropertiesMap); + } else { + // filter current object based on the: key - nodeType & value - JsonObject of nodes properties + filterByJsonObj(result, jsonObj, filterPropertiesMap); + } + + return result; } - result.add(key, value); } + ).orElseGet(JsonObject::new); + } - // Filter current object based on it containing fields: "node-type" and "properties" - if (!nodeType.isEmpty() && properties != null) { - filterByNodeTypeAndProperties(result, nodeType, properties, filterPropertiesMap); - } else { - // filter current object based on the: key - nodeType & value - JsonObject of nodes properties - filterByJsonObj(result, jsonObj, filterPropertiesMap); + private ImmutableTriple<JsonObject, Optional<String>, Optional<JsonObject>> cloneObjectAndExtractNodeTypeAndProperties( + JsonObject jsonObj) { + JsonObject result = new JsonObject(); + Optional<String> nodeType = Optional.empty(); + Optional<JsonObject> properties = Optional.empty(); + + // clone object + for (Map.Entry<String, JsonElement> mapEntry : jsonObj.entrySet()) { + String key = mapEntry.getKey(); + JsonElement value = mapEntry.getValue(); + + // also, check if payload has node-type and properties fields + if (key.equals(NODE_TYPE_KEY) && value != null) { + nodeType = Optional.of(value.getAsString()); + } else if (key.equals(PROPERTIES_KEY) && value != null && value.isJsonObject()) { + properties = Optional.of(value.getAsJsonObject()); } + result.add(key, value); } - return result; + + return ImmutableTriple.of(result, nodeType, properties); } /** @@ -283,8 +306,8 @@ public abstract class MultiFormatMapper implements FormatMapper { filteredProperties.add(property, properties.get(property)); } } - result.remove("properties"); - result.add("properties", filteredProperties); + result.remove(PROPERTIES_KEY); + result.add(PROPERTIES_KEY, filteredProperties); } return result; } @@ -302,7 +325,8 @@ public abstract class MultiFormatMapper implements FormatMapper { } for (Map.Entry<String, JsonElement> mapEntry : jsonObj.entrySet()) { - String key = mapEntry.getKey(); JsonElement value = mapEntry.getValue(); + String key = mapEntry.getKey(); + JsonElement value = mapEntry.getValue(); JsonObject filteredProperties = new JsonObject(); if (value != null && value.isJsonObject() && filterPropertiesMap.containsKey(key)) { JsonObject joProperties = value.getAsJsonObject(); @@ -325,14 +349,14 @@ public abstract class MultiFormatMapper implements FormatMapper { * @param filterPropertiesMap * @return */ - protected JsonObject filterProperties(Optional<JsonObject> properties, String nodeType, Map<String, Set<String>> filterPropertiesMap) { - if (filterPropertiesMap == null || filterPropertiesMap.isEmpty()) { - return properties.get(); - } + protected JsonObject filterProperties(Optional<JsonObject> properties, String nodeType, + Map<String, Set<String>> filterPropertiesMap) { + return properties.map(jo -> { + if (filterPropertiesMap == null || filterPropertiesMap.isEmpty()) { + return properties.get(); + } - JsonObject jo = properties.get(); - JsonObject result = new JsonObject(); - if (jo != null) { + JsonObject result = new JsonObject(); // clone the object for (Map.Entry<String, JsonElement> mapEntry : jo.entrySet()) { String key = mapEntry.getKey(); @@ -350,8 +374,8 @@ public abstract class MultiFormatMapper implements FormatMapper { } } } - } - return result; + return result; + }).orElseGet(JsonObject::new); } @Override diff --git a/aai-core/src/main/java/org/onap/aai/util/HttpsAuthClient.java b/aai-core/src/main/java/org/onap/aai/util/HttpsAuthClient.java index c2bfabf4..84935cdb 100644 --- a/aai-core/src/main/java/org/onap/aai/util/HttpsAuthClient.java +++ b/aai-core/src/main/java/org/onap/aai/util/HttpsAuthClient.java @@ -93,9 +93,9 @@ public class HttpsAuthClient { ctx = SSLContext.getInstance("TLSv1.2"); KeyManagerFactory kmf = null; - try { + + try(FileInputStream fin = new FileInputStream(keystorePath)) { kmf = KeyManagerFactory.getInstance("SunX509"); - FileInputStream fin = new FileInputStream(keystorePath); KeyStore ks = KeyStore.getInstance("PKCS12"); char[] pwd = keystorePassword.toCharArray(); ks.load(fin, pwd); diff --git a/aai-core/src/test/java/org/onap/aai/audit/ListEndpointsTest.java b/aai-core/src/test/java/org/onap/aai/audit/ListEndpointsTest.java index 5c825242..5d606733 100644 --- a/aai-core/src/test/java/org/onap/aai/audit/ListEndpointsTest.java +++ b/aai-core/src/test/java/org/onap/aai/audit/ListEndpointsTest.java @@ -25,11 +25,13 @@ import org.junit.Before; import org.junit.Test; import org.onap.aai.AAISetup; import org.onap.aai.setup.SchemaVersion; +import org.springframework.test.annotation.DirtiesContext; import java.util.List; import java.util.Map; import java.util.Properties; +@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_CLASS) public class ListEndpointsTest extends AAISetup { private Properties properties; diff --git a/aai-core/src/test/java/org/onap/aai/dbmap/AAIGraphTest.java b/aai-core/src/test/java/org/onap/aai/dbmap/AAIGraphTest.java index f2c7b27c..cc420018 100644 --- a/aai-core/src/test/java/org/onap/aai/dbmap/AAIGraphTest.java +++ b/aai-core/src/test/java/org/onap/aai/dbmap/AAIGraphTest.java @@ -1,4 +1,4 @@ -/** +/* * ============LICENSE_START======================================================= * org.onap.aai * ================================================================================ @@ -55,7 +55,7 @@ public class AAIGraphTest extends AAISetup { } @Test - public void getRealtimeInstanceConnectionName() throws Exception { + public void getRealtimeInstanceConnectionName() { JanusGraphManagement graphMgt = AAIGraph.getInstance().getGraph().openManagement(); String connectionInstanceName = @@ -96,7 +96,7 @@ public class AAIGraphTest extends AAISetup { @Ignore("Need to create schema specific to the test") @Test - public void checkIndexOfAliasedIndexedProps() throws Exception { + public void checkIndexOfAliasedIndexedProps() { Set<String> aliasedIndexedProps = getAliasedIndexedProps(); JanusGraphManagement graphMgt = AAIGraph.getInstance().getGraph().openManagement(); for (String aliasedIndexedProp : aliasedIndexedProps) { |