001: /*
002: * This file is part of the WfMOpen project.
003: * Copyright (C) 2001-2003 Danet GmbH (www.danet.de), GS-AN.
004: * All rights reserved.
005: *
006: * This program is free software; you can redistribute it and/or modify
007: * it under the terms of the GNU General Public License as published by
008: * the Free Software Foundation; either version 2 of the License, or
009: * (at your option) any later version.
010: *
011: * This program is distributed in the hope that it will be useful,
012: * but WITHOUT ANY WARRANTY; without even the implied warranty of
013: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
014: * GNU General Public License for more details.
015: *
016: * You should have received a copy of the GNU General Public License
017: * along with this program; if not, write to the Free Software
018: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
019: *
020: * $Id: ResultProvider.java,v 1.3 2006/10/13 11:40:31 drmlipp Exp $
021: *
022: * $Log: ResultProvider.java,v $
023: * Revision 1.3 2006/10/13 11:40:31 drmlipp
024: * Added new attribute suspendActivity to exception mapping
025: * and ExceptionResultProvider.
026: *
027: * Revision 1.2 2006/09/29 12:32:10 drmlipp
028: * Consistently using WfMOpen as projct name now.
029: *
030: * Revision 1.1.1.2 2004/08/18 15:17:38 drmlipp
031: * Update to 1.2
032: *
033: * Revision 1.6 2004/04/12 19:33:52 lipp
034: * Clarified application invocation interface.
035: *
036: * Revision 1.5 2004/04/08 09:34:54 lipp
037: * Clarified documentation of package structure.
038: *
039: * Revision 1.4 2004/03/31 19:36:20 lipp
040: * Completed implementation of Activity.abandon(String).
041: *
042: * Revision 1.3 2004/02/13 10:01:34 lipp
043: * Changed result type for result provider to Map which is more
044: * appropriate.
045: *
046: * Revision 1.2 2004/01/28 12:48:35 lipp
047: * Fixed comment.
048: *
049: * Revision 1.1 2003/11/26 16:14:14 lipp
050: * Added possibility to declare tool as ResultProvider.
051: *
052: */
053: package de.danet.an.workflow.spis.aii;
054:
055: /**
056: * This interface marks a <code>ToolAgent</code> as provider of a
057: * result during <code>invoke</code>.
058: *
059: * @author <a href="mailto:lipp@danet.de">Michael Lipp</a>
060: * @version $Revision: 1.3 $
061: * @since 1.1
062: * @see de.danet.an.workflow.spis.aii
063: */
064: public interface ResultProvider {
065:
066: /**
067: * A special kind of result that may be returned by
068: * <code>result</code>. It causes the activity to be abandoned and
069: * the exception name used in the constructor to be signaled to
070: * the workflow engine.
071: *
072: * @see de.danet.an.workflow.api.Activity#abandon(String)
073: */
074: public class ExceptionResult {
075: private String name;
076: private boolean suspendActivity = false;
077:
078: /**
079: * May be used by a tool agent implementation to create a
080: * special result that causes the activity to be abandoned,
081: * and the exception with the given name to be signaled to
082: * the workflow engine for transition evaluation.
083: * @param exceptionName the name of the exception to be
084: * signaled
085: */
086: public ExceptionResult(String exceptionName) {
087: name = exceptionName;
088: }
089:
090: /**
091: * May be used by a tool agent implementation to create a
092: * special result that causes the activity to be abandoned,
093: * and the exception with the given name to be signaled to
094: * the workflow engine for transition evaluation. In addition,
095: * the invoking activity may be suspended.
096: * @param exceptionName the name of the exception to be
097: * signaled
098: * @param suspendActivity if <code>true</code> suspend the
099: * invoking activity
100: */
101: public ExceptionResult(String exceptionName,
102: boolean suspendActivity) {
103: name = exceptionName;
104: this .suspendActivity = suspendActivity;
105: }
106:
107: /**
108: * Return the exception name passed to the constructor.
109: * @return the exception name
110: */
111: public String exceptionName() {
112: return name;
113: }
114:
115: /**
116: * Return the suspend activity flag passed to the constructor.
117: * @return the suspend activity flag
118: */
119: public boolean suspendActivity() {
120: return suspendActivity;
121: }
122: }
123:
124: /**
125: * Return the result evaluated during {@link ToolAgent#invoke
126: * <code>invoke</code>}. The method will only be called once after
127: * each invoke, i.e. the attribute holding the result may be
128: * cleared in this method to allow early garbage collection.<P>
129: *
130: * Note that since a tool agent implementation must be thread
131: * safe, the result evaluated during <code>invoke</code> must be
132: * kept in a <code>ThreadLocal</code> attribute.
133: *
134: * @return the result data as a {@link java.util.Map
135: * <code>Map</code>} of formal parameter names and values or
136: * <code>null</code> if the invocation does not return any
137: * data. As special case, an instance of
138: * <code>ExceptionResult</code> may be returned if the activity is
139: * to be abandoned.
140: */
141: Object result();
142: }
|