001: // $HeadURL: https://svn.wald.intevation.org/svn/deegree/base/trunk/src/org/deegree/framework/concurrent/ExecutionFinishedEvent.java $
002: /*---------------- FILE HEADER ------------------------------------------
003:
004: This file is part of deegree.
005: Copyright (C) 2001-2008 by:
006: EXSE, Department of Geography, University of Bonn
007: http://www.giub.uni-bonn.de/deegree/
008: lat/lon GmbH
009: http://www.lat-lon.de
010:
011: This library is free software; you can redistribute it and/or
012: modify it under the terms of the GNU Lesser General Public
013: License as published by the Free Software Foundation; either
014: version 2.1 of the License, or (at your option) any later version.
015:
016: This library is distributed in the hope that it will be useful,
017: but WITHOUT ANY WARRANTY; without even the implied warranty of
018: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
019: Lesser General Public License for more details.
020:
021: You should have received a copy of the GNU Lesser General Public
022: License along with this library; if not, write to the Free Software
023: Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
024:
025: Contact:
026:
027: Andreas Poth
028: lat/lon GmbH
029: Aennchenstr. 19
030: 53177 Bonn
031: Germany
032: E-Mail: poth@lat-lon.de
033:
034: Prof. Dr. Klaus Greve
035: Department of Geography
036: University of Bonn
037: Meckenheimer Allee 166
038: 53115 Bonn
039: Germany
040: E-Mail: greve@giub.uni-bonn.de
041:
042: ---------------------------------------------------------------------------*/
043: package org.deegree.framework.concurrent;
044:
045: import java.util.concurrent.Callable;
046: import java.util.concurrent.CancellationException;
047:
048: /**
049: * Event that is sent when asynchronous task finished.
050: * <p>
051: * This can mean:
052: * <ul>
053: * <li>it finished successfully</li>
054: * <li>it terminated abnormally (with an exception or error)</li>
055: * <li>a time out occurred during the performing of the task (or it's thread has been
056: * cancelled)</li>
057: * </ul>
058: * </p>
059: * <p>
060: * If the task did not finish successfully, the thrown exception / error is rethrown when
061: * {@link #getResult()} is called.
062: * </p>
063: *
064: * @author <a href="mailto:poth@lat-lon.de">Andreas Poth</a>
065: * @author <a href="mailto:schneider@lat-lon.de">Markus Schneider</a>
066: * @author last edited by: $Author: apoth $
067: *
068: * @version $Revision: 9339 $, $Date: 2007-12-27 04:31:52 -0800 (Thu, 27 Dec 2007) $
069: * @param <T> type of return value
070: */
071: public class ExecutionFinishedEvent<T> {
072:
073: private Callable task;
074:
075: private T result;
076:
077: private Throwable t;
078:
079: /**
080: * Constructs an <code>ExecutionFinishedEvent</code> for a task that finished
081: * successfully.
082: *
083: * @param task
084: * @param result
085: */
086: ExecutionFinishedEvent(Callable task, T result) {
087: this .task = task;
088: this .result = result;
089: }
090:
091: /**
092: * Constructs an <code>ExecutionFinishedEvent</code> for a task that terminated
093: * abnormally.
094: *
095: * @param t Throwable that the terminated task threw
096: * @param task
097: */
098: ExecutionFinishedEvent(Throwable t, Callable task) {
099: this .task = task;
100: this .t = t;
101: }
102:
103: /**
104: * Returns the corresponding task instance.
105: *
106: * @return the corresponding task instance
107: */
108: public Callable getTask() {
109: return this .task;
110: }
111:
112: /**
113: * Returns the result value that the finished task returned.
114: * <p>
115: * If the task produced an exception or error, it is rethrown here. If the task has been
116: * cancelled (usually this means that the time out occurred), a {@link CancellationException}
117: * is thrown.
118: *
119: * @return the result value that the task returned
120: * @throws CancellationException
121: * if task timed out / has been cancelled
122: * @throws Throwable
123: * if task terminated with an exception or error
124: */
125: public T getResult() throws CancellationException, Throwable {
126: if (this.t != null) {
127: throw t;
128: }
129: return this.result;
130: }
131: }
|