view artifact-database/src/main/java/de/intevation/artifactdatabase/ArtifactCallContext.java @ 219:cabe4c02ab64

Refactored the CallContextImpl - there are two concrete classes for Artifacts and ArtifactCollections now. artifacts/trunk@1559 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Ingo Weinzierl <ingo.weinzierl@intevation.de>
date Thu, 24 Mar 2011 16:16:51 +0000
parents
children a8a06bbe306c
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 org.apache.log4j.Logger;

import de.intevation.artifacts.CallMeta;

import de.intevation.artifactdatabase.Backend.PersistentArtifact;


/**
 * Class that implements the call context handed to the methods calls
 * describe(), feed(), etc. of the artifact.
 *
 * @author <a href="mailto:sascha.teichmann@intevation.de">Sascha L. Teichmann</a>
 */
public class ArtifactCallContext extends AbstractCallContext {

    private static Logger logger = Logger.getLogger(ArtifactCallContext.class);


    /**
     * Error message issued if an artifact wants to translate itself
     * into a none valid persistent state.
     */
    public static final String INVALID_CALL_STATE = "Invalid after call state";

    /**
     * Error message issued if one tries to remove a requested artifact
     * from the list of artifacts running in background which is
     * not in this list.
     */
    public static final String NOT_IN_BACKGROUND = "Not in background";


    /**
     * The persistence wrapper around the living artifact
     */
    protected PersistentArtifact artifact;


    public ArtifactCallContext(
        ArtifactDatabaseImpl artifactDatabase,
        int                  action,
        CallMeta             callMeta,
        Object               context,
        PersistentArtifact   artifact)
    {
        super(artifactDatabase, action, callMeta, context);

        this.artifact = artifact;
    }


    public void afterCall(int action) {
        this.action = action;
        if (action == BACKGROUND) {
            database.addIdToBackground(artifact.getId());
        }
    }


    public void afterBackground(int action) {
        if (this.action != BACKGROUND) {
            throw new IllegalStateException(NOT_IN_BACKGROUND);
        }
        database.fromBackground(artifact, action);
    }


    public Long getTimeToLive() {
        return artifact.getTTL();
    }


    /**
     * Dispatches and executes the persistence action after
     * the return of the concrete artifact call.
     */
    public void postCall() {
        switch (action) {
            case NOTHING:
                break;
            case TOUCH:
                artifact.touch();
                break;
            case STORE:
                artifact.store();
                break;
            case BACKGROUND:
                logger.warn(
                    "BACKGROUND processing is not fully implemented, yet!");
                artifact.store();
                break;
            default:
                logger.error(INVALID_CALL_STATE + ": " + action);
                throw new IllegalStateException(INVALID_CALL_STATE);
        }
    }
}
// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org