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    }