XINSCallResult.java |
/* * $Id: XINSCallResult.java,v 1.34 2013/01/22 15:13:22 agoubard Exp $ * * See the COPYRIGHT file for redistribution and use restrictions. */ package org.xins.client; import java.util.List; import java.util.Map; import org.xins.common.MandatoryArgumentChecker; import org.xins.common.service.CallResult; import org.xins.common.service.TargetDescriptor; import org.xins.common.service.CallException; import org.w3c.dom.Element; /** * Successful result of a call to a XINS service. It may be that some targets * failed before a target returned a successful result. All the failures are * also stored in this object. * * <p>When a <code>XINSCallResult</code> instance is created, information must * be passed both about the successful call (which target successfully * returned a result, how long did it take, what was the result) and about the * unsuccessful calls (to which targets were they, what was the error, etc.) * * <p>While a {@link XINSCallResultData} object describes the result of a call * to an single target, a <code>XINSCallResultData</code> also describes all * failed calls that happened before. * * @version $Revision: 1.34 $ $Date: 2013/01/22 15:13:22 $ * @author <a href="mailto:ernst@ernstdehaan.com">Ernst de Haan</a> * * @since XINS 1.0.0 */ public final class XINSCallResult extends CallResult implements XINSCallResultData { /** * The <code>XINSCallResultData</code> object that contains all the * information returned from the call. This field can be * <code>null</code> for not modified result. */ private final XINSCallResultData _data; /** * Constructs a new <code>XINSCallResult</code> object. * * @param request * the original {@link XINSCallRequest} that was used to perform the * call, cannot be <code>null</code>. * * @param succeededTarget * the {@link TargetDescriptor} that was used to successfully get the * result, cannot be <code>null</code>. * * @param duration * the call duration, should be >= 0. * * @param exceptions * the list of {@link org.xins.common.service.CallException}s, collected * in a {@link List} object, or <code>null</code> if the * first call attempt succeeded. * * @param data * the {@link XINSCallResultData} returned from the call, can be * <code>null</code> for not modified result. * * @throws IllegalArgumentException * if <code>request == null * || succeededTarget == null * || data == null * || duration < 0</code>. */ XINSCallResult(XINSCallRequest request, TargetDescriptor succeededTarget, long duration, List<CallException> exceptions, XINSCallResultData data) throws IllegalArgumentException { super(request, succeededTarget, duration, exceptions); _data = data; } /** * Returns the error code. If <code>null</code> is returned the call was * successful and thus no error code was returned. Otherwise the call was * unsuccessful. * * <p>This method will never return an empty string, so if the result is * not <code>null</code>, then it is safe to assume the length of the * string is at least 1 character. * * @return * the returned error code, or <code>null</code> if the call was successful. */ public String getErrorCode() { if (_data == null) { throw new IllegalStateException("As not modified was returned from the API, no data information is available."); } return _data.getErrorCode(); } /** * Gets all parameters. * * @return * a {@link Map} with all parameters, or <code>null</code> if there are none. */ public Map<String, String> getParameters() { if (_data == null) { throw new IllegalStateException("As not modified was returned from the API, no data information is available."); } return _data.getParameters(); } /** * Gets the value of the specified parameter. * * @param name * the parameter element name, not <code>null</code>. * * @return * string containing the value of the parameter element, * or <code>null</code> if the parameter has no value. * * @throws IllegalArgumentException * if <code>name == null</code>. */ public String getParameter(String name) throws IllegalArgumentException { // Check preconditions MandatoryArgumentChecker.check("name", name); Map<String, String> params = getParameters(); // Short-circuit if there are no parameters at all if (params == null) { return null; } // Otherwise return the parameter value return params.get(name); } /** * Returns the optional extra data. The data is an XML {@link Element}, * or <code>null</code>. * * @return * the extra data as an XML {@link Element}, can be <code>null</code>. */ public Element getDataElement() { if (_data == null) { throw new IllegalStateException("As not modified was returned from the API, no data information is available."); } return _data.getDataElement(); } /** * Returns whether the result was a not modified result. * * @return * <code>true</code> if not modified was returned from the server, * <code>false</code> if a result with data was returned from the server. * @since XINS 3.1. */ public boolean isNotModified() { return _data == null; } }