001: /*
002: * This file is part of the WfMOpen project.
003: * Copyright (C) 2001-2005 Danet GmbH (www.danet.de), BU BTS.
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: ExceptionMappingProvider.java,v 1.6 2006/10/13 11:39:46 drmlipp Exp $
021: *
022: * $Log: ExceptionMappingProvider.java,v $
023: * Revision 1.6 2006/10/13 11:39:46 drmlipp
024: * Added new attribute suspendActivity to exception mapping
025: * and ExceptionResultProvider.
026: *
027: * Revision 1.5 2006/10/12 20:53:27 mlipp
028: * Started exception handling extension.
029: *
030: * Revision 1.4 2006/09/29 12:32:10 drmlipp
031: * Consistently using WfMOpen as projct name now.
032: *
033: * Revision 1.3 2005/09/05 09:41:49 drmlipp
034: * Synchronized with 1.3.2.
035: *
036: * Revision 1.2 2005/08/25 13:24:22 drmlipp
037: * Synchronized with 1.3.1p6.
038: *
039: * Revision 1.1.2.3 2005/08/25 11:11:26 drmlipp
040: * Fixed JavaDoc.
041: *
042: * Revision 1.1.2.2 2005/08/24 20:40:19 drmlipp
043: * Completed implementation of exception mapping.
044: *
045: * Revision 1.1.2.1 2005/08/24 14:14:52 drmlipp
046: * Started implementation of exception mapping.
047: *
048: */
049: package de.danet.an.workflow.spis.aii;
050:
051: import java.io.Serializable;
052: import java.util.Collection;
053:
054: /**
055: * This interface must be implemented by <code>ToolAgent</code>s that want
056: * the workflow engine to map the causes of {@link CannotExecuteException
057: * <code>CannotExecuteException</code>s} to process exceptions that cause the
058: * current activity to be abandoned. This state change will then be handled by
059: * special transitions in the process description.
060: * <P>
061: *
062: * The mappings provided by a tool can always be extended or restricted by the
063: * application definition in the process description. See the user manual for
064: * details.
065: *
066: * @author <a href="mailto:lipp@danet.de">Michael Lipp</a>
067: * @version $Revision: 1.6 $
068: * @see de.danet.an.workflow.api.Activity#abandon(String)
069: */
070: public interface ExceptionMappingProvider {
071:
072: /**
073: * Define a single exception mapping.
074: */
075: class ExceptionMapping implements Serializable {
076:
077: private Class javaException = null;
078:
079: private String processException = null;
080:
081: private boolean suspendActivity = false;
082:
083: /**
084: * Create a new mapping. If the tool throws a
085: * <code>CannotExecuteException</code> with a Java exception of the
086: * given class (or derived from the given class) as cause, then this
087: * Java exception is mapped to the given process exception.
088: *
089: * @param javaException
090: * the Java exception
091: * @param processException
092: * the process exception
093: */
094: public ExceptionMapping(Class javaException,
095: String processException) {
096: this .javaException = javaException;
097: this .processException = processException;
098: }
099:
100: /**
101: * Create a new mapping. If the tool throws a
102: * <code>CannotExecuteException</code> with a Java exception of the
103: * given class (or derived from the given class) as cause, then the
104: * invoking activity is suspended.
105: *
106: * @param javaException
107: * the Java exception
108: * @param processException
109: * the process exception
110: * @param suspend
111: * if <code>true</code> the invoking activity is suspended
112: */
113: public ExceptionMapping(Class javaException,
114: String processException, boolean suspend) {
115: this .javaException = javaException;
116: this .processException = processException;
117: this .suspendActivity = suspend;
118: }
119:
120: /**
121: * Create a new mapping. If the tool throws a
122: * <code>CannotExecuteException</code> with a Java exception of the
123: * given class (or derived from the given class) as cause, then the
124: * invoking activity is suspended.
125: *
126: * @param javaException
127: * the Java exception
128: * @param processException
129: * the process exception
130: */
131: public ExceptionMapping(Class javaException) {
132: this .javaException = javaException;
133: this .suspendActivity = true;
134: }
135:
136: /**
137: * Get the value of javaException.
138: *
139: * @return value of javaException.
140: */
141: public Class getJavaException() {
142: return javaException;
143: }
144:
145: /**
146: * Get the value of processException.
147: *
148: * @return value of processException.
149: */
150: public String getProcessException() {
151: return processException;
152: }
153:
154: /**
155: * @return Returns <code>true</code> if the invoking activity is to be
156: * suspended in response to the exception.
157: */
158: public boolean getSuspendActivity() {
159: return suspendActivity;
160: }
161: }
162:
163: /**
164: * Return the collection of mappings predefined by this tool.
165: *
166: * @return the mappings
167: */
168: Collection exceptionMappings();
169: }
|