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