ingo@100: /*
ingo@100: * Copyright (c) 2010 by Intevation GmbH
ingo@100: *
ingo@100: * This program is free software under the LGPL (>=v2.1)
ingo@100: * Read the file LGPL.txt coming with the software for details
ingo@100: * or visit http://www.gnu.org/licenses/ if it does not exist.
ingo@100: */
ingo@100:
teichmann@475: package org.dive4elements.artifacts;
sascha@32:
christian@417: import java.util.LinkedList;
felix@353: import java.util.List;
ingo@331:
ingo@248: import org.w3c.dom.Document;
ingo@248: import org.w3c.dom.Node;
ingo@248:
sascha@78: /**
sascha@78: * Instances of this interface are given to feed(), advance(), describe()
sascha@78: * and out() to enable the artifact to communicate with the runtime system.
sascha@78: * @author Sascha L. Teichmann
sascha@78: */
sascha@32: public interface CallContext
sascha@32: {
sascha@245: interface Listener {
ingo@248: void setup(Document config, Node listenerNode);
sascha@245: void init(CallContext callContext);
sascha@245: void close(CallContext callContext);
sascha@245: }
sascha@245:
sascha@78: /**
sascha@78: * Constant to signal that nothing should be done
sascha@78: * with the artifact after method return.
sascha@78: */
sascha@32: int NOTHING = 0;
sascha@78: /**
sascha@78: * Constant to signal that the database timestamp
sascha@78: * should be updated after method return.
sascha@78: */
sascha@32: int TOUCH = 1;
sascha@78: /**
sascha@78: * Constant to signal that the artifact should be stored
sascha@78: * after method return.
sascha@78: */
sascha@32: int STORE = 2;
sascha@78: /**
sascha@78: * Constant to signal that the artifact fork a backgroud thread
sascha@78: * and should be hold in memory till it signals that it has
sascha@78: * finished its operation.
sascha@78: */
sascha@32: int BACKGROUND = 3;
sascha@32: // int DELETE = 4;
sascha@32: // int FOREVER = 5;
sascha@32:
sascha@78: /**
sascha@78: * This method may be called from feed(), describe(), advance()
sascha@78: * and out to signal what should happend with artefact after
sascha@78: * the current method call returns.
sascha@78: * @param action Valid values are NOTHING, TOUCH, STORE, BACKGROUND.
sascha@78: */
sascha@32: void afterCall(int action);
sascha@32:
sascha@78: /**
sascha@78: * When send to background with a afterCall(BACKGROUND) this
sascha@78: * method is to be called from the background thread to signal
sascha@78: * that the background operation has ended.
sascha@78: * @param action Same semantics as in afterCall.
sascha@78: */
sascha@32: void afterBackground(int action);
sascha@32:
sascha@78: /**
ingo@330: * Returns true, if the object forked a background thread and has not
ingo@330: * finished it yet.
ingo@330: */
ingo@330: boolean isInBackground();
ingo@330:
ingo@330: /**
ingo@331: * Adds a background message for the current Artifact or Collection.
ingo@331: *
ingo@331: * @param msg The message.
ingo@331: */
ingo@331: void addBackgroundMessage(Message msg);
ingo@331:
ingo@331: /**
ingo@331: * Returns the background messages of the current Artifact or Collection.
ingo@331: *
ingo@331: * @return the list of background messages.
ingo@331: */
ingo@331: LinkedList getBackgroundMessages();
ingo@331:
ingo@331: /**
sascha@78: * Access to the global context of the runtime system.
sascha@78: * @return The global context.
sascha@78: */
sascha@32: Object globalContext();
sascha@48:
sascha@78: /**
sascha@78: * Access to the artifact database itself.
sascha@78: * @return The database.
sascha@78: */
ingo@66: ArtifactDatabase getDatabase();
ingo@66:
sascha@78: /**
sascha@78: * The meta data of the current call. Used to transport
sascha@78: * language preferences of the callee e.g.
sascha@78: * @return The meta information of this call.
sascha@78: */
sascha@48: CallMeta getMeta();
sascha@86:
sascha@78: /**
sascha@78: * Each call context has a clipboard.
sascha@78: * getContextValue is used to fetch data from this board.
sascha@78: * @param key Key of the requested item.
christian@417: * @return The value stored for the specified value, null if
sascha@78: * no item with this key exists.
sascha@78: */
sascha@58: Object getContextValue(Object key);
sascha@58:
sascha@78: /**
sascha@78: * Each call context has a clipboard.
sascha@78: * putContextValue is used to store a key/value pair onto this board.
sascha@78: * @param key The key of the pair
sascha@78: * @param value The value of the pair.
sascha@78: * @return The formerly stored value under the given key.
sascha@78: */
sascha@58: Object putContextValue(Object key, Object value);
ingo@84:
ingo@84: /**
ingo@84: * Returns the time to live of the current artifact.
ingo@84: * @return The time to live of the current artifact.
ingo@84: */
ingo@84: Long getTimeToLive();
felix@353:
felix@353: /**
felix@353: * Get a list of DataProvider that get provide 'key' type of data to
felix@353: * other facets.
felix@353: */
felix@353: public List getDataProvider(Object key);
felix@353:
felix@353: /**
felix@353: * Register a DataProvider that can provide 'key' type of data to
felix@353: * other facets.
felix@353: */
felix@353: public Object registerDataProvider(Object key, DataProvider provider);
sascha@32: }
sascha@85: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :