sascha@5: package de.intevation.artifactdatabase; sascha@5: sascha@5: import org.w3c.dom.Document; sascha@5: import org.w3c.dom.NodeList; sascha@5: sascha@5: import java.util.ArrayList; sascha@5: sascha@5: import de.intevation.artifacts.ArtifactFactory; sascha@5: import de.intevation.artifacts.ArtifactContextFactory; sascha@5: sascha@5: /** sascha@5: * Bootstrap facility for the global context and the artifact factories. sascha@5: * sascha@5: * @author Sascha L. Teichmann (sascha.teichmann@intevation.de) sascha@5: */ sascha@5: public class FactoryBootstrap sascha@5: { sascha@5: public static final String CONTEXT_FACTORY = sascha@5: "/artifact-database/factories/context-factory/text()"; sascha@5: sascha@5: public static final String DEFAULT_CONTEXT_FACTORY = sascha@5: "de.intevation.artifactdatabase.DefaultArtifactContextFactory"; sascha@5: sascha@5: public static final String ARTIFACT_FACTORIES = sascha@5: "/artifact-database/factories/artifact-factories/artifact-factory/text()"; sascha@5: sascha@5: protected Object context; sascha@5: sascha@5: protected ArtifactFactory [] artifactFactories; sascha@5: sascha@5: public FactoryBootstrap() { sascha@5: } sascha@5: sascha@5: void buildContext() { sascha@5: String className = Config.getStringXPath( sascha@5: CONTEXT_FACTORY, DEFAULT_CONTEXT_FACTORY); sascha@5: sascha@5: ArtifactContextFactory factory = null; sascha@5: sascha@5: try { sascha@5: Class clazz = Class.forName(className); sascha@5: factory = (ArtifactContextFactory)clazz.newInstance(); sascha@5: } sascha@5: catch (ClassNotFoundException cnfe) { sascha@5: cnfe.printStackTrace(System.err); sascha@5: } sascha@5: catch (InstantiationException ie) { sascha@5: ie.printStackTrace(System.err); sascha@5: } sascha@5: catch (ClassCastException cce) { sascha@5: cce.printStackTrace(System.err); sascha@5: } sascha@5: catch (IllegalAccessException iae) { sascha@5: iae.printStackTrace(System.err); sascha@5: } sascha@5: sascha@5: if (factory == null) { sascha@5: factory = new DefaultArtifactContextFactory(); sascha@5: } sascha@5: sascha@5: context = factory.createArtifactContext(Config.getConfig()); sascha@5: } sascha@5: sascha@5: protected void loadArtifactFactories() { sascha@5: ArrayList loadedFactories = new ArrayList(); sascha@5: sascha@5: NodeList nodes = Config.getNodeSetXPath(ARTIFACT_FACTORIES); sascha@5: sascha@10: if (nodes == null) { sascha@10: System.err.println("ERROR: no factories found"); sascha@10: return; sascha@10: } sascha@10: sascha@5: Document config = Config.getConfig(); sascha@5: sascha@5: for (int i = 0, N = nodes.getLength(); i < N; ++i) { sascha@5: String className = nodes.item(i).getTextContent(); sascha@5: sascha@5: ArtifactFactory factory = null; sascha@5: sascha@5: try { sascha@5: Class clazz = Class.forName(className); sascha@5: factory = (ArtifactFactory)clazz.newInstance(); sascha@5: } sascha@5: catch (ClassNotFoundException cnfe) { sascha@5: cnfe.printStackTrace(System.err); sascha@5: } sascha@5: catch (InstantiationException ie) { sascha@5: ie.printStackTrace(System.err); sascha@5: } sascha@5: catch (ClassCastException cce) { sascha@5: cce.printStackTrace(System.err); sascha@5: } sascha@5: catch (IllegalAccessException iae) { sascha@5: iae.printStackTrace(System.err); sascha@5: } sascha@5: sascha@5: if (factory != null) { tim@7: factory.setup(config,nodes.item(i)); sascha@5: loadedFactories.add(factory); sascha@5: } sascha@5: } sascha@5: sascha@5: artifactFactories = (ArtifactFactory [])loadedFactories.toArray( sascha@5: new ArtifactFactory[loadedFactories.size()]); sascha@5: } sascha@5: sascha@5: public void boot() { sascha@5: buildContext(); sascha@5: loadArtifactFactories(); sascha@5: } sascha@5: sascha@5: public ArtifactFactory [] getArtifactFactories() { sascha@5: return artifactFactories; sascha@5: } sascha@5: sascha@5: public Object getContext() { sascha@5: return context; sascha@5: } sascha@5: } sascha@5: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8: