diff artifact-database/src/main/java/org/dive4elements/artifactdatabase/ArtifactCallContext.java @ 473:d0ac790a6c89 dive4elements-move

Moved directories to org.dive4elements
author Sascha L. Teichmann <teichmann@intevation.de>
date Thu, 25 Apr 2013 10:57:18 +0200
parents artifact-database/src/main/java/de/intevation/artifactdatabase/ArtifactCallContext.java@089c6f7794b5
children 415df0fc4fa1
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/artifact-database/src/main/java/org/dive4elements/artifactdatabase/ArtifactCallContext.java	Thu Apr 25 10:57:18 2013 +0200
@@ -0,0 +1,130 @@
+/*
+ * 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 :

http://dive4elements.wald.intevation.org