diff 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 diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/artifact-database/src/main/java/de/intevation/artifactdatabase/ArtifactCallContext.java	Thu Mar 24 16:16:51 2011 +0000
@@ -0,0 +1,107 @@
+/*
+ * 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