CallContext.java |
/* * $Id: CallContext.java,v 1.132 2012/02/28 18:10:54 agoubard Exp $ * * See the COPYRIGHT file for redistribution and use restrictions. */ package org.xins.server; import java.util.Map; import org.xins.common.MandatoryArgumentChecker; import org.w3c.dom.Element; /** * Context for a function call. Objects of this kind are passed with a * function call. * * @version $Revision: 1.132 $ $Date: 2012/02/28 18:10:54 $ * @author <a href="mailto:ernst@ernstdehaan.com">Ernst de Haan</a> * * @since XINS 1.0.0 */ public final class CallContext { /** * The parameters of the request. */ private final Map<String, String> _parameters; /** * The data section of the request. */ private final Element _dataElement; /** * The call result builder. Cannot be <code>null</code>. */ private final FunctionResult _builder; /** * The call ID, unique in the context of the pertaining function. */ private final int _callID; /** * The backpack. */ private final Map<String, Object> _backpack; /** * Constructs a new <code>CallContext</code> and configures it for the * specified request. * * @param functionRequest * the request, never <code>null</code>. * * @param function * the concerning function, cannot be <code>null</code>. * * @param callID * the assigned call ID. * * @throws IllegalArgumentException * if <code>functionRequest == null || function == null</code>. */ CallContext(FunctionRequest functionRequest, Function function, int callID) throws IllegalArgumentException { // Check preconditions MandatoryArgumentChecker.check("functionRequest", functionRequest, "function", function); // Initialize fields _parameters = functionRequest.getParameters(); _dataElement = functionRequest.getDataElement(); _callID = callID; _backpack = functionRequest.getBackpack(); _builder = new FunctionResult(); } /** * Returns the stored return code. * * @return * the return code, can be <code>null</code>. */ final String getErrorCode() { return _builder.getErrorCode(); } /** * Returns the value of a parameter with the specificied name. Note that * reserved parameters, i.e. those starting with an underscore * (<code>'_'</code>) cannot be retrieved. * * @param name * the name of the parameter, not <code>null</code>. * * @return * the value of the parameter, or <code>null</code> if the parameter is * not set, never an empty string (<code>""</code>) because it will be * returned as being <code>null</code>. * * @throws IllegalArgumentException * if <code>name == null</code>. */ public String getParameter(String name) throws IllegalArgumentException { // Check arguments if (name == null) { throw new IllegalArgumentException("name == null"); } // XXX: In a later version, support a parameter named 'function' if (_parameters != null && name.length() > 0 && !"function".equals(name) && name.charAt(0) != '_') { String value = _parameters.get(name); return "".equals(value) ? null : value; } return null; } /** * Returns the data section of the request, if any. * * @return * the element representing the data section or <code>null</code> if the * function does not define a data section or if the data section sent is * empty. */ public Element getDataElement() { return _dataElement; } /** * Returns the assigned call ID. This ID is unique within the context of * the pertaining function. If no call ID is assigned, then <code>-1</code> * is returned. * * @return * the assigned call ID for the function, or <code>-1</code> if none is * assigned. */ public int getCallID() { return _callID; } /** * Returns the backpack of this request. * * @return * the backpack. */ public Map<String, Object> getBackpack() { return _backpack; } }