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 Sascha L. Teichmann ingo@219: * @author Ingo Weinzierl 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 :