use of org.eclipse.ecf.presence.search.ResultList in project ecf by eclipse.
the class XMPPUserSearchManager method createResultList.
/**
* Create a result list from ReportedData. Identify dynamically columns and
* rows and create users adding it to a {@link IResultList}
*
* @param data
* ReportedData
* @return {@link IResultList} a list of users
* @throws
*/
protected IResultList createResultList(ReportedData data) {
ResultList result = new ResultList();
Iterator rows = data.getRows();
while (rows.hasNext()) {
Row row = (Row) rows.next();
Iterator jids = row.getValues(JID);
Iterator names = row.getValues(NAME);
String jid = null;
String name = null;
// XMPP server returns the same length for both
while (jids.hasNext() && names.hasNext()) {
try {
jid = (String) jids.next();
name = (String) names.next();
IUser user = new User(new XMPPID(connectNamespace, jid), name);
result.add(new XMPPResultItem(user));
} catch (URISyntaxException e) {
throw new RuntimeException(// $NON-NLS-1$
"cannot create connect id for client " + jid + " , name = " + name, // $NON-NLS-1$
e);
}
}
}
return result;
}
use of org.eclipse.ecf.presence.search.ResultList in project ecf by eclipse.
the class XMPPUserSearchManager method search.
/**
* Specific implementation for XMPP
*
* @see IUserSearchManager#search(ICriteria).
*/
public ISearch search(ICriteria criteria) throws UserSearchException {
ResultList resultList = new ResultList();
try {
// initialize the form by chance it is null
if (form == null)
form = manager.getSearchForm(ecfConnection.getXMPPConnection(), SERVICE_SEARCH + ecfConnection.getXMPPConnection().getServiceName());
/*
* For XMPP criterion is considered. The XMPP server will deal with
* the search.
*/
List criterions = criteria.getCriterions();
// add the fields for the search dynamically
// consider just the fields used on the search
// fields checked by user
String[] fields = getUserPropertiesFields();
for (int i = 0; i < fields.length; i++) {
Iterator criterionsIterator = criterions.iterator();
// the partial result is added to the result list
while (criterionsIterator.hasNext()) {
ICriterion criterion = (ICriterion) criterionsIterator.next();
if (criterion.equals(fields[i])) {
Form answerForm = form.createAnswerForm();
answerForm.setAnswer(fields[i], true);
answerForm.setAnswer(SEARCH_ACTION, criterion.toExpression());
ReportedData data = manager.sendSearchForm(ecfConnection.getXMPPConnection(), answerForm, SERVICE_SEARCH + ecfConnection.getXMPPConnection().getServiceName());
// create a result list from ReportedData
IResultList partialResultList = createResultList(data);
resultList.addAll(partialResultList.getResults());
}
}
}
return new XMPPSearch(resultList);
} catch (final XMPPException e) {
String message = null;
if (e.getXMPPError() != null && e.getXMPPError().getCode() == 404) {
message = Messages.XMPPContainer_UNRECOGONIZED_SEARCH_SERVICE;
} else {
message = e.getLocalizedMessage();
}
throw new UserSearchException(message, e, criteria);
} catch (ECFException e) {
throw new UserSearchException(e, criteria);
}
}
Aggregations