X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Forg%2Fopenecomp%2Fdatarouter%2Futil%2FOxmModelLoader.java;h=799b61c53931cce0c254ac9b31cad084c04c8310;hb=7587e5e0e38af6fef1a63d143965bf98339d1752;hp=2919ba23e2db5c88da73249d7a62feea33edeb09;hpb=60f7f5e11d7d0d7870a4650956921bd1afa309fd;p=aai%2Fdata-router.git diff --git a/src/main/java/org/openecomp/datarouter/util/OxmModelLoader.java b/src/main/java/org/openecomp/datarouter/util/OxmModelLoader.java index 2919ba2..799b61c 100644 --- a/src/main/java/org/openecomp/datarouter/util/OxmModelLoader.java +++ b/src/main/java/org/openecomp/datarouter/util/OxmModelLoader.java @@ -1,16 +1,15 @@ /** * ============LICENSE_START======================================================= - * DataRouter + * org.onap.aai * ================================================================================ - * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. * Copyright © 2017 Amdocs - * 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 + * 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, @@ -19,23 +18,18 @@ * limitations under the License. * ============LICENSE_END========================================================= * - * ECOMP and OpenECOMP are trademarks - * and service marks of AT&T Intellectual Property. + * ECOMP is a trademark and service mark of AT&T Intellectual Property. */ package org.openecomp.datarouter.util; -import java.io.File; -import java.io.FileInputStream; import java.io.FileNotFoundException; +import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.Collection; -import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.Timer; -import java.util.TimerTask; import java.util.concurrent.ConcurrentHashMap; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -46,79 +40,63 @@ import javax.xml.bind.JAXBException; import org.eclipse.persistence.jaxb.JAXBContextProperties; import org.eclipse.persistence.jaxb.dynamic.DynamicJAXBContext; import org.eclipse.persistence.jaxb.dynamic.DynamicJAXBContextFactory; -import org.openecomp.cl.eelf.LoggerFactory; +import org.onap.aai.cl.eelf.LoggerFactory; import org.openecomp.datarouter.logging.DataRouterMsgs; import org.openecomp.datarouter.util.ExternalOxmModelProcessor; +import org.springframework.core.io.Resource; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.core.io.support.ResourcePatternResolver; public class OxmModelLoader { - private static Map versionContextMap = new ConcurrentHashMap(); - private static Map timers = new ConcurrentHashMap(); + private static Map versionContextMap = new ConcurrentHashMap(); private static List oxmModelProcessorRegistry = new ArrayList(); final static Pattern p = Pattern.compile("aai_oxm_(.*).xml"); - private static org.openecomp.cl.api.Logger logger = LoggerFactory.getInstance() + private static org.onap.aai.cl.api.Logger logger = LoggerFactory.getInstance() .getLogger(OxmModelLoader.class.getName()); - public synchronized static void loadModels() { + public synchronized static void loadModels() throws FileNotFoundException { + + ClassLoader cl = OxmModelLoader.class.getClassLoader(); + ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(cl); + Resource[] resources; + try { + resources = resolver.getResources("classpath*:/oxm/aai_oxm*.xml"); + } catch (IOException ex) { + logger.error(DataRouterMsgs.LOAD_OXM_ERROR, ex.getMessage()); + throw new FileNotFoundException("Unable to load OXM models from schema path : /oxm/aai_oxm*.xml"); + } + + if (resources.length == 0) { + logger.error(DataRouterMsgs.LOAD_OXM_ERROR, "No OXM schema files found on classpath"); + throw new FileNotFoundException("Unable to load OXM models from schema path : /oxm/aai_oxm*.xml"); + } + + for (Resource resource : resources) { + Matcher matcher = p.matcher(resource.getFilename()); + + if (matcher.matches()) { + try { + OxmModelLoader.loadModel(matcher.group(1), resource.getFilename(),resource.getInputStream()); + } catch (Exception e) { + logger.error(DataRouterMsgs.LOAD_OXM_ERROR, "Failed to load " + resource.getFilename() + + ": " + e.getMessage()); + } + } + } + - File[] listOfFiles = new File(DataRouterConstants.DR_HOME_MODEL).listFiles(); - - if (listOfFiles != null) { - for (File file : listOfFiles) { - if (file.isFile()) { - Matcher m = p.matcher(file.getName()); - if (m.matches()) { - try { - OxmModelLoader.loadModel(m.group(1), file); - } catch (Exception e) { - logger.error(DataRouterMsgs.INVALID_OXM_FILE, file.getName(), e.getMessage()); - } - } - - } - } - } else { - logger.error(DataRouterMsgs.INVALID_OXM_DIR, DataRouterConstants.DR_HOME_MODEL); - } - - } - private static void addtimer(String version,File file){ - TimerTask task = null; - task = new FileWatcher( - file) { - protected void onChange(File file) { - // here we implement the onChange - logger.info(DataRouterMsgs.FILE_CHANGED, file.getName()); - - try { - OxmModelLoader.loadModel(version,file); - } catch (Exception e) { - e.printStackTrace(); - } - - } - }; - - if (!timers.containsKey(version)) { - Timer timer = new Timer("oxm-"+version); - timer.schedule(task, new Date(), 10000); - timers.put(version, timer); - - } - } - - private synchronized static void loadModel(String version,File file) throws JAXBException, FileNotFoundException { + - - InputStream iStream = new FileInputStream(file); + private synchronized static void loadModel(String version,String resourceName,InputStream inputStream) throws JAXBException, FileNotFoundException { Map properties = new HashMap(); - properties.put(JAXBContextProperties.OXM_METADATA_SOURCE, iStream); + properties.put(JAXBContextProperties.OXM_METADATA_SOURCE, inputStream); final DynamicJAXBContext jaxbContext = DynamicJAXBContextFactory .createContextFromOXM(Thread.currentThread().getContextClassLoader(), properties); versionContextMap.put(version, jaxbContext); @@ -126,20 +104,16 @@ public class OxmModelLoader { for ( ExternalOxmModelProcessor processor : oxmModelProcessorRegistry ) { processor.onOxmVersionChange(Version.valueOf(version), jaxbContext ); } - } - addtimer(version,file); - + } + logger.info(DataRouterMsgs.LOADED_OXM_FILE, resourceName); } public static DynamicJAXBContext getContextForVersion(String version) throws Exception { if (versionContextMap == null || versionContextMap.isEmpty()) { loadModels(); - } else if (!versionContextMap.containsKey(version)) { - try { - loadModel(version,new File (DataRouterConstants.DR_HOME_MODEL + "aai_oxm_" + version + ".xml")); - } catch (Exception e) { + } else if (!versionContextMap.containsKey(version)) { throw new Exception(Status.NOT_FOUND.toString()); - } + } return versionContextMap.get(version);