diff options
Diffstat (limited to 'aai-core')
43 files changed, 475 insertions, 259 deletions
diff --git a/aai-core/pom.xml b/aai-core/pom.xml index 14972f4d..f259c8cf 100644 --- a/aai-core/pom.xml +++ b/aai-core/pom.xml @@ -27,11 +27,11 @@ <parent> <groupId>org.onap.aai.aai-common</groupId> <artifactId>aai-common</artifactId> - <version>1.4.1-SNAPSHOT</version> + <version>1.4.2-SNAPSHOT</version> </parent> <artifactId>aai-core</artifactId> <name>aai-core</name> - <version>1.4.1-SNAPSHOT</version> + <version>1.4.2-SNAPSHOT</version> <packaging>jar</packaging> <properties> <sonar.language>java</sonar.language> diff --git a/aai-core/src/main/java/org/onap/aai/config/IntrospectionConfig.java b/aai-core/src/main/java/org/onap/aai/config/IntrospectionConfig.java index ab74d798..750bc24f 100644 --- a/aai-core/src/main/java/org/onap/aai/config/IntrospectionConfig.java +++ b/aai-core/src/main/java/org/onap/aai/config/IntrospectionConfig.java @@ -33,7 +33,7 @@ import java.util.concurrent.ConcurrentHashMap; import org.onap.aai.introspection.LoaderFactory; import org.onap.aai.introspection.MoxyLoader; import org.springframework.context.annotation.Import; -@Import({NodesConfiguration.class, EdgesConfiguration.class}) +@Import({ConfigConfiguration.class, SchemaServiceConfiguration.class, NodesConfiguration.class, EdgesConfiguration.class}) @Configuration public class IntrospectionConfig { diff --git a/aai-core/src/main/java/org/onap/aai/config/SchemaConfiguration.java b/aai-core/src/main/java/org/onap/aai/config/SchemaConfiguration.java index 88de78e7..c11d7a56 100644 --- a/aai-core/src/main/java/org/onap/aai/config/SchemaConfiguration.java +++ b/aai-core/src/main/java/org/onap/aai/config/SchemaConfiguration.java @@ -24,10 +24,10 @@ package org.onap.aai.config; import org.onap.aai.edges.EdgeIngestor; import org.onap.aai.nodes.NodeIngestor; import org.onap.aai.setup.AAIConfigTranslator; -import org.onap.aai.serialization.db.EdgeSerializer; import org.onap.aai.setup.ConfigTranslator; import org.onap.aai.setup.SchemaLocationsBean; -import org.onap.aai.setup.SchemaVersions; +import org.onap.aai.setup.SchemaConfigVersions; +import org.onap.aai.serialization.db.EdgeSerializer; import org.onap.aai.validation.CheckEverythingStrategy; import org.onap.aai.validation.SchemaErrorStrategy; import org.onap.aai.validation.nodes.DefaultDuplicateNodeDefinitionValidationModule; @@ -42,6 +42,7 @@ import org.springframework.context.annotation.*; @PropertySource(value = "file:${schema.ingest.file}", ignoreResourceNotFound = true) public class SchemaConfiguration { + //TODO : Inject this directly into nodeIngestor @Autowired(required = false) NodesConfiguration nodesConfiguration; @@ -66,7 +67,7 @@ public class SchemaConfiguration { @Bean(name = "configTranslator") @ConditionalOnProperty(name = "schema.translator.list", havingValue = "config", matchIfMissing = true) - public ConfigTranslator configTranslator(SchemaLocationsBean schemaLocationsBean, SchemaVersions schemaVersions) { + public ConfigTranslator configTranslator(SchemaLocationsBean schemaLocationsBean, SchemaConfigVersions schemaVersions) { return new AAIConfigTranslator(schemaLocationsBean, schemaVersions); } 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 e6eb1bca..11b96ae1 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 @@ -30,10 +30,7 @@ import org.onap.aai.config.SpringContextAware; import org.onap.aai.db.props.AAIProperties; import org.onap.aai.edges.EdgeIngestor; import org.onap.aai.edges.exceptions.EdgeRuleNotFoundException; -import org.onap.aai.introspection.Introspector; -import org.onap.aai.introspection.Loader; -import org.onap.aai.introspection.LoaderFactory; -import org.onap.aai.introspection.ModelType; +import org.onap.aai.introspection.*; import org.onap.aai.logging.LogFormatTools; import org.onap.aai.schema.enums.PropertyMetadata; import org.onap.aai.edges.EdgeRule; @@ -111,16 +108,8 @@ public class SchemaGenerator { } } - // ApplicationContext ctx = SpringContextAware.getApplicationContext(); - // Loader loader = - // ctx.getBean(LoaderFactory.class).createLoaderForVersion(ModelType.MOXY, - // AAIProperties.LATEST); - LoaderFactory loaderFactory = SpringContextAware.getBean(LoaderFactory.class); - SchemaVersions schemaVersions = SpringContextAware.getBean(SchemaVersions.class); + Loader loader = LoaderUtil.getLatestVersion(); - Loader loader = loaderFactory.createLoaderForVersion(ModelType.MOXY, schemaVersions.getDefaultVersion()); - // Loader loader = LoaderFactory.createLoaderForVersion(ModelType.MOXY, - // AAIProperties.LATEST); Map<String, Introspector> objs = loader.getAllObjects(); Map<String, PropertyKey> seenProps = new HashMap<>(); @@ -163,8 +152,8 @@ public class SchemaGenerator { String dmsg = " Index [" + dbPropName + "] already existed in the DB. "; LOGGER.debug(dmsg); } else { - if (obj.getIndexedProperties().contains(dbPropName)) { - if (obj.getUniqueProperties().contains(dbPropName)) { + if (obj.getIndexedProperties().contains(propName)) { + if (obj.getUniqueProperties().contains(propName)) { imsg = "Add Unique index for PropertyKey: [" + dbPropName + "]"; LOGGER.info(imsg); graphMgmt.buildIndex(dbPropName, Vertex.class).addKey(propK).unique() diff --git a/aai-core/src/main/java/org/onap/aai/introspection/Introspector.java b/aai-core/src/main/java/org/onap/aai/introspection/Introspector.java index 269d6330..21299f79 100644 --- a/aai-core/src/main/java/org/onap/aai/introspection/Introspector.java +++ b/aai-core/src/main/java/org/onap/aai/introspection/Introspector.java @@ -24,9 +24,12 @@ import com.att.eelf.configuration.EELFManager; import com.google.common.base.CaseFormat; import org.apache.commons.lang.ClassUtils; import org.eclipse.persistence.exceptions.DynamicException; +import org.onap.aai.config.SpringContextAware; import org.onap.aai.introspection.exceptions.AAIUnknownObjectException; import org.onap.aai.logging.ErrorLogHelper; import org.onap.aai.logging.LogFormatTools; +import org.onap.aai.nodes.CaseFormatStore; +import org.onap.aai.nodes.NodeIngestor; import org.onap.aai.restcore.MediaType; import org.onap.aai.schema.enums.ObjectMetadata; import org.onap.aai.schema.enums.PropertyMetadata; @@ -50,13 +53,26 @@ public abstract class Introspector implements Cloneable { private Set<String> uniqueProperties = null; private Set<String> indexedProperties = null; private Set<String> allKeys = null; + + protected CaseFormatStore caseFormatStore = null; + protected NodeIngestor nodeIngestor; + protected Introspector(Object obj) { + this.nodeIngestor = SpringContextAware.getBean(NodeIngestor.class); + this.caseFormatStore = nodeIngestor.getCaseFormatStore(); } public abstract boolean hasProperty(String name); protected String convertPropertyName (String name) { - return CaseFormat.LOWER_HYPHEN.to(CaseFormat.LOWER_CAMEL, name); + return caseFormatStore + .fromLowerHyphenToLowerCamel(name) + .orElseGet( + () -> { + LOGGER.debug("Unable to find {} in the store from lower hyphen to lower camel", name); + return CaseFormat.LOWER_HYPHEN.to(CaseFormat.LOWER_CAMEL, name); + } + ); } protected abstract Object get(String name); @@ -198,7 +214,7 @@ public abstract class Introspector implements Cloneable { * @param obj the value to be set * @return */ - public void setValue(String name, Object obj) throws IllegalArgumentException { + public void setValue(String name, Object obj) { Object box = this.castValueAccordingToSchema(name, obj); name = convertPropertyName(name); @@ -558,8 +574,6 @@ public abstract class Introspector implements Cloneable { public abstract String marshal(MarshallerProperties properties); - public abstract Object clone(); - public abstract Object getUnderlyingObject(); public String marshal(boolean formatted) { diff --git a/aai-core/src/main/java/org/onap/aai/introspection/LoaderUtil.java b/aai-core/src/main/java/org/onap/aai/introspection/LoaderUtil.java new file mode 100644 index 00000000..16d87d96 --- /dev/null +++ b/aai-core/src/main/java/org/onap/aai/introspection/LoaderUtil.java @@ -0,0 +1,34 @@ +/** + * ============LICENSE_START======================================================= + * org.onap.aai + * ================================================================================ + * Copyright © 2019 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * 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 + * + * 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. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ +package org.onap.aai.introspection; + +import org.onap.aai.config.SpringContextAware; +import org.onap.aai.setup.SchemaVersions; + +public class LoaderUtil { + + public static Loader getLatestVersion(){ + + LoaderFactory loaderFactory = SpringContextAware.getBean(LoaderFactory.class); + SchemaVersions schemaVersions = (SchemaVersions) SpringContextAware.getBean("schemaVersions"); + + return loaderFactory.createLoaderForVersion(ModelType.MOXY, schemaVersions.getDefaultVersion()); + } +} diff --git a/aai-core/src/main/java/org/onap/aai/introspection/MoxyLoader.java b/aai-core/src/main/java/org/onap/aai/introspection/MoxyLoader.java index fa52d62f..35583d7c 100644 --- a/aai-core/src/main/java/org/onap/aai/introspection/MoxyLoader.java +++ b/aai-core/src/main/java/org/onap/aai/introspection/MoxyLoader.java @@ -32,12 +32,12 @@ import org.onap.aai.introspection.exceptions.AAIUnknownObjectException; import org.onap.aai.introspection.exceptions.AAIUnmarshallingException; import org.onap.aai.logging.ErrorLogHelper; import org.onap.aai.logging.LogFormatTools; +import org.onap.aai.nodes.CaseFormatStore; import org.onap.aai.nodes.NodeIngestor; import org.onap.aai.restcore.MediaType; import org.onap.aai.schema.enums.ObjectMetadata; import org.onap.aai.setup.SchemaVersion; import org.onap.aai.workarounds.NamingExceptions; -import org.springframework.stereotype.Component; import javax.xml.bind.JAXBException; import javax.xml.bind.Unmarshaller; import javax.xml.transform.stream.StreamSource; @@ -49,19 +49,22 @@ import java.util.stream.Collectors; public class MoxyLoader extends Loader { + private static final EELFLogger LOGGER = EELFManager.getInstance().getLogger(MoxyLoader.class); + private DynamicJAXBContext jaxbContext = null; - private EELFLogger LOGGER = EELFManager.getInstance().getLogger(MoxyLoader.class); private Map<String, Introspector> allObjs = null; private Map<SchemaVersion, MoxyLoader> moxyLoaderFactory; private NodeIngestor nodeIngestor; + private CaseFormatStore caseFormatStore; private Set<String> namedProps; public MoxyLoader(SchemaVersion version, NodeIngestor nodeIngestor) { super(version, ModelType.MOXY); this.nodeIngestor = nodeIngestor; + this.caseFormatStore = nodeIngestor.getCaseFormatStore(); process(version); } @@ -79,6 +82,16 @@ public class MoxyLoader extends Loader { return IntrospectorFactory.newInstance(ModelType.MOXY, objectFromName(name)); } + private boolean containsUpperCase(String str){ + + for(int i = 0; i < str.length(); i++){ + if(Character.isUpperCase(str.charAt(i))){ + return true; + } + } + + return false; + } /** * {@inheritDoc} */ @@ -92,10 +105,17 @@ public class MoxyLoader extends Loader { final String upperCamel; //Contains any uppercase, then assume it's upper camel - if (name.matches(".*[A-Z].*")) { + if (containsUpperCase(name)) { upperCamel = sanitizedName; } else { - upperCamel = CaseFormat.LOWER_HYPHEN.to(CaseFormat.UPPER_CAMEL, sanitizedName); + upperCamel = caseFormatStore + .fromLowerHyphenToUpperCamel(sanitizedName) + .orElseGet( + () -> { + LOGGER.debug("Unable to find {} in the store for lower hyphen to upper camel", sanitizedName); + return CaseFormat.LOWER_HYPHEN.to(CaseFormat.UPPER_CAMEL, sanitizedName); + } + ); } try { @@ -153,7 +173,7 @@ public class MoxyLoader extends Loader { if (this.allObjs != null) { return allObjs; } else { - ImmutableMap.Builder<String, Introspector> map = new ImmutableMap.Builder<String, Introspector>(); + ImmutableMap.Builder<String, Introspector> map = new ImmutableMap.Builder<>(); Set<String> objs = objectsInVersion(); for (String objName : objs) { try { @@ -178,7 +198,6 @@ public class MoxyLoader extends Loader { LOGGER.warn("Exception while enumerating objects for API version " + getVersion() + " (returning partial results) " + LogFormatTools.getStackTop(e)); } - //result.remove("EdgePropNames"); return result; } @@ -199,20 +218,4 @@ public class MoxyLoader extends Loader { public DynamicJAXBContext getJAXBContext() { return this.jaxbContext; } - - /* - * Im keeping this for now - Just in case - */ - /*private static class Helper { - private static final Map<SchemaVersion, MoxyLoader> INSTANCEMAP = new ConcurrentHashMap<>(); - - private Helper() {} - - private static MoxyLoader getLoaderBySchemaVersion(SchemaVersion v) { - if (!INSTANCEMAP.containsKey(v)) { - INSTANCEMAP.put(v, new MoxyLoader(v, nodeIngestor)); - } - return INSTANCEMAP.get(v); - } - }*/ } diff --git a/aai-core/src/main/java/org/onap/aai/introspection/MoxyStrategy.java b/aai-core/src/main/java/org/onap/aai/introspection/MoxyStrategy.java index f0d487e8..455e7846 100644 --- a/aai-core/src/main/java/org/onap/aai/introspection/MoxyStrategy.java +++ b/aai-core/src/main/java/org/onap/aai/introspection/MoxyStrategy.java @@ -23,35 +23,31 @@ import com.att.eelf.configuration.EELFLogger; import com.att.eelf.configuration.EELFManager; import com.google.common.base.CaseFormat; import com.google.common.base.Joiner; - - import org.eclipse.persistence.descriptors.ClassDescriptor; import org.eclipse.persistence.dynamic.DynamicEntity; import org.eclipse.persistence.dynamic.DynamicType; import org.eclipse.persistence.exceptions.DynamicException; -import org.eclipse.persistence.jaxb.UnmarshallerProperties; import org.eclipse.persistence.jaxb.dynamic.DynamicJAXBContext; import org.eclipse.persistence.mappings.DatabaseMapping; import org.eclipse.persistence.oxm.XMLField; import org.eclipse.persistence.oxm.mappings.XMLCompositeCollectionMapping; import org.eclipse.persistence.oxm.mappings.XMLCompositeDirectCollectionMapping; import org.onap.aai.config.SpringContextAware; +import org.onap.aai.logging.LogFormatTools; +import org.onap.aai.nodes.CaseFormatStore; import org.onap.aai.nodes.NodeIngestor; import org.onap.aai.restcore.MediaType; import org.onap.aai.schema.enums.ObjectMetadata; import org.onap.aai.schema.enums.PropertyMetadata; import org.onap.aai.setup.SchemaVersion; import org.springframework.web.util.UriUtils; + import javax.xml.bind.JAXBException; import javax.xml.bind.Marshaller; -import javax.xml.bind.Unmarshaller; -import javax.xml.transform.stream.StreamSource; -import java.io.StringReader; import java.io.StringWriter; import java.io.UnsupportedEncodingException; import java.util.*; import java.util.Map.Entry; -import java.util.stream.Collectors; public class MoxyStrategy extends Introspector { @@ -60,8 +56,6 @@ public class MoxyStrategy extends Introspector { private DynamicType internalType = null; private DynamicJAXBContext jaxbContext = null; private ClassDescriptor cd = null; - private Marshaller marshaller = null; - private Unmarshaller unmarshaller = null; private SchemaVersion version = null; private Set<String> properties = null; private Set<String> keys = null; @@ -69,14 +63,11 @@ public class MoxyStrategy extends Introspector { private boolean isInitialized = false; - private NodeIngestor nodeIngestor; - protected MoxyStrategy(Object obj) { super(obj); /* must look up the correct jaxbcontext for this object */ className = MoxyStrategy.class.getSimpleName(); internalObject = (DynamicEntity)obj; - nodeIngestor = SpringContextAware.getBean(NodeIngestor.class); version = nodeIngestor.getVersionFromClassName(internalObject.getClass().getName()); super.loader = SpringContextAware.getBean(LoaderFactory.class).createLoaderForVersion(getModelType(), version); jaxbContext = nodeIngestor.getContextForVersion(version); @@ -84,15 +75,6 @@ public class MoxyStrategy extends Introspector { internalType = jaxbContext.getDynamicType(simpleName); cd = internalType.getDescriptor(); - try { - marshaller = jaxbContext.createMarshaller(); - - unmarshaller = jaxbContext.createUnmarshaller(); - - } catch (JAXBException e) { - - } - } private void init() { @@ -100,21 +82,26 @@ public class MoxyStrategy extends Introspector { Set<String> props = new LinkedHashSet<>(); for (String s : internalType.getPropertiesNames()) { - props.add(CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_HYPHEN, s)); + String value = caseFormatStore + .fromLowerCamelToLowerHyphen(s) + .orElseGet( + () -> { + LOGGER.debug("Unable to find {} in the store from lower camel to lower hyphen", s); + return CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_HYPHEN, s); + } + ); + props.add(value); } props = Collections.unmodifiableSet(props); this.properties = props; Set<String> requiredProps = new LinkedHashSet<>(); - requiredProps = new LinkedHashSet<>(); for (DatabaseMapping dm : cd.getMappings()) { if (dm.getField() instanceof XMLField) { XMLField x = (XMLField)dm.getField(); - if (x != null) { - if (x.isRequired()) { - requiredProps.add(this.removeXPathDescriptor(x.getName())); - } + if (x != null && x.isRequired()) { + requiredProps.add(this.removeXPathDescriptor(x.getName())); } } } @@ -145,7 +132,7 @@ public class MoxyStrategy extends Introspector { } @Override - public void set(String name, Object obj) throws IllegalArgumentException { + public void set(String name, Object obj){ internalObject.set(name, obj); } @@ -257,10 +244,26 @@ public class MoxyStrategy extends Introspector { public String getChildName() { String className = internalObject.getClass().getSimpleName(); - String lowerHyphen = CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_HYPHEN, className); + String lowerHyphen = caseFormatStore + .fromUpperCamelToLowerHyphen(className) + .orElseGet( + () -> { + LOGGER.debug("Unable to find {} in the store for upper camel to lower hyphen", className); + return CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_HYPHEN, className); + } + ); if (this.isContainer()) { - lowerHyphen = CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_HYPHEN,this.getGenericTypeClass(this.getProperties().iterator().next()).getSimpleName()); + String upperCamel = this.getGenericTypeClass(this.getProperties().iterator().next()).getSimpleName(); + + lowerHyphen = caseFormatStore + .fromUpperCamelToLowerHyphen(upperCamel) + .orElseGet( + () -> { + LOGGER.debug("Unable to find {} in the store for upper camel to lower hyphen", upperCamel); + return CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_HYPHEN, upperCamel); + } + ); } return lowerHyphen; @@ -269,14 +272,12 @@ public class MoxyStrategy extends Introspector { @Override public String getName() { String className = internalObject.getClass().getSimpleName(); - String lowerHyphen = CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_HYPHEN, className); - /* - if (this.isContainer()) { - lowerHyphen = CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_HYPHEN,this.getGenericTypeClass(this.getProperties().get(0)).getSimpleName()); - }*/ - - - return lowerHyphen; + return caseFormatStore + .fromUpperCamelToLowerHyphen(className) + .orElseGet(() -> { + LOGGER.debug("Unable to find {} in the store for upper camel to lower hyphen", className); + return CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_HYPHEN, className); + }); } @Override @@ -313,7 +314,6 @@ public class MoxyStrategy extends Introspector { @Override public String preProcessKey (String key) { String result = ""; - //String trimmedRestURI = restURI.replaceAll("/[\\w\\-]+?/[\\w\\-]+?$", ""); String[] split = key.split("/"); int i = 0; for (i = split.length-1; i >= 0; i--) { @@ -334,6 +334,7 @@ public class MoxyStrategy extends Introspector { public String marshal(MarshallerProperties properties) { StringWriter result = new StringWriter(); try { + Marshaller marshaller = jaxbContext.createMarshaller(); if (properties.getMediaType().equals(MediaType.APPLICATION_JSON_TYPE)) { marshaller.setProperty(org.eclipse.persistence.jaxb.MarshallerProperties.MEDIA_TYPE, "application/json"); marshaller.setProperty(org.eclipse.persistence.jaxb.MarshallerProperties.JSON_INCLUDE_ROOT, properties.getIncludeRoot()); @@ -344,31 +345,13 @@ public class MoxyStrategy extends Introspector { marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, properties.getFormatted()); marshaller.marshal(this.internalObject, result); } catch (JAXBException e) { - //e.printStackTrace(); + LOGGER.warn("Encountered an jaxb exception during marshalling ", LogFormatTools.getStackTop(e)); } return result.toString(); } @Override - public Object clone() { - Object result = null; - try { - unmarshaller = jaxbContext.createUnmarshaller(); - - unmarshaller.setProperty(UnmarshallerProperties.MEDIA_TYPE, "application/json"); - unmarshaller.setProperty(UnmarshallerProperties.JSON_INCLUDE_ROOT, false); - unmarshaller.setProperty(UnmarshallerProperties.JSON_WRAPPER_AS_ARRAY_NAME, true); - - result = unmarshaller.unmarshal(new StreamSource(new StringReader(this.marshal(true))), this.internalObject.getClass()).getValue(); - } catch (JAXBException e) { - // TODO Auto-generated catch block - //e.printStackTrace(); - } - result = IntrospectorFactory.newInstance(getModelType(), result); - return result; - } - @Override public ModelType getModelType() { return ModelType.MOXY; } diff --git a/aai-core/src/main/java/org/onap/aai/introspection/sideeffect/SideEffect.java b/aai-core/src/main/java/org/onap/aai/introspection/sideeffect/SideEffect.java index 6bf03c17..891876af 100644 --- a/aai-core/src/main/java/org/onap/aai/introspection/sideeffect/SideEffect.java +++ b/aai-core/src/main/java/org/onap/aai/introspection/sideeffect/SideEffect.java @@ -27,10 +27,7 @@ import org.onap.aai.db.props.AAIProperties; import org.onap.aai.edges.exceptions.AmbiguousRuleChoiceException; import org.onap.aai.edges.exceptions.EdgeRuleNotFoundException; import org.onap.aai.exceptions.AAIException; -import org.onap.aai.introspection.Introspector; -import org.onap.aai.introspection.Loader; -import org.onap.aai.introspection.LoaderFactory; -import org.onap.aai.introspection.ModelType; +import org.onap.aai.introspection.*; import org.onap.aai.introspection.sideeffect.exceptions.AAIMissingRequiredPropertyException; import org.onap.aai.schema.enums.PropertyMetadata; import org.onap.aai.serialization.db.DBSerializer; @@ -63,9 +60,7 @@ public abstract class SideEffect { this.dbEngine = dbEngine; this.serializer = serializer; this.self = self; - LoaderFactory loaderFactory = SpringContextAware.getBean(LoaderFactory.class); - SchemaVersions schemaVersions = SpringContextAware.getBean(SchemaVersions.class); - this.latestLoader = loaderFactory.createLoaderForVersion(ModelType.MOXY, schemaVersions.getDefaultVersion()) ; + this.latestLoader = LoaderUtil.getLatestVersion(); } protected void execute() throws UnsupportedEncodingException, URISyntaxException, AAIException { @@ -91,9 +86,9 @@ public abstract class SideEffect { } return result; } - + protected Map<String, String> findProperties(Introspector obj, String uriString) throws AAIMissingRequiredPropertyException { - + final Map<String, String> result = new HashMap<>(); final Set<String> missing = new LinkedHashSet<>(); Matcher m = template.matcher(uriString); @@ -111,13 +106,13 @@ public abstract class SideEffect { missing.add(propName); } } - + if (!missing.isEmpty() && (properties != missing.size())) { throw new AAIMissingRequiredPropertyException("Cannot complete " + this.getPropertyMetadata().toString() + " uri. Missing properties " + missing); } return result; } - + protected Optional<String> replaceTemplates(Introspector obj, String uriString) throws AAIMissingRequiredPropertyException { String result = uriString; final Map<String, String> propMap = this.findProperties(obj, uriString); @@ -132,7 +127,7 @@ public abstract class SideEffect { result = result.replaceFirst("/[^/]+?(?:/\\*)+", ""); return Optional.of(result); } - + private Optional<String> resolveRelativePath(Optional<String> populatedUri) throws UnsupportedEncodingException { if (!populatedUri.isPresent()) { return Optional.empty(); @@ -140,7 +135,7 @@ public abstract class SideEffect { return Optional.of(populatedUri.get().replaceFirst("\\./", this.serializer.getURIForVertex(self) + "/")); } } - + protected abstract boolean replaceWithWildcard(); protected abstract PropertyMetadata getPropertyMetadata(); protected abstract void processURI(Optional<String> completeUri, Entry<String, String> entry) throws URISyntaxException, UnsupportedEncodingException, AAIException, EdgeRuleNotFoundException, AmbiguousRuleChoiceException; diff --git a/aai-core/src/main/java/org/onap/aai/parsers/query/QueryParser.java b/aai-core/src/main/java/org/onap/aai/parsers/query/QueryParser.java index 9129911a..d7f1832c 100644 --- a/aai-core/src/main/java/org/onap/aai/parsers/query/QueryParser.java +++ b/aai-core/src/main/java/org/onap/aai/parsers/query/QueryParser.java @@ -21,13 +21,12 @@ package org.onap.aai.parsers.query; import org.apache.tinkerpop.gremlin.structure.Vertex; import org.onap.aai.config.SpringContextAware; -import org.onap.aai.db.props.AAIProperties; import org.onap.aai.introspection.Loader; import org.onap.aai.introspection.LoaderFactory; +import org.onap.aai.introspection.LoaderUtil; import org.onap.aai.query.builder.QueryBuilder; import org.onap.aai.setup.SchemaVersion; import org.onap.aai.setup.SchemaVersions; - import java.net.URI; /** @@ -38,17 +37,17 @@ public abstract class QueryParser { protected Loader loader = null; protected Loader latestLoader = null; protected QueryBuilder<Vertex> queryBuilder = null; - + protected QueryBuilder<Vertex> parentQueryBuilder = null; - + protected URI uri = null; - + protected String resultResource = ""; - + protected String parentResourceType = ""; - + protected String containerResource = ""; - + /** * Instantiates a new query parser. * @@ -61,10 +60,11 @@ public abstract class QueryParser { this.queryBuilder = queryBuilder; this.loader = loader; LoaderFactory loaderFactory = SpringContextAware.getBean(LoaderFactory.class); - SchemaVersion latest = SpringContextAware.getBean(SchemaVersions.class).getDefaultVersion(); + SchemaVersion latest = ((SchemaVersions) SpringContextAware.getBean("schemaVersions")).getDefaultVersion(); + this.latestLoader = loaderFactory.createLoaderForVersion(loader.getModelType(), latest); } - + /** * Instantiates a new query parser. * @@ -74,21 +74,19 @@ public abstract class QueryParser { protected QueryParser(Loader loader, QueryBuilder<Vertex> queryBuilder) { this.queryBuilder = queryBuilder; this.loader = loader; - LoaderFactory loaderFactory = SpringContextAware.getBean(LoaderFactory.class); - SchemaVersion latest = SpringContextAware.getBean(SchemaVersions.class).getDefaultVersion(); - this.latestLoader = loaderFactory.createLoaderForVersion(loader.getModelType(), latest); + this.latestLoader = LoaderUtil.getLatestVersion(); } - + /** * Gets the container type. * * @return the container type */ public String getContainerType() { - + return this.containerResource; } - + /** * Gets the parent result type. * @@ -97,7 +95,7 @@ public abstract class QueryParser { public String getParentResultType() { return this.parentResourceType; } - + /** * Gets the result type. * @@ -106,7 +104,7 @@ public abstract class QueryParser { public String getResultType() { return this.resultResource; } - + /** * Gets the query builder. * @@ -115,7 +113,7 @@ public abstract class QueryParser { public QueryBuilder<Vertex> getQueryBuilder() { return this.queryBuilder; } - + /** * Gets the uri. * @@ -124,7 +122,7 @@ public abstract class QueryParser { public URI getUri() { return this.uri; } - + /** * Gets the parent query builder. * @@ -137,7 +135,7 @@ public abstract class QueryParser { return this.queryBuilder; } } - + /** * Checks if is dependent. * diff --git a/aai-core/src/main/java/org/onap/aai/parsers/relationship/RelationshipToURI.java b/aai-core/src/main/java/org/onap/aai/parsers/relationship/RelationshipToURI.java index 5ab38544..8cbed6d6 100644 --- a/aai-core/src/main/java/org/onap/aai/parsers/relationship/RelationshipToURI.java +++ b/aai-core/src/main/java/org/onap/aai/parsers/relationship/RelationshipToURI.java @@ -90,7 +90,7 @@ public class RelationshipToURI { //TODO proper spring wiring, but that requires a lot of refactoring so for now we have this ApplicationContext ctx = SpringContextAware.getApplicationContext(); edgeRules = ctx.getBean(EdgeIngestor.class); - schemaVersions = ctx.getBean(SchemaVersions.class); + schemaVersions = (SchemaVersions) ctx.getBean("schemaVersions"); } /** diff --git a/aai-core/src/main/java/org/onap/aai/parsers/uri/URIToRelationshipObject.java b/aai-core/src/main/java/org/onap/aai/parsers/uri/URIToRelationshipObject.java index cbb6ccdb..08eca16d 100644 --- a/aai-core/src/main/java/org/onap/aai/parsers/uri/URIToRelationshipObject.java +++ b/aai-core/src/main/java/org/onap/aai/parsers/uri/URIToRelationshipObject.java @@ -131,7 +131,7 @@ public class URIToRelationshipObject implements Parsable { URI originalUri = parser.getOriginalURI(); URI relatedLink = new URI(this.baseURL + this.originalVersion + "/" + originalUri); - SchemaVersions schemaVersions = SpringContextAware.getBean(SchemaVersions.class); + SchemaVersions schemaVersions = (SchemaVersions)SpringContextAware.getBean("schemaVersions"); if (this.originalVersion.compareTo(schemaVersions.getRelatedLinkVersion()) >= 0) { //only return the path section of the URI past v10 relatedLink = new URI(relatedLink.getRawPath()); diff --git a/aai-core/src/main/java/org/onap/aai/query/builder/GraphTraversalBuilder.java b/aai-core/src/main/java/org/onap/aai/query/builder/GraphTraversalBuilder.java index 80122296..bf9dd17f 100644 --- a/aai-core/src/main/java/org/onap/aai/query/builder/GraphTraversalBuilder.java +++ b/aai-core/src/main/java/org/onap/aai/query/builder/GraphTraversalBuilder.java @@ -226,16 +226,18 @@ public abstract class GraphTraversalBuilder<E> extends QueryBuilder<E> { @Override public QueryBuilder<Vertex> getVerticesByBooleanProperty(String key, Object value) { - boolean bValue = false; - - if(value instanceof String){ - bValue = Boolean.valueOf(value.toString()); - } else if(value instanceof Boolean){ - bValue = (Boolean) value; + if(value!=null && !"".equals(value)) { + boolean bValue = false; + + if(value instanceof String){//"true" + bValue = Boolean.valueOf(value.toString()); + } else if(value instanceof Boolean){//true + bValue = (Boolean) value; + } + + traversal.has(key, bValue); + stepIndex++; } - - traversal.has(key, bValue); - stepIndex++; return (QueryBuilder<Vertex>) this; } diff --git a/aai-core/src/main/java/org/onap/aai/query/builder/GremlinQueryBuilder.java b/aai-core/src/main/java/org/onap/aai/query/builder/GremlinQueryBuilder.java index 43925f49..1dc2cfe8 100644 --- a/aai-core/src/main/java/org/onap/aai/query/builder/GremlinQueryBuilder.java +++ b/aai-core/src/main/java/org/onap/aai/query/builder/GremlinQueryBuilder.java @@ -115,16 +115,18 @@ public abstract class GremlinQueryBuilder<E> extends QueryBuilder<E> { @Override public QueryBuilder<Vertex> getVerticesByBooleanProperty(String key, Object value) { - boolean bValue = false; - - if(value instanceof String){ - bValue = Boolean.valueOf(value.toString()); - } else if(value instanceof Boolean){ - bValue = (Boolean) value; - } - - list.add(HAS + key + "', " + bValue + ")"); - stepIndex++; + + if(value!=null && !"".equals(value)) { + boolean bValue = false; + if(value instanceof String){ + bValue = Boolean.valueOf(value.toString()); + } else if(value instanceof Boolean){ + bValue = (Boolean) value; + } + + list.add(HAS + key + "', " + bValue + ")"); + stepIndex++; + } return (QueryBuilder<Vertex>) this; } diff --git a/aai-core/src/main/java/org/onap/aai/query/builder/QueryBuilder.java b/aai-core/src/main/java/org/onap/aai/query/builder/QueryBuilder.java index 777204f2..68cfd5fc 100644 --- a/aai-core/src/main/java/org/onap/aai/query/builder/QueryBuilder.java +++ b/aai-core/src/main/java/org/onap/aai/query/builder/QueryBuilder.java @@ -256,6 +256,10 @@ public abstract class QueryBuilder<E> implements Iterator<E> { public abstract QueryBuilder<Vertex> createEdgeTraversal(EdgeType type, Introspector parent, Introspector child) throws AAIException; public abstract QueryBuilder<Vertex> getVerticesByBooleanProperty(String key, Object value); + + public QueryBuilder<Vertex> getVerticesByBooleanProperty(String key, MissingOptionalParameter value) { + return (QueryBuilder<Vertex>) this; + } /** * Creates the private edge traversal. * diff --git a/aai-core/src/main/java/org/onap/aai/restcore/search/GroovyQueryBuilder.java b/aai-core/src/main/java/org/onap/aai/restcore/search/GroovyQueryBuilder.java index 48d4ba8c..f5ec19d5 100644 --- a/aai-core/src/main/java/org/onap/aai/restcore/search/GroovyQueryBuilder.java +++ b/aai-core/src/main/java/org/onap/aai/restcore/search/GroovyQueryBuilder.java @@ -51,7 +51,7 @@ public class GroovyQueryBuilder extends AAIAbstractGroovyShell { @Override public String executeTraversal (TransactionalGraphEngine engine, String traversal, Map<String, Object> params) { QueryBuilder<Vertex> builder = engine.getQueryBuilder(QueryStyle.GREMLIN_TRAVERSAL); - SchemaVersions schemaVersions = SpringContextAware.getBean(SchemaVersions.class); + SchemaVersions schemaVersions = (SchemaVersions) SpringContextAware.getBean("schemaVersions"); Loader loader = SpringContextAware.getBean(LoaderFactory.class).createLoaderForVersion(ModelType.MOXY, schemaVersions.getDefaultVersion()); builder.changeLoader(loader); diff --git a/aai-core/src/main/java/org/onap/aai/serialization/db/DBSerializer.java b/aai-core/src/main/java/org/onap/aai/serialization/db/DBSerializer.java index e0214b44..feb2aace 100644 --- a/aai-core/src/main/java/org/onap/aai/serialization/db/DBSerializer.java +++ b/aai-core/src/main/java/org/onap/aai/serialization/db/DBSerializer.java @@ -23,12 +23,13 @@ package org.onap.aai.serialization.db; import com.att.eelf.configuration.EELFLogger; import com.att.eelf.configuration.EELFManager; import com.google.common.base.CaseFormat; -import com.google.common.collect.Multimap; import org.apache.commons.collections.IteratorUtils; import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal; import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__; -import org.apache.tinkerpop.gremlin.process.traversal.step.util.Tree; -import org.apache.tinkerpop.gremlin.structure.*; +import org.apache.tinkerpop.gremlin.structure.Direction; +import org.apache.tinkerpop.gremlin.structure.Edge; +import org.apache.tinkerpop.gremlin.structure.Vertex; +import org.apache.tinkerpop.gremlin.structure.VertexProperty; import org.janusgraph.core.SchemaViolationException; import org.javatuples.Triplet; import org.onap.aai.concurrent.AaiCallable; @@ -50,6 +51,7 @@ import org.onap.aai.introspection.exceptions.AAIUnknownObjectException; import org.onap.aai.introspection.sideeffect.*; import org.onap.aai.logging.ErrorLogHelper; import org.onap.aai.logging.LogFormatTools; +import org.onap.aai.logging.LoggingContext; import org.onap.aai.logging.StopWatch; import org.onap.aai.parsers.query.QueryParser; import org.onap.aai.parsers.uri.URIParser; @@ -61,7 +63,6 @@ import org.onap.aai.serialization.db.exceptions.MultipleEdgeRuleFoundException; import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; import org.onap.aai.serialization.engines.TransactionalGraphEngine; import org.onap.aai.serialization.engines.query.QueryEngine; -import org.onap.aai.serialization.tinkerpop.TreeBackedVertex; import org.onap.aai.setup.SchemaVersion; import org.onap.aai.setup.SchemaVersions; import org.onap.aai.util.AAIConfig; @@ -80,15 +81,17 @@ import java.util.*; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Future; -import java.util.function.Function; import java.util.regex.Matcher; import java.util.regex.Pattern; -import java.util.stream.Collectors; public class DBSerializer { private static final EELFLogger LOGGER = EELFManager.getInstance().getLogger(DBSerializer.class); + private static final String IMPLICIT_DELETE = "Implicit DELETE"; + + private static final String MISSING_REQUIRED_NODE_PROPERTY = "Vertex missing required aai-node-type property"; + private final TransactionalGraphEngine engine; private final String sourceOfTruth; private final ModelType introspectionType; @@ -116,7 +119,7 @@ public class DBSerializer { this.engine = engine; this.sourceOfTruth = sourceOfTruth; this.introspectionType = introspectionType; - this.schemaVersions = SpringContextAware.getBean(SchemaVersions.class); + this.schemaVersions = (SchemaVersions) SpringContextAware.getBean("schemaVersions"); SchemaVersion LATEST = schemaVersions.getDefaultVersion(); this.latestLoader = SpringContextAware.getBean(LoaderFactory.class).createLoaderForVersion(introspectionType, LATEST); this.version = version; @@ -414,7 +417,57 @@ public class DBSerializer { for (Vertex toBeRemoved : processedVertexes) { dependentVertexes.remove(toBeRemoved); } - this.deleteItemsWithTraversal(dependentVertexes); + + // If the dependent vertices are not empty, then with + // the current behaviour, it should remove the vertices implicitly + // We are updating the code to properly log which call + // is doing this so the SE can work with the clients making the call to + // tell them not to call this API and can hopefully deprecate this + // functionality in the future releases + if(!dependentVertexes.isEmpty()){ + + LoggingContext.responseDescription(IMPLICIT_DELETE); + + // Find all the deletable vertices from the dependent vertices that should be deleted + // So for each of the following dependent vertices, + // we will use the edge properties and do the cascade delete + List<Vertex> impliedDeleteVertices = this.engine.getQueryEngine().findDeletable(dependentVertexes); + int impliedDeleteCount = impliedDeleteVertices.size(); + + LOGGER.warn( + "For the vertex with id {}, doing an implicit delete on update will delete total of {} vertexes", + v.id(), + impliedDeleteCount + ); + + String impliedDeleteLogEnabled = AAIConfig.get(AAIConstants.AAI_IMPLIED_DELETE_LOG_ENABLED, "true"); + + int impliedDeleteLogLimit = AAIConfig.getInt(AAIConstants.AAI_IMPLIED_DELETE_LOG_LIMIT, "-1"); + + if(impliedDeleteLogLimit == -1){ + impliedDeleteLogLimit = Integer.MAX_VALUE; + } + + // If the logging is enabled for implied delete + // then log the payload in the latest format + if("true".equals(impliedDeleteLogEnabled) && + impliedDeleteCount <= impliedDeleteLogLimit){ + for(Vertex vertex : impliedDeleteVertices){ + Introspector introspector = null; + try { + introspector = getLatestVersionView(vertex); + if(LOGGER.isInfoEnabled()){ + LOGGER.info("Implied delete object in json format {}", introspector.marshal(false)); + } + } catch(Exception ex){ + LOGGER.warn("Encountered an exception during retrieval of vertex properties with vertex-id {} -> {}", v.id(), LogFormatTools.getStackTop(ex)); + } + } + } + + // After all the appropriate logging, calling the delete to delete the affected vertices + this.delete(impliedDeleteVertices); + } this.executePostSideEffects(obj, v); return processedVertexes; @@ -907,9 +960,7 @@ public class DBSerializer { String cleanUp = "false"; boolean nodeOnly = false; StopWatch.conditionalStart(); - Tree<Element> tree = this.engine.getQueryEngine().findSubGraph(v, depth, nodeOnly); - TreeBackedVertex treeVertex = new TreeBackedVertex(v, tree); - this.dbToObject(obj, treeVertex, seen, depth, nodeOnly, cleanUp); + this.dbToObject(obj, v, seen, depth, nodeOnly, cleanUp); dbTimeMsecs += StopWatch.stopIfStarted(); return obj; } @@ -1033,7 +1084,16 @@ public class DBSerializer { } List<Object> relationshipObjList = obj.getValue("relationship"); - String aNodeType = v.property("aai-node-type").value().toString(); + VertexProperty nodeTypeProperty = v.property(AAIProperties.NODE_TYPE); + + if(!nodeTypeProperty.isPresent()){ + LoggingContext.responseDescription(MISSING_REQUIRED_NODE_PROPERTY); + LOGGER.warn("Not processing the vertex {} because its missing required property aai-node-type", v.id()); + LoggingContext.remove(LoggingContext.LoggingField.RESPONSE_DESCRIPTION.toString()); + return null; + } + + String aNodeType = nodeTypeProperty.value().toString(); TypeAlphabetizer alphabetizer = new TypeAlphabetizer(); @@ -1053,19 +1113,21 @@ public class DBSerializer { // from using the edge rules json and get the edge rule out of it EdgeRuleQuery.Builder queryBuilder = new EdgeRuleQuery.Builder(aNodeType); for (Vertex cousin : cousins) { - VertexProperty vertexProperty = cousin.property("aai-node-type"); + VertexProperty vertexProperty = cousin.property(AAIProperties.NODE_TYPE); String bNodeType = null; if(vertexProperty.isPresent()){ - bNodeType = cousin.property("aai-node-type").value().toString(); + bNodeType = cousin.property(AAIProperties.NODE_TYPE).value().toString(); } else { // If the vertex is missing the aai-node-type // Then its either a bad vertex or its in the process // of getting deleted so we should ignore these vertexes + LoggingContext.responseDescription(MISSING_REQUIRED_NODE_PROPERTY); if(LOGGER.isDebugEnabled()){ LOGGER.debug("For the vertex {}, unable to retrieve the aai-node-type", v.id().toString()); } else { LOGGER.info("Unable to retrieve the aai-node-type for vertex, for more info enable debug log"); } + LoggingContext.remove(LoggingContext.LoggingField.RESPONSE_DESCRIPTION.toString()); continue; } if (obj.getVersion().compareTo(schemaVersions.getEdgeLabelVersion()) >= 0) { @@ -1594,7 +1656,6 @@ public class DBSerializer { public void deleteItemsWithTraversal(List<Vertex> vertexes) throws IllegalStateException { for (Vertex v : vertexes) { - LOGGER.debug("About to delete the vertex with id: " + v.id()); deleteWithTraversal(v); } @@ -1610,10 +1671,39 @@ public class DBSerializer { List<Vertex> results = this.engine.getQueryEngine().findDeletable(startVertex); for (Vertex v : results) { - LOGGER.warn("Removing vertex " + v.id().toString()); + LOGGER.debug("Removing vertex {} with label {}", v.id(), v.label()); + v.remove(); + } + dbTimeMsecs += StopWatch.stopIfStarted(); + } + + /** + * Removes the list of vertexes from the graph + * <p> + * Current the vertex label will just be vertex but + * in the future the aai-node-type property will be replaced + * by using the vertex label as when retrieving an vertex + * and retrieving an single property on an vertex will pre-fetch + * all the properties of that vertex and this is due to the following property + * <p> + * <code> + * query.fast-property=true + * </code> + * <p> + * JanusGraph doesn't provide the capability to override that + * at a transaction level and there is a plan to move to vertex label + * so it is best to utilize this for now and when the change is applied + * + * @param vertices - list of vertices to delete from the graph + */ + void delete(List<Vertex> vertices){ + StopWatch.conditionalStart(); + for (Vertex v : vertices) { + LOGGER.debug("Removing vertex {} with label {}", v.id(), v.label()); v.remove(); } + dbTimeMsecs += StopWatch.stopIfStarted(); } diff --git a/aai-core/src/main/java/org/onap/aai/serialization/engines/query/GraphTraversalQueryEngine.java b/aai-core/src/main/java/org/onap/aai/serialization/engines/query/GraphTraversalQueryEngine.java index d072db55..94557b08 100644 --- a/aai-core/src/main/java/org/onap/aai/serialization/engines/query/GraphTraversalQueryEngine.java +++ b/aai-core/src/main/java/org/onap/aai/serialization/engines/query/GraphTraversalQueryEngine.java @@ -58,7 +58,7 @@ public class GraphTraversalQueryEngine extends QueryEngine { /** * Instantiates a new graph traversal query engine. * - * @param graphEngine the graph engine + * @param g graph traversal source to traverse the graph */ public GraphTraversalQueryEngine(GraphTraversalSource g) { super(g); @@ -146,18 +146,47 @@ public class GraphTraversalQueryEngine extends QueryEngine { */ @Override public List<Vertex> findDeletable(Vertex start) { - @SuppressWarnings("unchecked") - GraphTraversal<Vertex, Vertex> pipe = this.g - .V(start).emit(v -> true).repeat( - __.union( - __.outE().has(DELETE_OTHER_V.toString(), OUT.toString()).inV(), - __.inE().has(DELETE_OTHER_V.toString(), IN.toString()).outV() - ) - ).dedup(); + try { + StopWatch.conditionalStart(); + @SuppressWarnings("unchecked") + GraphTraversal<Vertex, Vertex> pipe = this.g + .V(start).emit(v -> true).repeat( + __.union( + __.outE().has(DELETE_OTHER_V.toString(), OUT.toString()).inV(), + __.inE().has(DELETE_OTHER_V.toString(), IN.toString()).outV() + ) + ).dedup(); - return pipe.toList(); + return pipe.toList(); + } finally { + dbTimeMsecs += StopWatch.stopIfStarted(); + } } + /** + * {@inheritDoc} + */ + @Override + public List<Vertex> findDeletable(List<Vertex> startVertexes) { + try { + StopWatch.conditionalStart(); + Vertex[] vertices = new Vertex[startVertexes.size()]; + vertices = startVertexes.toArray(vertices); + GraphTraversal<Vertex, Vertex> pipe = this.g + .V(vertices).emit(v -> true).repeat( + __.union( + __.outE().has(DELETE_OTHER_V.toString(), OUT.toString()).inV(), + __.inE().has(DELETE_OTHER_V.toString(), IN.toString()).outV() + ) + ).dedup(); + + return pipe.toList(); + } + finally { + dbTimeMsecs += StopWatch.stopIfStarted(); + } + } + /** * {@inheritDoc} */ 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 110f8628..1e2da4b8 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 @@ -37,7 +37,7 @@ public abstract class QueryEngine { /** * Instantiates a new query engine. * - * @param graphEngine the graph engine + * @param g graph traversal source to traverse the graph */ public QueryEngine (GraphTraversalSource g) { this.g = g; @@ -100,6 +100,15 @@ public abstract class QueryEngine { */ public abstract List<Vertex> findDeletable(Vertex start); + /** + * Find all vertices that should be deleted in a cascade from a delete of start vertexes + * + * @param startVertexes Specifies the list of start vertexes + * + * @return the list of vertices to be deleted when start list of vertexes is deleted + */ + public abstract List<Vertex> findDeletable(List<Vertex> startVertexes); + /** * Finds the subgraph under start, including cousins as well as start's children/grandchildren/etc. * More specifically, this includes start, all its descendants, start's cousins, and start's diff --git a/aai-core/src/main/java/org/onap/aai/util/AAIConfig.java b/aai-core/src/main/java/org/onap/aai/util/AAIConfig.java index 5b48127c..86cb635e 100644 --- a/aai-core/src/main/java/org/onap/aai/util/AAIConfig.java +++ b/aai-core/src/main/java/org/onap/aai/util/AAIConfig.java @@ -24,10 +24,7 @@ import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.net.InetAddress; -import java.util.ArrayList; -import java.util.HashMap; import java.util.Properties; -import java.util.Timer; import org.onap.aai.logging.LoggingContext; import org.onap.aai.logging.LoggingContext.StatusCode; @@ -47,7 +44,7 @@ public class AAIConfig { private static final String GLOBAL_PROP_FILE_NAME = AAIConstants.AAI_CONFIG_FILENAME; private static Properties serverProps; private static boolean propsInitialized = false; - + /** * Instantiates a new AAI config. */ @@ -71,11 +68,11 @@ public class AAIConfig { LoggingContext.statusCode(StatusCode.COMPLETE); LOGGER.info("Initializing AAIConfig"); - + AAIConfig.getConfigFile(); AAIConfig.reloadConfig(); - - if (AAIConstants.AAI_NODENAME == null || AAIConstants.AAI_NODENAME == "") { + + if (AAIConstants.AAI_NODENAME == null || AAIConstants.AAI_NODENAME == "") { ErrorLogHelper.logError("AAI_4005", " AAI_NODENAME is not defined"); } else { LOGGER.info("A&AI Server Node Name = " + AAIConstants.AAI_NODENAME); @@ -99,9 +96,9 @@ public class AAIConfig { String propFileName = GLOBAL_PROP_FILE_NAME; Properties newServerProps = null; - + LOGGER.debug("Reloading config from " + propFileName); - + try(InputStream is = new FileInputStream(propFileName)) { newServerProps = new Properties(); newServerProps.load(is); @@ -113,7 +110,7 @@ public class AAIConfig { ErrorLogHelper.logError("AAI_4002", " " + propFileName + ". IOException: "+e.getMessage()); } } - + /** * Gets the. * @@ -142,7 +139,7 @@ public class AAIConfig { */ public static String get(String key) throws AAIException { String response = null; - + if (key.equals(AAIConstants.AAI_NODENAME)) { // Get this from InetAddress rather than the properties file String nodeName = getNodeName(); @@ -151,16 +148,16 @@ public class AAIConfig { } // else get from property file } - + if (!propsInitialized || (serverProps == null)) { reloadConfig(); } - + if ((key.endsWith("password") || key.endsWith("passwd") || key.endsWith("apisecret")) && serverProps.containsKey(key+".x")) { String valx = serverProps.getProperty(key+".x"); return Password.deobfuscate(valx); } - + if (!serverProps.containsKey(key)) { throw new AAIException("AAI_4005", "Property key "+key+" cannot be found"); } else { @@ -180,9 +177,19 @@ public class AAIConfig { * @throws AAIException the AAI exception */ public static int getInt(String key) throws AAIException{ - return Integer.valueOf(AAIConfig.get(key)); + return Integer.parseInt(AAIConfig.get(key)); } + /** + * Gets the int. + * + * @param key the key + * @return the int + */ + public static int getInt(String key, String value) { + return Integer.parseInt(AAIConfig.get(key, value)); + } + /** * Gets the server props. * @@ -191,7 +198,7 @@ public class AAIConfig { public static Properties getServerProps() { return serverProps; } - + /** * Gets the node name. * @@ -211,8 +218,8 @@ public class AAIConfig { } return null; } - - + + /** * Check if a null or an Empty string is passed in. * diff --git a/aai-core/src/main/java/org/onap/aai/util/AAIConstants.java b/aai-core/src/main/java/org/onap/aai/util/AAIConstants.java index fd236b7f..59e676f8 100644 --- a/aai-core/src/main/java/org/onap/aai/util/AAIConstants.java +++ b/aai-core/src/main/java/org/onap/aai/util/AAIConstants.java @@ -72,6 +72,15 @@ public final class AAIConstants { public static final String AAI_NODENAME = "aai.config.nodename"; + /* + * Logs the objects being deleted when an client deletes objects via implied delete during PUT operation + */ + public static final String AAI_IMPLIED_DELETE_LOG_ENABLED = "aai.implied.delete.log.enabled"; + /* + * Specifies how many objects maximum to log + */ + public static final String AAI_IMPLIED_DELETE_LOG_LIMIT = "aai.implied.delete.log.limit"; + public static final String AAI_BULKCONSUMER_LIMIT = "aai.bulkconsumer.payloadlimit"; public static final String AAI_BULKCONSUMER_OVERRIDE_LIMIT = "aai.bulkconsumer.payloadoverride"; diff --git a/aai-core/src/main/java/org/onap/aai/util/GenerateXsd.java b/aai-core/src/main/java/org/onap/aai/util/GenerateXsd.java index 97803653..f44663e0 100644 --- a/aai-core/src/main/java/org/onap/aai/util/GenerateXsd.java +++ b/aai-core/src/main/java/org/onap/aai/util/GenerateXsd.java @@ -104,7 +104,7 @@ public class GenerateXsd { return true; } - SchemaVersions schemaVersions = SpringContextAware.getBean(SchemaVersions.class); + SchemaVersions schemaVersions = (SchemaVersions) SpringContextAware.getBean("schemaVersions"); for (SchemaVersion v : schemaVersions.getVersions()) { if (v.equals(versionToGen)) { return true; diff --git a/aai-core/src/main/java/org/onap/aai/util/genxsd/ConfigTranslatorForDocs.java b/aai-core/src/main/java/org/onap/aai/util/genxsd/ConfigTranslatorForDocs.java index 0ee9cc83..3a42e437 100644 --- a/aai-core/src/main/java/org/onap/aai/util/genxsd/ConfigTranslatorForDocs.java +++ b/aai-core/src/main/java/org/onap/aai/util/genxsd/ConfigTranslatorForDocs.java @@ -23,22 +23,18 @@ package org.onap.aai.util.genxsd; import java.io.File; import java.io.FilenameFilter; import java.util.ArrayList; -import java.util.Arrays; import java.util.Collections; -import java.util.EnumMap; import java.util.List; import java.util.Map; import java.util.TreeMap; - import org.onap.aai.setup.ConfigTranslator; import org.onap.aai.setup.SchemaLocationsBean; import org.onap.aai.setup.SchemaVersion; -import org.onap.aai.setup.SchemaVersions; -import org.springframework.context.annotation.Configuration; +import org.onap.aai.setup.SchemaConfigVersions; public class ConfigTranslatorForDocs extends ConfigTranslator { - public ConfigTranslatorForDocs(SchemaLocationsBean bean, SchemaVersions schemaVersions) { + public ConfigTranslatorForDocs(SchemaLocationsBean bean, SchemaConfigVersions schemaVersions) { super(bean, schemaVersions); } diff --git a/aai-core/src/test/java/org/onap/aai/AAISetup.java b/aai-core/src/test/java/org/onap/aai/AAISetup.java index fb914f01..b464ef46 100644 --- a/aai-core/src/test/java/org/onap/aai/AAISetup.java +++ b/aai-core/src/test/java/org/onap/aai/AAISetup.java @@ -25,6 +25,7 @@ import org.junit.BeforeClass; import org.junit.ClassRule; import org.junit.Rule; +import org.onap.aai.config.ConfigConfiguration; import org.onap.aai.config.SpringContextAware; import org.onap.aai.edges.EdgeIngestor; import org.onap.aai.config.IntrospectionConfig; @@ -34,11 +35,10 @@ import org.onap.aai.nodes.NodeIngestor; import org.onap.aai.config.RestBeanConfig; import org.onap.aai.rest.db.HttpEntry; import org.onap.aai.setup.AAIConfigTranslator; -import org.onap.aai.serialization.db.EdgeSerializer; -import org.onap.aai.serialization.queryformats.QueryFormatTestHelper; -import org.onap.aai.setup.SchemaLocationsBean; import org.onap.aai.setup.SchemaVersion; import org.onap.aai.setup.SchemaVersions; +import org.onap.aai.serialization.db.EdgeSerializer; +import org.onap.aai.serialization.queryformats.QueryFormatTestHelper; import org.onap.aai.util.AAIConstants; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; @@ -49,8 +49,7 @@ import org.springframework.test.context.junit4.rules.SpringMethodRule; @ContextConfiguration(classes = { - SchemaLocationsBean.class, - SchemaVersions.class, + ConfigConfiguration.class, AAIConfigTranslator.class, EdgeIngestor.class, EdgeSerializer.class, diff --git a/aai-core/src/test/java/org/onap/aai/AbstractConfigTranslator.java b/aai-core/src/test/java/org/onap/aai/AbstractConfigTranslator.java index dc32e932..fb91e316 100644 --- a/aai-core/src/test/java/org/onap/aai/AbstractConfigTranslator.java +++ b/aai-core/src/test/java/org/onap/aai/AbstractConfigTranslator.java @@ -34,7 +34,7 @@ import org.onap.aai.util.AAIConstants; */ public abstract class AbstractConfigTranslator extends ConfigTranslator { - public AbstractConfigTranslator(SchemaLocationsBean bean, SchemaVersions schemaVersions) { + public AbstractConfigTranslator(SchemaLocationsBean bean, SchemaConfigVersions schemaVersions) { super(bean, schemaVersions); } diff --git a/aai-core/src/test/java/org/onap/aai/DataLinkSetup.java b/aai-core/src/test/java/org/onap/aai/DataLinkSetup.java index 0138f329..125bb111 100644 --- a/aai-core/src/test/java/org/onap/aai/DataLinkSetup.java +++ b/aai-core/src/test/java/org/onap/aai/DataLinkSetup.java @@ -22,6 +22,7 @@ package org.onap.aai; import org.junit.BeforeClass; import org.junit.ClassRule; import org.junit.Rule; +import org.onap.aai.config.ConfigConfiguration; import org.onap.aai.config.IntrospectionConfig; import org.onap.aai.config.RestBeanConfig; import org.onap.aai.config.SpringContextAware; @@ -50,8 +51,7 @@ import java.util.Map; @ContextConfiguration(classes = { - SchemaLocationsBean.class, - SchemaVersions.class, + ConfigConfiguration.class, TestUtilConfigTranslatorforDataLink.class, EdgeIngestor.class, EdgeSerializer.class, diff --git a/aai-core/src/test/java/org/onap/aai/HttpTestUtil.java b/aai-core/src/test/java/org/onap/aai/HttpTestUtil.java index 92cb59c5..6add23e0 100644 --- a/aai-core/src/test/java/org/onap/aai/HttpTestUtil.java +++ b/aai-core/src/test/java/org/onap/aai/HttpTestUtil.java @@ -138,7 +138,7 @@ public class HttpTestUtil extends RESTAPI { } } - SchemaVersions schemaVersions = SpringContextAware.getBean(SchemaVersions.class); + SchemaVersions schemaVersions = (SchemaVersions) SpringContextAware.getBean("schemaVersions"); if(version == null){ version = schemaVersions.getDefaultVersion(); } @@ -235,7 +235,7 @@ public class HttpTestUtil extends RESTAPI { } } - SchemaVersions schemaVersions = SpringContextAware.getBean(SchemaVersions.class); + SchemaVersions schemaVersions = (SchemaVersions) SpringContextAware.getBean("schemaVersions"); if(version == null){ version = schemaVersions.getDefaultVersion(); } @@ -331,7 +331,7 @@ public class HttpTestUtil extends RESTAPI { } } - SchemaVersions schemaVersions = SpringContextAware.getBean(SchemaVersions.class); + SchemaVersions schemaVersions = (SchemaVersions) SpringContextAware.getBean("schemaVersions"); if(version == null){ version = schemaVersions.getDefaultVersion(); } 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 5915ce68..41a5f20b 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 @@ -19,20 +19,34 @@ */ package org.onap.aai.dbmap; -import org.janusgraph.core.JanusGraphFactory; import org.janusgraph.core.JanusGraph; +import org.janusgraph.core.JanusGraphFactory; +import org.janusgraph.core.schema.JanusGraphIndex; import org.janusgraph.core.schema.JanusGraphManagement; -import org.junit.*; +import org.junit.Before; +import org.junit.Ignore; +import org.junit.Test; import org.onap.aai.AAISetup; +import org.onap.aai.config.SpringContextAware; +import org.onap.aai.introspection.Introspector; +import org.onap.aai.introspection.Loader; +import org.onap.aai.introspection.LoaderFactory; +import org.onap.aai.introspection.ModelType; +import org.onap.aai.schema.enums.PropertyMetadata; +import org.onap.aai.setup.SchemaVersions; import org.onap.aai.util.AAIConstants; +import java.io.FileNotFoundException; +import java.util.HashSet; +import java.util.Map; +import java.util.Optional; +import java.util.Set; import static org.hamcrest.CoreMatchers.containsString; +import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.Matchers.matchesPattern; import static org.junit.Assert.*; -import java.io.FileNotFoundException; - public class AAIGraphTest extends AAISetup{ @Before public void setup() { @@ -70,7 +84,7 @@ public class AAIGraphTest extends AAISetup{ graphMgt.rollback(); graph.close(); } - + @Test (expected=FileNotFoundException.class) public void JanusGraphOpenNameWithInvalidFilePathTest() throws Exception{ JanusGraph graph = JanusGraphFactory.open(new AAIGraphConfig.Builder("invalid").forService(SERVICE_NAME).withGraphType("graphType").buildConfiguration()); @@ -81,4 +95,38 @@ public class AAIGraphTest extends AAISetup{ graph.close(); } + @Ignore("Need to create schema specific to the test") + @Test + public void checkIndexOfAliasedIndexedProps() throws Exception { + Set<String> aliasedIndexedProps = getAliasedIndexedProps(); + JanusGraphManagement graphMgt = AAIGraph.getInstance().getGraph().openManagement(); + for (String aliasedIndexedProp : aliasedIndexedProps) { + JanusGraphIndex index = graphMgt.getGraphIndex(aliasedIndexedProp); + assertNotNull(aliasedIndexedProp + " index exists", index); + assertEquals(aliasedIndexedProp + " index has 1 property keys", index.getFieldKeys().length, 1); + assertThat(aliasedIndexedProp + " index indexes " + aliasedIndexedProp + " property key", index.getFieldKeys()[0].name(), is(aliasedIndexedProp)); + } + graphMgt.rollback(); + } + + private Set<String> getAliasedIndexedProps() { + Set<String> aliasedIndexedProps = new HashSet<>(); + LoaderFactory loaderFactory = SpringContextAware.getBean(LoaderFactory.class); + SchemaVersions schemaVersions = SpringContextAware.getBean(SchemaVersions.class); + Loader loader = loaderFactory.createLoaderForVersion(ModelType.MOXY, schemaVersions.getDefaultVersion()); + Map<String, Introspector> objs = loader.getAllObjects(); + for (Introspector obj : objs.values()) { + for (String propName : obj.getProperties()) { + Optional<String> alias = obj.getPropertyMetadata(propName, PropertyMetadata.DB_ALIAS); + if (alias.isPresent()) { + String dbPropName = alias.get(); + if (obj.getIndexedProperties().contains(propName)) { + aliasedIndexedProps.add(dbPropName); + } + } + } + } + return aliasedIndexedProps; + } + } diff --git a/aai-core/src/test/java/org/onap/aai/query/builder/QueryBuilderTestAbstraction.java b/aai-core/src/test/java/org/onap/aai/query/builder/QueryBuilderTestAbstraction.java index a9f5a60f..b26c0b05 100644 --- a/aai-core/src/test/java/org/onap/aai/query/builder/QueryBuilderTestAbstraction.java +++ b/aai-core/src/test/java/org/onap/aai/query/builder/QueryBuilderTestAbstraction.java @@ -29,6 +29,7 @@ import org.apache.tinkerpop.gremlin.structure.Vertex; import org.janusgraph.core.JanusGraphFactory; import org.junit.*; import org.junit.runner.RunWith; +import org.onap.aai.config.ConfigConfiguration; import org.onap.aai.config.IntrospectionConfig; import org.onap.aai.config.SpringContextAware; import org.onap.aai.exceptions.AAIException; @@ -63,8 +64,7 @@ import static org.junit.Assert.*; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = { - SchemaLocationsBean.class, - SchemaVersions.class, + ConfigConfiguration.class, QueryTestsConfigTranslator.class, NodeIngestor.class, EdgeIngestor.class, @@ -88,10 +88,11 @@ public abstract class QueryBuilderTestAbstraction { protected EdgeSerializer testEdgeSer; @Autowired - protected LoaderFactory loaderFactory; + protected SchemaVersions schemaVersions; @Autowired - protected SchemaVersions schemaVersions; + protected LoaderFactory loaderFactory; + @BeforeClass public static void setup() throws Exception { diff --git a/aai-core/src/test/java/org/onap/aai/query/builder/QueryTestsConfigTranslator.java b/aai-core/src/test/java/org/onap/aai/query/builder/QueryTestsConfigTranslator.java index b1dc9df6..84c4bdd1 100644 --- a/aai-core/src/test/java/org/onap/aai/query/builder/QueryTestsConfigTranslator.java +++ b/aai-core/src/test/java/org/onap/aai/query/builder/QueryTestsConfigTranslator.java @@ -22,6 +22,7 @@ package org.onap.aai.query.builder; import java.util.*; import org.onap.aai.AbstractConfigTranslator; +import org.onap.aai.setup.SchemaConfigVersions; import org.onap.aai.setup.SchemaLocationsBean; import org.onap.aai.setup.SchemaVersion; import org.onap.aai.setup.SchemaVersions; @@ -33,7 +34,7 @@ import org.onap.aai.setup.SchemaVersions; */ public class QueryTestsConfigTranslator extends AbstractConfigTranslator { - public QueryTestsConfigTranslator(SchemaLocationsBean bean, SchemaVersions schemaVersions) { + public QueryTestsConfigTranslator(SchemaLocationsBean bean, SchemaConfigVersions schemaVersions) { super(bean, schemaVersions); } diff --git a/aai-core/src/test/java/org/onap/aai/serialization/db/AAICoreFakeEdgesConfigTranslator.java b/aai-core/src/test/java/org/onap/aai/serialization/db/AAICoreFakeEdgesConfigTranslator.java index ef7f25e5..9c37ad99 100644 --- a/aai-core/src/test/java/org/onap/aai/serialization/db/AAICoreFakeEdgesConfigTranslator.java +++ b/aai-core/src/test/java/org/onap/aai/serialization/db/AAICoreFakeEdgesConfigTranslator.java @@ -22,6 +22,7 @@ package org.onap.aai.serialization.db; import java.util.*; import org.onap.aai.AbstractConfigTranslator; +import org.onap.aai.setup.SchemaConfigVersions; import org.onap.aai.setup.SchemaLocationsBean; import org.onap.aai.setup.SchemaVersion; import org.onap.aai.setup.SchemaVersions; @@ -32,7 +33,7 @@ import org.onap.aai.setup.SchemaVersions; */ public class AAICoreFakeEdgesConfigTranslator extends AbstractConfigTranslator { - public AAICoreFakeEdgesConfigTranslator(SchemaLocationsBean bean, SchemaVersions schemaVersions) { + public AAICoreFakeEdgesConfigTranslator(SchemaLocationsBean bean, SchemaConfigVersions schemaVersions) { super(bean, schemaVersions); } diff --git a/aai-core/src/test/java/org/onap/aai/serialization/db/AAICorePrivateEdgeTestConfigTranslator.java b/aai-core/src/test/java/org/onap/aai/serialization/db/AAICorePrivateEdgeTestConfigTranslator.java index 18ba9d99..149d2849 100644 --- a/aai-core/src/test/java/org/onap/aai/serialization/db/AAICorePrivateEdgeTestConfigTranslator.java +++ b/aai-core/src/test/java/org/onap/aai/serialization/db/AAICorePrivateEdgeTestConfigTranslator.java @@ -20,6 +20,7 @@ package org.onap.aai.serialization.db; import org.onap.aai.AbstractConfigTranslator; +import org.onap.aai.setup.SchemaConfigVersions; import org.onap.aai.setup.SchemaLocationsBean; import org.onap.aai.setup.SchemaVersion; import org.onap.aai.setup.SchemaVersions; @@ -32,7 +33,7 @@ import java.util.*; */ public class AAICorePrivateEdgeTestConfigTranslator extends AbstractConfigTranslator { - public AAICorePrivateEdgeTestConfigTranslator(SchemaLocationsBean bean, SchemaVersions schemaVersions) { + public AAICorePrivateEdgeTestConfigTranslator(SchemaLocationsBean bean, SchemaConfigVersions schemaVersions) { super(bean, schemaVersions); } diff --git a/aai-core/src/test/java/org/onap/aai/serialization/db/DbSerializer_needsFakeRulesTest.java b/aai-core/src/test/java/org/onap/aai/serialization/db/DbSerializer_needsFakeRulesTest.java index a74ceee8..1ddef28c 100644 --- a/aai-core/src/test/java/org/onap/aai/serialization/db/DbSerializer_needsFakeRulesTest.java +++ b/aai-core/src/test/java/org/onap/aai/serialization/db/DbSerializer_needsFakeRulesTest.java @@ -19,6 +19,7 @@ */ package org.onap.aai.serialization.db; +import org.onap.aai.config.ConfigConfiguration; import org.onap.aai.setup.SchemaVersion; import org.onap.aai.setup.SchemaVersions; import org.onap.aai.util.AAIConstants; @@ -59,8 +60,7 @@ import static org.mockito.Mockito.when; //@RunWith(value = Parameterized.class) TODO replace this functionality @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = { - SchemaLocationsBean.class, - SchemaVersions.class, + ConfigConfiguration.class, AAICoreFakeEdgesConfigTranslator.class, NodeIngestor.class, EdgeIngestor.class, diff --git a/aai-core/src/test/java/org/onap/aai/serialization/engines/query/GraphTraversalQueryEngine_needsFakeEdgeRulesTest.java b/aai-core/src/test/java/org/onap/aai/serialization/engines/query/GraphTraversalQueryEngine_needsFakeEdgeRulesTest.java index c4ae8889..34ba2ab8 100644 --- a/aai-core/src/test/java/org/onap/aai/serialization/engines/query/GraphTraversalQueryEngine_needsFakeEdgeRulesTest.java +++ b/aai-core/src/test/java/org/onap/aai/serialization/engines/query/GraphTraversalQueryEngine_needsFakeEdgeRulesTest.java @@ -32,6 +32,7 @@ import org.apache.tinkerpop.gremlin.structure.Vertex; import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerGraph; import org.junit.Test; import org.junit.runner.RunWith; +import org.onap.aai.config.ConfigConfiguration; import org.onap.aai.edges.EdgeIngestor; import org.onap.aai.exceptions.AAIException; import org.onap.aai.serialization.db.AAICoreFakeEdgesConfigTranslator; @@ -45,8 +46,7 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = { - SchemaLocationsBean.class, - SchemaVersions.class, + ConfigConfiguration.class, AAICoreFakeEdgesConfigTranslator.class, EdgeIngestor.class, EdgeSerializer.class diff --git a/aai-core/src/test/java/org/onap/aai/serialization/queryformats/GraphSONTest.java b/aai-core/src/test/java/org/onap/aai/serialization/queryformats/GraphSONTest.java index 728416be..154761ae 100644 --- a/aai-core/src/test/java/org/onap/aai/serialization/queryformats/GraphSONTest.java +++ b/aai-core/src/test/java/org/onap/aai/serialization/queryformats/GraphSONTest.java @@ -31,6 +31,7 @@ import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerGraph; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; +import org.onap.aai.config.ConfigConfiguration; import org.onap.aai.config.SpringContextAware; import org.onap.aai.edges.EdgeIngestor; import org.onap.aai.edges.exceptions.AmbiguousRuleChoiceException; @@ -55,8 +56,7 @@ import static org.junit.Assert.assertNotNull; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = { - SchemaLocationsBean.class, - SchemaVersions.class, + ConfigConfiguration.class, AAICorePrivateEdgeTestConfigTranslator.class, EdgeIngestor.class, EdgeSerializer.class, diff --git a/aai-core/src/test/java/org/onap/aai/testutils/TestUtilConfigTranslatorforBusiness.java b/aai-core/src/test/java/org/onap/aai/testutils/TestUtilConfigTranslatorforBusiness.java index 02c187ac..6dab1743 100644 --- a/aai-core/src/test/java/org/onap/aai/testutils/TestUtilConfigTranslatorforBusiness.java +++ b/aai-core/src/test/java/org/onap/aai/testutils/TestUtilConfigTranslatorforBusiness.java @@ -29,11 +29,11 @@ import java.util.TreeMap; import org.onap.aai.setup.ConfigTranslator; import org.onap.aai.setup.SchemaLocationsBean; import org.onap.aai.setup.SchemaVersion; -import org.onap.aai.setup.SchemaVersions; +import org.onap.aai.setup.SchemaConfigVersions; public class TestUtilConfigTranslatorforBusiness extends ConfigTranslator { - public TestUtilConfigTranslatorforBusiness(SchemaLocationsBean bean, SchemaVersions schemaVersions) { + public TestUtilConfigTranslatorforBusiness(SchemaLocationsBean bean, SchemaConfigVersions schemaVersions) { super(bean, schemaVersions); } diff --git a/aai-core/src/test/java/org/onap/aai/testutils/TestUtilConfigTranslatorforDataLink.java b/aai-core/src/test/java/org/onap/aai/testutils/TestUtilConfigTranslatorforDataLink.java index 36d5fe77..d82c9d80 100644 --- a/aai-core/src/test/java/org/onap/aai/testutils/TestUtilConfigTranslatorforDataLink.java +++ b/aai-core/src/test/java/org/onap/aai/testutils/TestUtilConfigTranslatorforDataLink.java @@ -23,13 +23,13 @@ package org.onap.aai.testutils; import org.onap.aai.setup.ConfigTranslator; import org.onap.aai.setup.SchemaLocationsBean; import org.onap.aai.setup.SchemaVersion; -import org.onap.aai.setup.SchemaVersions; +import org.onap.aai.setup.SchemaConfigVersions; import java.util.*; public class TestUtilConfigTranslatorforDataLink extends ConfigTranslator { - public TestUtilConfigTranslatorforDataLink(SchemaLocationsBean bean, SchemaVersions schemaVersions) { + public TestUtilConfigTranslatorforDataLink(SchemaLocationsBean bean, SchemaConfigVersions schemaVersions) { super(bean, schemaVersions); } diff --git a/aai-core/src/test/java/org/onap/aai/testutils/TestUtilConfigTranslatorforEdges.java b/aai-core/src/test/java/org/onap/aai/testutils/TestUtilConfigTranslatorforEdges.java index cc4fdd6c..ca6c6740 100644 --- a/aai-core/src/test/java/org/onap/aai/testutils/TestUtilConfigTranslatorforEdges.java +++ b/aai-core/src/test/java/org/onap/aai/testutils/TestUtilConfigTranslatorforEdges.java @@ -29,11 +29,11 @@ import java.util.TreeMap; import org.onap.aai.setup.ConfigTranslator; import org.onap.aai.setup.SchemaLocationsBean; import org.onap.aai.setup.SchemaVersion; -import org.onap.aai.setup.SchemaVersions; +import org.onap.aai.setup.SchemaConfigVersions; public class TestUtilConfigTranslatorforEdges extends ConfigTranslator { - public TestUtilConfigTranslatorforEdges(SchemaLocationsBean bean, SchemaVersions schemaVersions) { + public TestUtilConfigTranslatorforEdges(SchemaLocationsBean bean, SchemaConfigVersions schemaVersions) { super(bean, schemaVersions); } diff --git a/aai-core/src/test/java/org/onap/aai/util/GenerateXsdTest.java b/aai-core/src/test/java/org/onap/aai/util/GenerateXsdTest.java index 1cd226f3..00bbae49 100644 --- a/aai-core/src/test/java/org/onap/aai/util/GenerateXsdTest.java +++ b/aai-core/src/test/java/org/onap/aai/util/GenerateXsdTest.java @@ -29,6 +29,7 @@ import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import org.junit.runner.RunWith; +import org.onap.aai.config.ConfigConfiguration; import org.onap.aai.config.SwaggerGenerationConfiguration; import org.onap.aai.edges.EdgeIngestor; import org.onap.aai.nodes.NodeIngestor; @@ -53,12 +54,11 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = { - SchemaLocationsBean.class, + ConfigConfiguration.class, TestUtilConfigTranslatorforBusiness.class, EdgeIngestor.class, NodeIngestor.class, - SwaggerGenerationConfiguration.class, - SchemaVersions.class + SwaggerGenerationConfiguration.class }) @TestPropertySource(properties = { "schema.uri.base.path = /aai" diff --git a/aai-core/src/test/java/org/onap/aai/util/genxsd/EdgeDescriptionTest.java b/aai-core/src/test/java/org/onap/aai/util/genxsd/EdgeDescriptionTest.java index 88cf4562..f6684f43 100644 --- a/aai-core/src/test/java/org/onap/aai/util/genxsd/EdgeDescriptionTest.java +++ b/aai-core/src/test/java/org/onap/aai/util/genxsd/EdgeDescriptionTest.java @@ -36,6 +36,7 @@ import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import org.junit.runner.RunWith; +import org.onap.aai.config.ConfigConfiguration; import org.onap.aai.edges.EdgeIngestor; import org.onap.aai.edges.EdgeRule; import org.onap.aai.edges.exceptions.EdgeRuleNotFoundException; @@ -52,7 +53,7 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import com.google.common.collect.Multimap; @RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration(classes = {SchemaVersions.class, SchemaLocationsBean.class, TestUtilConfigTranslatorforEdges.class, EdgeIngestor.class}) +@ContextConfiguration(classes = {ConfigConfiguration.class, TestUtilConfigTranslatorforEdges.class, EdgeIngestor.class}) @TestPropertySource(properties = {"schemaIngestPropLoc = src/test/resources/schemaIngest/schemaIngestTest.properties"}) diff --git a/aai-core/src/test/java/org/onap/aai/util/genxsd/HTMLfromOXMTest.java b/aai-core/src/test/java/org/onap/aai/util/genxsd/HTMLfromOXMTest.java index 57835b50..ca63244e 100644 --- a/aai-core/src/test/java/org/onap/aai/util/genxsd/HTMLfromOXMTest.java +++ b/aai-core/src/test/java/org/onap/aai/util/genxsd/HTMLfromOXMTest.java @@ -35,6 +35,7 @@ import org.junit.Before; import org.junit.BeforeClass; import org.junit.Ignore; import org.junit.Test; +import org.onap.aai.config.ConfigConfiguration; import org.onap.aai.config.SwaggerGenerationConfiguration; import org.onap.aai.setup.SchemaVersion; import org.onap.aai.setup.SchemaVersions; @@ -57,8 +58,7 @@ import org.w3c.dom.Element; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = { - SchemaVersions.class, - SchemaLocationsBean.class, + ConfigConfiguration.class, TestUtilConfigTranslatorforBusiness.class, EdgeIngestor.class, NodeIngestor.class, diff --git a/aai-core/src/test/java/org/onap/aai/util/genxsd/NodesYAMLfromOXMTest.java b/aai-core/src/test/java/org/onap/aai/util/genxsd/NodesYAMLfromOXMTest.java index c839619d..b08ddcee 100644 --- a/aai-core/src/test/java/org/onap/aai/util/genxsd/NodesYAMLfromOXMTest.java +++ b/aai-core/src/test/java/org/onap/aai/util/genxsd/NodesYAMLfromOXMTest.java @@ -37,6 +37,7 @@ import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import org.onap.aai.AAISetup; +import org.onap.aai.config.ConfigConfiguration; import org.onap.aai.config.SwaggerGenerationConfiguration; import org.onap.aai.setup.SchemaVersion; import org.onap.aai.setup.SchemaVersions; @@ -56,8 +57,7 @@ import org.w3c.dom.Element; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = { - SchemaVersions.class, - SchemaLocationsBean.class, + ConfigConfiguration.class, TestUtilConfigTranslatorforEdges.class, EdgeIngestor.class, NodeIngestor.class, diff --git a/aai-core/src/test/java/org/onap/aai/util/genxsd/YAMLfromOXMTest.java b/aai-core/src/test/java/org/onap/aai/util/genxsd/YAMLfromOXMTest.java index 813ad837..e9a52a39 100644 --- a/aai-core/src/test/java/org/onap/aai/util/genxsd/YAMLfromOXMTest.java +++ b/aai-core/src/test/java/org/onap/aai/util/genxsd/YAMLfromOXMTest.java @@ -38,6 +38,7 @@ import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import org.onap.aai.AAISetup; +import org.onap.aai.config.ConfigConfiguration; import org.onap.aai.config.SwaggerGenerationConfiguration; import org.onap.aai.setup.SchemaVersion; import org.onap.aai.setup.SchemaVersions; @@ -66,10 +67,8 @@ import com.google.common.collect.Multimap; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = { - SchemaVersions.class, - SchemaLocationsBean.class, + ConfigConfiguration.class, TestUtilConfigTranslatorforBusiness.class, - SchemaVersions.class, EdgeIngestor.class, NodeIngestor.class, SwaggerGenerationConfiguration.class |