view artifact-database/src/main/java/de/intevation/artifactdatabase/AbstractCallContext.java @ 331:089c6f7794b5

Integrated a messaging system for Artifacts and Collections that started background threads. artifacts/trunk@2688 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Ingo Weinzierl <ingo.weinzierl@intevation.de>
date Fri, 09 Sep 2011 14:06:55 +0000
parents a8a06bbe306c
children 33d7a6da1a05
line wrap: on
line source
/*
 * Copyright (c) 2010, 2011 by Intevation GmbH
 *
 * This program is free software under the LGPL (>=v2.1)
 * Read the file LGPL.txt coming with the software for details
 * or visit http://www.gnu.org/licenses/ if it does not exist.
 */
package de.intevation.artifactdatabase;

import java.util.HashMap;

import de.intevation.artifacts.ArtifactDatabase;
import de.intevation.artifacts.CallContext;
import de.intevation.artifacts.CallMeta;


/**
 * Abstract class that implements some basic methods of a CallContext.
 *
 * @author <a href="mailto:sascha.teichmann@intevation.de">Sascha L. Teichmann</a>
 * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a>
 */
public abstract class AbstractCallContext implements CallContext {

    /**
     * The ArtifactDatabase instance.
     */
    protected ArtifactDatabaseImpl database;

    /**
     * The action to be performed after the artifacts or collections calls.
     */
    protected int action;

    /**
     * The meta information of the concrete call (preferred languages et. al.)
     */
    protected CallMeta callMeta;

    /**
     * Map to act like a clipboard when nesting calls like a proxy artifact.
     */
    protected HashMap customValues;


    /**
     * The default constructor of this abstract CallContext.
     *
     * @param action The action.
     * @param callMeta The CallMeta object.
     * @param context The global context.
     */
    public AbstractCallContext(
        ArtifactDatabaseImpl artifactDatabase,
        int                  action,
        CallMeta             callMeta
    ) {
        this.database = artifactDatabase;
        this.action   = action;
        this.callMeta = callMeta;

        database.initCallContext(this);
    }


    public void postCall() {
        database.closeCallContext(this);
    }

    public abstract void afterCall(int action);

    public abstract Long getTimeToLive();

    public abstract void afterBackground(int action);


    public Object globalContext() {
        return database.context;
    }


    public ArtifactDatabase getDatabase() {
        return database;
    }


    public CallMeta getMeta() {
        return callMeta;
    }


    public Object getContextValue(Object key) {
        return customValues != null
            ? customValues.get(key)
            : null;
    }

    public Object putContextValue(Object key, Object value) {
        if (customValues == null) {
            customValues = new HashMap();
        }
        return customValues.put(key, value);
    }
}
// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org