Search in sources :

Example 1 with ResultList

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;
}
Also used : IResultList(org.eclipse.ecf.presence.search.IResultList) ResultList(org.eclipse.ecf.presence.search.ResultList) User(org.eclipse.ecf.core.user.User) IUser(org.eclipse.ecf.core.user.IUser) Iterator(java.util.Iterator) IUser(org.eclipse.ecf.core.user.IUser) Row(org.jivesoftware.smackx.ReportedData.Row) URISyntaxException(java.net.URISyntaxException) XMPPID(org.eclipse.ecf.provider.xmpp.identity.XMPPID)

Example 2 with ResultList

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);
    }
}
Also used : IResultList(org.eclipse.ecf.presence.search.IResultList) ResultList(org.eclipse.ecf.presence.search.ResultList) Form(org.jivesoftware.smackx.Form) IResultList(org.eclipse.ecf.presence.search.IResultList) ECFException(org.eclipse.ecf.core.util.ECFException) Iterator(java.util.Iterator) IResultList(org.eclipse.ecf.presence.search.IResultList) List(java.util.List) ResultList(org.eclipse.ecf.presence.search.ResultList) XMPPException(org.jivesoftware.smack.XMPPException) ICriterion(org.eclipse.ecf.presence.search.ICriterion) UserSearchException(org.eclipse.ecf.presence.search.UserSearchException) ReportedData(org.jivesoftware.smackx.ReportedData)

Aggregations

Iterator (java.util.Iterator)2 IResultList (org.eclipse.ecf.presence.search.IResultList)2 ResultList (org.eclipse.ecf.presence.search.ResultList)2 URISyntaxException (java.net.URISyntaxException)1 List (java.util.List)1 IUser (org.eclipse.ecf.core.user.IUser)1 User (org.eclipse.ecf.core.user.User)1 ECFException (org.eclipse.ecf.core.util.ECFException)1 ICriterion (org.eclipse.ecf.presence.search.ICriterion)1 UserSearchException (org.eclipse.ecf.presence.search.UserSearchException)1 XMPPID (org.eclipse.ecf.provider.xmpp.identity.XMPPID)1 XMPPException (org.jivesoftware.smack.XMPPException)1 Form (org.jivesoftware.smackx.Form)1 ReportedData (org.jivesoftware.smackx.ReportedData)1 Row (org.jivesoftware.smackx.ReportedData.Row)1