Package org.eurekastreams.server.persistence.mappers.ldap

Source Code of org.eurekastreams.server.persistence.mappers.ldap.LdapLookup

/*
* Copyright (c) 2010 Lockheed Martin Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*      http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.eurekastreams.server.persistence.mappers.ldap;

import java.util.ArrayList;
import java.util.List;

import javax.naming.directory.SearchControls;

import org.apache.commons.logging.Log;
import org.eurekastreams.commons.logging.LogFactory;
import org.eurekastreams.server.persistence.mappers.DomainMapper;
import org.eurekastreams.server.persistence.mappers.ldap.callback.CallbackHandlerFactory;
import org.eurekastreams.server.persistence.mappers.ldap.filters.FilterCreator;
import org.eurekastreams.server.persistence.mappers.ldap.templateretrievers.LdapTemplateRetriever;
import org.eurekastreams.server.persistence.mappers.requests.LdapLookupRequest;
import org.springframework.ldap.core.CollectingNameClassPairCallbackHandler;
import org.springframework.ldap.core.LdapTemplate;
import org.springframework.ldap.filter.AbstractFilter;

/**
* Mapper for doing ldap lookups.
*
* @param <Type>
*            Type to be returned from lookup.
*/
public class LdapLookup<Type> implements DomainMapper<LdapLookupRequest, List<Type>>
{
    /**
     * Logger.
     */
    private Log log = LogFactory.make();

    /**
     * {@link LdapTemplateRetriever}.
     */
    private LdapTemplateRetriever ldapTemplateRetriever;

    /**
     * LDAP filter creator for finding group by name.
     */
    private FilterCreator filterCreator;

    /**
     * The {@link CallbackHandlerFactory}.
     */
    private CallbackHandlerFactory handlerFactory;

    /**
     * Strategy for performing the search against ldap.
     */
    private LdapSearchStrategy ldapSearchStrategy;

    /**
     * Constructor.
     *
     * @param inLdapTemplateRetriever
     *            {@link LdapTemplateRetriever}.
     * @param inFilterCreator
     *            LDAP filter creator.
     * @param inHandlerFactory
     *            The {@link CallbackHandlerFactory}.
     * @param inLdapSearchStrategy
     *            Strategy for performing the search against ldap.
     */
    public LdapLookup(final LdapTemplateRetriever inLdapTemplateRetriever, final FilterCreator inFilterCreator,
            final CallbackHandlerFactory inHandlerFactory, final LdapSearchStrategy inLdapSearchStrategy)
    {
        ldapTemplateRetriever = inLdapTemplateRetriever;
        filterCreator = inFilterCreator;
        handlerFactory = inHandlerFactory;
        ldapSearchStrategy = inLdapSearchStrategy;
    }

    /**
     * Execute an ldap query based on {@link LdapLookupRequest} parameters and this DAO's configuration.
     * LdapLookupRequest is used for search upper bound, the {@link LdapTemplate}, and the search string. The rest of
     * ldap query functionality is determined by DAO configuration.
     *
     * @param inRequest
     *            {@link LdapLookupRequest}.
     * @return List of objects found as as result of ldap query.
     *
     */
    @Override
    public List<Type> execute(final LdapLookupRequest inRequest)
    {
        // get ldap template.
        LdapTemplate template = ldapTemplateRetriever.getLdapTemplate(inRequest);

        // set up search controls.
        SearchControls searchControls = new SearchControls();
        searchControls.setCountLimit(inRequest.getSearchUpperBound());
        searchControls.setSearchScope(SearchControls.SUBTREE_SCOPE);

        // add passed in attribute criteria to filter.
        AbstractFilter abstractFilter = filterCreator.getFilter(inRequest.getQueryString());

        // get the configured CollectingNameClassPairCallbackHandler to use for query.
        CollectingNameClassPairCallbackHandler collectingHandler = handlerFactory.getCallbackHandler();

        // execute query.
        ldapSearchStrategy.searchLdap(template, abstractFilter.encode(), searchControls, collectingHandler);

        // get results gathered by CollectingNameClassPairCallbackHandler.
        List<Type> rawResults = collectingHandler.getList();

        // Results contain nulls if the context/attribute mappers were unable to create objects, so pull them out.
        List<Type> results = new ArrayList<Type>();
        for (Type t : rawResults)
        {
            if (t != null)
            {
                results.add(t);
            }
        }

        return results;
    }

}
TOP

Related Classes of org.eurekastreams.server.persistence.mappers.ldap.LdapLookup

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.