CallResult.java |
/* * $Id: CallResult.java,v 1.26 2012/04/16 19:40:39 agoubard Exp $ * * See the COPYRIGHT file for redistribution and use restrictions. */ package org.xins.common.service; import java.io.Serializable; import java.util.List; import org.xins.common.MandatoryArgumentChecker; /** * Result of a call to a service. The actual result is returned, combined with * links to the services that failed and a link to the service to which the * call succeeded. * * <p>This is an <code>abstract</code> class. Service callers return a * specific kind of result, which is derived from this class. * * @version $Revision: 1.26 $ $Date: 2012/04/16 19:40:39 $ * @author <a href="mailto:ernst@ernstdehaan.com">Ernst de Haan</a> * * @since XINS 1.0.0 */ public abstract class CallResult implements Serializable { /** * The call request. This field cannot be <code>null</code>. */ private final CallRequest _request; /** * The target for which the call succeeded. This field cannot be * <code>null</code>. */ private final TargetDescriptor _succeededTarget; /** * The call duration, in milliseconds. */ private final long _duration; /** * The list of <code>CallException</code>s. This field may be * <code>null</code>. */ private final List<CallException> _exceptions; /** * Constructs a new <code>CallResult</code> object. * * @param request * the call request that resulted in this result, cannot be * <code>null</code>. * * @param succeededTarget * the target for which the call succeeded, cannot be <code>null</code>. * * @param duration * the call duration in milliseconds, cannot be a negative number. * * @param exceptions * the list of {@link CallException}s, or <code>null</code> if the first * call attempt succeeded. * * @throws IllegalArgumentException * if <code>request == null * || succeededTarget == null * || duration < 0L</code>. */ protected CallResult(CallRequest request, TargetDescriptor succeededTarget, long duration, List<CallException> exceptions) throws IllegalArgumentException { // Check preconditions MandatoryArgumentChecker.check("request", request, "succeededTarget", succeededTarget); if (duration < 0L) { throw new IllegalArgumentException( "duration (" + duration + "L) < 0L"); } // Set fields _request = request; _succeededTarget = succeededTarget; _duration = duration; _exceptions = exceptions; } /** * Returns the call request. * * @return * the {@link CallRequest}, never <code>null</code>. */ public final CallRequest getRequest() { return _request; } /** * Returns the target for which the call succeeded. * * @return * the {@link TargetDescriptor} for which the call succeeded, not * <code>null</code>. */ public final TargetDescriptor getSucceededTarget() { return _succeededTarget; } /** * Returns the call duration, in milliseconds. * * @return * the duration of the succeeded call, in milliseconds, guaranteed to * be a non-negative number. */ public final long getDuration() { // XXX: Duration of succeeded call or of the complete attempt? return _duration; } /** * Returns the list of <code>CallException</code>s. * * @return * the {@link CallException}s, collected in a {@link CallExceptionList} * object, or <code>null</code> if the first call attempt succeeded. */ public final List<CallException> getExceptions() { return _exceptions; } }