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}