001 // Copyright 2002-2006 Waterken Inc. under the terms of the MIT X license
002 // found at http://www.opensource.org/licenses/mit-license.html
003 package org.ref_send.promise;
004
005 import org.joe_e.Struct;
006
007 /**
008 * An eventual conditional code block.
009 * @param <P> parameter type
010 * @param <R> return type
011 */
012 public abstract class
013 Do<P,R> extends Struct {
014
015 /**
016 * Constructs an instance.
017 */
018 protected
019 Do() {}
020
021 /**
022 * Notification of a fulfilled argument.
023 * @param arg argument to the code block
024 * @return code block's return value
025 * @throws Exception any exception produced by the code block
026 */
027 public abstract R fulfill(P arg) throws Exception;
028
029 /**
030 * Notification of a rejected argument.
031 * <p>
032 * The default implementation throws <code>reason</code>.
033 * </p>
034 * @param reason reason the code block's argument is not known
035 * @return code block's return value
036 * @throws Exception any exception produced by the code block
037 */
038 public R reject(final Exception reason) throws Exception { throw reason; }
039 }