You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by el...@apache.org on 2019/01/01 11:17:28 UTC
[directory-ldap-api] 04/05: o Added a NoD factory o Renamed the
ExtendedResponseImpl to AbstractyExtendedResponse o Fixed the
StartTransaction encoding and decoding o Passed the OID for extended
response that don't have one. It's removed while encoding the response o
Handled OpaqueExtendedResponse properly in the LdapNetworkConnection class
(copying controls and LdapResult) o The ExtendedFuture now hold the
extendedRequest to be able to matrch the response when it has no OID o
Fixed the API<->JNDI conversions o Regis [...]
This is an automated email from the ASF dual-hosted git repository.
elecharny pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/directory-ldap-api.git
commit 8c30eec2ef1be5a553e45a234011616e8541774e
Author: Emmanuel Lecharny <el...@apache.org>
AuthorDate: Mon Dec 31 19:21:27 2018 +0100
o Added a NoD factory
o Renamed the ExtendedResponseImpl to AbstractyExtendedResponse
o Fixed the StartTransaction encoding and decoding
o Passed the OID for extended response that don't have one. It's removed
while encoding the response
o Handled OpaqueExtendedResponse properly in the LdapNetworkConnection
class (copying controls and LdapResult)
o The ExtendedFuture now hold the extendedRequest to be able to matrch
the response when it has no OID
o Fixed the API<->JNDI conversions
o Registered the NoDFactory in the LdapApiService
---
.../api/dsmlv2/response/Dsmlv2ResponseGrammar.java | 6 +-
.../api/dsmlv2/response/ExtendedResponseDsml.java | 4 +-
.../ldap/client/api/LdapNetworkConnection.java | 66 +++++++---
.../ldap/client/api/future/ExtendedFuture.java | 43 ++++++
.../extended/StoreExtendedResponseName.java | 2 +-
.../api/AbstractExtendedOperationFactory.java | 5 +
.../ldap/codec/osgi/DefaultLdapCodecService.java | 23 +++-
.../ldap/codec/standalone/CodecFactoryUtil.java | 10 ++
.../extras/extended/cancel/CancelResponseImpl.java | 4 +-
.../certGeneration/CertGenerationResponseImpl.java | 17 +--
.../endTransaction/EndTransactionResponseImpl.java | 17 +--
.../GracefulDisconnectResponseImpl.java | 17 +--
.../GracefulShutdownResponseImpl.java | 16 +--
.../pwdModify/PasswordModifyResponseImpl.java | 12 +-
.../extended/startTls/StartTlsResponseImpl.java | 4 +-
.../StartTransactionResponseImpl.java | 4 +-
.../StoredProcedureResponseImpl.java | 4 +-
.../extras/extended/whoAmI/WhoAmIResponseImpl.java | 4 +-
.../endTransaction/EndTransactionFactory.java | 5 +
.../StartTlsFactory.java => nod/NoDFactory.java} | 40 ++----
.../ads_impl/pwdModify/PasswordModifyFactory.java | 5 +
.../ads_impl/startTls/StartTlsFactory.java | 10 --
.../startTransaction/StartTransactionFactory.java | 28 ++++
...onseImpl.java => AbstractExtendedResponse.java} | 10 +-
.../api/ldap/model/message/ExtendedResponse.java | 8 --
.../ldap/model/message/OpaqueExtendedRequest.java | 4 +-
.../ldap/model/message/OpaqueExtendedResponse.java | 87 ++++--------
.../message/extended/ExtendedNoDResponse.java | 17 +--
.../model/message/extended/NoticeOfDisconnect.java | 50 ++++---
...plTest.java => OpaqueExtendedResponseTest.java} | 146 ++++-----------------
30 files changed, 299 insertions(+), 369 deletions(-)
diff --git a/dsml/parser/src/main/java/org/apache/directory/api/dsmlv2/response/Dsmlv2ResponseGrammar.java b/dsml/parser/src/main/java/org/apache/directory/api/dsmlv2/response/Dsmlv2ResponseGrammar.java
index cd52f10..e96dd28 100644
--- a/dsml/parser/src/main/java/org/apache/directory/api/dsmlv2/response/Dsmlv2ResponseGrammar.java
+++ b/dsml/parser/src/main/java/org/apache/directory/api/dsmlv2/response/Dsmlv2ResponseGrammar.java
@@ -51,11 +51,11 @@ import org.apache.directory.api.ldap.model.message.CompareResponseImpl;
import org.apache.directory.api.ldap.model.message.Control;
import org.apache.directory.api.ldap.model.message.DeleteResponseImpl;
import org.apache.directory.api.ldap.model.message.ExtendedResponse;
-import org.apache.directory.api.ldap.model.message.ExtendedResponseImpl;
import org.apache.directory.api.ldap.model.message.LdapResult;
import org.apache.directory.api.ldap.model.message.Message;
import org.apache.directory.api.ldap.model.message.ModifyDnResponseImpl;
import org.apache.directory.api.ldap.model.message.ModifyResponseImpl;
+import org.apache.directory.api.ldap.model.message.OpaqueExtendedResponse;
import org.apache.directory.api.ldap.model.message.ReferralImpl;
import org.apache.directory.api.ldap.model.message.Response;
import org.apache.directory.api.ldap.model.message.ResultCodeEnum;
@@ -459,13 +459,13 @@ public final class Dsmlv2ResponseGrammar extends AbstractGrammar implements Gram
if ( attributeValue != null )
{
extendedResponse = new ExtendedResponseDsml(
- container.getLdapCodecService(), new ExtendedResponseImpl(
+ container.getLdapCodecService(), new OpaqueExtendedResponse(
ParserUtils.parseAndVerifyRequestID( attributeValue, xpp ) ) );
}
else
{
extendedResponse = new ExtendedResponseDsml(
- container.getLdapCodecService(), new ExtendedResponseImpl( -1 ) );
+ container.getLdapCodecService(), new OpaqueExtendedResponse( -1 ) );
}
container.getBatchResponse().addResponse( extendedResponse );
diff --git a/dsml/parser/src/main/java/org/apache/directory/api/dsmlv2/response/ExtendedResponseDsml.java b/dsml/parser/src/main/java/org/apache/directory/api/dsmlv2/response/ExtendedResponseDsml.java
index 479ac47..63cdbc7 100644
--- a/dsml/parser/src/main/java/org/apache/directory/api/dsmlv2/response/ExtendedResponseDsml.java
+++ b/dsml/parser/src/main/java/org/apache/directory/api/dsmlv2/response/ExtendedResponseDsml.java
@@ -24,8 +24,8 @@ import org.apache.directory.api.asn1.util.Oid;
import org.apache.directory.api.dsmlv2.ParserUtils;
import org.apache.directory.api.ldap.codec.api.LdapApiService;
import org.apache.directory.api.ldap.model.message.ExtendedResponse;
-import org.apache.directory.api.ldap.model.message.ExtendedResponseImpl;
import org.apache.directory.api.ldap.model.message.MessageTypeEnum;
+import org.apache.directory.api.ldap.model.message.OpaqueExtendedResponse;
import org.apache.directory.api.util.Strings;
import org.dom4j.Element;
import org.dom4j.Namespace;
@@ -52,7 +52,7 @@ public class ExtendedResponseDsml extends AbstractResultResponseDsml<ExtendedRes
*/
public ExtendedResponseDsml( LdapApiService codec )
{
- super( codec, new ExtendedResponseImpl( "" ) );
+ super( codec, new OpaqueExtendedResponse( "" ) );
}
diff --git a/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/LdapNetworkConnection.java b/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/LdapNetworkConnection.java
index c37e269..44cf8eb 100644
--- a/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/LdapNetworkConnection.java
+++ b/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/LdapNetworkConnection.java
@@ -113,6 +113,7 @@ import org.apache.directory.api.ldap.model.message.ModifyRequest;
import org.apache.directory.api.ldap.model.message.ModifyRequestImpl;
import org.apache.directory.api.ldap.model.message.ModifyResponse;
import org.apache.directory.api.ldap.model.message.OpaqueExtendedRequest;
+import org.apache.directory.api.ldap.model.message.OpaqueExtendedResponse;
import org.apache.directory.api.ldap.model.message.Request;
import org.apache.directory.api.ldap.model.message.Response;
import org.apache.directory.api.ldap.model.message.ResultCodeEnum;
@@ -1482,6 +1483,7 @@ public class LdapNetworkConnection extends AbstractLdapConnection implements Lda
{
// Catch all other exceptions
LOG.error( NO_RESPONSE_ERROR, ie );
+
throw new LdapException( NO_RESPONSE_ERROR, ie );
}
}
@@ -2644,6 +2646,8 @@ public class LdapNetworkConnection extends AbstractLdapConnection implements Lda
LOG.debug( I18n.msg( I18n.MSG_04117_EXTENDED_FAILED, extendedResponse ) );
}
}
+
+ extendedResponse = handleOpaqueResponse( extendedResponse, extendedFuture );
// Store the response into the future
extendedFuture.set( extendedResponse );
@@ -2808,6 +2812,37 @@ public class LdapNetworkConnection extends AbstractLdapConnection implements Lda
}
}
+
+ private ExtendedResponse handleOpaqueResponse( ExtendedResponse extendedResponse, ExtendedFuture extendedFuture )
+ throws DecoderException
+ {
+ if ( ( extendedResponse instanceof OpaqueExtendedResponse )
+ && ( Strings.isEmpty( extendedResponse.getResponseName() ) ) )
+ {
+ ExtendedOperationFactory factory = codec.getExtendedResponseFactories().
+ get( extendedFuture.getExtendedRequest().getRequestName() );
+
+ ExtendedResponse response = factory.newResponse( ( ( OpaqueExtendedResponse ) extendedResponse ).getResponseValue() );
+
+ // Copy the controls
+ for ( Control control : extendedResponse.getControls().values() )
+ {
+ response.addControl( control );
+ }
+
+ // copy the LDAPResult
+ response.getLdapResult().setDiagnosticMessage( extendedResponse.getLdapResult().getDiagnosticMessage() );
+ response.getLdapResult().setMatchedDn( extendedResponse.getLdapResult().getMatchedDn() );
+ response.getLdapResult().setReferral( extendedResponse.getLdapResult().getReferral() );
+ response.getLdapResult().setResultCode( extendedResponse.getLdapResult().getResultCode() );
+
+ return response;
+ }
+ else
+ {
+ return extendedResponse;
+ }
+ }
/**
* {@inheritDoc}
@@ -3901,8 +3936,15 @@ public class LdapNetworkConnection extends AbstractLdapConnection implements Lda
if ( factory != null )
{
try
- {
- return extended( factory.newRequest( value ) );
+ {
+ if ( value == null )
+ {
+ return extended( factory.newRequest() );
+ }
+ else
+ {
+ return extended( factory.newRequest( value ) );
+ }
}
catch ( DecoderException de )
{
@@ -4024,6 +4066,7 @@ public class LdapNetworkConnection extends AbstractLdapConnection implements Lda
extendedRequest.setMessageId( newId );
ExtendedFuture extendedFuture = new ExtendedFuture( this, newId );
+ extendedFuture.setExtendedRequest( extendedRequest );
addToFutureMap( newId, extendedFuture );
// Send the request to the server
@@ -4453,25 +4496,6 @@ public class LdapNetworkConnection extends AbstractLdapConnection implements Lda
}
- private void addControls( Message codec, Message message )
- {
- Map<String, Control> controls = codec.getControls();
-
- if ( controls != null )
- {
- for ( Control cc : controls.values() )
- {
- if ( cc == null )
- {
- continue;
- }
-
- message.addControl( cc );
- }
- }
- }
-
-
/**
* removes the Objects associated with the given message ID
* from future and response queue maps
diff --git a/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/future/ExtendedFuture.java b/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/future/ExtendedFuture.java
index 0feacee..229f470 100644
--- a/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/future/ExtendedFuture.java
+++ b/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/future/ExtendedFuture.java
@@ -20,6 +20,8 @@
package org.apache.directory.ldap.client.api.future;
+import org.apache.directory.api.ldap.model.message.ExtendedRequest;
+import org.apache.directory.api.ldap.model.message.ExtendedResponse;
import org.apache.directory.api.ldap.model.message.Response;
import org.apache.directory.ldap.client.api.LdapConnection;
@@ -31,6 +33,11 @@ import org.apache.directory.ldap.client.api.LdapConnection;
*/
public class ExtendedFuture extends MultipleResponseFuture<Response>
{
+ /**
+ * The extendedRequest : we need it to find which request is associated
+ * with a response, when this response has no name */
+ ExtendedRequest extendedRequest;
+
/**
* Creates a new instance of ExtendedFuture.
*
@@ -44,6 +51,42 @@ public class ExtendedFuture extends MultipleResponseFuture<Response>
/**
+ * @return the extendedRequest
+ */
+ public ExtendedRequest getExtendedRequest()
+ {
+ return extendedRequest;
+ }
+
+
+ /**
+ * @param extendedRequest the extendedRequest to set
+ */
+ public void setExtendedRequest( ExtendedRequest extendedRequest )
+ {
+ this.extendedRequest = extendedRequest;
+ }
+
+
+ /**
+ * Set the associated Response in this Future
+ *
+ * @param response The response to add into the Future
+ * @throws InterruptedException if the operation has been cancelled by client
+ */
+ public void set( ExtendedResponse response ) throws InterruptedException
+ {
+ if ( response.getResponseName() == null )
+ {
+ // Feed the response with the request's OID
+ response.setResponseName( extendedRequest.getRequestName() );
+ }
+
+ queue.add( response );
+ }
+
+
+ /**
* {@inheritDoc}
*/
@Override
diff --git a/ldap/codec/core/src/main/java/org/apache/directory/api/ldap/codec/actions/response/extended/StoreExtendedResponseName.java b/ldap/codec/core/src/main/java/org/apache/directory/api/ldap/codec/actions/response/extended/StoreExtendedResponseName.java
index 1bd94b5..6ab6a30 100644
--- a/ldap/codec/core/src/main/java/org/apache/directory/api/ldap/codec/actions/response/extended/StoreExtendedResponseName.java
+++ b/ldap/codec/core/src/main/java/org/apache/directory/api/ldap/codec/actions/response/extended/StoreExtendedResponseName.java
@@ -103,7 +103,7 @@ public class StoreExtendedResponseName extends GrammarAction<LdapMessageContaine
if ( factory != null )
{
- // Create the extended request
+ // Create the extended response
extendedResponse = factory.newResponse();
// Move the LDAPResult in the newly created response
diff --git a/ldap/codec/core/src/main/java/org/apache/directory/api/ldap/codec/api/AbstractExtendedOperationFactory.java b/ldap/codec/core/src/main/java/org/apache/directory/api/ldap/codec/api/AbstractExtendedOperationFactory.java
index 74ec8db..d1a9fd2 100644
--- a/ldap/codec/core/src/main/java/org/apache/directory/api/ldap/codec/api/AbstractExtendedOperationFactory.java
+++ b/ldap/codec/core/src/main/java/org/apache/directory/api/ldap/codec/api/AbstractExtendedOperationFactory.java
@@ -23,6 +23,8 @@ import org.apache.directory.api.asn1.DecoderException;
import org.apache.directory.api.asn1.util.Asn1Buffer;
import org.apache.directory.api.ldap.model.message.ExtendedRequest;
import org.apache.directory.api.ldap.model.message.ExtendedResponse;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
* A Factory to encode Extended Request and Response messages
@@ -31,6 +33,9 @@ import org.apache.directory.api.ldap.model.message.ExtendedResponse;
*/
public abstract class AbstractExtendedOperationFactory implements ExtendedOperationFactory
{
+ /** logger for reporting errors that might not be handled properly upstream */
+ protected static final Logger LOG = LoggerFactory.getLogger( AbstractExtendedOperationFactory.class );
+
/** The LDAP codec responsible for encoding and decoding */
protected LdapApiService codec;
diff --git a/ldap/codec/core/src/main/java/org/apache/directory/api/ldap/codec/osgi/DefaultLdapCodecService.java b/ldap/codec/core/src/main/java/org/apache/directory/api/ldap/codec/osgi/DefaultLdapCodecService.java
index 1e419fb..e4371f6 100644
--- a/ldap/codec/core/src/main/java/org/apache/directory/api/ldap/codec/osgi/DefaultLdapCodecService.java
+++ b/ldap/codec/core/src/main/java/org/apache/directory/api/ldap/codec/osgi/DefaultLdapCodecService.java
@@ -349,10 +349,25 @@ public class DefaultLdapCodecService implements LdapApiService
{
// We don't know if it's a request or a response control. Test with request contriols
ControlFactory<?> factory = requestControlFactories.get( control.getOid() );
- Asn1Buffer asn1Buffer = new Asn1Buffer();
- factory.encodeValue( asn1Buffer, control );
-
- return new BasicControl( control.getOid(), control.isCritical(), asn1Buffer.getBytes().array() );
+
+ if ( factory == null )
+ {
+ if ( control instanceof OpaqueControl )
+ {
+ return new BasicControl( control.getOid(), control.isCritical(), ( ( OpaqueControl ) control ).getEncodedValue() );
+ }
+ else
+ {
+ return new BasicControl( control.getOid(), control.isCritical(), null );
+ }
+ }
+ else
+ {
+ Asn1Buffer asn1Buffer = new Asn1Buffer();
+ factory.encodeValue( asn1Buffer, control );
+
+ return new BasicControl( control.getOid(), control.isCritical(), asn1Buffer.getBytes().array() );
+ }
}
diff --git a/ldap/codec/standalone/src/main/java/org/apache/directory/api/ldap/codec/standalone/CodecFactoryUtil.java b/ldap/codec/standalone/src/main/java/org/apache/directory/api/ldap/codec/standalone/CodecFactoryUtil.java
index 21bdd3a..bbe7d16 100644
--- a/ldap/codec/standalone/src/main/java/org/apache/directory/api/ldap/codec/standalone/CodecFactoryUtil.java
+++ b/ldap/codec/standalone/src/main/java/org/apache/directory/api/ldap/codec/standalone/CodecFactoryUtil.java
@@ -69,6 +69,7 @@ import org.apache.directory.api.ldap.extras.extended.ads_impl.certGeneration.Cer
import org.apache.directory.api.ldap.extras.extended.ads_impl.endTransaction.EndTransactionFactory;
import org.apache.directory.api.ldap.extras.extended.ads_impl.gracefulDisconnect.GracefulDisconnectFactory;
import org.apache.directory.api.ldap.extras.extended.ads_impl.gracefulShutdown.GracefulShutdownFactory;
+import org.apache.directory.api.ldap.extras.extended.ads_impl.nod.NoDFactory;
import org.apache.directory.api.ldap.extras.extended.ads_impl.pwdModify.PasswordModifyFactory;
import org.apache.directory.api.ldap.extras.extended.ads_impl.startTls.StartTlsFactory;
import org.apache.directory.api.ldap.extras.extended.ads_impl.startTransaction.StartTransactionFactory;
@@ -388,11 +389,20 @@ public final class CodecFactoryUtil
extendendRequestFactories.put( gracefulShutdownFactory.getOid(), gracefulShutdownFactory );
extendendResponseFactories.put( gracefulShutdownFactory.getOid(), gracefulShutdownFactory );
+
if ( LOG.isInfoEnabled() )
{
LOG.info( I18n.msg( I18n.MSG_06001_REGISTERED_EXTENDED_OP_FACTORY, gracefulShutdownFactory.getOid() ) );
}
+ NoDFactory noticeOfDisconnectFactory = new NoDFactory( apiService );
+ extendendResponseFactories.put( noticeOfDisconnectFactory.getOid(), noticeOfDisconnectFactory );
+
+ if ( LOG.isInfoEnabled() )
+ {
+ LOG.info( I18n.msg( I18n.MSG_06001_REGISTERED_EXTENDED_OP_FACTORY, noticeOfDisconnectFactory.getOid() ) );
+ }
+
PasswordModifyFactory passwordModifyFactory = new PasswordModifyFactory( apiService );
extendendRequestFactories.put( passwordModifyFactory.getOid(), passwordModifyFactory );
extendendResponseFactories.put( passwordModifyFactory.getOid(), passwordModifyFactory );
diff --git a/ldap/extras/codec-api/src/main/java/org/apache/directory/api/ldap/extras/extended/cancel/CancelResponseImpl.java b/ldap/extras/codec-api/src/main/java/org/apache/directory/api/ldap/extras/extended/cancel/CancelResponseImpl.java
index 605410c..631a0d3 100644
--- a/ldap/extras/codec-api/src/main/java/org/apache/directory/api/ldap/extras/extended/cancel/CancelResponseImpl.java
+++ b/ldap/extras/codec-api/src/main/java/org/apache/directory/api/ldap/extras/extended/cancel/CancelResponseImpl.java
@@ -21,7 +21,7 @@ package org.apache.directory.api.ldap.extras.extended.cancel;
import org.apache.directory.api.i18n.I18n;
-import org.apache.directory.api.ldap.model.message.ExtendedResponseImpl;
+import org.apache.directory.api.ldap.model.message.AbstractExtendedResponse;
import org.apache.directory.api.ldap.model.message.ResultCodeEnum;
@@ -31,7 +31,7 @@ import org.apache.directory.api.ldap.model.message.ResultCodeEnum;
*
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
*/
-public class CancelResponseImpl extends ExtendedResponseImpl implements CancelResponse
+public class CancelResponseImpl extends AbstractExtendedResponse implements CancelResponse
{
/**
* Create a new CancelResponse object
diff --git a/ldap/extras/codec-api/src/main/java/org/apache/directory/api/ldap/extras/extended/certGeneration/CertGenerationResponseImpl.java b/ldap/extras/codec-api/src/main/java/org/apache/directory/api/ldap/extras/extended/certGeneration/CertGenerationResponseImpl.java
index 6e65d94..d51e8bc 100644
--- a/ldap/extras/codec-api/src/main/java/org/apache/directory/api/ldap/extras/extended/certGeneration/CertGenerationResponseImpl.java
+++ b/ldap/extras/codec-api/src/main/java/org/apache/directory/api/ldap/extras/extended/certGeneration/CertGenerationResponseImpl.java
@@ -21,7 +21,7 @@ package org.apache.directory.api.ldap.extras.extended.certGeneration;
import org.apache.directory.api.i18n.I18n;
-import org.apache.directory.api.ldap.model.message.ExtendedResponseImpl;
+import org.apache.directory.api.ldap.model.message.AbstractExtendedResponse;
import org.apache.directory.api.ldap.model.message.ResultCodeEnum;
@@ -31,7 +31,7 @@ import org.apache.directory.api.ldap.model.message.ResultCodeEnum;
*
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
*/
-public class CertGenerationResponseImpl extends ExtendedResponseImpl implements CertGenerationResponse
+public class CertGenerationResponseImpl extends AbstractExtendedResponse implements CertGenerationResponse
{
/**
* Create a new CertGenerationResponseImpl instance
@@ -85,19 +85,6 @@ public class CertGenerationResponseImpl extends ExtendedResponseImpl implements
/**
- * Gets the OID uniquely identifying this extended response (a.k.a. its
- * name).
- *
- * @return the OID of the extended response type.
- */
- @Override
- public String getResponseName()
- {
- return EXTENSION_OID;
- }
-
-
- /**
* Sets the OID uniquely identifying this extended response (a.k.a. its
* name).
*
diff --git a/ldap/extras/codec-api/src/main/java/org/apache/directory/api/ldap/extras/extended/endTransaction/EndTransactionResponseImpl.java b/ldap/extras/codec-api/src/main/java/org/apache/directory/api/ldap/extras/extended/endTransaction/EndTransactionResponseImpl.java
index b037b2f..d74fbf3 100644
--- a/ldap/extras/codec-api/src/main/java/org/apache/directory/api/ldap/extras/extended/endTransaction/EndTransactionResponseImpl.java
+++ b/ldap/extras/codec-api/src/main/java/org/apache/directory/api/ldap/extras/extended/endTransaction/EndTransactionResponseImpl.java
@@ -23,7 +23,7 @@ package org.apache.directory.api.ldap.extras.extended.endTransaction;
import java.util.ArrayList;
import java.util.List;
-import org.apache.directory.api.ldap.model.message.ExtendedResponseImpl;
+import org.apache.directory.api.ldap.model.message.AbstractExtendedResponse;
import org.apache.directory.api.ldap.model.message.ResultCodeEnum;
@@ -54,7 +54,7 @@ import org.apache.directory.api.ldap.model.message.ResultCodeEnum;
*
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
*/
-public class EndTransactionResponseImpl extends ExtendedResponseImpl implements EndTransactionResponse
+public class EndTransactionResponseImpl extends AbstractExtendedResponse implements EndTransactionResponse
{
/** The faulty Message ID, if any */
private int failedMessageId = -1;
@@ -108,19 +108,6 @@ public class EndTransactionResponseImpl extends ExtendedResponseImpl implements
super.getLdapResult().setMatchedDn( null );
super.getLdapResult().setResultCode( ResultCodeEnum.SUCCESS );
}
-
-
- /**
- * Gets the OID uniquely identifying this extended response (a.k.a. its
- * name). It's a null value for the Cancel response
- *
- * @return the OID of the extended response type.
- */
- @Override
- public String getResponseName()
- {
- return "";
- }
/**
diff --git a/ldap/extras/codec-api/src/main/java/org/apache/directory/api/ldap/extras/extended/gracefulDisconnect/GracefulDisconnectResponseImpl.java b/ldap/extras/codec-api/src/main/java/org/apache/directory/api/ldap/extras/extended/gracefulDisconnect/GracefulDisconnectResponseImpl.java
index af0004a..703833b 100644
--- a/ldap/extras/codec-api/src/main/java/org/apache/directory/api/ldap/extras/extended/gracefulDisconnect/GracefulDisconnectResponseImpl.java
+++ b/ldap/extras/codec-api/src/main/java/org/apache/directory/api/ldap/extras/extended/gracefulDisconnect/GracefulDisconnectResponseImpl.java
@@ -21,7 +21,7 @@ package org.apache.directory.api.ldap.extras.extended.gracefulDisconnect;
import org.apache.directory.api.i18n.I18n;
-import org.apache.directory.api.ldap.model.message.ExtendedResponseImpl;
+import org.apache.directory.api.ldap.model.message.AbstractExtendedResponse;
import org.apache.directory.api.ldap.model.message.Referral;
import org.apache.directory.api.ldap.model.message.ReferralImpl;
import org.apache.directory.api.ldap.model.message.ResultCodeEnum;
@@ -36,7 +36,7 @@ import org.apache.directory.api.ldap.model.message.ResultCodeEnum;
*
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
*/
-public class GracefulDisconnectResponseImpl extends ExtendedResponseImpl implements GracefulDisconnectResponse
+public class GracefulDisconnectResponseImpl extends AbstractExtendedResponse implements GracefulDisconnectResponse
{
/** Offline time after disconnection */
private int timeOffline;
@@ -81,19 +81,6 @@ public class GracefulDisconnectResponseImpl extends ExtendedResponseImpl impleme
/**
- * Gets the OID uniquely identifying this extended response (a.k.a. its
- * name).
- *
- * @return the OID of the extended response type.
- */
- @Override
- public String getResponseName()
- {
- return EXTENSION_OID;
- }
-
-
- /**
* Sets the OID uniquely identifying this extended response (a.k.a. its
* name).
*
diff --git a/ldap/extras/codec-api/src/main/java/org/apache/directory/api/ldap/extras/extended/gracefulShutdown/GracefulShutdownResponseImpl.java b/ldap/extras/codec-api/src/main/java/org/apache/directory/api/ldap/extras/extended/gracefulShutdown/GracefulShutdownResponseImpl.java
index 2a4ea41..5bfc0fe 100644
--- a/ldap/extras/codec-api/src/main/java/org/apache/directory/api/ldap/extras/extended/gracefulShutdown/GracefulShutdownResponseImpl.java
+++ b/ldap/extras/codec-api/src/main/java/org/apache/directory/api/ldap/extras/extended/gracefulShutdown/GracefulShutdownResponseImpl.java
@@ -21,7 +21,7 @@ package org.apache.directory.api.ldap.extras.extended.gracefulShutdown;
import org.apache.directory.api.i18n.I18n;
-import org.apache.directory.api.ldap.model.message.ExtendedResponseImpl;
+import org.apache.directory.api.ldap.model.message.AbstractExtendedResponse;
import org.apache.directory.api.ldap.model.message.ResultCodeEnum;
@@ -32,7 +32,7 @@ import org.apache.directory.api.ldap.model.message.ResultCodeEnum;
*
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
*/
-public class GracefulShutdownResponseImpl extends ExtendedResponseImpl implements GracefulShutdownResponse
+public class GracefulShutdownResponseImpl extends AbstractExtendedResponse implements GracefulShutdownResponse
{
/**
* Instantiates a new graceful shutdown response.
@@ -93,18 +93,6 @@ public class GracefulShutdownResponseImpl extends ExtendedResponseImpl implement
// ExtendedResponse Interface Method Implementations
// ------------------------------------------------------------------------
- /**
- * Gets the OID uniquely identifying this extended response (a.k.a. its
- * name).
- *
- * @return the OID of the extended response type.
- */
- @Override
- public String getResponseName()
- {
- return EXTENSION_OID;
- }
-
/**
* Sets the OID uniquely identifying this extended response (a.k.a. its
diff --git a/ldap/extras/codec-api/src/main/java/org/apache/directory/api/ldap/extras/extended/pwdModify/PasswordModifyResponseImpl.java b/ldap/extras/codec-api/src/main/java/org/apache/directory/api/ldap/extras/extended/pwdModify/PasswordModifyResponseImpl.java
index acc7be4..75db6c9 100644
--- a/ldap/extras/codec-api/src/main/java/org/apache/directory/api/ldap/extras/extended/pwdModify/PasswordModifyResponseImpl.java
+++ b/ldap/extras/codec-api/src/main/java/org/apache/directory/api/ldap/extras/extended/pwdModify/PasswordModifyResponseImpl.java
@@ -20,7 +20,7 @@
package org.apache.directory.api.ldap.extras.extended.pwdModify;
-import org.apache.directory.api.ldap.model.message.ExtendedResponseImpl;
+import org.apache.directory.api.ldap.model.message.AbstractExtendedResponse;
import org.apache.directory.api.ldap.model.message.ResultCodeEnum;
import org.apache.directory.api.util.Strings;
@@ -35,7 +35,7 @@ import org.apache.directory.api.util.Strings;
*
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
*/
-public class PasswordModifyResponseImpl extends ExtendedResponseImpl implements PasswordModifyResponse
+public class PasswordModifyResponseImpl extends AbstractExtendedResponse implements PasswordModifyResponse
{
/** The generated password */
private byte[] genPassword;
@@ -49,7 +49,7 @@ public class PasswordModifyResponseImpl extends ExtendedResponseImpl implements
*/
public PasswordModifyResponseImpl( int messageId, ResultCodeEnum rcode, String diagnosticMessage )
{
- super( messageId, null );
+ super( messageId, PasswordModifyResponse.EXTENSION_OID );
super.getLdapResult().setMatchedDn( null );
super.getLdapResult().setResultCode( rcode );
@@ -64,7 +64,7 @@ public class PasswordModifyResponseImpl extends ExtendedResponseImpl implements
*/
public PasswordModifyResponseImpl( int messageId, ResultCodeEnum rcode )
{
- super( messageId, null );
+ super( messageId, PasswordModifyResponse.EXTENSION_OID );
super.getLdapResult().setMatchedDn( null );
super.getLdapResult().setResultCode( rcode );
@@ -78,7 +78,7 @@ public class PasswordModifyResponseImpl extends ExtendedResponseImpl implements
*/
public PasswordModifyResponseImpl( int messageId )
{
- super( messageId, null );
+ super( messageId, PasswordModifyResponse.EXTENSION_OID );
super.getLdapResult().setMatchedDn( null );
super.getLdapResult().setResultCode( ResultCodeEnum.SUCCESS );
}
@@ -89,7 +89,7 @@ public class PasswordModifyResponseImpl extends ExtendedResponseImpl implements
*/
public PasswordModifyResponseImpl()
{
- super( null );
+ super( PasswordModifyResponse.EXTENSION_OID );
super.getLdapResult().setMatchedDn( null );
super.getLdapResult().setResultCode( ResultCodeEnum.SUCCESS );
}
diff --git a/ldap/extras/codec-api/src/main/java/org/apache/directory/api/ldap/extras/extended/startTls/StartTlsResponseImpl.java b/ldap/extras/codec-api/src/main/java/org/apache/directory/api/ldap/extras/extended/startTls/StartTlsResponseImpl.java
index a2f7294..40f17ca 100644
--- a/ldap/extras/codec-api/src/main/java/org/apache/directory/api/ldap/extras/extended/startTls/StartTlsResponseImpl.java
+++ b/ldap/extras/codec-api/src/main/java/org/apache/directory/api/ldap/extras/extended/startTls/StartTlsResponseImpl.java
@@ -20,7 +20,7 @@
package org.apache.directory.api.ldap.extras.extended.startTls;
-import org.apache.directory.api.ldap.model.message.ExtendedResponseImpl;
+import org.apache.directory.api.ldap.model.message.AbstractExtendedResponse;
import org.apache.directory.api.ldap.model.message.ResultCodeEnum;
@@ -29,7 +29,7 @@ import org.apache.directory.api.ldap.model.message.ResultCodeEnum;
*
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
*/
-public class StartTlsResponseImpl extends ExtendedResponseImpl implements StartTlsResponse
+public class StartTlsResponseImpl extends AbstractExtendedResponse implements StartTlsResponse
{
/**
* Create a new instance for the StartTls response
diff --git a/ldap/extras/codec-api/src/main/java/org/apache/directory/api/ldap/extras/extended/startTransaction/StartTransactionResponseImpl.java b/ldap/extras/codec-api/src/main/java/org/apache/directory/api/ldap/extras/extended/startTransaction/StartTransactionResponseImpl.java
index f0d36a9..1176c5d 100644
--- a/ldap/extras/codec-api/src/main/java/org/apache/directory/api/ldap/extras/extended/startTransaction/StartTransactionResponseImpl.java
+++ b/ldap/extras/codec-api/src/main/java/org/apache/directory/api/ldap/extras/extended/startTransaction/StartTransactionResponseImpl.java
@@ -23,7 +23,7 @@ package org.apache.directory.api.ldap.extras.extended.startTransaction;
import java.util.Arrays;
import org.apache.directory.api.i18n.I18n;
-import org.apache.directory.api.ldap.model.message.ExtendedResponseImpl;
+import org.apache.directory.api.ldap.model.message.AbstractExtendedResponse;
import org.apache.directory.api.ldap.model.message.ResultCodeEnum;
import org.apache.directory.api.util.Strings;
@@ -43,7 +43,7 @@ import org.apache.directory.api.util.Strings;
*
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
*/
-public class StartTransactionResponseImpl extends ExtendedResponseImpl implements StartTransactionResponse
+public class StartTransactionResponseImpl extends AbstractExtendedResponse implements StartTransactionResponse
{
/** The transaction ID if the request was successful */
private byte[] transactionId;
diff --git a/ldap/extras/codec-api/src/main/java/org/apache/directory/api/ldap/extras/extended/storedProcedure/StoredProcedureResponseImpl.java b/ldap/extras/codec-api/src/main/java/org/apache/directory/api/ldap/extras/extended/storedProcedure/StoredProcedureResponseImpl.java
index bcd1d0c..b8b6939 100644
--- a/ldap/extras/codec-api/src/main/java/org/apache/directory/api/ldap/extras/extended/storedProcedure/StoredProcedureResponseImpl.java
+++ b/ldap/extras/codec-api/src/main/java/org/apache/directory/api/ldap/extras/extended/storedProcedure/StoredProcedureResponseImpl.java
@@ -20,7 +20,7 @@
package org.apache.directory.api.ldap.extras.extended.storedProcedure;
-import org.apache.directory.api.ldap.model.message.ExtendedResponseImpl;
+import org.apache.directory.api.ldap.model.message.AbstractExtendedResponse;
/**
@@ -29,7 +29,7 @@ import org.apache.directory.api.ldap.model.message.ExtendedResponseImpl;
*
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
*/
-public class StoredProcedureResponseImpl extends ExtendedResponseImpl implements StoredProcedureResponse
+public class StoredProcedureResponseImpl extends AbstractExtendedResponse implements StoredProcedureResponse
{
/**
* Instantiates a new stored procedure response.
diff --git a/ldap/extras/codec-api/src/main/java/org/apache/directory/api/ldap/extras/extended/whoAmI/WhoAmIResponseImpl.java b/ldap/extras/codec-api/src/main/java/org/apache/directory/api/ldap/extras/extended/whoAmI/WhoAmIResponseImpl.java
index 580155a..da7ff6f 100644
--- a/ldap/extras/codec-api/src/main/java/org/apache/directory/api/ldap/extras/extended/whoAmI/WhoAmIResponseImpl.java
+++ b/ldap/extras/codec-api/src/main/java/org/apache/directory/api/ldap/extras/extended/whoAmI/WhoAmIResponseImpl.java
@@ -20,7 +20,7 @@
package org.apache.directory.api.ldap.extras.extended.whoAmI;
-import org.apache.directory.api.ldap.model.message.ExtendedResponseImpl;
+import org.apache.directory.api.ldap.model.message.AbstractExtendedResponse;
import org.apache.directory.api.ldap.model.message.ResultCodeEnum;
import org.apache.directory.api.ldap.model.name.Dn;
import org.apache.directory.api.util.Strings;
@@ -35,7 +35,7 @@ import org.apache.directory.api.util.Strings;
*
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
*/
-public class WhoAmIResponseImpl extends ExtendedResponseImpl implements WhoAmIResponse
+public class WhoAmIResponseImpl extends AbstractExtendedResponse implements WhoAmIResponse
{
/** The authzid */
private byte[] authzId;
diff --git a/ldap/extras/codec/src/main/java/org/apache/directory/api/ldap/extras/extended/ads_impl/endTransaction/EndTransactionFactory.java b/ldap/extras/codec/src/main/java/org/apache/directory/api/ldap/extras/extended/ads_impl/endTransaction/EndTransactionFactory.java
index 29d9792..dfe7616 100644
--- a/ldap/extras/codec/src/main/java/org/apache/directory/api/ldap/extras/extended/ads_impl/endTransaction/EndTransactionFactory.java
+++ b/ldap/extras/codec/src/main/java/org/apache/directory/api/ldap/extras/extended/ads_impl/endTransaction/EndTransactionFactory.java
@@ -229,6 +229,11 @@ public class EndTransactionFactory extends AbstractExtendedOperationFactory
@Override
public void encodeValue( Asn1Buffer buffer, ExtendedResponse extendedResponse )
{
+ // This is a hack !!! We remove the response name from the response
+ // because it has only be added to find the factory, but we don't want it
+ // top be injected in the encoded PDU...
+ extendedResponse.setResponseName( null );
+
int start = buffer.getPos();
EndTransactionResponse endTransactionResponse = ( EndTransactionResponse ) extendedResponse;
diff --git a/ldap/extras/codec/src/main/java/org/apache/directory/api/ldap/extras/extended/ads_impl/startTls/StartTlsFactory.java b/ldap/extras/codec/src/main/java/org/apache/directory/api/ldap/extras/extended/ads_impl/nod/NoDFactory.java
similarity index 56%
copy from ldap/extras/codec/src/main/java/org/apache/directory/api/ldap/extras/extended/ads_impl/startTls/StartTlsFactory.java
copy to ldap/extras/codec/src/main/java/org/apache/directory/api/ldap/extras/extended/ads_impl/nod/NoDFactory.java
index eef250b..2a86c00 100644
--- a/ldap/extras/codec/src/main/java/org/apache/directory/api/ldap/extras/extended/ads_impl/startTls/StartTlsFactory.java
+++ b/ldap/extras/codec/src/main/java/org/apache/directory/api/ldap/extras/extended/ads_impl/nod/NoDFactory.java
@@ -17,34 +17,33 @@
* under the License.
*
*/
-package org.apache.directory.api.ldap.extras.extended.ads_impl.startTls;
+package org.apache.directory.api.ldap.extras.extended.ads_impl.nod;
import org.apache.directory.api.ldap.codec.api.AbstractExtendedOperationFactory;
import org.apache.directory.api.ldap.codec.api.ExtendedOperationFactory;
import org.apache.directory.api.ldap.codec.api.LdapApiService;
-import org.apache.directory.api.ldap.extras.extended.startTls.StartTlsRequest;
-import org.apache.directory.api.ldap.extras.extended.startTls.StartTlsRequestImpl;
-import org.apache.directory.api.ldap.extras.extended.startTls.StartTlsResponse;
-import org.apache.directory.api.ldap.extras.extended.startTls.StartTlsResponseImpl;
+import org.apache.directory.api.ldap.model.message.ExtendedRequest;
+import org.apache.directory.api.ldap.model.message.ResultCodeEnum;
+import org.apache.directory.api.ldap.model.message.extended.NoticeOfDisconnect;
/**
- * An {@link ExtendedOperationFactory} for creating SartTls extended reques/response
+ * An {@link ExtendedOperationFactory} for creating NoticeOfDisconnect extended response
* pairs.
*
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
*/
-public class StartTlsFactory extends AbstractExtendedOperationFactory
+public class NoDFactory extends AbstractExtendedOperationFactory
{
/**
- * Creates a new instance of StartTlsFactory.
+ * Creates a new instance of NoDFactory.
*
* @param codec The codec for this factory.
*/
- public StartTlsFactory( LdapApiService codec )
+ public NoDFactory( LdapApiService codec )
{
- super( codec, StartTlsRequest.EXTENSION_OID );
+ super( codec, NoticeOfDisconnect.EXTENSION_OID );
}
@@ -52,28 +51,15 @@ public class StartTlsFactory extends AbstractExtendedOperationFactory
* {@inheritDoc}
*/
@Override
- public String getOid()
+ public NoticeOfDisconnect newResponse()
{
- return StartTlsRequest.EXTENSION_OID;
+ return NoticeOfDisconnect.createNoticeOfDisconnect( ResultCodeEnum.PROTOCOL_ERROR );
}
- /**
- * {@inheritDoc}
- */
- @Override
- public StartTlsRequest newRequest()
- {
- return new StartTlsRequestImpl();
- }
-
-
- /**
- * {@inheritDoc}
- */
@Override
- public StartTlsResponse newResponse()
+ public ExtendedRequest newRequest()
{
- return new StartTlsResponseImpl();
+ return null;
}
}
diff --git a/ldap/extras/codec/src/main/java/org/apache/directory/api/ldap/extras/extended/ads_impl/pwdModify/PasswordModifyFactory.java b/ldap/extras/codec/src/main/java/org/apache/directory/api/ldap/extras/extended/ads_impl/pwdModify/PasswordModifyFactory.java
index 43f3df8..15acc70 100644
--- a/ldap/extras/codec/src/main/java/org/apache/directory/api/ldap/extras/extended/ads_impl/pwdModify/PasswordModifyFactory.java
+++ b/ldap/extras/codec/src/main/java/org/apache/directory/api/ldap/extras/extended/ads_impl/pwdModify/PasswordModifyFactory.java
@@ -176,6 +176,11 @@ public class PasswordModifyFactory extends AbstractExtendedOperationFactory
@Override
public void encodeValue( Asn1Buffer buffer, ExtendedResponse extendedResponse )
{
+ // This is a hack !!! We remove the response name from the response
+ // because it has only be added to find the factory, but we don't want it
+ // top be injected in the encoded PDU...
+ extendedResponse.setResponseName( null );
+
int start = buffer.getPos();
// The gen password
diff --git a/ldap/extras/codec/src/main/java/org/apache/directory/api/ldap/extras/extended/ads_impl/startTls/StartTlsFactory.java b/ldap/extras/codec/src/main/java/org/apache/directory/api/ldap/extras/extended/ads_impl/startTls/StartTlsFactory.java
index eef250b..2051864 100644
--- a/ldap/extras/codec/src/main/java/org/apache/directory/api/ldap/extras/extended/ads_impl/startTls/StartTlsFactory.java
+++ b/ldap/extras/codec/src/main/java/org/apache/directory/api/ldap/extras/extended/ads_impl/startTls/StartTlsFactory.java
@@ -52,16 +52,6 @@ public class StartTlsFactory extends AbstractExtendedOperationFactory
* {@inheritDoc}
*/
@Override
- public String getOid()
- {
- return StartTlsRequest.EXTENSION_OID;
- }
-
-
- /**
- * {@inheritDoc}
- */
- @Override
public StartTlsRequest newRequest()
{
return new StartTlsRequestImpl();
diff --git a/ldap/extras/codec/src/main/java/org/apache/directory/api/ldap/extras/extended/ads_impl/startTransaction/StartTransactionFactory.java b/ldap/extras/codec/src/main/java/org/apache/directory/api/ldap/extras/extended/ads_impl/startTransaction/StartTransactionFactory.java
index f657e52..f5a626b 100644
--- a/ldap/extras/codec/src/main/java/org/apache/directory/api/ldap/extras/extended/ads_impl/startTransaction/StartTransactionFactory.java
+++ b/ldap/extras/codec/src/main/java/org/apache/directory/api/ldap/extras/extended/ads_impl/startTransaction/StartTransactionFactory.java
@@ -20,6 +20,7 @@
package org.apache.directory.api.ldap.extras.extended.ads_impl.startTransaction;
+import org.apache.directory.api.asn1.util.Asn1Buffer;
import org.apache.directory.api.ldap.codec.api.AbstractExtendedOperationFactory;
import org.apache.directory.api.ldap.codec.api.ExtendedOperationFactory;
import org.apache.directory.api.ldap.codec.api.LdapApiService;
@@ -27,6 +28,7 @@ import org.apache.directory.api.ldap.extras.extended.startTransaction.StartTrans
import org.apache.directory.api.ldap.extras.extended.startTransaction.StartTransactionRequestImpl;
import org.apache.directory.api.ldap.extras.extended.startTransaction.StartTransactionResponse;
import org.apache.directory.api.ldap.extras.extended.startTransaction.StartTransactionResponseImpl;
+import org.apache.directory.api.ldap.model.message.ExtendedResponse;
/**
@@ -66,4 +68,30 @@ public class StartTransactionFactory extends AbstractExtendedOperationFactory
{
return new StartTransactionResponseImpl();
}
+
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public StartTransactionResponse newResponse( byte[] encodedValue )
+ {
+ return new StartTransactionResponseImpl( encodedValue );
+ }
+
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void encodeValue( Asn1Buffer buffer, ExtendedResponse extendedResponse )
+ {
+ // This is a hack !!! We remove the response name from the response
+ // because it has only be added to find the factory, but we don't want it
+ // top be injected in the encoded PDU...
+ extendedResponse.setResponseName( null );
+
+ // Now, encode the TransactiuonID
+ buffer.put( ( ( StartTransactionResponse ) extendedResponse ).getTransactionId() );
+ }
}
diff --git a/ldap/model/src/main/java/org/apache/directory/api/ldap/model/message/ExtendedResponseImpl.java b/ldap/model/src/main/java/org/apache/directory/api/ldap/model/message/AbstractExtendedResponse.java
similarity index 93%
rename from ldap/model/src/main/java/org/apache/directory/api/ldap/model/message/ExtendedResponseImpl.java
rename to ldap/model/src/main/java/org/apache/directory/api/ldap/model/message/AbstractExtendedResponse.java
index 6be87cf..c56ecb2 100644
--- a/ldap/model/src/main/java/org/apache/directory/api/ldap/model/message/ExtendedResponseImpl.java
+++ b/ldap/model/src/main/java/org/apache/directory/api/ldap/model/message/AbstractExtendedResponse.java
@@ -21,11 +21,11 @@ package org.apache.directory.api.ldap.model.message;
/**
- * A simple ExtendedResponse implementation.
+ * An Abstract ExtendedResponse implementation.
*
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
*/
-public class ExtendedResponseImpl extends AbstractResultResponse implements ExtendedResponse
+public abstract class AbstractExtendedResponse extends AbstractResultResponse implements ExtendedResponse
{
static final long serialVersionUID = -6646752766410531060L;
@@ -40,7 +40,7 @@ public class ExtendedResponseImpl extends AbstractResultResponse implements Exte
*
* @param responseName the ExtendedResponse's name
*/
- public ExtendedResponseImpl( String responseName )
+ public AbstractExtendedResponse( String responseName )
{
super( -1, TYPE );
this.responseName = responseName;
@@ -53,7 +53,7 @@ public class ExtendedResponseImpl extends AbstractResultResponse implements Exte
* @param id the session unique message id
* @param responseName the ExtendedResponse's name
*/
- public ExtendedResponseImpl( final int id, String responseName )
+ public AbstractExtendedResponse( final int id, String responseName )
{
super( id, TYPE );
this.responseName = responseName;
@@ -65,7 +65,7 @@ public class ExtendedResponseImpl extends AbstractResultResponse implements Exte
*
* @param id the session unique message id
*/
- public ExtendedResponseImpl( int id )
+ public AbstractExtendedResponse( int id )
{
super( id, TYPE );
}
diff --git a/ldap/model/src/main/java/org/apache/directory/api/ldap/model/message/ExtendedResponse.java b/ldap/model/src/main/java/org/apache/directory/api/ldap/model/message/ExtendedResponse.java
index 49c5db2..49a6983 100644
--- a/ldap/model/src/main/java/org/apache/directory/api/ldap/model/message/ExtendedResponse.java
+++ b/ldap/model/src/main/java/org/apache/directory/api/ldap/model/message/ExtendedResponse.java
@@ -44,12 +44,4 @@ public interface ExtendedResponse extends ResultResponse
* @param oid the OID of the extended response type.
*/
void setResponseName( String oid );
-
-
- /**
- * Gets the response value, if any.
- *
- * @return The byte[] containing the value, or null if we have none.
- */
- //byte[] getResponseValue();
}
diff --git a/ldap/model/src/main/java/org/apache/directory/api/ldap/model/message/OpaqueExtendedRequest.java b/ldap/model/src/main/java/org/apache/directory/api/ldap/model/message/OpaqueExtendedRequest.java
index 5de3bf4..63cdea7 100644
--- a/ldap/model/src/main/java/org/apache/directory/api/ldap/model/message/OpaqueExtendedRequest.java
+++ b/ldap/model/src/main/java/org/apache/directory/api/ldap/model/message/OpaqueExtendedRequest.java
@@ -39,7 +39,7 @@ public class OpaqueExtendedRequest extends AbstractRequest implements ExtendedRe
private byte[] requestValue;
/** The associated response */
- protected ExtendedResponseImpl response;
+ protected ExtendedResponse response;
/**
@@ -191,7 +191,7 @@ public class OpaqueExtendedRequest extends AbstractRequest implements ExtendedRe
{
if ( response == null )
{
- response = new ExtendedResponseImpl( getMessageId() );
+ response = new OpaqueExtendedResponse( getMessageId() );
}
return response;
diff --git a/ldap/model/src/main/java/org/apache/directory/api/ldap/model/message/OpaqueExtendedResponse.java b/ldap/model/src/main/java/org/apache/directory/api/ldap/model/message/OpaqueExtendedResponse.java
index b7eeeef..29733bd 100644
--- a/ldap/model/src/main/java/org/apache/directory/api/ldap/model/message/OpaqueExtendedResponse.java
+++ b/ldap/model/src/main/java/org/apache/directory/api/ldap/model/message/OpaqueExtendedResponse.java
@@ -28,13 +28,10 @@ import org.apache.directory.api.util.Strings;
*
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
*/
-public class OpaqueExtendedResponse extends AbstractResultResponse implements ExtendedResponse
+public class OpaqueExtendedResponse extends AbstractExtendedResponse
{
static final long serialVersionUID = 7916990159044177480L;
- /** Extended response's Object Identifier or <b>responseName</b> */
- private String oid;
-
/** Extended response value as an opaque byte array */
private byte[] responseValue;
@@ -45,81 +42,47 @@ public class OpaqueExtendedResponse extends AbstractResultResponse implements Ex
*/
public OpaqueExtendedResponse()
{
- super( -1, MessageTypeEnum.EXTENDED_RESPONSE );
+ super( -1 );
}
- // -----------------------------------------------------------------------
- // ExtendedRequest Interface Method Implementations
- // -----------------------------------------------------------------------
-
/**
- * Gets the Object Identifier corresponding to the extended response type.
- * This is the <b>responseName</b> portion of the ext. req. PDU.
+ * Creates an ExtendedResponse implementing object used to perform
+ * extended protocol operation on the server.
*
- * @return the dotted-decimal representation as a String of the OID
+ * @param messageId the messageID
*/
- @Override
- public String getResponseName()
+ public OpaqueExtendedResponse( int messageId )
{
- return oid;
+ super( messageId );
}
/**
- * Sets the Object Identifier corresponding to the extended response type.
+ * Creates an ExtendedResponse implementing object used to perform
+ * extended protocol operation on the server.
*
- * @param newOid the dotted-decimal representation as a String of the OID
- */
- @Override
- public void setResponseName( String newOid )
- {
- this.oid = newOid;
- }
-
-
- /**
- * {@inheritDoc}
- */
- @Override
- public ExtendedResponse setMessageId( int messageId )
- {
- super.setMessageId( messageId );
-
- return this;
- }
-
-
- /**
- * {@inheritDoc}
- */
- @Override
- public ExtendedResponse addControl( Control control )
- {
- return ( ExtendedResponse ) super.addControl( control );
- }
-
-
- /**
- * {@inheritDoc}
+ * @param responseName The extended response OID
*/
- @Override
- public ExtendedResponse addAllControls( Control[] controls )
+ public OpaqueExtendedResponse( String responseName )
{
- return ( ExtendedResponse ) super.addAllControls( controls );
+ super( -1, responseName );
}
/**
- * {@inheritDoc}
+ * Creates an ExtendedResponse implementing object used to perform
+ * extended protocol operation on the server.
+ *
+ * @param messageId the messageID
+ * @param responseName The extended response OID
*/
- @Override
- public ExtendedResponse removeControl( Control control )
+ public OpaqueExtendedResponse( int messageId, String responseName )
{
- return ( ExtendedResponse ) super.removeControl( control );
+ super( messageId, responseName );
}
-
+
// ------------------------------------------------------------------------
// SingleReplyRequest Interface Method Implementations
// ------------------------------------------------------------------------
@@ -152,9 +115,9 @@ public class OpaqueExtendedResponse extends AbstractResultResponse implements Ex
hash = hash * 17 + super.hashCode();
- if ( oid != null )
+ if ( responseName != null )
{
- hash = hash * 17 + oid.hashCode();
+ hash = hash * 17 + responseName.hashCode();
}
if ( responseValue != null )
@@ -195,8 +158,8 @@ public class OpaqueExtendedResponse extends AbstractResultResponse implements Ex
OpaqueExtendedResponse extendedRequest = ( OpaqueExtendedResponse ) obj;
- if ( ( ( oid != null ) && !oid.equals( extendedRequest.oid ) )
- || ( ( oid == null ) && ( extendedRequest.oid != null ) ) )
+ if ( ( ( responseName != null ) && !responseName.equals( extendedRequest.responseName ) )
+ || ( ( responseName == null ) && ( extendedRequest.responseName != null ) ) )
{
return false;
}
@@ -216,7 +179,7 @@ public class OpaqueExtendedResponse extends AbstractResultResponse implements Ex
StringBuilder sb = new StringBuilder();
sb.append( " Extended response\n" );
- sb.append( " Response name : '" ).append( oid ).append( "'\n" );
+ sb.append( " Response name : '" ).append( responseName ).append( "'\n" );
sb.append( " Response value : '" ).append( Strings.dumpBytes( responseValue ) ).append( "'\n" );
return super.toString( sb.toString() );
diff --git a/ldap/model/src/main/java/org/apache/directory/api/ldap/model/message/extended/ExtendedNoDResponse.java b/ldap/model/src/main/java/org/apache/directory/api/ldap/model/message/extended/ExtendedNoDResponse.java
index 2c3f467..b77cb6e 100644
--- a/ldap/model/src/main/java/org/apache/directory/api/ldap/model/message/extended/ExtendedNoDResponse.java
+++ b/ldap/model/src/main/java/org/apache/directory/api/ldap/model/message/extended/ExtendedNoDResponse.java
@@ -21,7 +21,7 @@ package org.apache.directory.api.ldap.model.message.extended;
import org.apache.directory.api.i18n.I18n;
-import org.apache.directory.api.ldap.model.message.ExtendedResponseImpl;
+import org.apache.directory.api.ldap.model.message.AbstractExtendedResponse;
import org.apache.directory.api.ldap.model.message.ResultCodeEnum;
import org.apache.directory.api.util.Strings;
@@ -31,7 +31,7 @@ import org.apache.directory.api.util.Strings;
* disconnection for the Extended response.
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
*/
-public final class ExtendedNoDResponse extends ExtendedResponseImpl
+public final class ExtendedNoDResponse extends AbstractExtendedResponse
{
/** The serial version UID */
static final long serialVersionUID = 2L;
@@ -93,17 +93,4 @@ public final class ExtendedNoDResponse extends ExtendedResponseImpl
{
return Strings.EMPTY_BYTES;
}
-
-
- /**
- * Gets the OID uniquely identifying this extended response (a.k.a. its
- * name).
- *
- * @return the OID of the extended response type.
- */
- @Override
- public String getResponseName()
- {
- return EXTENSION_OID;
- }
}
diff --git a/ldap/model/src/main/java/org/apache/directory/api/ldap/model/message/extended/NoticeOfDisconnect.java b/ldap/model/src/main/java/org/apache/directory/api/ldap/model/message/extended/NoticeOfDisconnect.java
index 96afb84..e75ef1e 100644
--- a/ldap/model/src/main/java/org/apache/directory/api/ldap/model/message/extended/NoticeOfDisconnect.java
+++ b/ldap/model/src/main/java/org/apache/directory/api/ldap/model/message/extended/NoticeOfDisconnect.java
@@ -21,7 +21,7 @@ package org.apache.directory.api.ldap.model.message.extended;
import org.apache.directory.api.i18n.I18n;
-import org.apache.directory.api.ldap.model.message.ExtendedResponseImpl;
+import org.apache.directory.api.ldap.model.message.AbstractExtendedResponse;
import org.apache.directory.api.ldap.model.message.ResultCodeEnum;
import org.apache.directory.api.util.Strings;
@@ -102,7 +102,7 @@ import org.apache.directory.api.util.Strings;
*
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
*/
-public final class NoticeOfDisconnect extends ExtendedResponseImpl
+public final class NoticeOfDisconnect extends AbstractExtendedResponse
{
/** The OID of the NotiveOfDisconnect extended operation. */
public static final String EXTENSION_OID = "1.3.6.1.4.1.1466.20036";
@@ -147,6 +147,39 @@ public final class NoticeOfDisconnect extends ExtendedResponseImpl
super.getLdapResult().setMatchedDn( null );
super.getLdapResult().setResultCode( rcode );
}
+
+
+ /**
+ * Create a NoD associated with a result code enum
+ *
+ * @param rcode The result code
+ * @return The created NoticeOfDisconnect
+ */
+ public static NoticeOfDisconnect createNoticeOfDisconnect( ResultCodeEnum rcode )
+ {
+ NoticeOfDisconnect nod;
+
+ switch ( rcode )
+ {
+ case UNAVAILABLE:
+ nod = UNAVAILABLE;
+
+ case PROTOCOL_ERROR:
+ nod = PROTOCOLERROR;
+
+ case STRONG_AUTH_REQUIRED:
+ nod = STRONGAUTHREQUIRED;
+
+ default:
+ nod = new NoticeOfDisconnect( rcode );
+ }
+
+ nod.getLdapResult().setDiagnosticMessage( rcode.toString() + ": The server will disconnect!" );
+ nod.getLdapResult().setMatchedDn( null );
+ nod.getLdapResult().setResultCode( rcode );
+
+ return nod;
+ }
// ------------------------------------------------------------------------
@@ -176,19 +209,6 @@ public final class NoticeOfDisconnect extends ExtendedResponseImpl
/**
- * Gets the OID uniquely identifying this extended response (a.k.a. its
- * name).
- *
- * @return the OID of the extended response type.
- */
- @Override
- public String getResponseName()
- {
- return EXTENSION_OID;
- }
-
-
- /**
* Sets the OID uniquely identifying this extended response (a.k.a. its
* name).
*
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/message/ExtendedResponseImplTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/message/OpaqueExtendedResponseTest.java
similarity index 54%
rename from ldap/model/src/test/java/org/apache/directory/api/ldap/model/message/ExtendedResponseImplTest.java
rename to ldap/model/src/test/java/org/apache/directory/api/ldap/model/message/OpaqueExtendedResponseTest.java
index 531b154..016b689 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/message/ExtendedResponseImplTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/message/OpaqueExtendedResponseTest.java
@@ -27,6 +27,7 @@ import java.util.HashMap;
import java.util.Map;
import org.apache.directory.api.ldap.model.exception.LdapException;
+import org.apache.directory.api.ldap.model.exception.LdapInvalidDnException;
import org.apache.directory.api.ldap.model.name.Dn;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -36,13 +37,13 @@ import com.mycila.junit.concurrent.ConcurrentJunitRunner;
/**
- * TestCase for the ExtendedResponseImpl class.
+ * TestCase for the ExtendedResponse class.
*
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
*/
@RunWith(ConcurrentJunitRunner.class)
@Concurrency()
-public class ExtendedResponseImplTest
+public class OpaqueExtendedResponseTest
{
private static final Map<String, Control> EMPTY_CONTROL_MAP = new HashMap<String, Control>();
@@ -52,10 +53,10 @@ public class ExtendedResponseImplTest
*
* @return a populated ExtendedResponseImpl stub
*/
- private ExtendedResponseImpl createStub()
+ private ExtendedResponse createStub()
{
// Construct the Search response to test with results and referrals
- ExtendedResponseImpl response = new ExtendedResponseImpl( 45 );
+ ExtendedResponse response = new OpaqueExtendedResponse( 45 );
response.setResponseName( "1.1.1.1" );
LdapResult result = response.getLdapResult();
@@ -84,7 +85,7 @@ public class ExtendedResponseImplTest
@Test
public void testEqualsSameObj()
{
- ExtendedResponseImpl resp = createStub();
+ ExtendedResponse resp = createStub();
assertTrue( resp.equals( resp ) );
}
@@ -95,8 +96,8 @@ public class ExtendedResponseImplTest
@Test
public void testEqualsExactCopy()
{
- ExtendedResponseImpl resp0 = createStub();
- ExtendedResponseImpl resp1 = createStub();
+ ExtendedResponse resp0 = createStub();
+ ExtendedResponse resp1 = createStub();
assertTrue( resp0.equals( resp1 ) );
assertTrue( resp1.equals( resp0 ) );
}
@@ -104,116 +105,23 @@ public class ExtendedResponseImplTest
/**
* Tests for equality using different stub implementations.
+ * @throws LdapInvalidDnException
*/
@Test
- public void testEqualsDiffImpl()
+ public void testEqualsDiffImpl() throws LdapInvalidDnException
{
- ExtendedResponseImpl resp0 = createStub();
- ExtendedResponse resp1 = new ExtendedResponse()
- {
- public String getResponseName()
- {
- return "1.1.1.1";
- }
-
-
- public void setResponseName( String oid )
- {
- }
-
-
- public LdapResult getLdapResult()
- {
- LdapResultImpl result = new LdapResultImpl();
-
- try
- {
- result.setMatchedDn( new Dn( "dc=example,dc=com" ) );
- }
- catch ( LdapException ine )
- {
- // do nothing
- }
-
- result.setResultCode( ResultCodeEnum.SUCCESS );
- ReferralImpl refs = new ReferralImpl();
- refs.addLdapUrl( "ldap://someserver.com" );
- refs.addLdapUrl( "ldap://apache.org" );
- refs.addLdapUrl( "ldap://another.net" );
- result.setReferral( refs );
-
- return result;
- }
-
-
- public MessageTypeEnum getType()
- {
- return MessageTypeEnum.EXTENDED_RESPONSE;
- }
-
-
- public Map<String, Control> getControls()
- {
- return EMPTY_CONTROL_MAP;
- }
-
-
- public ExtendedResponse addControl( Control control )
- {
- return this;
- }
-
-
- public ExtendedResponse removeControl( Control control )
- {
- return this;
- }
-
-
- public int getMessageId()
- {
- return 45;
- }
-
-
- public Object get( Object a_key )
- {
- return null;
- }
-
-
- public Object put( Object a_key, Object a_value )
- {
- return null;
- }
-
-
- public ExtendedResponse addAllControls( Control[] controls )
- {
- return this;
- }
-
-
- public boolean hasControl( String oid )
- {
- return false;
- }
-
-
- public Control getControl( String oid )
- {
- return null;
- }
-
-
- public ExtendedResponse setMessageId( int messageId )
- {
- return this;
- }
- };
+ ExtendedResponse resp0 = createStub();
+ ExtendedResponse resp1 = new OpaqueExtendedResponse( 45, "1.1.1.1" );
+ resp1.getLdapResult().setMatchedDn( new Dn( "dc=example,dc=com" ) );
+ resp1.getLdapResult().setResultCode( ResultCodeEnum.SUCCESS );
+ ReferralImpl refs = new ReferralImpl();
+ refs.addLdapUrl( "ldap://someserver.com" );
+ refs.addLdapUrl( "ldap://apache.org" );
+ refs.addLdapUrl( "ldap://another.net" );
+ resp1.getLdapResult().setReferral( refs );
assertTrue( resp0.equals( resp1 ) );
- assertFalse( resp1.equals( resp0 ) );
+ assertTrue( resp1.equals( resp0 ) );
}
@@ -223,7 +131,7 @@ public class ExtendedResponseImplTest
@Test
public void testHashCodeSameObj()
{
- ExtendedResponseImpl resp = createStub();
+ ExtendedResponse resp = createStub();
assertTrue( resp.hashCode() == resp.hashCode() );
}
@@ -234,8 +142,8 @@ public class ExtendedResponseImplTest
@Test
public void testHashCodeExactCopy()
{
- ExtendedResponseImpl resp0 = createStub();
- ExtendedResponseImpl resp1 = createStub();
+ ExtendedResponse resp0 = createStub();
+ ExtendedResponse resp1 = createStub();
assertTrue( resp0.hashCode() == resp1.hashCode() );
}
@@ -246,8 +154,8 @@ public class ExtendedResponseImplTest
@Test
public void testNotEqualsDiffIds()
{
- ExtendedResponseImpl resp0 = new ExtendedResponseImpl( 3 );
- ExtendedResponseImpl resp1 = new ExtendedResponseImpl( 4 );
+ ExtendedResponse resp0 = new OpaqueExtendedResponse( 3 );
+ ExtendedResponse resp1 = new OpaqueExtendedResponse( 4 );
assertFalse( resp0.equals( resp1 ) );
assertFalse( resp1.equals( resp0 ) );
@@ -260,9 +168,9 @@ public class ExtendedResponseImplTest
@Test
public void testNotEqualsDiffNames()
{
- ExtendedResponseImpl resp0 = createStub();
+ ExtendedResponse resp0 = createStub();
resp0.setResponseName( "1.2.3.4" );
- ExtendedResponseImpl resp1 = createStub();
+ ExtendedResponse resp1 = createStub();
resp1.setResponseName( "1.2.3.4.5" );
assertFalse( resp0.equals( resp1 ) );