aboutsummaryrefslogtreecommitdiffstats
path: root/src/main/java/org/onap/schema/OxmModelLoader.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/org/onap/schema/OxmModelLoader.java')
-rw-r--r--src/main/java/org/onap/schema/OxmModelLoader.java187
1 files changed, 90 insertions, 97 deletions
diff --git a/src/main/java/org/onap/schema/OxmModelLoader.java b/src/main/java/org/onap/schema/OxmModelLoader.java
index 948914c..12f8f09 100644
--- a/src/main/java/org/onap/schema/OxmModelLoader.java
+++ b/src/main/java/org/onap/schema/OxmModelLoader.java
@@ -20,46 +20,48 @@
*/
package org.onap.schema;
+import com.google.common.base.CaseFormat;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
-import java.util.LinkedHashMap;
import java.util.List;
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.crud.exception.CrudException;
import org.onap.crud.logging.CrudServiceMsgs;
-import org.onap.schema.util.SchemaIngestPropertyReader;
-
-import com.google.common.base.CaseFormat;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+@Component
public class OxmModelLoader {
- private static Map<String, DynamicJAXBContext> versionContextMap =
- new ConcurrentHashMap<>();
+ private static ConfigTranslator configTranslator;
+ private static NodeIngestor nodeIngestor;
- private static Map<String, HashMap<String, DynamicType>> xmlElementLookup = new ConcurrentHashMap<String, HashMap<String, DynamicType>>();
+ private static Map<String, DynamicJAXBContext> versionContextMap = new ConcurrentHashMap<>();
+ private static Map<String, HashMap<String, DynamicType>> xmlElementLookup = new ConcurrentHashMap<>();
- static final Pattern p = Pattern.compile("aai_oxm_(.*).xml");
- static final Pattern versionPattern = Pattern.compile("V(\\d*)");
+ 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() {
+ private OxmModelLoader() { }
+
+ @Autowired
+ public OxmModelLoader(ConfigTranslator configTranslator, NodeIngestor nodeIngestor) {
+ OxmModelLoader.configTranslator = configTranslator;
+ OxmModelLoader.nodeIngestor = nodeIngestor;
}
/**
@@ -69,28 +71,22 @@ public class OxmModelLoader {
* @throws IOException
*
*/
- public static synchronized void loadModels() throws CrudException {
- SchemaIngestPropertyReader schemaIngestPropertyReader = new SchemaIngestPropertyReader();
-
- SchemaLocationsBean schemaLocationsBean = new SchemaLocationsBean();
- schemaLocationsBean.setNodeDirectory(schemaIngestPropertyReader.getNodeDir());
- ConfigTranslator configTranslator = new OxmModelConfigTranslator(schemaLocationsBean);
- NodeIngestor nodeIngestor = new NodeIngestor(configTranslator);
+ public synchronized static void loadModels() throws CrudException {
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().toLowerCase(), jaxbContext);
+ loadModel(oxmVersion.toString(), jaxbContext);
}
}
}
- private static synchronized void loadModel(String oxmVersion, DynamicJAXBContext jaxbContext) {
+ private synchronized static void loadModel(String oxmVersion, DynamicJAXBContext jaxbContext) {
versionContextMap.put(oxmVersion, jaxbContext);
loadXmlLookupMap(oxmVersion, jaxbContext);
logger.info(CrudServiceMsgs.LOADED_OXM_FILE, oxmVersion);
@@ -111,7 +107,7 @@ public class OxmModelLoader {
if (versionContextMap == null || versionContextMap.isEmpty()) {
loadModels();
} else if (!versionContextMap.containsKey(version)) {
- logger.error(CrudServiceMsgs.OXM_LOAD_ERROR, "Error loading oxm model: " + version);
+ logger.error(CrudServiceMsgs.OXM_LOAD_ERROR, "Error loading oxm model: " + version);
throw new CrudException("Error loading oxm model: " + version, Status.INTERNAL_SERVER_ERROR);
}
@@ -128,8 +124,7 @@ public class OxmModelLoader {
// If there are still no models available, then there's not much we can do...
if (versionContextMap.isEmpty()) {
logger.error(CrudServiceMsgs.OXM_LOAD_ERROR, "No available OXM schemas to get latest version for.");
- throw new CrudException("No available OXM schemas to get latest version for.",
- Status.INTERNAL_SERVER_ERROR);
+ throw new CrudException("No available OXM schemas to get latest version for.", Status.INTERNAL_SERVER_ERROR);
}
// Iterate over the available model versions to determine which is the most
@@ -138,10 +133,10 @@ public class OxmModelLoader {
String latestVersionStr = null;
for (String versionKey : versionContextMap.keySet()) {
- Matcher matcher = versionPattern.matcher(versionKey.toUpperCase());
+ Matcher matcher = versionPattern.matcher(versionKey);
if (matcher.find()) {
- int currentVersion = Integer.parseInt(matcher.group(1));
+ int currentVersion = Integer.valueOf(matcher.group(1));
if ((latestVersion == null) || (currentVersion > latestVersion)) {
latestVersion = currentVersion;
@@ -154,38 +149,6 @@ public class OxmModelLoader {
}
/**
- * Retrieves the list of all Loaded OXM versions.
- *
- * @return - A List of Strings of all loaded OXM versions.
- *
- * @throws CrudException
- */
- public static List<String> getLoadedOXMVersions() throws CrudException {
-
- // If we haven't already loaded in the available OXM models, then do so now.
- if (versionContextMap == null || versionContextMap.isEmpty()) {
- loadModels();
- }
-
- // If there are still no models available, then there's not much we can do...
- if (versionContextMap.isEmpty()) {
- logger.error(CrudServiceMsgs.OXM_LOAD_ERROR, "No available OXM schemas to get versions for.");
- throw new CrudException("No available OXM schemas to get versions for.",
- Status.INTERNAL_SERVER_ERROR);
- }
-
- List<String> versions = new ArrayList<String> ();
- for (String versionKey : versionContextMap.keySet()) {
-
- Matcher matcher = versionPattern.matcher(versionKey.toUpperCase());
- if (matcher.find()) {
- versions.add ( "V" + matcher.group ( 1 ) );
- }
- }
- return versions;
- }
-
- /**
* Retrieves the map of all JAXB context objects that have been created by importing the
* available OXM model schemas.
*
@@ -206,56 +169,86 @@ public class OxmModelLoader {
public static void loadXmlLookupMap(String version, DynamicJAXBContext jaxbContext ) {
-
- @SuppressWarnings("rawtypes")
- List<Descriptor> descriptorsList = jaxbContext.getXMLContext().getDescriptors();
- HashMap<String,DynamicType> types = new HashMap<String,DynamicType>();
- for (@SuppressWarnings("rawtypes")
- Descriptor desc : descriptorsList) {
+ @SuppressWarnings("rawtypes")
+ List<Descriptor> descriptorsList = jaxbContext.getXMLContext().getDescriptors();
+ HashMap<String, DynamicType> types = new HashMap<String, DynamicType>();
- DynamicType entity = jaxbContext.getDynamicType(desc.getAlias());
- String entityName = desc.getDefaultRootElement();
- types.put(entityName, entity);
- }
- xmlElementLookup.put(version, types);
+ 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 CrudException {
- 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(CrudServiceMsgs.OXM_LOAD_ERROR, "Error loading oxm model: " + version);
- throw new CrudException("Error loading oxm model: " + version, Status.INTERNAL_SERVER_ERROR);
- }
-
- // 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);
+ 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(CrudServiceMsgs.OXM_LOAD_ERROR, "Error loading oxm model: " + version);
+ throw new CrudException("Error loading oxm model: " + version, Status.INTERNAL_SERVER_ERROR);
+ }
- //Attempt to lookup in xml elements
- if (xmlElementLookup.containsKey(version)) {
- if (dynamicType == null) {
- // Try to lookup by xml root element by exact match
- dynamicType = xmlElementLookup.get(version).get(type);
+ // 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 (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);
+ }
}
- if (dynamicType == null) {
- // Try to lookup by xml root element by lowercase
- dynamicType = xmlElementLookup.get(version).get(type.toLowerCase());
+ return dynamicType;
+ }
+
+ /**
+ * Retrieves the list of all Loaded OXM versions.
+ *
+ * @return - A List of Strings of all loaded OXM versions.
+ *
+ * @throws CrudException
+ */
+ public static List<String> getLoadedOXMVersions() throws CrudException {
+
+ // If we haven't already loaded in the available OXM models, then do so now.
+ if (versionContextMap == null || versionContextMap.isEmpty()) {
+ loadModels();
}
- if (dynamicType == null) {
- // Direct lookup as java-type name
- dynamicType = versionContextMap.get(version).getDynamicType(type);
+ // If there are still no models available, then there's not much we can do...
+ if (versionContextMap.isEmpty()) {
+ logger.error(CrudServiceMsgs.OXM_LOAD_ERROR, "No available OXM schemas to get versions for.");
+ throw new CrudException("No available OXM schemas to get versions for.", Status.INTERNAL_SERVER_ERROR);
}
- }
- return dynamicType;
+ List<String> versions = new ArrayList<String>();
+ for (String versionKey : versionContextMap.keySet()) {
+ Matcher matcher = versionPattern.matcher(versionKey);
+ if (matcher.find()) {
+ versions.add ("V"+ matcher.group(1));
+ }
+ }
+ return versions;
}
}