Mercurial > dive4elements > framework
view artifact-database/src/main/java/de/intevation/artifactdatabase/ArtifactCallContext.java @ 405:e1738650bfca
FacetActivity: use Chain-of-responsibility pattern to figure out if facet should be active.
artifacts/trunk@5154 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Sun, 29 Jul 2012 11:38:40 +0000 |
parents | 089c6f7794b5 |
children |
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.LinkedList; import org.apache.log4j.Logger; import de.intevation.artifacts.CallMeta; import de.intevation.artifacts.Message; 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, PersistentArtifact artifact) { super(artifactDatabase, action, callMeta); 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 boolean isInBackground() { return database.getLockedIds().contains(artifact.getId()); } public void addBackgroundMessage(Message msg) { database.addBackgroundMessage(artifact.getArtifact().identifier(), msg); } public LinkedList<Message> getBackgroundMessages() { return database.getBackgroundMessages( artifact.getArtifact().identifier()); } public Long getTimeToLive() { return artifact.getTTL(); } /** * Dispatches and executes the persistence action after * the return of the concrete artifact call. */ public void postCall() { try { 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); } } finally { super.postCall(); } } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :