001/* 002 * Licensed to the Apache Software Foundation (ASF) under one 003 * or more contributor license agreements. See the NOTICE file 004 * distributed with this work for additional information 005 * regarding copyright ownership. The ASF licenses this file 006 * to you under the Apache License, Version 2.0 (the 007 * "License"); you may not use this file except in compliance 008 * with the License. You may obtain a copy of the License at 009 * 010 * https://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.api; 021 022 023import java.util.Iterator; 024import java.util.Map; 025 026import org.apache.directory.api.asn1.DecoderException; 027import org.apache.directory.api.asn1.EncoderException; 028import org.apache.directory.api.ldap.model.message.Control; 029import org.apache.directory.api.ldap.model.message.ExtendedRequest; 030import org.apache.directory.api.ldap.model.message.ExtendedResponse; 031import org.apache.mina.filter.codec.ProtocolCodecFactory; 032 033 034/** 035 * The service interface for the LDAP codec. It gathers all the supported controls and extended operations. 036 * 037 * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a> 038 * @version $Rev$, $Date$ 039 */ 040public interface LdapApiService 041{ 042 /** The default codec factory */ 043 String DEFAULT_PROTOCOL_CODEC_FACTORY = 044 "org.apache.directory.api.ldap.codec.protocol.mina.LdapProtocolCodecFactory"; 045 046 047 // ------------------------------------------------------------------------ 048 // Control Methods 049 // ------------------------------------------------------------------------ 050 051 /** 052 * Returns an Iterator over the OID Strings of registered request controls. 053 * 054 * @return The registered control OID Strings 055 */ 056 Iterator<String> registeredRequestControls(); 057 058 059 /** 060 * Returns an Iterator over the OID Strings of registered response controls. 061 * 062 * @return The registered control OID Strings 063 */ 064 Iterator<String> registeredResponseControls(); 065 066 067 /** 068 * Checks if a control has been registered. It will check in both the 069 * request and response control maps. 070 * 071 * @param oid The Control OID we are looking for 072 * @return The OID of the control to check for registration 073 */ 074 boolean isControlRegistered( String oid ); 075 076 077 /** 078 * Registers an request {@link ControlFactory} with this service. 079 * 080 * @param factory The control factory 081 * @return The registered control factory 082 */ 083 ControlFactory<?> registerRequestControl( ControlFactory<?> factory ); 084 085 086 /** 087 * Registers an response {@link ControlFactory} with this service. 088 * 089 * @param factory The control factory 090 * @return The registered control factory 091 */ 092 ControlFactory<?> registerResponseControl( ControlFactory<?> factory ); 093 094 095 /** 096 * Unregisters a request {@link ControlFactory} with this service. 097 * 098 * @param oid The oid of the control the factory is associated with. 099 * @return The unregistered control factory 100 */ 101 ControlFactory<?> unregisterRequestControl( String oid ); 102 103 104 /** 105 * Unregisters a response {@link ControlFactory} with this service. 106 * 107 * @param oid The oid of the control the factory is associated with. 108 * @return The unregistered control factory 109 */ 110 ControlFactory<?> unregisterResponseControl( String oid ); 111 112 113 /** 114 * Creates a JNDI control from the ldap model's control. 115 * 116 * @param modelControl The model's control. 117 * @return The JNDI control. 118 * @throws EncoderException if there are problems encoding the modelControl. 119 */ 120 javax.naming.ldap.Control toJndiControl( Control modelControl ) throws EncoderException; 121 122 123 /** 124 * Creates a model request control from the JNDI request control. 125 * 126 * @param jndiControl The JNDI control. 127 * @return The model request control. 128 * @throws DecoderException if there are problems decoding the value of the JNDI control. 129 */ 130 Control fromJndiRequestControl( javax.naming.ldap.Control jndiControl ) throws DecoderException; 131 132 133 /** 134 * Creates a model response control from the JNDI response control. 135 * 136 * @param jndiControl The JNDI response control. 137 * @return The model control. 138 * @throws DecoderException if there are problems decoding the value of the JNDI control. 139 */ 140 Control fromJndiResponseControl( javax.naming.ldap.Control jndiControl ) throws DecoderException; 141 142 143 /** 144 * @return the request controlFactories 145 */ 146 Map<String, ControlFactory<? extends Control>> getRequestControlFactories(); 147 148 149 /** 150 * @return the response controlFactories 151 */ 152 Map<String, ControlFactory<? extends Control>> getResponseControlFactories(); 153 154 155 // ------------------------------------------------------------------------ 156 // Extended Request Methods 157 // ------------------------------------------------------------------------ 158 /** 159 * Returns an Iterator over the OID Strings of registered extended 160 * requests. 161 * 162 * @return The registered extended request OID Strings 163 */ 164 Iterator<String> registeredExtendedRequests(); 165 166 167 /** 168 * Returns an Iterator over the OID Strings of registered extended 169 * responses. 170 * 171 * @return The registered extended response OID Strings 172 */ 173 Iterator<String> registeredExtendedResponses(); 174 175 176 /** 177 * Registers an {@link ExtendedOperationFactory} for generating extended request 178 * response pairs. 179 * 180 * @param factory The extended request factory 181 * @return The registered factory if one existed for the oid 182 */ 183 ExtendedOperationFactory registerExtendedRequest( ExtendedOperationFactory factory ); 184 185 186 /** 187 * Registers an {@link ExtendedOperationFactory} for generating extended response 188 * response pairs. 189 * 190 * @param factory The extended response factory 191 * @return The registered factory if one existed for the oid 192 */ 193 ExtendedOperationFactory registerExtendedResponse( ExtendedOperationFactory factory ); 194 195 196 /** 197 * Unregisters an {@link ExtendedOperationFactory} for generating extended 198 * request response pairs. 199 * 200 * @param oid The extended request oid 201 * @return The registered factory if one existed for the oid 202 */ 203 ExtendedOperationFactory unregisterExtendedRequest( String oid ); 204 205 206 /** 207 * Unregisters an {@link ExtendedOperationFactory} for generating extended 208 * responses. 209 * 210 * @param oid The extended response oid 211 * @return The registered factory if one existed for the oid 212 */ 213 ExtendedOperationFactory unregisterExtendedResponse( String oid ); 214 215 216 /** 217 * Checks to see if an extended request operation is registered. 218 * 219 * @param oid The object identifier for the extended request operation 220 * @return true if registered, false if not 221 */ 222 boolean isExtendedRequestRegistered( String oid ); 223 224 225 /** 226 * Checks to see if an extended response operation is registered. 227 * 228 * @param oid The object identifier for the extended response operation 229 * @return true if registered, false if not 230 */ 231 boolean isExtendedResponseRegistered( String oid ); 232 233 234 /** 235 * @return the extendedRequestFactories 236 */ 237 Map<String, ExtendedOperationFactory> getExtendedRequestFactories(); 238 239 240 /** 241 * @return the extendedResponseFactories 242 */ 243 Map<String, ExtendedOperationFactory> getExtendedResponseFactories(); 244 245 246 // ------------------------------------------------------------------------ 247 // Intermediate Response Methods 248 // ------------------------------------------------------------------------ 249 250 /** 251 * Returns an Iterator over the OID Strings of registered intermediate 252 * responses. 253 * 254 * @return The registered Intermediate response OID Strings 255 */ 256 Iterator<String> registeredIntermediateResponses(); 257 258 259 /** 260 * Registers an {@link IntermediateOperationFactory} for generating intermediate response 261 * 262 * @param factory The intermediate response factory 263 * @return The displaced factory if one existed for the oid 264 */ 265 IntermediateOperationFactory registerIntermediateResponse( IntermediateOperationFactory factory ); 266 267 268 /** 269 * Unregisters an {@link IntermediateOperationFactory} for generating intermediate 270 * response 271 * 272 * @param oid The intermediate response oid 273 * @return The displaced factory if one existed for the oid 274 */ 275 IntermediateOperationFactory unregisterIntermediateResponse( String oid ); 276 277 278 /** 279 * Checks to see if an intermediate response is registered. 280 * 281 * @param oid The object identifier for the intermediate response 282 * @return true if registered, false if not 283 */ 284 boolean isIntermediateResponseRegistered( String oid ); 285 286 287 /** 288 * @return the intermediateResponseFactories 289 */ 290 Map<String, IntermediateOperationFactory> getIntermediateResponseFactories(); 291 292 293 // ------------------------------------------------------------------------ 294 // Extended Response Methods 295 // ------------------------------------------------------------------------ 296 297 /** 298 * Creates a model ExtendedResponse from the JNDI ExtendedResponse. 299 * 300 * @param jndiResponse The JNDI ExtendedResponse 301 * @return The model ExtendedResponse 302 * @throws DecoderException if the response value cannot be decoded. 303 */ 304 ExtendedResponse fromJndi( javax.naming.ldap.ExtendedResponse jndiResponse ) throws DecoderException; 305 306 307 /** 308 * Creates a JNDI {@link javax.naming.ldap.ExtendedResponse} from the model 309 * {@link ExtendedResponse}. 310 * 311 * @param modelResponse The extended response to convert 312 * @return A JNDI extended response 313 * @throws EncoderException If the conversion failed 314 */ 315 javax.naming.ldap.ExtendedResponse toJndi( ExtendedResponse modelResponse ) throws EncoderException; 316 317 318 /** 319 * Creates a model ExtendedResponse from the JNDI ExtendedRequest. 320 * 321 * @param jndiRequest The JNDI ExtendedRequest 322 * @return The model ExtendedRequest 323 * @throws DecoderException if the request value cannot be decoded. 324 */ 325 ExtendedRequest fromJndi( javax.naming.ldap.ExtendedRequest jndiRequest ) throws DecoderException; 326 327 328 /** 329 * Creates a JNDI {@link javax.naming.ldap.ExtendedRequest} from the model 330 * {@link ExtendedRequest}. 331 * 332 * @param modelRequest The extended request to convert 333 * @return A JNDI extended request 334 * @throws EncoderException If the conversion failed 335 */ 336 javax.naming.ldap.ExtendedRequest toJndi( ExtendedRequest modelRequest ) throws EncoderException; 337 338 339 // ------------------------------------------------------------------------ 340 // Other Methods 341 // ------------------------------------------------------------------------ 342 343 /** 344 * Creates a new LDAP {@link ProtocolCodecFactory}. 345 * 346 * @return the {@link ProtocolCodecFactory} 347 */ 348 ProtocolCodecFactory getProtocolCodecFactory(); 349 350 351 /** 352 * Registers a ProtocolCodecFactory with this LdapCodecService. 353 * 354 * @param factory The factory being registered. 355 * @return The previously set {@link ProtocolCodecFactory}, or null if 356 * none had been set earlier. 357 */ 358 ProtocolCodecFactory registerProtocolCodecFactory( ProtocolCodecFactory factory ); 359}