The following examples illustrate how to perform searches.
ArrayList<PSO> psos = new ArrayList<PSO>();
SessionAwareSpml2Client client = new SessionAwareSpml2Client("http://example.com:8080
/idm/servlet/openspml2");
ListTargetsResponse loginInfo = client.login("Configurator", "configurator");
SearchRequest searchReq = new SearchRequest();
EqualityMatch acctIdTerm = new EqualityMatch("firstname", new DSMLValue("Marcus"));
Present emailTerm = new Present("emailAddress");
org.openspml.v2.profiles.dsml.And terms = new
org.openspml.v2.profiles.dsml.And(new FilterItem[] { acctIdTerm, emailTerm });
Filter filter = new Filter(terms);
Query q = new Query();
q.setScope(Scope.ONELEVEL);
q.addQueryClause(filter);
searchReq.setQuery(q);
searchReq.setReturnData(ReturnData.IDENTIFIER);
searchReq.setExecutionMode(ExecutionMode.SYNCHRONOUS);
SearchResponse searchRes = (SearchResponse) client.request(searchReq);
if (searchRes.getStatus().equals(StatusCode.SUCCESS)) {
System.out.println("Received search response.");
for (PSO pso : searchRes.getPSOs()) {
psos.add(pso);
}
ResultsIterator iterator = searchRes.getIterator();
while (iterator != null) {
IterateRequest iterReq = new IterateRequest();
iterReq.setIterator(iterator);
iterReq.setExecutionMode(ExecutionMode.SYNCHRONOUS);
IterateResponse iterRes = (IterateResponse) client.request(iterReq);
if (iterRes.getStatus().equals(StatusCode.SUCCESS)) {
System.out.println("Found an iterator.");
}
for (PSO pso : iterRes.getPSOs()) {
psos.add(pso);
}
iterator = iterRes.getIterator();
}
}
// Close iterator example
ArrayList<PSO> psos = new ArrayList<PSO>();
SessionAwareSpml2Client client = new
SessionAwareSpml2Client("http://example.com:8080/idm/servlet/openspml2");
ListTargetsResponse loginInfo = client.login("Configurator", "configurator");
SearchRequest searchReq = new SearchRequest();
Present term = new Present("emailAddress");
Filter filter = new Filter(term);
Query q = new Query();
q.setScope(Scope.ONELEVEL);
q.addQueryClause(filter);
searchReq.setQuery(q);
searchReq.setReturnData(ReturnData.EVERYTHING);
searchReq.setExecutionMode(ExecutionMode.SYNCHRONOUS);
SearchResponse searchRes = (SearchResponse) client.request(searchReq);
if (searchRes.getStatus().equals(StatusCode.SUCCESS)) {
System.out.println("Received search response.");
for (PSO pso : searchRes.getPSOs()) {
psos.add(pso);
}
ResultsIterator iterator = searchRes.getIterator();
while (iterator != null) {
IterateRequest iterReq = new IterateRequest();
iterReq.setIterator(iterator);
iterReq.setExecutionMode(ExecutionMode.SYNCHRONOUS);
IterateResponse iterRes = (IterateResponse) client.request(iterReq);
if (iterRes.getStatus().equals(StatusCode.SUCCESS)) {
System.out.println("Found an iterator.");
}
for (PSO pso : iterRes.getPSOs()) {
psos.add(pso);
}
iterator = iterRes.getIterator();
// For this example, always close the iterator
if (true) {
CloseIteratorRequest closeIterReq = new CloseIteratorRequest();
closeIterReq.setIterator(iterator);
closeIterReq.setExecutionMode(ExecutionMode.SYNCHRONOUS);
CloseIteratorResponse closeIterRes = (CloseIteratorResponse)
client.request(closeIterReq);
if (closeIterRes.getStatus().equals(StatusCode.SUCCESS)) {
System.out.println("Closed iterator.");
break;
}
}
}
}