InitialLdapContext context = new InitialLdapContext(env, null);
// Search
Query qry=new QueryImpl(attributes,0,"query");
try {
NamingEnumeration results = context.search(start, filter, controls);
// Fill result
int row=1;
if(!attEQAsterix) {
while(results.hasMoreElements()) {
SearchResult resultRow = (SearchResult)results.next();
if(row++<startrow)continue;
int len=qry.addRow();
NamingEnumeration rowEnum = resultRow.getAttributes().getAll();
String dn = resultRow.getNameInNamespace();
qry.setAtEL("dn",len,dn);
while(rowEnum.hasMore()) {
Attribute attr = (Attribute)rowEnum.next();
Collection.Key key = KeyImpl.init(attr.getID());
Enumeration values = attr.getAll();
Object value;
String existing,strValue;
while(values.hasMoreElements()) {
value = values.nextElement();
strValue=Caster.toString(value,null);
existing=Caster.toString(qry.getAt(key, len,null),null);
if(!StringUtil.isEmpty(existing) && !StringUtil.isEmpty(strValue)) {
value = existing + separator + strValue;
}
else if(!StringUtil.isEmpty(existing))
value = existing;
qry.setAtEL(key,len,value);
}
}
if(maxrows>0 && len>=maxrows)break;
}
}
else {
outer:while(results.hasMoreElements()) {
SearchResult resultRow = (SearchResult)results.next();
if(row++<startrow)continue;
Attributes attributesRow = resultRow.getAttributes();
NamingEnumeration rowEnum = attributesRow.getIDs();
while(rowEnum.hasMoreElements()) {
int len=qry.addRow();
String name = Caster.toString(rowEnum.next());
Object value=null;
try {
value=attributesRow.get(name).get();
}catch(Exception e) {}
qry.setAtEL("name",len,name);
qry.setAtEL("value",len,value);
if(maxrows>0 && len>=maxrows)break outer;
}
qry.setAtEL("name",qry.size(),"dn");
}
}
}
finally {
context.close();
}
// Sort
if(sort!=null && sort.length>0) {
int order = sortDirection==SORT_DIRECTION_ASC ? Query.ORDER_ASC : Query.ORDER_DESC;
for(int i=sort.length-1;i>=0;i--) {
String item=sort[i];
if(item.indexOf(' ')!=-1)item=ListUtil.first(item," ",true);
qry.sort(KeyImpl.getInstance(item),order);
//keys[i] = new SortKey(item);
}
}
return qry;
}