示例#1
0
 /**
  * This method is called to send a the results of an asynchronous service execution to a
  * requesting component.
  *
  * @param input Object containing information on the requesting component
  * @param atts AttributeNameValues containing the service results
  * @return result of sending the service results
  * @see CommunicationsHandler#userRequest(DataObject,String,String,int)
  */
 protected DataObject sendServiceResult(ServiceInput input, Attributes atts) {
   Vector v = new Vector();
   v.addElement(new DataObject(Constants.ID, input.getId()));
   input.setInput(null);
   v.addElement(input.toDataObject());
   v.addElement(atts.toDataObject());
   DataObject result = new DataObject(SERVICE_RESULT, v);
   try {
     return comm.userRequest(
         result, SERVICE_RESULT, input.getHostname(), Integer.parseInt(input.getPort()));
   } catch (DecodeException de) {
     System.out.println("Service sendServiceResult() Decode: " + de);
   } catch (EncodeException ee) {
     System.out.println("Service sendServiceResult() Encode: " + ee);
   } catch (InvalidDecoderException ide) {
     System.out.println("Service sendServiceResult() InvalidDecoder: " + ide);
   } catch (InvalidEncoderException iee) {
     System.out.println("Service sendServiceResult() InvalidEncoder: " + iee);
   } catch (InvalidProtocolException ipe) {
     System.out.println("Service sendServiceResult() InvalidProtocol: " + ipe);
   } catch (ProtocolException pe) {
     System.out.println("Service sendServiceResult() Protocol: " + pe);
   } catch (IOException io) {
     System.out.println("Service sendServiceResult() IOException: " + io);
   }
   return null;
 }
示例#2
0
  /**
   * This method ensures that the incoming attributes are correct and calls interpretData(). It
   * returns the interpreted results.
   *
   * @param data Incoming interpret request
   * @param error Incoming error, if any
   * @return interpreted results
   * @see #interpretData(AttributeNameValues)
   */
  public DataObject callInterpreter(DataObject data, String error) {
    Vector v = new Vector();
    DataObject result = new DataObject(INTERPRET_REPLY, v);
    Attributes dataToInterpret = null;
    Error err = new Error(error);
    if (err.getError() == null) {
      dataToInterpret = new Attributes(data);
      if (dataToInterpret == null) {
        err.setError(Error.MISSING_PARAMETER_ERROR);
      } else if (!canHandle(dataToInterpret)) {
        err.setError(Error.INVALID_ATTRIBUTE_ERROR);
      }
    }

    if (err.getError() == null) {
      Attributes interpreted = interpretData(dataToInterpret);
      if (interpreted != null) {
        v.addElement(interpreted.toDataObject());
        err.setError(Error.NO_ERROR);
      } else {
        err.setError(Error.INVALID_DATA_ERROR);
      }
    }
    v.addElement(err.toDataObject());
    return result;
  }
 /**
  * This method converts the service function info to a DataObject
  *
  * @return FunctionDescription object converted to a <FUNCTION> DataObject
  */
 public DataObject toDataObject() {
   DataObjects v = new DataObjects();
   v.addElement(new DataObject(FUNCTION_NAME, name));
   v.addElement(new DataObject(FUNCTION_DESCRIPTION, description));
   if (attributes != null) {
     v.addElement(attributes.toDataObject());
   }
   v.addElement(new DataObject(FUNCTION_SYNCHRONICITY, synchronicity));
   return new DataObject(FUNCTION, v);
 }
示例#4
0
 /**
  * This method converts the subscriber info to a DataObject
  *
  * @return Subscriber object converted to a <SUBSCRIBER> DataObject
  */
 public DataObject toDataObject() {
   Vector v = new Vector();
   v.addElement(new DataObject(SUBSCRIBER_ID, id));
   v.addElement(new DataObject(HOSTNAME, host));
   v.addElement(new DataObject(PORT, Integer.toString(port)));
   v.addElement(new DataObject(CALLBACK_NAME, callback));
   v.addElement(new DataObject(CALLBACK_TAG, tag));
   v.addElement(conditions.toDataObject());
   v.addElement(attributes.toDataObject());
   return new DataObject(SUBSCRIBER, v);
 }
示例#5
0
  /**
   * This method runs a query on a widget, asking for either it's latest acquired data (QUERY) or
   * asking for the widget to acquire and return new data (UPDATE_AND_QUERY). Currently, it deals
   * with QUERY and UPDATE_AND_QUERY in exactly the same way.
   *
   * @param query DataObject containing the query request
   * @param update Whether or not to acquire new data
   * @param error String containing the incoming error value
   * @return DataObject containing the reply to the query
   */
  protected DataObject queryWidget(DataObject query, boolean update, String error) {
    System.out.println(query);
    DataObject result = null;
    Vector v = new Vector();
    if (update) {
      result = new DataObject(UPDATE_AND_QUERY_REPLY, v);
    } else {
      result = new DataObject(QUERY_REPLY, v);
    }

    Attributes atts = new Attributes(query);
    Error err = new Error(error);
    if (err.getError() == null) {
      if (atts == null) {
        err.setError(Error.MISSING_PARAMETER_ERROR);
      } else if (!canHandle(atts)) {
        err.setError(Error.INVALID_ATTRIBUTE_ERROR);
      }
    }

    if (err.getError() == null) {
      Attributes subset = attributesCache.getSubset(atts);
      if (subset.numAttributes() == 0) {
        err.setError(Error.INVALID_DATA_ERROR);
      } else {
        v.addElement(subset.toDataObject());
        if (subset.numAttributes() >= atts.numAttributes()) {
          err.setError(Error.NO_ERROR);
        } else {
          err.setError(Error.INCOMPLETE_DATA_ERROR);
        }
      }
    }
    v.addElement(err.toDataObject());
    return result;
  }
示例#6
0
 /**
  * This method converts the Callback object to a DataObject
  *
  * @return Callback object converted to a <CALLBACK> DataObject
  */
 public DataObject toDataObject() {
   DataObjects v = new DataObjects();
   v.addElement(new DataObject(CALLBACK_NAME, name));
   v.addElement(attributes.toDataObject());
   return new DataObject(CALLBACK, v);
 }