tim@52: /** tim@52: * tim@52: */ tim@52: package de.intevation.gnv.artifacts.context; tim@52: tim@52: import java.io.FileInputStream; tim@52: import java.io.FileNotFoundException; tim@52: import java.io.IOException; tim@52: import java.io.InputStream; ingo@369: import java.io.File; ingo@369: tim@52: import java.util.Properties; tim@52: tim@52: import org.apache.log4j.Logger; tim@52: import org.w3c.dom.Document; tim@52: tim@52: import de.intevation.artifactdatabase.Config; tim@52: import de.intevation.artifacts.ArtifactContextFactory; tim@99: import de.intevation.gnv.artifacts.cache.CacheFactory; tim@52: import de.intevation.gnv.geobackend.base.connectionpool.ConnectionPoolFactory; tim@52: import de.intevation.gnv.geobackend.base.query.container.QueryContainerFactory; tim@52: import de.intevation.gnv.geobackend.base.query.container.exception.QueryContainerException; ingo@358: import de.intevation.gnv.chart.XMLChartTheme; ingo@369: ingo@369: import de.intevation.artifactdatabase.XMLUtils; tim@52: tim@52: /** tim@52: * @author Tim Englich tim@171: * tim@52: */ tim@52: public class GNVArtifactContextFactory implements ArtifactContextFactory { tim@52: /** tim@52: * the logger, used to log exceptions and additonaly information tim@52: */ tim@52: private static Logger log = Logger.getLogger(GNVArtifactContext.class); tim@171: tim@171: public static final String XPATH_GEOBACKEND_CONFIGURATION = "artifact-database/geo-backend/backend-configuration"; tim@171: tim@171: public static final String XPATH_GEOBACKEND_QUERYCONFIGURATION = "artifact-database/geo-backend/query-configuration"; tim@171: tim@99: private final static String CACHECONFIGNODEPATH = "/artifact-database/ehcache/configuration"; tim@171: ingo@358: private final static String CHARTCONFIGNODEPATH = "/artifact-database/charttemplate/configuration"; ingo@358: ingo@358: public final static String CHARTTEMPLATE = "template"; ingo@358: tim@52: /** tim@52: * Constructor tim@52: */ tim@52: public GNVArtifactContextFactory() { tim@52: super(); tim@52: log.debug("GNVArtifactContextFactory.Constructor"); tim@52: } tim@52: tim@52: /** tim@52: * @see de.intevation.artifacts.ArtifactContextFactory#createArtifactContext(org.w3c.dom.Document) tim@52: */ tim@52: public Object createArtifactContext(Document config) { ingo@358: GNVArtifactContext returnValue = null; tim@52: try { tim@52: log.debug("GNVArtifactContextFactory.createArtifactContext"); tim@52: log.info("Initialisation of the Geo-BackendConnectionPool"); tim@171: String backendConfigurationFile = Config.getStringXPath(config, tim@171: XPATH_GEOBACKEND_CONFIGURATION); tim@203: backendConfigurationFile = Config.replaceConfigDir(backendConfigurationFile); tim@203: tim@52: Properties properties = getProperties(backendConfigurationFile); tim@52: ConnectionPoolFactory cpf = ConnectionPoolFactory.getInstance(); tim@52: cpf.initializeConnectionPool(properties); tim@171: tim@52: log.info("Initialisation of the QueryContainer"); tim@171: String queryConfigurationFile = Config.getStringXPath(config, tim@171: XPATH_GEOBACKEND_QUERYCONFIGURATION); tim@203: queryConfigurationFile = Config.replaceConfigDir(queryConfigurationFile); tim@203: tim@52: Properties queryProperties = getProperties(queryConfigurationFile); tim@52: QueryContainerFactory qcf = QueryContainerFactory.getInstance(); tim@52: qcf.initializeQueryContainer(queryProperties); tim@171: tim@99: log.info("Initialisation of the Cache"); tim@171: String cacheConfigurationFile = Config.getStringXPath(config, tim@171: CACHECONFIGNODEPATH); tim@203: cacheConfigurationFile = Config.replaceConfigDir(cacheConfigurationFile); tim@99: CacheFactory cf = CacheFactory.getInstance(); tim@99: cf.initializeCache(cacheConfigurationFile); tim@171: ingo@358: log.info("Initialisation of chart template"); ingo@358: String chartConfigFile = Config.getStringXPath( ingo@358: config, CHARTCONFIGNODEPATH ingo@358: ); ingo@369: chartConfigFile = Config.replaceConfigDir(chartConfigFile); ingo@358: log.debug("Parse xml configuration of " + chartConfigFile); ingo@369: ingo@369: Document tmpl = XMLUtils.parseDocument(new File(chartConfigFile)); ingo@369: XMLChartTheme theme = new XMLChartTheme("XMLChartTheme"); ingo@369: if (tmpl != null) { ingo@369: theme.applyXMLConfiguration(tmpl); ingo@369: } ingo@369: else { ingo@369: log.error( ingo@369: "Cannot load chart template from '" + ingo@369: chartConfigFile + "'"); ingo@369: } ingo@358: tim@52: returnValue = new GNVArtifactContext(config); ingo@358: ingo@358: returnValue.put(CHARTTEMPLATE, theme); tim@52: } catch (FileNotFoundException e) { tim@171: log.error(e, e); tim@52: } catch (IOException e) { tim@171: log.error(e, e); tim@171: } catch (QueryContainerException e) { tim@171: log.error(e, e); tim@52: } tim@52: return returnValue; tim@52: } tim@52: tim@52: /** tim@52: * @param filePath tim@52: * @return tim@52: * @throws FileNotFoundException tim@52: * @throws IOException tim@52: */ tim@52: private Properties getProperties(String filePath) tim@171: throws FileNotFoundException, tim@171: IOException { sascha@172: InputStream inputStream = null; sascha@172: try { sascha@172: inputStream = new FileInputStream(filePath); sascha@172: Properties properties = new Properties(); sascha@172: properties.load(inputStream); sascha@172: return properties; sascha@172: } sascha@172: finally { sascha@172: if (inputStream != null) { sascha@172: try { inputStream.close(); } sascha@172: catch (IOException ioe) {} sascha@172: } sascha@172: } tim@52: } tim@52: }