Example usage for javax.naming.directory SearchControls getReturningAttributes

List of usage examples for javax.naming.directory SearchControls getReturningAttributes

Introduction

In this page you can find the example usage for javax.naming.directory SearchControls getReturningAttributes.

Prototype

public String[] getReturningAttributes() 

Source Link

Document

Retrieves the attributes that will be returned as part of the search.

Usage

From source file:edu.vt.middleware.ldap.AbstractLdap.java

/**
 * This will query the LDAP with the supplied dn, filter, filter arguments,
 * and search controls. This method will perform a search whose scope is
 * defined in the search controls. The resulting <code>Iterator</code> is a
 * deep copy of the original search results. If filterArgs is null, then no
 * variable substitution will occur. See {@link
 * javax.naming.DirContext#search( String, String, Object[], SearchControls)}.
 *
 * @param  dn  <code>String</code> name to begin search at
 * @param  filter  <code>String</code> expression to use for the search
 * @param  filterArgs  <code>Object[]</code> to substitute for variables in
 * the filter//  w  w w. j  a  v  a 2s  . c  o m
 * @param  searchControls  <code>SearchControls</code> to perform search with
 * @param  handler  <code>SearchResultHandler[]</code> to post process results
 *
 * @return  <code>Iterator</code> - of LDAP search results
 *
 * @throws  NamingException  if the LDAP returns an error
 */
protected Iterator<SearchResult> search(final String dn, final String filter, final Object[] filterArgs,
        final SearchControls searchControls, final SearchResultHandler... handler) throws NamingException {
    if (this.logger.isDebugEnabled()) {
        this.logger.debug("Search with the following parameters:");
        this.logger.debug("  dn = " + dn);
        this.logger.debug("  filter = " + filter);
        this.logger.debug("  filterArgs = " + Arrays.toString(filterArgs));
        this.logger.debug("  searchControls = " + searchControls);
        this.logger.debug("  handler = " + Arrays.toString(handler));
        if (this.logger.isTraceEnabled()) {
            this.logger.trace("  config = " + this.config.getEnvironment());
        }
    }

    List<SearchResult> results = null;
    LdapContext ctx = null;
    NamingEnumeration<SearchResult> en = null;
    try {
        for (int i = 0; i <= this.config.getOperationRetry() || this.config.getOperationRetry() == -1; i++) {
            try {
                ctx = this.getContext();
                en = ctx.search(dn, filter, filterArgs, searchControls);

                if (handler != null && handler.length > 0) {
                    final SearchCriteria sc = new SearchCriteria();
                    if (ctx != null && !"".equals(ctx.getNameInNamespace())) {
                        sc.setDn(ctx.getNameInNamespace());
                    } else {
                        sc.setDn(dn);
                    }
                    sc.setFilter(filter);
                    sc.setFilterArgs(filterArgs);
                    if (searchControls != null) {
                        sc.setReturnAttrs(searchControls.getReturningAttributes());
                    }
                    for (int j = 0; j < handler.length; j++) {
                        if (j == 0) {
                            results = handler[j].process(sc, en, this.config.getHandlerIgnoreExceptions());
                        } else {
                            results = handler[j].process(sc, results);
                        }
                    }
                } else {
                    results = SR_COPY_RESULT_HANDLER.process(null, en,
                            this.config.getHandlerIgnoreExceptions());
                }

                break;
            } catch (NamingException e) {
                this.operationRetry(ctx, e, i);
            }
        }
    } finally {
        if (en != null) {
            en.close();
        }
        if (ctx != null) {
            ctx.close();
        }
    }
    return results.iterator();
}

From source file:edu.vt.middleware.ldap.AbstractLdap.java

/**
 * This will query the LDAP with the supplied dn, filter, filter arguments,
 * and search controls. See {@link #search(String, String, Object[],
 * SearchControls, SearchResultHandler...)}. The PagedResultsControl is used
 * in conjunction with {@link LdapConfig#getPagedResultsSize()} to produce the
 * results.//from  ww  w .j av a  2  s.c  o  m
 *
 * @param  dn  <code>String</code> name to begin search at
 * @param  filter  <code>String</code> expression to use for the search
 * @param  filterArgs  <code>Object[]</code> to substitute for variables in
 * the filter
 * @param  searchControls  <code>SearchControls</code> to perform search with
 * @param  handler  <code>SearchResultHandler[]</code> to post process results
 *
 * @return  <code>Iterator</code> - of LDAP search results
 *
 * @throws  NamingException  if the LDAP returns an error
 */
protected Iterator<SearchResult> pagedSearch(final String dn, final String filter, final Object[] filterArgs,
        final SearchControls searchControls, final SearchResultHandler... handler) throws NamingException {
    if (this.logger.isDebugEnabled()) {
        this.logger.debug("Paginated search with the following parameters:");
        this.logger.debug("  dn = " + dn);
        this.logger.debug("  filter = " + filter);
        this.logger.debug("  filterArgs = " + Arrays.toString(filterArgs));
        this.logger.debug("  searchControls = " + searchControls);
        this.logger.debug("  handler = " + Arrays.toString(handler));
        if (this.logger.isTraceEnabled()) {
            this.logger.trace("  config = " + this.config.getEnvironment());
        }
    }

    final List<SearchResult> results = new ArrayList<SearchResult>();
    LdapContext ctx = null;
    NamingEnumeration<SearchResult> en = null;
    try {
        for (int i = 0; i <= this.config.getOperationRetry() || this.config.getOperationRetry() == -1; i++) {
            try {
                byte[] cookie = null;
                ctx = this.getContext();
                ctx.setRequestControls(new Control[] {
                        new PagedResultsControl(this.config.getPagedResultsSize(), Control.CRITICAL), });
                do {
                    List<SearchResult> pagedResults = null;
                    en = ctx.search(dn, filter, filterArgs, searchControls);

                    if (handler != null && handler.length > 0) {
                        final SearchCriteria sc = new SearchCriteria();
                        if (ctx != null && !"".equals(ctx.getNameInNamespace())) {
                            sc.setDn(ctx.getNameInNamespace());
                        } else {
                            sc.setDn(dn);
                        }
                        sc.setFilter(filter);
                        sc.setFilterArgs(filterArgs);
                        if (searchControls != null) {
                            sc.setReturnAttrs(searchControls.getReturningAttributes());
                        }
                        for (int j = 0; j < handler.length; j++) {
                            if (j == 0) {
                                pagedResults = handler[j].process(sc, en,
                                        this.config.getHandlerIgnoreExceptions());
                            } else {
                                pagedResults = handler[j].process(sc, pagedResults);
                            }
                        }
                    } else {
                        pagedResults = SR_COPY_RESULT_HANDLER.process(null, en,
                                this.config.getHandlerIgnoreExceptions());
                    }

                    results.addAll(pagedResults);

                    final Control[] controls = ctx.getResponseControls();
                    if (controls != null) {
                        for (int j = 0; j < controls.length; j++) {
                            if (controls[j] instanceof PagedResultsResponseControl) {
                                final PagedResultsResponseControl prrc = (PagedResultsResponseControl) controls[j];
                                cookie = prrc.getCookie();
                            }
                        }
                    }

                    // re-activate paged results
                    ctx.setRequestControls(
                            new Control[] { new PagedResultsControl(this.config.getPagedResultsSize(), cookie,
                                    Control.CRITICAL), });

                } while (cookie != null);

                break;
            } catch (NamingException e) {
                this.operationRetry(ctx, e, i);
            } catch (IOException e) {
                if (this.logger.isErrorEnabled()) {
                    this.logger.error("Could not encode page size into control", e);
                }
                throw new NamingException(e.getMessage());
            }
        }
    } finally {
        if (en != null) {
            en.close();
        }
        if (ctx != null) {
            ctx.close();
        }
    }
    return results.iterator();
}

From source file:org.apache.directory.studio.connection.core.io.api.DirectoryApiConnectionWrapper.java

/**
 * {@inheritDoc}/*from w  w w.  j a  va 2s .  c  om*/
 */
public StudioNamingEnumeration search(final String searchBase, final String filter,
        final SearchControls searchControls, final AliasDereferencingMethod aliasesDereferencingMethod,
        final ReferralHandlingMethod referralsHandlingMethod, final Control[] controls,
        final StudioProgressMonitor monitor, final ReferralsInfo referralsInfo) {
    final long requestNum = searchRequestNum++;

    InnerRunnable runnable = new InnerRunnable() {
        public void run() {
            try {
                // Preparing the search request
                SearchRequest request = new SearchRequestImpl();
                request.setBase(new Dn(searchBase));
                ExprNode node = FilterParser.parse(filter, true);
                request.setFilter(node);
                request.setScope(convertSearchScope(searchControls));
                if (searchControls.getReturningAttributes() != null) {
                    request.addAttributes(searchControls.getReturningAttributes());
                }
                request.addAllControls(convertControls(controls));
                request.setSizeLimit(searchControls.getCountLimit());
                request.setTimeLimit(searchControls.getTimeLimit());
                request.setDerefAliases(convertAliasDerefMode(aliasesDereferencingMethod));

                // Performing the search operation
                SearchCursor cursor = ldapConnection.search(request);

                // Returning the result of the search
                namingEnumeration = new CursorStudioNamingEnumeration(connection, cursor, searchBase, filter,
                        searchControls, aliasesDereferencingMethod, referralsHandlingMethod, controls,
                        requestNum, monitor, referralsInfo);
            } catch (Exception e) {
                exception = e;
            }

            NamingException ne = null;
            if (exception != null) {
                ne = new NamingException(exception.getMessage());
            }

            for (IJndiLogger logger : getJndiLoggers()) {
                if (namingEnumeration != null) {
                    logger.logSearchRequest(connection, searchBase, filter, searchControls,
                            aliasesDereferencingMethod, controls, requestNum, ne);
                } else {
                    logger.logSearchRequest(connection, searchBase, filter, searchControls,
                            aliasesDereferencingMethod, controls, requestNum, ne);
                    logger.logSearchResultDone(connection, 0, requestNum, ne);
                }
            }
        }
    };

    try {
        checkConnectionAndRunAndMonitor(runnable, monitor);
    } catch (Exception e) {
        monitor.reportError(e);
        return null;
    }

    if (runnable.isCanceled()) {
        monitor.setCanceled(true);
    }
    if (runnable.getException() != null) {
        monitor.reportError(runnable.getException());
        return null;
    } else {
        return runnable.getResult();
    }
}

From source file:org.apache.directory.studio.connection.core.io.jndi.LdifSearchLogger.java

/**
 * {@inheritDoc}// w  w w  . j ava2  s . com
 */
public void logSearchRequest(Connection connection, String searchBase, String filter,
        SearchControls searchControls, AliasDereferencingMethod aliasesDereferencingMethod, Control[] controls,
        long requestNum, NamingException ex) {
    if (!isSearchRequestLogEnabled()) {
        return;
    }

    String scopeAsString = searchControls.getSearchScope() == SearchControls.SUBTREE_SCOPE ? "wholeSubtree (2)" //$NON-NLS-1$
            : searchControls.getSearchScope() == SearchControls.ONELEVEL_SCOPE ? "singleLevel (1)" //$NON-NLS-1$
                    : "baseObject (0)"; //$NON-NLS-1$
    String attributesAsString = searchControls.getReturningAttributes() == null ? "*" //$NON-NLS-1$
            : searchControls.getReturningAttributes().length == 0 ? "1.1" //$NON-NLS-1$
                            : StringUtils.join(searchControls.getReturningAttributes(), " ");
    String aliasAsString = aliasesDereferencingMethod == AliasDereferencingMethod.ALWAYS ? "derefAlways (3)" //$NON-NLS-1$
            : aliasesDereferencingMethod == AliasDereferencingMethod.FINDING ? "derefFindingBaseObj (2)" //$NON-NLS-1$
                    : aliasesDereferencingMethod == AliasDereferencingMethod.SEARCH ? "derefInSearching (1)" //$NON-NLS-1$
                            : "neverDerefAliases (0)"; //$NON-NLS-1$

    // build LDAP URL
    LdapUrl url = Utils.getLdapURL(connection, searchBase, searchControls.getSearchScope(), filter,
            searchControls.getReturningAttributes());

    // build command line
    String cmdLine = Utils.getLdapSearchCommandLine(connection, searchBase, searchControls.getSearchScope(),
            aliasesDereferencingMethod, searchControls.getCountLimit(), searchControls.getTimeLimit(), filter,
            searchControls.getReturningAttributes());

    // build 
    Collection<LdifLineBase> lines = new ArrayList<LdifLineBase>();
    lines.add(LdifCommentLine.create("# LDAP URL     : " + url.toString())); //$NON-NLS-1$
    lines.add(LdifCommentLine.create("# command line : " + cmdLine.toString())); //$NON-NLS-1$
    lines.add(LdifCommentLine.create("# baseObject   : " + searchBase)); //$NON-NLS-1$
    lines.add(LdifCommentLine.create("# scope        : " + scopeAsString)); //$NON-NLS-1$
    lines.add(LdifCommentLine.create("# derefAliases : " + aliasAsString)); //$NON-NLS-1$
    lines.add(LdifCommentLine.create("# sizeLimit    : " + searchControls.getCountLimit())); //$NON-NLS-1$
    lines.add(LdifCommentLine.create("# timeLimit    : " + searchControls.getTimeLimit())); //$NON-NLS-1$
    lines.add(LdifCommentLine.create("# typesOnly    : " + "False")); //$NON-NLS-1$ //$NON-NLS-2$
    lines.add(LdifCommentLine.create("# filter       : " + filter)); //$NON-NLS-1$
    lines.add(LdifCommentLine.create("# attributes   : " + attributesAsString)); //$NON-NLS-1$
    if (controls != null) {
        for (Control control : controls) {
            lines.add(LdifCommentLine.create("# control      : " + control.getID())); //$NON-NLS-1$
        }
    }
    lines.add(LdifSepLine.create());

    String formattedString = ""; //$NON-NLS-1$
    for (LdifLineBase line : lines) {
        formattedString += line.toFormattedString(LdifFormatParameters.DEFAULT);
    }

    log(formattedString, "SEARCH REQUEST (" + requestNum + ")", ex, connection); //$NON-NLS-1$ //$NON-NLS-2$
}

From source file:org.cloudfoundry.identity.uaa.ldap.extension.SpringSecurityLdapTemplate.java

/**
 * We need to make sure the search controls has the return object flag set to true, in order for
 * the search to return DirContextAdapter instances.
 * @param originalControls/*from  w w  w .  j a v  a2s  .  co  m*/
 * @return
 */
private static SearchControls buildControls(SearchControls originalControls) {
    return new SearchControls(originalControls.getSearchScope(), originalControls.getCountLimit(),
            originalControls.getTimeLimit(), originalControls.getReturningAttributes(), RETURN_OBJECT,
            originalControls.getDerefLinkFlag());
}