aboutsummaryrefslogtreecommitdiffstats
path: root/src/main/java/org/onap/aai/spike/schema/OXMModelLoader.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/org/onap/aai/spike/schema/OXMModelLoader.java')
-rw-r--r--src/main/java/org/onap/aai/spike/schema/OXMModelLoader.java138
1 files changed, 72 insertions, 66 deletions
diff --git a/src/main/java/org/onap/aai/spike/schema/OXMModelLoader.java b/src/main/java/org/onap/aai/spike/schema/OXMModelLoader.java
index 5d35017..7f41d8c 100644
--- a/src/main/java/org/onap/aai/spike/schema/OXMModelLoader.java
+++ b/src/main/java/org/onap/aai/spike/schema/OXMModelLoader.java
@@ -20,6 +20,7 @@
*/
package org.onap.aai.spike.schema;
+import com.google.common.base.CaseFormat;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
@@ -28,58 +29,64 @@ import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
-
-import javax.ws.rs.core.Response.Status;
-
import org.eclipse.persistence.dynamic.DynamicType;
import org.eclipse.persistence.internal.oxm.mappings.Descriptor;
import org.eclipse.persistence.jaxb.dynamic.DynamicJAXBContext;
import org.onap.aai.cl.eelf.LoggerFactory;
import org.onap.aai.nodes.NodeIngestor;
import org.onap.aai.setup.ConfigTranslator;
-import org.onap.aai.setup.SchemaLocationsBean;
-import org.onap.aai.setup.Version;
+import org.onap.aai.setup.SchemaVersion;
import org.onap.aai.spike.exception.SpikeException;
import org.onap.aai.spike.logging.SpikeMsgs;
-import org.onap.aai.spike.util.SchemaIngestPropertiesReader;
-import com.google.common.base.CaseFormat;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
/**
* This class contains all of the logic for importing OXM model schemas from the available OXM
* schema files.
*/
+@Component
public class OXMModelLoader {
- private static Map<String, DynamicJAXBContext> versionContextMap =
- new ConcurrentHashMap<String, DynamicJAXBContext>();
- private static Map<String, HashMap<String, DynamicType>> xmlElementLookup = new ConcurrentHashMap<String, HashMap<String, DynamicType>>();
-
- final static Pattern p = Pattern.compile("aai_oxm_(.*).xml");
- final static Pattern versionPattern = Pattern.compile("V(\\d*)");
+ private static ConfigTranslator configTranslator;
+ private static NodeIngestor nodeIngestor;
+
+ private static Map<String, DynamicJAXBContext> versionContextMap = new ConcurrentHashMap<>();
+ private static Map<String, HashMap<String, DynamicType>> xmlElementLookup = new ConcurrentHashMap<>();
+
+ final static Pattern versionPattern = Pattern.compile("(?i)v(\\d*)");
private static org.onap.aai.cl.api.Logger logger =
LoggerFactory.getInstance().getLogger(OXMModelLoader.class.getName());
+ private OXMModelLoader() {}
+
+ /**
+ * This constructor presents an awkward marrying of Spring bean creation and static method use. This
+ * is technical debt that will need fixing.
+ *
+ * @param configTranslator contains schema versions configuration
+ * @param nodeIngestor provides DynamicJAXBContext for the OXM version
+ */
+ @Autowired
+ public OXMModelLoader(ConfigTranslator configTranslator, NodeIngestor nodeIngestor) {
+ OXMModelLoader.configTranslator = configTranslator;
+ OXMModelLoader.nodeIngestor = nodeIngestor;
+ }
+
/**
* Finds all OXM model files
- *
+ *
* @throws SpikeException
* @throws IOException
*
*/
public synchronized static void loadModels() throws SpikeException {
- SchemaIngestPropertiesReader schemaIngestPropReader = new SchemaIngestPropertiesReader();
- SchemaLocationsBean schemaLocationsBean = new SchemaLocationsBean();
- schemaLocationsBean.setNodeDirectory(schemaIngestPropReader.getNodeDir());
- schemaLocationsBean.setEdgeDirectory(schemaIngestPropReader.getEdgeDir());
- ConfigTranslator configTranslator = new OxmConfigTranslator(schemaLocationsBean);
- NodeIngestor nodeIngestor = new NodeIngestor(configTranslator);
-
if (logger.isDebugEnabled()) {
logger.debug("Loading OXM Models");
}
- for (Version oxmVersion : Version.values()) {
+ for (SchemaVersion oxmVersion : configTranslator.getSchemaVersions().getVersions()) {
DynamicJAXBContext jaxbContext = nodeIngestor.getContextForVersion(oxmVersion);
if (jaxbContext != null) {
loadModel(oxmVersion.toString(), jaxbContext);
@@ -87,7 +94,6 @@ public class OXMModelLoader {
}
}
-
private synchronized static void loadModel(String oxmVersion, DynamicJAXBContext jaxbContext) {
versionContextMap.put(oxmVersion, jaxbContext);
loadXmlLookupMap(oxmVersion, jaxbContext);
@@ -167,57 +173,57 @@ public class OXMModelLoader {
OXMModelLoader.versionContextMap = versionContextMap;
}
- public static void loadXmlLookupMap(String version, DynamicJAXBContext jaxbContext) {
+ public static void loadXmlLookupMap(String version, DynamicJAXBContext jaxbContext) {
- @SuppressWarnings("rawtypes")
- List<Descriptor> descriptorsList = jaxbContext.getXMLContext().getDescriptors();
- HashMap<String, DynamicType> types = new HashMap<String, DynamicType>();
+ @SuppressWarnings("rawtypes")
+ List<Descriptor> descriptorsList = jaxbContext.getXMLContext().getDescriptors();
+ HashMap<String, DynamicType> types = new HashMap<String, DynamicType>();
- for (@SuppressWarnings("rawtypes")
- Descriptor desc : descriptorsList) {
+ for (@SuppressWarnings("rawtypes")
+ Descriptor desc : descriptorsList) {
- DynamicType entity = jaxbContext.getDynamicType(desc.getAlias());
- String entityName = desc.getDefaultRootElement();
- types.put(entityName, entity);
- }
- xmlElementLookup.put(version, types);
- }
-
- public static DynamicType getDynamicTypeForVersion(String version, String type) throws SpikeException {
-
- DynamicType dynamicType;
- // If we haven't already loaded in the available OXM models, then do so now.
- if (versionContextMap == null || versionContextMap.isEmpty()) {
- loadModels();
- } else if (!versionContextMap.containsKey(version)) {
- logger.error(SpikeMsgs.OXM_LOAD_ERROR, "Error loading oxm model: " + version);
- throw new SpikeException("Error loading oxm model: " + version);
+ DynamicType entity = jaxbContext.getDynamicType(desc.getAlias());
+ String entityName = desc.getDefaultRootElement();
+ types.put(entityName, entity);
+ }
+ xmlElementLookup.put(version, types);
}
- // First try to match the Java-type based on hyphen to camel case
- // translation
- String javaTypeName = CaseFormat.LOWER_HYPHEN.to(CaseFormat.UPPER_CAMEL, type);
- dynamicType = versionContextMap.get(version).getDynamicType(javaTypeName);
+ public static DynamicType getDynamicTypeForVersion(String version, String type) throws SpikeException {
- if (xmlElementLookup.containsKey(version)) {
- if (dynamicType == null) {
- // Try to lookup by xml root element by exact match
- dynamicType = xmlElementLookup.get(version).get(type);
- }
+ DynamicType dynamicType;
+ // If we haven't already loaded in the available OXM models, then do so now.
+ if (versionContextMap == null || versionContextMap.isEmpty()) {
+ loadModels();
+ } else if (!versionContextMap.containsKey(version)) {
+ logger.error(SpikeMsgs.OXM_LOAD_ERROR, "Error loading oxm model: " + version);
+ throw new SpikeException("Error loading oxm model: " + version);
+ }
- if (dynamicType == null) {
- // Try to lookup by xml root element by lowercase
- dynamicType = xmlElementLookup.get(version).get(type.toLowerCase());
- }
+ // First try to match the Java-type based on hyphen to camel case
+ // translation
+ String javaTypeName = CaseFormat.LOWER_HYPHEN.to(CaseFormat.UPPER_CAMEL, type);
+ dynamicType = versionContextMap.get(version).getDynamicType(javaTypeName);
- if (dynamicType == null) {
- // Direct lookup as java-type name
- dynamicType = versionContextMap.get(version).getDynamicType(type);
- }
- }
+ if (xmlElementLookup.containsKey(version)) {
+ if (dynamicType == null) {
+ // Try to lookup by xml root element by exact match
+ dynamicType = xmlElementLookup.get(version).get(type);
+ }
+
+ if (dynamicType == null) {
+ // Try to lookup by xml root element by lowercase
+ dynamicType = xmlElementLookup.get(version).get(type.toLowerCase());
+ }
+
+ if (dynamicType == null) {
+ // Direct lookup as java-type name
+ dynamicType = versionContextMap.get(version).getDynamicType(type);
+ }
+ }
- return dynamicType;
- }
+ return dynamicType;
+ }
/**
* Retrieves the list of all Loaded OXM versions.
@@ -238,7 +244,7 @@ public class OXMModelLoader {
}
List<String> versions = new ArrayList<String>();
for (String versionKey : versionContextMap.keySet()) {
- Matcher matcher = versionPattern.matcher(versionKey.toUpperCase());
+ Matcher matcher = versionPattern.matcher(versionKey);
if (matcher.find()) {
versions.add("V" + matcher.group(1));
}