001    package com.mockrunner.connector;
002    
003    import javax.resource.ResourceException;
004    import javax.resource.cci.InteractionSpec;
005    import javax.resource.cci.Record;
006    
007    /**
008     * Implementations of this interface can be addded to {@link InteractionHandler}.
009     * When one of the two <code>execute</code> methods of {@link com.mockrunner.mock.connector.cci.MockInteraction}
010     * are called, the {@link InteractionHandler} iterates through the implementors
011     * and dispatches the <code>execute</code> call to the first one which returns
012     * <code>true</code> for {@link #canHandle}.
013     * There are several implementations of this interface, e.g.
014     * {@link StreamableRecordByteArrayInteraction},
015     * {@link WSIFInteraction},
016     * {@link IndexedRecordInteraction},
017     * {@link MappedRecordInteraction}.
018     * Of course, you can also implement your own version and it may be necessary
019     * in many situations.
020     */
021    public interface InteractionImplementor 
022    {
023        /**
024         * Implementors should return <code>true</code> if this implementor can handle the request.
025         * Please note that for calls to {@link #execute(InteractionSpec, Record)},
026         * the second <code>Record</code> parameter is <code>null</code>.
027         * @param interactionSpec the <code>InteractionSpec</code> for the actual call
028         * @param actualRequest the request for the actual call
029         * @param actualResponse the response for the actual call, may be <code>null</code>
030         * @return <code>true</code> if this implementor will handle the request and
031         *         will return the specified response, <code>false</code> otherwise
032         */
033        public boolean canHandle(InteractionSpec interactionSpec, Record actualRequest, Record actualResponse);
034        
035        /**
036         * First version of the <code>Interaction.execute</code> methods.
037         * @param interactionSpec the interaction spec
038         * @param actualRequest the actual request
039         * @return the response according to the current request
040         */
041        public Record execute(InteractionSpec interactionSpec, Record actualRequest) throws ResourceException;
042        
043        /**
044         * Second version of the <code>Interaction.execute</code> methods.
045         * @param interactionSpec the interaction spec
046         * @param actualRequest the actual request
047         * @param actualResponse the actual response
048         * @return <code>true</code> under normal conditions
049         */
050        public boolean execute(InteractionSpec interactionSpec, Record actualRequest, Record actualResponse) throws ResourceException;
051    }