001    // Copyright 2007 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    /**
006     * A {@link Promise} resolver.
007     * @param <T> promised referent type
008     */
009    public interface
010    Resolver<T> extends Receiver<T> {
011        
012        /**
013         * Logs progress towards resolution.
014         */
015        void progress();
016    
017        /**
018         * Put the corresponding promise in the rejected state.
019         * <p>
020         * This method is syntactic sugar for:
021         * </p>
022         * <pre>
023         * {@link #resolve resolve}({@link Eventual#reject reject}(reason));
024         * </pre>
025         * @param reason    reason the corresponding promise will not be fulfilled
026         */
027        void reject(Exception reason);
028        
029        /**
030         * Resolve the corresponding promise to the given promise.
031         * @param promise   promise to forward requests to
032         */
033        void resolve(Promise<? extends T> promise);
034    
035        /**
036         * Resolve the corresponding promise to the given reference.
037         * @param referent  reference to forward requests to
038         */
039        void apply(T referent);
040    }