ingo@219: /*
ingo@219:  * Copyright (c) 2010, 2011 by Intevation GmbH
ingo@219:  *
ingo@219:  * This program is free software under the LGPL (>=v2.1)
ingo@219:  * Read the file LGPL.txt coming with the software for details
ingo@219:  * or visit http://www.gnu.org/licenses/ if it does not exist.
ingo@219:  */
ingo@219: package de.intevation.artifactdatabase;
ingo@219: 
ingo@219: import java.util.HashMap;
ingo@219: 
ingo@219: import de.intevation.artifacts.ArtifactDatabase;
ingo@219: import de.intevation.artifacts.CallContext;
ingo@219: import de.intevation.artifacts.CallMeta;
ingo@219: 
ingo@219: 
ingo@219: /**
ingo@219:  * Abstract class that implements some basic methods of a CallContext.
ingo@219:  *
ingo@219:  * @author <a href="mailto:sascha.teichmann@intevation.de">Sascha L. Teichmann</a>
ingo@219:  * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a>
ingo@219:  */
ingo@219: public abstract class AbstractCallContext implements CallContext {
ingo@219: 
ingo@219:     /**
ingo@219:      * The ArtifactDatabase instance.
ingo@219:      */
ingo@219:     protected ArtifactDatabaseImpl database;
ingo@219: 
ingo@219:     /**
ingo@219:      * The action to be performed after the artifacts or collections calls.
ingo@219:      */
ingo@219:     protected int action;
ingo@219: 
ingo@219:     /**
ingo@219:      * The meta information of the concrete call (preferred languages et. al.)
ingo@219:      */
ingo@219:     protected CallMeta callMeta;
ingo@219: 
ingo@219:     /**
ingo@219:      * Map to act like a clipboard when nesting calls like a proxy artifact.
ingo@219:      */
ingo@219:     protected HashMap customValues;
ingo@219: 
ingo@219: 
ingo@219:     /**
ingo@219:      * The default constructor of this abstract CallContext.
ingo@219:      *
ingo@219:      * @param action The action.
ingo@219:      * @param callMeta The CallMeta object.
ingo@219:      * @param context The global context.
ingo@219:      */
ingo@219:     public AbstractCallContext(
ingo@219:         ArtifactDatabaseImpl artifactDatabase,
ingo@219:         int                  action,
sascha@246:         CallMeta             callMeta
sascha@246:     ) {
ingo@219:         this.database = artifactDatabase;
ingo@219:         this.action   = action;
ingo@219:         this.callMeta = callMeta;
sascha@246: 
sascha@246:         database.initCallContext(this);
ingo@219:     }
ingo@219: 
ingo@219: 
sascha@246:     public void postCall() {
sascha@246:         database.closeCallContext(this);
sascha@246:     }
ingo@219: 
ingo@219:     public abstract void afterCall(int action);
ingo@219: 
ingo@219:     public abstract Long getTimeToLive();
ingo@219: 
ingo@219:     public abstract void afterBackground(int action);
ingo@219: 
ingo@219: 
ingo@219:     public Object globalContext() {
sascha@246:         return database.context;
ingo@219:     }
ingo@219: 
ingo@219: 
ingo@219:     public ArtifactDatabase getDatabase() {
ingo@219:         return database;
ingo@219:     }
ingo@219: 
ingo@219: 
ingo@219:     public CallMeta getMeta() {
ingo@219:         return callMeta;
ingo@219:     }
ingo@219: 
ingo@219: 
ingo@219:     public Object getContextValue(Object key) {
ingo@219:         return customValues != null
ingo@219:             ? customValues.get(key)
ingo@219:             : null;
ingo@219:     }
ingo@219: 
ingo@219:     public Object putContextValue(Object key, Object value) {
ingo@219:         if (customValues == null) {
ingo@219:             customValues = new HashMap();
ingo@219:         }
ingo@219:         return customValues.put(key, value);
ingo@219:     }
ingo@219: }
ingo@219: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :