001 /*
002 * Copyright 2015-2016 UnboundID Corp.
003 * All Rights Reserved.
004 */
005 /*
006 * Copyright (C) 2015-2016 UnboundID Corp.
007 *
008 * This program is free software; you can redistribute it and/or modify
009 * it under the terms of the GNU General Public License (GPLv2 only)
010 * or the terms of the GNU Lesser General Public License (LGPLv2.1 only)
011 * as published by the Free Software Foundation.
012 *
013 * This program is distributed in the hope that it will be useful,
014 * but WITHOUT ANY WARRANTY; without even the implied warranty of
015 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
016 * GNU General Public License for more details.
017 *
018 * You should have received a copy of the GNU General Public License
019 * along with this program; if not, see <http://www.gnu.org/licenses>.
020 */
021 package com.unboundid.ldap.sdk;
022
023
024
025 import java.util.ArrayList;
026 import java.util.Collection;
027 import java.util.Collections;
028 import java.util.List;
029
030 import com.unboundid.util.StaticUtils;
031 import com.unboundid.util.ThreadSafety;
032 import com.unboundid.util.ThreadSafetyLevel;
033
034
035
036 /**
037 * This class provides an implementation of a post-connect processor that makes
038 * it possible to invoke multiple post-connect processors as a single unit.
039 */
040 @ThreadSafety(level=ThreadSafetyLevel.COMPLETELY_THREADSAFE)
041 public final class AggregatePostConnectProcessor
042 implements PostConnectProcessor
043 {
044 // The list of post-connect processors to be invoked.
045 private final List<PostConnectProcessor> processors;
046
047
048
049 /**
050 * Creates a new aggregate post-connect processor that will invoke the given
051 * set of post-connect processors in the order they are listed.
052 *
053 * @param processors The set of post-connect processors to be invoked.
054 */
055 public AggregatePostConnectProcessor(final PostConnectProcessor... processors)
056 {
057 this(StaticUtils.toList(processors));
058 }
059
060
061
062 /**
063 * Creates a new aggregate post-connect processor that will invoke the given
064 * set of post-connect processors in the order they are listed.
065 *
066 * @param processors The set of post-connect processors to be invoked.
067 */
068 public AggregatePostConnectProcessor(
069 final Collection<? extends PostConnectProcessor> processors)
070 {
071 if (processors == null)
072 {
073 this.processors = Collections.emptyList();
074 }
075 else
076 {
077 this.processors = Collections.unmodifiableList(
078 new ArrayList<PostConnectProcessor>(processors));
079 }
080 }
081
082
083
084 /**
085 * {@inheritDoc}
086 */
087 public void processPreAuthenticatedConnection(final LDAPConnection connection)
088 throws LDAPException
089 {
090 for (final PostConnectProcessor p : processors)
091 {
092 p.processPreAuthenticatedConnection(connection);
093 }
094 }
095
096
097
098 /**
099 * {@inheritDoc}
100 */
101 public void processPostAuthenticatedConnection(
102 final LDAPConnection connection)
103 throws LDAPException
104 {
105 for (final PostConnectProcessor p : processors)
106 {
107 p.processPostAuthenticatedConnection(connection);
108 }
109 }
110 }