X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Forg%2Fonap%2Fschema%2FOxmModelLoader.java;h=fb41fc9a5e7774eda68988fe5c088fbe62239b42;hb=897f00995fe962d4c2ebce8a95491352b1ec51d7;hp=948914c06314ee67600a89f1d531546346373fff;hpb=dee6c34b3e5d3b40bc74fc73fafc1d116126c7fc;p=aai%2Fgizmo.git diff --git a/src/main/java/org/onap/schema/OxmModelLoader.java b/src/main/java/org/onap/schema/OxmModelLoader.java index 948914c..fb41fc9 100644 --- a/src/main/java/org/onap/schema/OxmModelLoader.java +++ b/src/main/java/org/onap/schema/OxmModelLoader.java @@ -20,46 +20,54 @@ */ 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.annotation.PostConstruct; 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.setup.Translator; 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 versionContextMap = - new ConcurrentHashMap<>(); - - private static Map> xmlElementLookup = new ConcurrentHashMap>(); + private static Translator translator; + private static NodeIngestor nodeIngestor; + + private static Map versionContextMap = new ConcurrentHashMap<>(); + private static Map> 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(Translator translator, NodeIngestor nodeIngestor) { + OxmModelLoader.translator = translator; + OxmModelLoader.nodeIngestor = nodeIngestor; + } + + @PostConstruct + public void init() throws CrudException { + OxmModelLoader.loadModels(); } /** @@ -69,28 +77,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 : translator.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 +113,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 +130,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 +139,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; @@ -153,38 +154,6 @@ public class OxmModelLoader { return latestVersionStr; } - /** - * Retrieves the list of all Loaded OXM versions. - * - * @return - A List of Strings of all loaded OXM versions. - * - * @throws CrudException - */ - public static List 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 versions = new ArrayList (); - 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. @@ -203,59 +172,89 @@ public class OxmModelLoader { public static void setVersionContextMap(Map versionContextMap) { OxmModelLoader.versionContextMap = versionContextMap; } - - + + public static void loadXmlLookupMap(String version, DynamicJAXBContext jaxbContext ) { - - @SuppressWarnings("rawtypes") - List descriptorsList = jaxbContext.getXMLContext().getDescriptors(); - HashMap types = new HashMap(); - for (@SuppressWarnings("rawtypes") - Descriptor desc : descriptorsList) { + @SuppressWarnings("rawtypes") + List descriptorsList = jaxbContext.getXMLContext().getDescriptors(); + HashMap types = new HashMap(); - 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 { + for (@SuppressWarnings("rawtypes") + Descriptor desc : descriptorsList) { - 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); + 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); - //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); + 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); } - 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 (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) { - // Direct lookup as java-type name - dynamicType = versionContextMap.get(version).getDynamicType(type); + 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 getLoadedOXMVersions() throws CrudException { + + // If we haven't already loaded in the available OXM models, then do so now. + if (versionContextMap == null || versionContextMap.isEmpty()) { + loadModels(); } - } - return dynamicType; + // 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 versions = new ArrayList(); + for (String versionKey : versionContextMap.keySet()) { + + Matcher matcher = versionPattern.matcher(versionKey); + if (matcher.find()) { + versions.add ("V"+ matcher.group(1)); + } + } + return versions; } }