org.adsync4j.testutils.ldap.EmbeddedLdapServerFactoryBean.java Source code

Java tutorial

Introduction

Here is the source code for org.adsync4j.testutils.ldap.EmbeddedLdapServerFactoryBean.java

Source

/*******************************************************************************
 * ADSync4J (https://github.com/zagyi/adsync4j)
 *
 * Copyright (c) 2013 Balazs Zagyvai
 *
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *     Balazs Zagyvai
 ***************************************************************************** */
package org.adsync4j.testutils.ldap;

import com.google.common.base.Function;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
import org.springframework.beans.factory.FactoryBean;
import org.springframework.core.io.Resource;

import javax.annotation.Nullable;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;

import static com.google.common.base.Throwables.propagate;

public class EmbeddedLdapServerFactoryBean implements FactoryBean<EmbeddedUnboundIDLdapServer> {

    private Integer _port;
    private List<String> _rootDNs = new ArrayList<>();
    private List<Resource[]> _schemas = new ArrayList<>();
    private List<Resource[]> _ldifs = new ArrayList<>();
    private Map<String, String> _bindCredentials;
    private boolean _includeStandardSchema;

    @Override
    public EmbeddedUnboundIDLdapServer getObject() throws Exception {
        EmbeddedUnboundIDLdapServer server = createEmbeddedUnboundIDLdapServer();

        for (Resource[] resources : _schemas) {
            for (Resource resource : resources) {
                try {
                    server.addSchema(resource.getFile());
                } catch (IOException e) {
                    server.addSchema(resourceToInputStream(resource));
                }

            }
        }

        server.setIncludeStandardSchema(_includeStandardSchema).setRootDNs(_rootDNs)
                .setLdifs(resourceArrayListToInputStreamList(_ldifs));

        if (_port != null) {
            server.setPort(_port);
        }
        if (_bindCredentials != null) {
            server.setBindCredentials(_bindCredentials);
        }

        return server.init();
    }

    protected EmbeddedUnboundIDLdapServer createEmbeddedUnboundIDLdapServer() {
        return new EmbeddedUnboundIDLdapServer();
    }

    @Override
    public Class<?> getObjectType() {
        return EmbeddedUnboundIDLdapServer.class;
    }

    @Override
    public boolean isSingleton() {
        return true;
    }

    private Iterable<InputStream> resourceArrayListToInputStreamList(List<Resource[]> ldifs) {
        return Iterables.concat(Lists.transform(ldifs, new Function<Resource[], List<InputStream>>() {
            @Override
            public List<InputStream> apply(Resource[] resources) {
                return resourceArrayToInputStreamList(resources);
            }
        }));
    }

    private static List<InputStream> resourceArrayToInputStreamList(Resource[] resources) {
        return Lists.transform(Arrays.asList(resources), new Function<Resource, InputStream>() {
            @Override
            public InputStream apply(@Nullable Resource resource) {
                return resourceToInputStream(resource);
            }
        });
    }

    private static InputStream resourceToInputStream(Resource resource) {
        try {
            return resource.getInputStream();
        } catch (IOException e) {
            throw propagate(e);
        }
    }

    public void setIncludeStandardSchema(boolean includeStandardSchema) {
        _includeStandardSchema = includeStandardSchema;
    }

    public void setRootDN(String rootDN) {
        _rootDNs = Lists.newArrayList(rootDN);
    }

    public void setRootDNs(List<String> rootDNs) {
        _rootDNs = rootDNs;
    }

    public void setSchemas(List<Resource[]> schema) {
        _schemas = schema;
    }

    public void setPort(Integer port) {
        _port = port;
    }

    public void setLdifs(List<Resource[]> ldifs) {
        _ldifs = ldifs;
    }

    public void setBindCredentials(Map<String, String> bindCredentials) {
        _bindCredentials = bindCredentials;
    }
}