/*******************************************************************************
* Copyright (c) 2008 Marcelo Mayworm. All rights reserved. This
* program and the accompanying materials are made available under the terms of
* the Eclipse Public License v1.0 which accompanies this distribution, and is
* available at http://www.eclipse.org/legal/epl-v10.html
*
* Contributors: Marcelo Mayworm - initial API and implementation
*
******************************************************************************/
package org.eclipse.ecf.tests.provider.xmpp.search;
import java.util.Iterator;
import org.eclipse.ecf.core.ContainerConnectException;
import org.eclipse.ecf.core.IContainer;
import org.eclipse.ecf.core.identity.ID;
import org.eclipse.ecf.core.util.ECFException;
import org.eclipse.ecf.presence.search.ICriteria;
import org.eclipse.ecf.presence.search.ICriterion;
import org.eclipse.ecf.presence.search.IRestriction;
import org.eclipse.ecf.presence.search.IResult;
import org.eclipse.ecf.presence.search.IResultList;
import org.eclipse.ecf.presence.search.ISearch;
import org.eclipse.ecf.presence.search.IUserSearchCompleteEvent;
import org.eclipse.ecf.presence.search.IUserSearchEvent;
import org.eclipse.ecf.presence.search.IUserSearchListener;
import org.eclipse.ecf.presence.search.IUserSearchManager;
import org.eclipse.ecf.presence.search.UserSearchException;
import org.eclipse.ecf.tests.presence.AbstractSearchTest;
import org.eclipse.ecf.tests.provider.xmpp.XMPP;
/**
*
* @since 3.0
*/
public class XMPPSearchTest extends AbstractSearchTest {
private static final String USERNAME = "Username";
private static final String EMAIL = "Email";
private static final String NAME = "Name";
IContainer client;
IUserSearchManager searchManager;
ISearch searchResult;
protected String getClientContainerName() {
return XMPP.CONTAINER_NAME;
}
public void testRetrieveBuddiesAsync() throws Exception {
assertNotNull(searchManager);
IRestriction selection = searchManager.createRestriction();
assertNotNull(selection);
// fields to consider on XMPP server side search
// search field for XMPP, criterion to match the search
ICriterion name = selection.eq(NAME, "Marcelo*");
ICriterion email = selection.eq(EMAIL, "zx*");
ICriterion username = selection.eq(USERNAME, "sl*");
// create a specific criteria
final ICriteria criteria = searchManager.createCriteria();
assertNotNull(criteria);
criteria.add(name);
criteria.add(email);
criteria.add(username);
IUserSearchListener listenerCompleted = new IUserSearchListener() {
public void handleUserSearchEvent(IUserSearchEvent event) {
if (event instanceof IUserSearchCompleteEvent) {
searchResult = ((IUserSearchCompleteEvent) event)
.getSearch();
}
}
};
// call the non-block search
searchManager.search(criteria, listenerCompleted);
assertNull(searchResult);
Thread.sleep(5000);
// put the completion result on the search handle
if (searchResult == null)
return;
assertNotNull(searchResult);
// check if there is at least one result
assertTrue(0 != searchResult.getResultList().getResults().size());
}
/**
* Try to locate buddies on the XMPP server in a call block way
*
* @throws ContainerConnectException
*/
public void testRetrieveBuddiesAllFieldsSync()
throws ContainerConnectException {
try {
assertNotNull(searchManager);
IRestriction selection = searchManager.createRestriction();
assertNotNull(selection);
// fields to consider on XMPP server side search
// search field for XMPP, criterion to match the search
ICriterion name = selection.eq(NAME, "Marcelo*");
ICriterion email = selection.eq(EMAIL, "zx*");
ICriterion username = selection.eq(USERNAME, "sl*");
// create a specific criteria
ICriteria criteria = searchManager.createCriteria();
assertNotNull(criteria);
criteria.add(name);
criteria.add(email);
criteria.add(username);
// call the block search
ISearch search = searchManager.search(criteria);
// the collection of IResult
IResultList resultList = search.getResultList();
// check if there is at least one result
assertTrue(0 != resultList.getResults().size());
Iterator it = resultList.getResults().iterator();
while (it.hasNext()) {
IResult type = (IResult) it.next();
System.out.println(type.getUser().getName() + " : "
+ type.getUser().getID());
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* Try to locate buddies on the XMPP server in a call block way
*
* @throws ContainerConnectException
*/
public void testRetrieveBuddiesEmailFieldSync() throws Exception {
assertNotNull(searchManager);
IRestriction selection = searchManager.createRestriction();
assertNotNull(selection);
// search field for XMPP, criterion to match the search
// fields to consider on XMPP server side search
ICriterion email = selection.eq(EMAIL, "mayworm*");
// create a specific criteria
ICriteria criteria = searchManager.createCriteria();
assertNotNull(criteria);
criteria.add(email);
// call the block search
try {
ISearch search = searchManager.search(criteria);
// the collection of IResult
IResultList resultList = search.getResultList();
// check if there is at least one result
int resultListSize = resultList.getResults().size();
if (resultListSize == 0) System.out.println("XMPPSearchTest.testRetrieveBuddiesEmailFieldSync...no email field retrieved");
else assertTrue(1 == resultListSize);
} catch (UserSearchException e) {
e.printStackTrace();
}
}
/**
* Try to locate buddies on the XMPP server in a call block way
*
* @throws ContainerConnectException
*/
public void testRetrieveBuddiesNameFieldSync() throws Exception {
assertNotNull(searchManager);
IRestriction selection = searchManager.createRestriction();
assertNotNull(selection);
// fields to consider on XMPP server side search
// search field for XMPP, criterion to match the search
ICriterion name = selection.eq(NAME, "marcelo*");
// create a specific criteria
try {
ICriteria criteria = searchManager.createCriteria();
assertNotNull(criteria);
// criteria.add(searchCriterion);
criteria.add(name);
// call the block search
ISearch search = searchManager.search(criteria);
// the collection of IResult
IResultList resultList = search.getResultList();
int resultListSize = resultList.getResults().size();
if (resultListSize == 0) System.out.println("XMPPSearchTest.testRetrieveBuddiesNameFieldSync...no email field retrieved");
else assertTrue(1 == resultListSize);
} catch (UserSearchException e) {
e.printStackTrace();
}
}
protected void setUp() throws Exception {
super.setUp();
final int clientIndex = 0;
client = getClient(clientIndex);
assertNull(client.getConnectedID());
final ID serverConnectID = getServerConnectID(clientIndex);
assertNotNull(serverConnectID);
connectClient(client, serverConnectID, getConnectContext(clientIndex));
assertEquals(serverConnectID, client.getConnectedID());
searchManager = getPresenceAdapter(clientIndex).getUserSearchManager();
}
protected void tearDown() throws Exception {
// This is a possible workaround for what appears to be Smack bug: https://bugs.eclipse.org/bugs/show_bug.cgi?id=321032
Thread.sleep(2000);
super.tearDown();
client.disconnect();
}
public void testUserProperties() throws ECFException {
assertNotNull(searchManager);
try {
String userProperties[] = searchManager.getUserPropertiesFields();
// check if there is at least one result
assertTrue(0 != userProperties.length);
} catch (ECFException e) {
e.printStackTrace();
}
}
}