private static final String getQueryFilter(final LDAPDirectoryQuery _q) throws LDAPException { StringBuilder filter = new StringBuilder(); while (_q.hasMoreConditions()) { Object _o = _q.nextCondition(); if (_o instanceof LDAPDirectoryQuery) { filter.append(getQueryFilter((LDAPDirectoryQuery) _o)); } else if (_o instanceof Object[]) { filter.append(getConditionFilter((Object[]) _o)); } } if (_q.getType() == LDAPDirectoryQuery.OR) { if (_q.totalConditions() > 1) { filter.insert(0, "(|"); filter.append(")"); } } else { if (_q.totalConditions() > 1) { filter.insert(0, "(&"); filter.append(")"); } } return filter.toString(); }
private String getQueryString(final DirContext ctx, final LDAPDirectoryQuery q) throws NamingException, LDAPException { StringBuilder filter = new StringBuilder(); while (q.hasMoreConditions()) { Object _condition = q.nextCondition(); if (_condition instanceof LDAPDirectoryQuery) { filter.append(getQueryFilter((LDAPDirectoryQuery) _condition)); } else if (_condition instanceof Object[]) { int type = ((Integer) ((Object[]) _condition)[0]).intValue(); String value = (String) ((Object[]) _condition)[2]; if (type == LDAPDirectoryQuery.BRANCH) { SearchControls ctls = new SearchControls(); ctls.setSearchScope(LDAPConnection.ONE_SCOPE); NamingEnumeration<SearchResult> answer = ctx.search(baseDN, "(" + ((Object[]) _condition)[1] + "=" + value + ")", ctls); while (answer.hasMoreElements()) { SearchResult sr = answer.nextElement(); baseDN = sr.getName() + "," + baseDN; } } else { filter.append(getConditionFilter(((Object[]) _condition))); } } } if (q.getType() == LDAPDirectoryQuery.OR) { if (q.totalConditions() > 1) { filter.insert(0, "(|"); filter.append(")"); } } else { if (q.totalConditions() > 1) { filter.insert(0, "(&"); filter.append(")"); } } return filter.toString(); }