package org.cloudgraph.web.config; import java.io.InputStream; import javax.xml.bind.JAXBElement; import javax.xml.bind.JAXBException; import javax.xml.bind.UnmarshalException; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.cloudgraph.web.config.imex.ImportExportConfiguration; import org.plasma.common.bind.DefaultValidationEventHandler; import org.plasma.common.env.EnvProperties; import org.xml.sax.SAXException; public class ImportExportConfig { private static Log log = LogFactory.getLog(ImportExportConfig.class); private static ImportExportConfig instance = null; private static final String defaultConfigFileName = "import-export-config.xml"; private static final String configFilePropertyName = "import-export.configuration"; private ImportExportConfiguration config; private ImportExportConfig() { log.info("initializing..."); try { String fileName = EnvProperties.instance().getProperty( configFilePropertyName); if (fileName == null) fileName = defaultConfigFileName; ImportExportConfigDataBinding configBinding = new ImportExportConfigDataBinding( new DefaultValidationEventHandler()); config = unmarshalConfig(fileName, configBinding); } catch (SAXException e) { throw new RuntimeException(e); } catch (JAXBException e) { throw new RuntimeException(e); } } @SuppressWarnings("unchecked") private ImportExportConfiguration unmarshalConfig(String configFileName, ImportExportConfigDataBinding binding) { try { InputStream stream = ImportExportConfig.class.getResourceAsStream(configFileName); if (stream == null) stream = ImportExportConfig.class.getClassLoader().getResourceAsStream(configFileName); if (stream == null) throw new RuntimeException("could not find configuration file resource '" + configFileName + "' on the current classpath"); JAXBElement root = (JAXBElement)binding.validate(stream); ImportExportConfiguration result = (ImportExportConfiguration)root.getValue(); return result; } catch (UnmarshalException e) { throw new RuntimeException(e); } catch (JAXBException e) { throw new RuntimeException(e); } } public static ImportExportConfig getInstance() { if (instance == null) initializeInstance(); return instance; } private static synchronized void initializeInstance() { if (instance == null) instance = new ImportExportConfig(); } public ImportExportConfiguration getConfig() { return config; } }