001/*
002 *   Licensed to the Apache Software Foundation (ASF) under one
003 *   or more contributor license agreements.  See the NOTICE file
004 *   distributed with apiService work for additional information
005 *   regarding copyright ownership.  The ASF licenses apiService file
006 *   to you under the Apache License, Version 2.0 (the
007 *   "License"); you may not use apiService file except in compliance
008 *   with the License.  You may obtain a copy of the License at
009 *
010 *     http://www.apache.org/licenses/LICENSE-2.0
011 *
012 *   Unless required by applicable law or agreed to in writing,
013 *   software distributed under the License is distributed on an
014 *   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
015 *   KIND, either express or implied.  See the License for the
016 *   specific language governing permissions and limitations
017 *   under the License.
018 *
019 */
020package org.apache.directory.api.ldap.codec.standalone;
021
022
023import java.util.Map;
024
025import org.apache.directory.api.ldap.codec.api.ControlFactory;
026import org.apache.directory.api.ldap.codec.api.ExtendedOperationFactory;
027import org.apache.directory.api.ldap.codec.api.LdapApiService;
028import org.apache.directory.api.ldap.codec.controls.cascade.CascadeFactory;
029import org.apache.directory.api.ldap.codec.controls.manageDsaIT.ManageDsaITFactory;
030import org.apache.directory.api.ldap.codec.controls.proxiedauthz.ProxiedAuthzFactory;
031import org.apache.directory.api.ldap.codec.controls.search.entryChange.EntryChangeFactory;
032import org.apache.directory.api.ldap.codec.controls.search.pagedSearch.PagedResultsFactory;
033import org.apache.directory.api.ldap.codec.controls.search.persistentSearch.PersistentSearchFactory;
034import org.apache.directory.api.ldap.codec.controls.search.subentries.SubentriesFactory;
035import org.apache.directory.api.ldap.codec.controls.sort.SortRequestFactory;
036import org.apache.directory.api.ldap.codec.controls.sort.SortResponseFactory;
037import org.apache.directory.api.ldap.extras.controls.ad.AdShowDeleted;
038import org.apache.directory.api.ldap.extras.controls.ad.AdDirSync;
039import org.apache.directory.api.ldap.extras.controls.ad_impl.AdShowDeletedFactory;
040import org.apache.directory.api.ldap.extras.controls.permissiveModify.PermissiveModify;
041import org.apache.directory.api.ldap.extras.controls.permissiveModify_impl.PermissiveModifyFactory;
042import org.apache.directory.api.ldap.extras.controls.ad_impl.AdDirSyncFactory;
043import org.apache.directory.api.ldap.extras.controls.changeNotifications.ChangeNotifications;
044import org.apache.directory.api.ldap.extras.controls.changeNotifications_impl.ChangeNotificationsFactory;
045import org.apache.directory.api.ldap.extras.controls.ppolicy.PasswordPolicy;
046import org.apache.directory.api.ldap.extras.controls.ppolicy_impl.PasswordPolicyFactory;
047import org.apache.directory.api.ldap.extras.controls.syncrepl.syncDone.SyncDoneValue;
048import org.apache.directory.api.ldap.extras.controls.syncrepl.syncInfoValue.SyncInfoValue;
049import org.apache.directory.api.ldap.extras.controls.syncrepl.syncInfoValue.SyncRequestValue;
050import org.apache.directory.api.ldap.extras.controls.syncrepl.syncState.SyncStateValue;
051import org.apache.directory.api.ldap.extras.controls.syncrepl_impl.SyncDoneValueFactory;
052import org.apache.directory.api.ldap.extras.controls.syncrepl_impl.SyncInfoValueFactory;
053import org.apache.directory.api.ldap.extras.controls.syncrepl_impl.SyncRequestValueFactory;
054import org.apache.directory.api.ldap.extras.controls.syncrepl_impl.SyncStateValueFactory;
055import org.apache.directory.api.ldap.extras.controls.vlv.VirtualListViewRequest;
056import org.apache.directory.api.ldap.extras.controls.vlv.VirtualListViewResponse;
057import org.apache.directory.api.ldap.extras.controls.vlv_impl.VirtualListViewRequestFactory;
058import org.apache.directory.api.ldap.extras.controls.vlv_impl.VirtualListViewResponseFactory;
059import org.apache.directory.api.ldap.extras.extended.ads_impl.cancel.CancelFactory;
060import org.apache.directory.api.ldap.extras.extended.ads_impl.certGeneration.CertGenerationFactory;
061import org.apache.directory.api.ldap.extras.extended.ads_impl.gracefulDisconnect.GracefulDisconnectFactory;
062import org.apache.directory.api.ldap.extras.extended.ads_impl.gracefulShutdown.GracefulShutdownFactory;
063import org.apache.directory.api.ldap.extras.extended.ads_impl.pwdModify.PasswordModifyFactory;
064import org.apache.directory.api.ldap.extras.extended.ads_impl.startTls.StartTlsFactory;
065import org.apache.directory.api.ldap.extras.extended.ads_impl.storedProcedure.StoredProcedureFactory;
066import org.apache.directory.api.ldap.extras.extended.ads_impl.whoAmI.WhoAmIFactory;
067import org.apache.directory.api.ldap.model.message.controls.Cascade;
068import org.apache.directory.api.ldap.model.message.controls.EntryChange;
069import org.apache.directory.api.ldap.model.message.controls.ManageDsaIT;
070import org.apache.directory.api.ldap.model.message.controls.PagedResults;
071import org.apache.directory.api.ldap.model.message.controls.PersistentSearch;
072import org.apache.directory.api.ldap.model.message.controls.ProxiedAuthz;
073import org.apache.directory.api.ldap.model.message.controls.SortRequest;
074import org.apache.directory.api.ldap.model.message.controls.SortResponse;
075import org.apache.directory.api.ldap.model.message.controls.Subentries;
076import org.slf4j.Logger;
077import org.slf4j.LoggerFactory;
078
079
080/**
081 * A utility class for adding Codec and extended operation factories.
082 *
083 * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
084 */
085public final class CodecFactoryUtil
086{
087    private static final Logger LOG = LoggerFactory.getLogger( CodecFactoryUtil.class );
088
089
090    private CodecFactoryUtil()
091    {
092    }
093
094
095    /**
096     * Loads the Controls implement out of the box in the codec.
097     * 
098     * @param controlFactories The Control factories to use
099     * @param apiService The LDAP Service instance to use
100     */
101    public static void loadStockControls( Map<String, ControlFactory<?>> controlFactories, LdapApiService apiService )
102    {
103        ControlFactory<Cascade> cascadeFactory = new CascadeFactory( apiService );
104        controlFactories.put( cascadeFactory.getOid(), cascadeFactory );
105        LOG.info( "Registered pre-bundled control factory: {}", cascadeFactory.getOid() );
106
107        ControlFactory<EntryChange> entryChangeFactory = new EntryChangeFactory( apiService );
108        controlFactories.put( entryChangeFactory.getOid(), entryChangeFactory );
109        LOG.info( "Registered pre-bundled control factory: {}", entryChangeFactory.getOid() );
110
111        ControlFactory<ManageDsaIT> manageDsaITFactory = new ManageDsaITFactory( apiService );
112        controlFactories.put( manageDsaITFactory.getOid(), manageDsaITFactory );
113        LOG.info( "Registered pre-bundled control factory: {}", manageDsaITFactory.getOid() );
114
115        ControlFactory<ProxiedAuthz> proxiedAuthzFactory = new ProxiedAuthzFactory( apiService );
116        controlFactories.put( proxiedAuthzFactory.getOid(), proxiedAuthzFactory );
117        LOG.info( "Registered pre-bundled control factory: {}", proxiedAuthzFactory.getOid() );
118
119        ControlFactory<PagedResults> pagedResultsFactory = new PagedResultsFactory( apiService );
120        controlFactories.put( pagedResultsFactory.getOid(), pagedResultsFactory );
121        LOG.info( "Registered pre-bundled control factory: {}", pagedResultsFactory.getOid() );
122
123        ControlFactory<PersistentSearch> persistentSearchFactory = new PersistentSearchFactory( apiService );
124        controlFactories.put( persistentSearchFactory.getOid(), persistentSearchFactory );
125        LOG.info( "Registered pre-bundled control factory: {}", persistentSearchFactory.getOid() );
126
127        ControlFactory<Subentries> subentriesFactory = new SubentriesFactory( apiService );
128        controlFactories.put( subentriesFactory.getOid(), subentriesFactory );
129        LOG.info( "Registered pre-bundled control factory: {}", subentriesFactory.getOid() );
130
131        ControlFactory<PasswordPolicy> passwordPolicyFactory = new PasswordPolicyFactory( apiService );
132        controlFactories.put( passwordPolicyFactory.getOid(), passwordPolicyFactory );
133        LOG.info( "Registered pre-bundled control factory: {}", passwordPolicyFactory.getOid() );
134
135        ControlFactory<VirtualListViewRequest> virtualListViewRequestFactory = new VirtualListViewRequestFactory(
136            apiService );
137        controlFactories.put( virtualListViewRequestFactory.getOid(), virtualListViewRequestFactory );
138        LOG.info( "Registered pre-bundled control factory: {}", virtualListViewRequestFactory.getOid() );
139
140        ControlFactory<VirtualListViewResponse> virtualListViewResponseFactory = new VirtualListViewResponseFactory(
141            apiService );
142        controlFactories.put( virtualListViewResponseFactory.getOid(), virtualListViewResponseFactory );
143        LOG.info( "Registered pre-bundled control factory: {}", virtualListViewResponseFactory.getOid() );
144
145        ControlFactory<SyncDoneValue> syncDoneValueFactory = new SyncDoneValueFactory( apiService );
146        controlFactories.put( syncDoneValueFactory.getOid(), syncDoneValueFactory );
147        LOG.info( "Registered pre-bundled control factory: {}", syncDoneValueFactory.getOid() );
148
149        ControlFactory<SyncInfoValue> syncInfoValueFactory = new SyncInfoValueFactory( apiService );
150        controlFactories.put( syncInfoValueFactory.getOid(), syncInfoValueFactory );
151        LOG.info( "Registered pre-bundled control factory: {}", syncInfoValueFactory.getOid() );
152
153        ControlFactory<SyncRequestValue> syncRequestValueFactory = new SyncRequestValueFactory( apiService );
154        controlFactories.put( syncRequestValueFactory.getOid(), syncRequestValueFactory );
155        LOG.info( "Registered pre-bundled control factory: {}", syncRequestValueFactory.getOid() );
156
157        ControlFactory<SyncStateValue> syncStateValueFactory = new SyncStateValueFactory( apiService );
158        controlFactories.put( syncStateValueFactory.getOid(), syncStateValueFactory );
159        LOG.info( "Registered pre-bundled control factory: {}", syncStateValueFactory.getOid() );
160
161        ControlFactory<SortRequest> sortRequestFactory = new SortRequestFactory( apiService );
162        controlFactories.put( sortRequestFactory.getOid(), sortRequestFactory );
163        LOG.info( "Registered pre-bundled control factory: {}", sortRequestFactory.getOid() );
164
165        ControlFactory<SortResponse> sortResponseFactory = new SortResponseFactory( apiService );
166        controlFactories.put( sortResponseFactory.getOid(), sortResponseFactory );
167        LOG.info( "Registered pre-bundled control factory: {}", sortResponseFactory.getOid() );
168
169        ControlFactory<AdDirSync> adDirSyncFactory = new AdDirSyncFactory( apiService );
170        controlFactories.put( adDirSyncFactory.getOid(), adDirSyncFactory );
171        LOG.info( "Registered pre-bundled control factory: {}", adDirSyncFactory.getOid() );
172        
173        ControlFactory<AdShowDeleted> adDeletedFactory = new AdShowDeletedFactory( apiService );
174        controlFactories.put( adDeletedFactory.getOid(), adDeletedFactory );
175        LOG.info( "Registered pre-bundled control factory: {}", adDeletedFactory.getOid() );
176        
177        ControlFactory<PermissiveModify> permissiveModifyFactory = new PermissiveModifyFactory( apiService );
178        controlFactories.put( permissiveModifyFactory.getOid(), permissiveModifyFactory );
179        LOG.info( "Registered pre-bundled control factory: {}", permissiveModifyFactory.getOid() );
180
181        ControlFactory<ChangeNotifications> changeNotificationsFactory = new ChangeNotificationsFactory( apiService );
182        controlFactories.put( changeNotificationsFactory.getOid(), changeNotificationsFactory );
183        LOG.info( "Registered pre-bundled control factory: {}", changeNotificationsFactory.getOid() );
184    }
185
186
187    /**
188     * Load the standard extended operations :
189     * <ul>
190     * <li>cancel</li>
191     * <li>certGeneration</li>
192     * <li>gracefuShutdown</li>
193     * <li>storedProcedure</li>
194     * <li>gracefulDisconnect</li>
195     * <li>passwordModify</li>
196     * <li>whoAmI</li>
197     * <li>startTls</li>
198     * </ul>
199     * 
200     * @param extendendOperationsFactories The map of extended operation factories
201     * @param apiService The LdapApiService to use
202     */
203    public static void loadStockExtendedOperations( 
204        Map<String, ExtendedOperationFactory> extendendOperationsFactories, LdapApiService apiService )
205    {
206        CancelFactory cancelFactory = new CancelFactory( apiService );
207        extendendOperationsFactories.put( cancelFactory.getOid(), cancelFactory );
208        LOG.info( "Registered pre-bundled extended operation factory: {}", cancelFactory.getOid() );
209
210        CertGenerationFactory certGenerationFactory = new CertGenerationFactory( apiService );
211        extendendOperationsFactories.put( certGenerationFactory.getOid(), certGenerationFactory );
212        LOG.info( "Registered pre-bundled extended operation factory: {}", certGenerationFactory.getOid() );
213
214        GracefulShutdownFactory gracefulShutdownFactory = new GracefulShutdownFactory( apiService );
215        extendendOperationsFactories.put( gracefulShutdownFactory.getOid(), gracefulShutdownFactory );
216        LOG.info( "Registered pre-bundled extended operation factory: {}", gracefulShutdownFactory.getOid() );
217
218        StoredProcedureFactory storedProcedureFactory = new StoredProcedureFactory( apiService );
219        extendendOperationsFactories.put( storedProcedureFactory.getOid(), storedProcedureFactory );
220        LOG.info( "Registered pre-bundled extended operation factory: {}", storedProcedureFactory.getOid() );
221
222        GracefulDisconnectFactory gracefulDisconnectFactory = new GracefulDisconnectFactory( apiService );
223        extendendOperationsFactories.put( gracefulDisconnectFactory.getOid(), gracefulDisconnectFactory );
224        LOG.info( "Registered pre-bundled extended operation factory: {}", gracefulDisconnectFactory.getOid() );
225
226        PasswordModifyFactory passwordModifyFactory = new PasswordModifyFactory( apiService );
227        extendendOperationsFactories.put( passwordModifyFactory.getOid(), passwordModifyFactory );
228        LOG.info( "Registered pre-bundled extended operation factory: {}", passwordModifyFactory.getOid() );
229
230        WhoAmIFactory whoAmIFactory = new WhoAmIFactory( apiService );
231        extendendOperationsFactories.put( whoAmIFactory.getOid(), whoAmIFactory );
232        LOG.info( "Registered pre-bundled extended operation factory: {}", whoAmIFactory.getOid() );
233
234        StartTlsFactory startTlsFactory = new StartTlsFactory( apiService );
235        extendendOperationsFactories.put( startTlsFactory.getOid(), startTlsFactory );
236        LOG.info( "Registered pre-bundled extended operation factory: {}", startTlsFactory.getOid() );
237    }
238}