/** * 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; }
/** * 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); }
/** * 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); }
/** * 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; }
/** * 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); }