package org.ovirt.engine.core.bll.adbroker; import java.util.EnumMap; import java.util.Map.Entry; import org.apache.commons.lang.StringUtils; public class SearchQueryFotmatter implements LdapQueryFormatter<LdapQueryExecution> { private final EnumMap<SearchLangageLDAPTokens, String> tokensToLDAPKeys; public SearchQueryFotmatter(EnumMap<SearchLangageLDAPTokens, String> tokensToLDAPKeys) { this.tokensToLDAPKeys = tokensToLDAPKeys; } /** * Replace the keywords generated by the SyntaxChecker class with the provider-type specific LDAP query. The * replacement is basically identifying Dollar sign, "$" as a prefix for the token and then fetching the token value * from the map. e.g. an search expression like this (&($LDAP_USER_ACCOUNT)($GIVENNAME=John)) should look * $LDAP_USER_ACCOUNT in */ @Override public LdapQueryExecution format(LdapQueryMetadata queryMetadata) { String filter = (String) queryMetadata.getQueryData().getFilterParameters()[0]; for (Entry<SearchLangageLDAPTokens, String> tokenEntry : tokensToLDAPKeys.entrySet()) { filter = StringUtils.replace(filter, tokenEntry.getKey().name(), tokenEntry.getValue()); } String baseDN = queryMetadata.getBaseDN(); return new LdapQueryExecution(filter, filter, // The display filter in that case is like the filter baseDN, queryMetadata.getContextMapper(), queryMetadata.getSearchScope(), queryMetadata.getReturningAttributes(), queryMetadata.getQueryData().getDomain()); } public static void main(String[] args) { String filter = "(&($LDAP_USER_ACCOUNT)($GIVENNAME=ggry))"; EnumMap<SearchLangageLDAPTokens, String> map = new EnumMap<SearchLangageLDAPTokens, String>(SearchLangageLDAPTokens.class); map.put(SearchLangageLDAPTokens.$GIVENNAME, "givenname"); map.put(SearchLangageLDAPTokens.$USER_ACCOUNT_TYPE, "samaccountname"); for (Entry<SearchLangageLDAPTokens, String> tokenEntry : map.entrySet()) { filter = StringUtils.replace(filter, tokenEntry.getKey().name(), tokenEntry.getValue()); } System.out.println(filter); } }