ingo@106: package de.intevation.flys.artifacts.context;
ingo@106: 
raimund@3295: import java.util.Map;
raimund@3295: 
ingo@106: import org.apache.log4j.Logger;
ingo@106: 
ingo@106: import org.w3c.dom.Document;
ingo@106: 
ingo@106: import de.intevation.artifactdatabase.DefaultArtifactContext;
raimund@3295: import de.intevation.artifacts.CallContext;
raimund@3295: import de.intevation.flys.exports.OutGenerator;
ingo@106: 
ingo@106: 
ingo@106: /**
ingo@106:  * This class is used to store application wide information in a global context.
ingo@106:  *
ingo@106:  * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a>
ingo@106:  */
ingo@106: public class FLYSContext extends DefaultArtifactContext {
ingo@106: 
felix@1821:     /** The logger used in this class. */
ingo@106:     private static Logger logger = Logger.getLogger(FLYSContext.class);
ingo@106: 
felix@1821:     /** The key that is used to store the StateEngine in the context. */
felix@1821:     public static final String ARTIFACT_KEY =
felix@1821:         "artifact";
felix@1821: 
felix@1821:     /** The key that is used to store the TransitionEngine in the context. */
ingo@106:     public static final String TRANSITION_ENGINE_KEY =
ingo@106:         "artifact.transition.engine";
ingo@106: 
felix@1821:     /** The key that is used to store the StateEngine in the context. */
ingo@107:     public static final String STATE_ENGINE_KEY =
ingo@107:         "artifact.state.engine";
ingo@107: 
ingo@295:     /** The key that is used to store the Map of OutGenerator classes in the
felix@1821:      * context. */
ingo@295:     public static final String OUTGENERATORS_KEY =
ingo@295:         "flys.export.outgenerators";
ingo@295: 
felix@1821:     /** The key that is used to store the map of themes in the context. */
ingo@341:     public static final String THEMES =
ingo@341:         "flys.themes.map";
ingo@341: 
felix@1821:     /** The key that is used to store a map of theme mappings in the context. */
ingo@345:     public static final String THEME_MAPPING =
ingo@345:         "flys.themes.mapping.map";
ingo@345: 
felix@1821:     /** The key that is used to store a map of WMS urls for each river. */
ingo@958:     public static final String RIVER_WMS =
ingo@958:         "flys.floodmap.river.wms";
ingo@958: 
ingo@1970:     /** The key that is used to store an instance of Scheduler in the context.*/
ingo@1970:     public static final String SCHEDULER =
ingo@1970:         "flys.wsplgen.scheduler";
ingo@1970: 
bjoern@3630:     /** Key to store the configured modules in the context. */
bjoern@3630:     public static final String MODULES = "flys.modules";
bjoern@3630: 
ingo@106: 
ingo@106:     /**
ingo@106:      * The default constructor.
ingo@106:      */
ingo@106:     public FLYSContext() {
ingo@106:         super();
ingo@106:     }
ingo@106: 
ingo@106: 
ingo@106:     /**
ingo@106:      * A constructor with a config document.
ingo@106:      */
ingo@106:     public FLYSContext(Document config) {
ingo@106:         super(config);
ingo@106:     }
raimund@3295: 
raimund@3295:     /**
raimund@3295:      * Returns the OutGenerator for a specified <i>type</i>.
raimund@3295:      *
raimund@3295:      * @param name The name of the output type.
raimund@3295:      * @param type Defines the type of the desired OutGenerator.
raimund@3295:      *
raimund@3295:      * @return Instance of an OutGenerator for specified <i>type</i>.
raimund@3295:      */
raimund@3295:     public static OutGenerator getOutGenerator(
raimund@3295:         CallContext context,
raimund@3295:         String      name,
raimund@3295:         String      type)
raimund@3295:     {
raimund@3295: 
raimund@3295:         FLYSContext flysContext = context instanceof FLYSContext
raimund@3295:             ? (FLYSContext) context
raimund@3295:             : (FLYSContext) context.globalContext();
raimund@3295: 
raimund@3295:         Map<String, Class> generators = (Map<String, Class>)
raimund@3295:             flysContext.get(FLYSContext.OUTGENERATORS_KEY);
raimund@3295: 
raimund@3295:         if (generators == null) {
raimund@3295:             return null;
raimund@3295:         }
raimund@3295: 
raimund@3295:         Class clazz = generators.get(name);
raimund@3295: 
raimund@3295:         try {
raimund@3295:             return clazz != null ? (OutGenerator) clazz.newInstance() : null;
raimund@3295:         }
raimund@3295:         catch (InstantiationException ie) {
raimund@3295:             logger.error(ie, ie);
raimund@3295:         }
raimund@3295:         catch (IllegalAccessException iae) {
raimund@3295:             logger.error(iae, iae);
raimund@3295:         }
raimund@3295: 
raimund@3295:         return null;
raimund@3295:     }
ingo@106: }
ingo@106: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :