Minor API cleanup in preparation for final release.
* narrow type-safety of server side ResultHandlers from ResultHandler<? super XXX> to ResultHandler<XXX>. Although wider type-safety is usually preferred, we are always going to pass in specific result handlers to the server side APIs (e.g. RequestHandler). In addition, experience with CREST has shown that the use of "super" makes it harder to implement filter chain functionality.
| | |
| | | } |
| | | |
| | | private abstract class AbstractRequestCompletionHandler |
| | | <R extends Result, H extends ResultHandler<? super R>> |
| | | <R extends Result, H extends ResultHandler<R>> |
| | | implements ResultHandler<R> { |
| | | final H resultHandler; |
| | | final Connection connection; |
| | |
| | | |
| | | private abstract class ConnectionCompletionHandler<R extends Result> implements |
| | | ResultHandler<Connection> { |
| | | private final ResultHandler<? super R> resultHandler; |
| | | private final ResultHandler<R> resultHandler; |
| | | |
| | | ConnectionCompletionHandler(final ResultHandler<? super R> resultHandler) { |
| | | ConnectionCompletionHandler(final ResultHandler<R> resultHandler) { |
| | | this.resultHandler = resultHandler; |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | private final class RequestCompletionHandler<R extends Result> extends |
| | | AbstractRequestCompletionHandler<R, ResultHandler<? super R>> { |
| | | AbstractRequestCompletionHandler<R, ResultHandler<R>> { |
| | | RequestCompletionHandler(final Connection connection, |
| | | final ResultHandler<? super R> resultHandler) { |
| | | final ResultHandler<R> resultHandler) { |
| | | super(connection, resultHandler); |
| | | } |
| | | } |
| | |
| | | @Override |
| | | public void handleAdd(final RequestContext requestContext, final AddRequest request, |
| | | final IntermediateResponseHandler intermediateResponseHandler, |
| | | final ResultHandler<? super Result> resultHandler) { |
| | | final ResultHandler<Result> resultHandler) { |
| | | addProxiedAuthControl(request); |
| | | final ConnectionCompletionHandler<Result> outerHandler = |
| | | new ConnectionCompletionHandler<Result>(resultHandler) { |
| | |
| | | public void handleBind(final RequestContext requestContext, final int version, |
| | | final BindRequest request, |
| | | final IntermediateResponseHandler intermediateResponseHandler, |
| | | final ResultHandler<? super BindResult> resultHandler) { |
| | | final ResultHandler<BindResult> resultHandler) { |
| | | |
| | | if (request.getAuthenticationType() != BindRequest.AUTHENTICATION_TYPE_SIMPLE) { |
| | | // TODO: SASL authentication not implemented. |
| | |
| | | public void handleCompare(final RequestContext requestContext, |
| | | final CompareRequest request, |
| | | final IntermediateResponseHandler intermediateResponseHandler, |
| | | final ResultHandler<? super CompareResult> resultHandler) { |
| | | final ResultHandler<CompareResult> resultHandler) { |
| | | addProxiedAuthControl(request); |
| | | final ConnectionCompletionHandler<CompareResult> outerHandler = |
| | | new ConnectionCompletionHandler<CompareResult>(resultHandler) { |
| | |
| | | @Override |
| | | public void handleDelete(final RequestContext requestContext, final DeleteRequest request, |
| | | final IntermediateResponseHandler intermediateResponseHandler, |
| | | final ResultHandler<? super Result> resultHandler) { |
| | | final ResultHandler<Result> resultHandler) { |
| | | addProxiedAuthControl(request); |
| | | final ConnectionCompletionHandler<Result> outerHandler = |
| | | new ConnectionCompletionHandler<Result>(resultHandler) { |
| | |
| | | public <R extends ExtendedResult> void handleExtendedRequest( |
| | | final RequestContext requestContext, final ExtendedRequest<R> request, |
| | | final IntermediateResponseHandler intermediateResponseHandler, |
| | | final ResultHandler<? super R> resultHandler) { |
| | | final ResultHandler<R> resultHandler) { |
| | | if (request.getOID().equals(CancelExtendedRequest.OID)) { |
| | | // TODO: not implemented. |
| | | resultHandler.handleErrorResult(newErrorResult(ResultCode.PROTOCOL_ERROR, |
| | |
| | | @Override |
| | | public void handleModify(final RequestContext requestContext, final ModifyRequest request, |
| | | final IntermediateResponseHandler intermediateResponseHandler, |
| | | final ResultHandler<? super Result> resultHandler) { |
| | | final ResultHandler<Result> resultHandler) { |
| | | addProxiedAuthControl(request); |
| | | final ConnectionCompletionHandler<Result> outerHandler = |
| | | new ConnectionCompletionHandler<Result>(resultHandler) { |
| | |
| | | public void handleModifyDN(final RequestContext requestContext, |
| | | final ModifyDNRequest request, |
| | | final IntermediateResponseHandler intermediateResponseHandler, |
| | | final ResultHandler<? super Result> resultHandler) { |
| | | final ResultHandler<Result> resultHandler) { |
| | | addProxiedAuthControl(request); |
| | | final ConnectionCompletionHandler<Result> outerHandler = |
| | | new ConnectionCompletionHandler<Result>(resultHandler) { |
| | |
| | | * |
| | | * |
| | | * Copyright 2009-2010 Sun Microsystems, Inc. |
| | | * Portions copyright 2011-2012 ForgeRock AS |
| | | * Portions copyright 2011-2013 ForgeRock AS |
| | | */ |
| | | |
| | | package org.forgerock.opendj.examples; |
| | |
| | | } |
| | | |
| | | private abstract class AbstractRequestCompletionHandler |
| | | <R extends Result, H extends ResultHandler<? super R>> |
| | | <R extends Result, H extends ResultHandler<R>> |
| | | implements ResultHandler<R> { |
| | | final H resultHandler; |
| | | final Connection connection; |
| | |
| | | |
| | | private abstract class ConnectionCompletionHandler<R extends Result> implements |
| | | ResultHandler<Connection> { |
| | | private final ResultHandler<? super R> resultHandler; |
| | | private final ResultHandler<R> resultHandler; |
| | | |
| | | ConnectionCompletionHandler(final ResultHandler<? super R> resultHandler) { |
| | | ConnectionCompletionHandler(final ResultHandler<R> resultHandler) { |
| | | this.resultHandler = resultHandler; |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | private final class RequestCompletionHandler<R extends Result> extends |
| | | AbstractRequestCompletionHandler<R, ResultHandler<? super R>> { |
| | | AbstractRequestCompletionHandler<R, ResultHandler<R>> { |
| | | RequestCompletionHandler(final Connection connection, |
| | | final ResultHandler<? super R> resultHandler) { |
| | | final ResultHandler<R> resultHandler) { |
| | | super(connection, resultHandler); |
| | | } |
| | | } |
| | |
| | | @Override |
| | | public void handleAdd(final RequestContext requestContext, final AddRequest request, |
| | | final IntermediateResponseHandler intermediateResponseHandler, |
| | | final ResultHandler<? super Result> resultHandler) { |
| | | final ResultHandler<Result> resultHandler) { |
| | | addProxiedAuthControl(request); |
| | | final ConnectionCompletionHandler<Result> outerHandler = |
| | | new ConnectionCompletionHandler<Result>(resultHandler) { |
| | |
| | | public void handleBind(final RequestContext requestContext, final int version, |
| | | final BindRequest request, |
| | | final IntermediateResponseHandler intermediateResponseHandler, |
| | | final ResultHandler<? super BindResult> resultHandler) { |
| | | final ResultHandler<BindResult> resultHandler) { |
| | | |
| | | if (request.getAuthenticationType() != ((byte) 0x80)) { |
| | | // TODO: SASL authentication not implemented. |
| | |
| | | public void handleCompare(final RequestContext requestContext, |
| | | final CompareRequest request, |
| | | final IntermediateResponseHandler intermediateResponseHandler, |
| | | final ResultHandler<? super CompareResult> resultHandler) { |
| | | final ResultHandler<CompareResult> resultHandler) { |
| | | addProxiedAuthControl(request); |
| | | final ConnectionCompletionHandler<CompareResult> outerHandler = |
| | | new ConnectionCompletionHandler<CompareResult>(resultHandler) { |
| | |
| | | @Override |
| | | public void handleDelete(final RequestContext requestContext, final DeleteRequest request, |
| | | final IntermediateResponseHandler intermediateResponseHandler, |
| | | final ResultHandler<? super Result> resultHandler) { |
| | | final ResultHandler<Result> resultHandler) { |
| | | addProxiedAuthControl(request); |
| | | final ConnectionCompletionHandler<Result> outerHandler = |
| | | new ConnectionCompletionHandler<Result>(resultHandler) { |
| | |
| | | public <R extends ExtendedResult> void handleExtendedRequest( |
| | | final RequestContext requestContext, final ExtendedRequest<R> request, |
| | | final IntermediateResponseHandler intermediateResponseHandler, |
| | | final ResultHandler<? super R> resultHandler) { |
| | | final ResultHandler<R> resultHandler) { |
| | | if (request.getOID().equals(CancelExtendedRequest.OID)) { |
| | | // TODO: not implemented. |
| | | resultHandler.handleErrorResult(newErrorResult(ResultCode.PROTOCOL_ERROR, |
| | |
| | | @Override |
| | | public void handleModify(final RequestContext requestContext, final ModifyRequest request, |
| | | final IntermediateResponseHandler intermediateResponseHandler, |
| | | final ResultHandler<? super Result> resultHandler) { |
| | | final ResultHandler<Result> resultHandler) { |
| | | addProxiedAuthControl(request); |
| | | final ConnectionCompletionHandler<Result> outerHandler = |
| | | new ConnectionCompletionHandler<Result>(resultHandler) { |
| | |
| | | public void handleModifyDN(final RequestContext requestContext, |
| | | final ModifyDNRequest request, |
| | | final IntermediateResponseHandler intermediateResponseHandler, |
| | | final ResultHandler<? super Result> resultHandler) { |
| | | final ResultHandler<Result> resultHandler) { |
| | | addProxiedAuthControl(request); |
| | | final ConnectionCompletionHandler<Result> outerHandler = |
| | | new ConnectionCompletionHandler<Result>(resultHandler) { |
| | |
| | | @Override |
| | | public void handleAdd(final RequestContext requestContext, final AddRequest request, |
| | | final IntermediateResponseHandler intermediateResponseHandler, |
| | | final ResultHandler<? super Result> resultHandler) { |
| | | final ResultHandler<Result> resultHandler) { |
| | | try { |
| | | synchronized (writeLock) { |
| | | final DN dn = request.getName(); |
| | |
| | | public void handleBind(final RequestContext requestContext, final int version, |
| | | final BindRequest request, |
| | | final IntermediateResponseHandler intermediateResponseHandler, |
| | | final ResultHandler<? super BindResult> resultHandler) { |
| | | final ResultHandler<BindResult> resultHandler) { |
| | | try { |
| | | final Entry entry; |
| | | synchronized (writeLock) { |
| | |
| | | @Override |
| | | public void handleCompare(final RequestContext requestContext, final CompareRequest request, |
| | | final IntermediateResponseHandler intermediateResponseHandler, |
| | | final ResultHandler<? super CompareResult> resultHandler) { |
| | | final ResultHandler<CompareResult> resultHandler) { |
| | | try { |
| | | final Entry entry; |
| | | final Attribute assertion; |
| | |
| | | @Override |
| | | public void handleDelete(final RequestContext requestContext, final DeleteRequest request, |
| | | final IntermediateResponseHandler intermediateResponseHandler, |
| | | final ResultHandler<? super Result> resultHandler) { |
| | | final ResultHandler<Result> resultHandler) { |
| | | try { |
| | | final Entry entry; |
| | | synchronized (writeLock) { |
| | |
| | | public <R extends ExtendedResult> void handleExtendedRequest( |
| | | final RequestContext requestContext, final ExtendedRequest<R> request, |
| | | final IntermediateResponseHandler intermediateResponseHandler, |
| | | final ResultHandler<? super R> resultHandler) { |
| | | final ResultHandler<R> resultHandler) { |
| | | resultHandler.handleErrorResult(newErrorResult(ResultCode.UNWILLING_TO_PERFORM, |
| | | "Extended request operation not supported")); |
| | | } |
| | |
| | | @Override |
| | | public void handleModify(final RequestContext requestContext, final ModifyRequest request, |
| | | final IntermediateResponseHandler intermediateResponseHandler, |
| | | final ResultHandler<? super Result> resultHandler) { |
| | | final ResultHandler<Result> resultHandler) { |
| | | try { |
| | | final Entry entry; |
| | | final Entry newEntry; |
| | |
| | | @Override |
| | | public void handleModifyDN(final RequestContext requestContext, final ModifyDNRequest request, |
| | | final IntermediateResponseHandler intermediateResponseHandler, |
| | | final ResultHandler<? super Result> resultHandler) { |
| | | final ResultHandler<Result> resultHandler) { |
| | | resultHandler.handleErrorResult(newErrorResult(ResultCode.UNWILLING_TO_PERFORM, |
| | | "ModifyDN request operation not supported")); |
| | | } |
| | |
| | | * |
| | | * |
| | | * Copyright 2010 Sun Microsystems, Inc. |
| | | * Portions copyright 2011-2012 ForgeRock AS. |
| | | * Portions copyright 2011-2013 ForgeRock AS. |
| | | */ |
| | | |
| | | package org.forgerock.opendj.ldap; |
| | |
| | | */ |
| | | void handleAdd(C requestContext, AddRequest request, |
| | | IntermediateResponseHandler intermediateResponseHandler, |
| | | ResultHandler<? super Result> resultHandler); |
| | | ResultHandler<Result> resultHandler); |
| | | |
| | | /** |
| | | * Invoked when a bind request is received from a client. |
| | |
| | | */ |
| | | void handleBind(C requestContext, int version, BindRequest request, |
| | | IntermediateResponseHandler intermediateResponseHandler, |
| | | ResultHandler<? super BindResult> resultHandler); |
| | | ResultHandler<BindResult> resultHandler); |
| | | |
| | | /** |
| | | * Invoked when a compare request is received from a client. |
| | |
| | | */ |
| | | void handleCompare(C requestContext, CompareRequest request, |
| | | IntermediateResponseHandler intermediateResponseHandler, |
| | | ResultHandler<? super CompareResult> resultHandler); |
| | | ResultHandler<CompareResult> resultHandler); |
| | | |
| | | /** |
| | | * Invoked when a delete request is received from a client. |
| | |
| | | */ |
| | | void handleDelete(C requestContext, DeleteRequest request, |
| | | IntermediateResponseHandler intermediateResponseHandler, |
| | | ResultHandler<? super Result> resultHandler); |
| | | ResultHandler<Result> resultHandler); |
| | | |
| | | /** |
| | | * Invoked when an extended request is received from a client. |
| | |
| | | */ |
| | | <R extends ExtendedResult> void handleExtendedRequest(C requestContext, |
| | | ExtendedRequest<R> request, IntermediateResponseHandler intermediateResponseHandler, |
| | | ResultHandler<? super R> resultHandler); |
| | | ResultHandler<R> resultHandler); |
| | | |
| | | /** |
| | | * Invoked when a modify request is received from a client. |
| | |
| | | */ |
| | | void handleModify(C requestContext, ModifyRequest request, |
| | | IntermediateResponseHandler intermediateResponseHandler, |
| | | ResultHandler<? super Result> resultHandler); |
| | | ResultHandler<Result> resultHandler); |
| | | |
| | | /** |
| | | * Invoked when a modify DN request is received from a client. |
| | |
| | | */ |
| | | void handleModifyDN(C requestContext, ModifyDNRequest request, |
| | | IntermediateResponseHandler intermediateResponseHandler, |
| | | ResultHandler<? super Result> resultHandler); |
| | | ResultHandler<Result> resultHandler); |
| | | |
| | | /** |
| | | * Invoked when a search request is received from a client. |
| | |
| | | /** |
| | | * Request context implementation. |
| | | */ |
| | | private static class RequestContextImpl<S extends Result, H extends ResultHandler<? super S>> |
| | | private static class RequestContextImpl<S extends Result, H extends ResultHandler<S>> |
| | | implements RequestContext, ResultHandler<S> { |
| | | |
| | | /* |
| | |
| | | */ |
| | | private static final class ExtendedResultHandlerHolder<R extends ExtendedResult> { |
| | | private final ExtendedRequest<R> request; |
| | | private final ResultHandler<? super R> resultHandler; |
| | | private final ResultHandler<R> resultHandler; |
| | | |
| | | private ExtendedResultHandlerHolder(final ExtendedRequest<R> request, |
| | | final ResultHandler<? super R> resultHandler) { |
| | | final ResultHandler<R> resultHandler) { |
| | | this.request = request; |
| | | this.resultHandler = resultHandler; |
| | | } |
| | |
| | | } |
| | | |
| | | private <R extends ExtendedResult> void cancel(final LocalizableMessage reason, |
| | | final ExtendedRequest<R> cancelRequest, |
| | | final ResultHandler<? super R> cancelResultHandler, final boolean sendResult) { |
| | | final ExtendedRequest<R> cancelRequest, final ResultHandler<R> cancelResultHandler, |
| | | final boolean sendResult) { |
| | | Validator.ensureNotNull(reason); |
| | | |
| | | if (!isCancelSupported) { |
| | |
| | | @Override |
| | | public void handleAdd(final Integer messageID, final AddRequest request, |
| | | final IntermediateResponseHandler intermediateResponseHandler, |
| | | final ResultHandler<? super Result> resultHandler) { |
| | | final RequestContextImpl<Result, ResultHandler<? super Result>> requestContext = |
| | | new RequestContextImpl<Result, ResultHandler<? super Result>>(this, |
| | | resultHandler, messageID, true); |
| | | final ResultHandler<Result> resultHandler) { |
| | | final RequestContextImpl<Result, ResultHandler<Result>> requestContext = |
| | | new RequestContextImpl<Result, ResultHandler<Result>>(this, resultHandler, |
| | | messageID, true); |
| | | if (addPendingRequest(requestContext)) { |
| | | requestHandler.handleAdd(requestContext, request, intermediateResponseHandler, |
| | | requestContext); |
| | |
| | | public void handleBind(final Integer messageID, final int version, |
| | | final BindRequest request, |
| | | final IntermediateResponseHandler intermediateResponseHandler, |
| | | final ResultHandler<? super BindResult> resultHandler) { |
| | | final RequestContextImpl<BindResult, ResultHandler<? super BindResult>> requestContext = |
| | | new RequestContextImpl<BindResult, ResultHandler<? super BindResult>>(this, |
| | | final ResultHandler<BindResult> resultHandler) { |
| | | final RequestContextImpl<BindResult, ResultHandler<BindResult>> requestContext = |
| | | new RequestContextImpl<BindResult, ResultHandler<BindResult>>(this, |
| | | resultHandler, messageID, false); |
| | | if (addPendingRequest(requestContext)) { |
| | | requestHandler.handleBind(requestContext, version, request, |
| | |
| | | @Override |
| | | public void handleCompare(final Integer messageID, final CompareRequest request, |
| | | final IntermediateResponseHandler intermediateResponseHandler, |
| | | final ResultHandler<? super CompareResult> resultHandler) { |
| | | final RequestContextImpl<CompareResult, ResultHandler<? super CompareResult>> requestContext = |
| | | new RequestContextImpl<CompareResult, ResultHandler<? super CompareResult>>( |
| | | this, resultHandler, messageID, true); |
| | | final ResultHandler<CompareResult> resultHandler) { |
| | | final RequestContextImpl<CompareResult, ResultHandler<CompareResult>> requestContext = |
| | | new RequestContextImpl<CompareResult, ResultHandler<CompareResult>>(this, |
| | | resultHandler, messageID, true); |
| | | if (addPendingRequest(requestContext)) { |
| | | requestHandler.handleCompare(requestContext, request, intermediateResponseHandler, |
| | | requestContext); |
| | |
| | | @Override |
| | | public void handleDelete(final Integer messageID, final DeleteRequest request, |
| | | final IntermediateResponseHandler intermediateResponseHandler, |
| | | final ResultHandler<? super Result> resultHandler) { |
| | | final RequestContextImpl<Result, ResultHandler<? super Result>> requestContext = |
| | | new RequestContextImpl<Result, ResultHandler<? super Result>>(this, |
| | | resultHandler, messageID, true); |
| | | final ResultHandler<Result> resultHandler) { |
| | | final RequestContextImpl<Result, ResultHandler<Result>> requestContext = |
| | | new RequestContextImpl<Result, ResultHandler<Result>>(this, resultHandler, |
| | | messageID, true); |
| | | if (addPendingRequest(requestContext)) { |
| | | requestHandler.handleDelete(requestContext, request, intermediateResponseHandler, |
| | | requestContext); |
| | |
| | | public <R extends ExtendedResult> void handleExtendedRequest(final Integer messageID, |
| | | final ExtendedRequest<R> request, |
| | | final IntermediateResponseHandler intermediateResponseHandler, |
| | | final ResultHandler<? super R> resultHandler) { |
| | | final ResultHandler<R> resultHandler) { |
| | | if (request.getOID().equals(CancelExtendedRequest.OID)) { |
| | | // Decode the request as a cancel request. |
| | | CancelExtendedRequest cancelRequest; |
| | |
| | | * though this request cannot be cancelled, it is important to |
| | | * do this in order to monitor the number of pending operations. |
| | | */ |
| | | final RequestContextImpl<R, ResultHandler<? super R>> requestContext = |
| | | new RequestContextImpl<R, ResultHandler<? super R>>(this, resultHandler, |
| | | messageID, false); |
| | | final RequestContextImpl<R, ResultHandler<R>> requestContext = |
| | | new RequestContextImpl<R, ResultHandler<R>>(this, resultHandler, messageID, |
| | | false); |
| | | if (addPendingRequest(requestContext)) { |
| | | // Find and cancel the request. |
| | | final RequestContextImpl<?, ?> cancelledRequest = |
| | |
| | | } |
| | | } |
| | | } else { |
| | | final RequestContextImpl<R, ResultHandler<? super R>> requestContext; |
| | | final RequestContextImpl<R, ResultHandler<R>> requestContext; |
| | | if (request.getOID().equals(StartTLSExtendedRequest.OID)) { |
| | | // StartTLS requests cannot be cancelled. |
| | | requestContext = |
| | | new RequestContextImpl<R, ResultHandler<? super R>>(this, |
| | | resultHandler, messageID, false); |
| | | new RequestContextImpl<R, ResultHandler<R>>(this, resultHandler, |
| | | messageID, false); |
| | | } else { |
| | | requestContext = |
| | | new RequestContextImpl<R, ResultHandler<? super R>>(this, |
| | | resultHandler, messageID, true); |
| | | new RequestContextImpl<R, ResultHandler<R>>(this, resultHandler, |
| | | messageID, true); |
| | | } |
| | | |
| | | if (addPendingRequest(requestContext)) { |
| | |
| | | @Override |
| | | public void handleModify(final Integer messageID, final ModifyRequest request, |
| | | final IntermediateResponseHandler intermediateResponseHandler, |
| | | final ResultHandler<? super Result> resultHandler) { |
| | | final RequestContextImpl<Result, ResultHandler<? super Result>> requestContext = |
| | | new RequestContextImpl<Result, ResultHandler<? super Result>>(this, |
| | | resultHandler, messageID, true); |
| | | final ResultHandler<Result> resultHandler) { |
| | | final RequestContextImpl<Result, ResultHandler<Result>> requestContext = |
| | | new RequestContextImpl<Result, ResultHandler<Result>>(this, resultHandler, |
| | | messageID, true); |
| | | if (addPendingRequest(requestContext)) { |
| | | requestHandler.handleModify(requestContext, request, intermediateResponseHandler, |
| | | requestContext); |
| | |
| | | @Override |
| | | public void handleModifyDN(final Integer messageID, final ModifyDNRequest request, |
| | | final IntermediateResponseHandler intermediateResponseHandler, |
| | | final ResultHandler<? super Result> resultHandler) { |
| | | final RequestContextImpl<Result, ResultHandler<? super Result>> requestContext = |
| | | new RequestContextImpl<Result, ResultHandler<? super Result>>(this, |
| | | resultHandler, messageID, true); |
| | | final ResultHandler<Result> resultHandler) { |
| | | final RequestContextImpl<Result, ResultHandler<Result>> requestContext = |
| | | new RequestContextImpl<Result, ResultHandler<Result>>(this, resultHandler, |
| | | messageID, true); |
| | | if (addPendingRequest(requestContext)) { |
| | | requestHandler.handleModifyDN(requestContext, request, intermediateResponseHandler, |
| | | requestContext); |
| | |
| | | * |
| | | * |
| | | * Copyright 2010 Sun Microsystems, Inc. |
| | | * Portions copyright 2011-2012 ForgeRock AS. |
| | | * Portions copyright 2011-2013 ForgeRock AS. |
| | | */ |
| | | package org.forgerock.opendj.ldap; |
| | | |
| | |
| | | public class LDAPListenerTestCase extends SdkTestCase { |
| | | |
| | | private static class MockServerConnection implements ServerConnection<Integer> { |
| | | final AsynchronousFutureResult<Throwable, ResultHandler<? super Throwable>> connectionError = |
| | | new AsynchronousFutureResult<Throwable, ResultHandler<? super Throwable>>(null); |
| | | final AsynchronousFutureResult<LDAPClientContext, ResultHandler<? super LDAPClientContext>> context = |
| | | new AsynchronousFutureResult<LDAPClientContext, ResultHandler<? super LDAPClientContext>>(null); |
| | | final AsynchronousFutureResult<Throwable, ResultHandler<Throwable>> connectionError = |
| | | new AsynchronousFutureResult<Throwable, ResultHandler<Throwable>>(null); |
| | | final AsynchronousFutureResult<LDAPClientContext, ResultHandler<LDAPClientContext>> context = |
| | | new AsynchronousFutureResult<LDAPClientContext, ResultHandler<LDAPClientContext>>( |
| | | null); |
| | | final CountDownLatch isClosed = new CountDownLatch(1); |
| | | |
| | | MockServerConnection() { |
| | |
| | | @Override |
| | | public void handleAdd(final Integer requestContext, final AddRequest request, |
| | | final IntermediateResponseHandler intermediateResponseHandler, |
| | | final ResultHandler<? super Result> resultHandler) |
| | | throws UnsupportedOperationException { |
| | | final ResultHandler<Result> resultHandler) throws UnsupportedOperationException { |
| | | resultHandler.handleResult(Responses.newResult(ResultCode.SUCCESS)); |
| | | } |
| | | |
| | |
| | | public void handleBind(final Integer requestContext, final int version, |
| | | final BindRequest request, |
| | | final IntermediateResponseHandler intermediateResponseHandler, |
| | | final ResultHandler<? super BindResult> resultHandler) |
| | | throws UnsupportedOperationException { |
| | | final ResultHandler<BindResult> resultHandler) throws UnsupportedOperationException { |
| | | resultHandler.handleResult(Responses.newBindResult(ResultCode.SUCCESS)); |
| | | } |
| | | |
| | |
| | | @Override |
| | | public void handleCompare(final Integer requestContext, final CompareRequest request, |
| | | final IntermediateResponseHandler intermediateResponseHandler, |
| | | final ResultHandler<? super CompareResult> resultHandler) |
| | | final ResultHandler<CompareResult> resultHandler) |
| | | throws UnsupportedOperationException { |
| | | resultHandler.handleResult(Responses.newCompareResult(ResultCode.SUCCESS)); |
| | | } |
| | |
| | | @Override |
| | | public void handleDelete(final Integer requestContext, final DeleteRequest request, |
| | | final IntermediateResponseHandler intermediateResponseHandler, |
| | | final ResultHandler<? super Result> resultHandler) |
| | | throws UnsupportedOperationException { |
| | | final ResultHandler<Result> resultHandler) throws UnsupportedOperationException { |
| | | resultHandler.handleResult(Responses.newResult(ResultCode.SUCCESS)); |
| | | } |
| | | |
| | |
| | | public <R extends ExtendedResult> void handleExtendedRequest(final Integer requestContext, |
| | | final ExtendedRequest<R> request, |
| | | final IntermediateResponseHandler intermediateResponseHandler, |
| | | final ResultHandler<? super R> resultHandler) throws UnsupportedOperationException { |
| | | final ResultHandler<R> resultHandler) throws UnsupportedOperationException { |
| | | resultHandler.handleErrorResult(ErrorResultException.newErrorResult(request |
| | | .getResultDecoder().newExtendedErrorResult(ResultCode.PROTOCOL_ERROR, "", |
| | | "Extended operation " + request.getOID() + " not supported"))); |
| | |
| | | @Override |
| | | public void handleModify(final Integer requestContext, final ModifyRequest request, |
| | | final IntermediateResponseHandler intermediateResponseHandler, |
| | | final ResultHandler<? super Result> resultHandler) |
| | | throws UnsupportedOperationException { |
| | | final ResultHandler<Result> resultHandler) throws UnsupportedOperationException { |
| | | resultHandler.handleResult(Responses.newResult(ResultCode.SUCCESS)); |
| | | } |
| | | |
| | |
| | | @Override |
| | | public void handleModifyDN(final Integer requestContext, final ModifyDNRequest request, |
| | | final IntermediateResponseHandler intermediateResponseHandler, |
| | | final ResultHandler<? super Result> resultHandler) |
| | | throws UnsupportedOperationException { |
| | | final ResultHandler<Result> resultHandler) throws UnsupportedOperationException { |
| | | resultHandler.handleResult(Responses.newResult(ResultCode.SUCCESS)); |
| | | } |
| | | |
| | |
| | | public void handleBind(final Integer requestContext, final int version, |
| | | final BindRequest request, |
| | | final IntermediateResponseHandler intermediateResponseHandler, |
| | | final ResultHandler<? super BindResult> resultHandler) |
| | | final ResultHandler<BindResult> resultHandler) |
| | | throws UnsupportedOperationException { |
| | | // Get connection from load balancer, this should fail over |
| | | // twice before getting connection to online server. |
| | |
| | | public void handleBind(final Integer requestContext, final int version, |
| | | final BindRequest request, |
| | | final IntermediateResponseHandler intermediateResponseHandler, |
| | | final ResultHandler<? super BindResult> resultHandler) |
| | | final ResultHandler<BindResult> resultHandler) |
| | | throws UnsupportedOperationException { |
| | | // First attempt offline server. |
| | | LDAPConnectionFactory lcf = new LDAPConnectionFactory(findFreeSocketAddress()); |
| | |
| | | this.clientContext = clientContext; |
| | | } |
| | | |
| | | /** |
| | | * Abandons the request sent by the client. |
| | | * |
| | | * @param context |
| | | * @param request |
| | | * @throws UnsupportedOperationException |
| | | */ |
| | | public void handleAbandon(final Integer context, final AbandonRequest request) |
| | | throws UnsupportedOperationException { |
| | | // Check if we have any concurrent operation with this message id. |
| | |
| | | // No response is needed. |
| | | } |
| | | |
| | | /** |
| | | * Adds the request sent by the client. |
| | | * |
| | | * @param context |
| | | * @param request |
| | | * @param handler |
| | | * @param intermediateResponseHandler |
| | | * @throws UnsupportedOperationException |
| | | */ |
| | | public void handleAdd(final Integer context, final AddRequest request, |
| | | final IntermediateResponseHandler intermediateResponseHandler, |
| | | final ResultHandler<? super Result> handler) throws UnsupportedOperationException { |
| | | final ResultHandler<Result> handler) throws UnsupportedOperationException { |
| | | Result result = null; |
| | | final AbandonableRequest abReq = new AbandonableRequest(request); |
| | | requestsInProgress.put(context, abReq); |
| | |
| | | handler.handleResult(result); |
| | | } |
| | | |
| | | /** |
| | | * @param context |
| | | * @param version |
| | | * @param request |
| | | * @param resultHandler |
| | | * @param intermediateResponseHandler |
| | | * @throws UnsupportedOperationException |
| | | */ |
| | | public void handleBind(final Integer context, final int version, final BindRequest request, |
| | | final IntermediateResponseHandler intermediateResponseHandler, |
| | | final ResultHandler<? super BindResult> resultHandler) |
| | | throws UnsupportedOperationException { |
| | | final ResultHandler<BindResult> resultHandler) throws UnsupportedOperationException { |
| | | // TODO: all bind types. |
| | | final AbandonableRequest abReq = new AbandonableRequest(request); |
| | | requestsInProgress.put(context, abReq); |
| | |
| | | requestsInProgress.remove(context); |
| | | } |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | public void handleConnectionClosed(final Integer context, final UnbindRequest request) { |
| | | close(); |
| | | } |
| | |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | public void handleConnectionDisconnected(ResultCode resultCode, String message) { |
| | | close(); |
| | | } |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | public void handleConnectionError(final Throwable error) { |
| | | close(); |
| | | } |
| | | |
| | | /** |
| | | * @param context |
| | | * @param request |
| | | * @param resultHandler |
| | | * @param intermediateResponseHandler |
| | | * @throws UnsupportedOperationException |
| | | */ |
| | | public void handleCompare(final Integer context, final CompareRequest request, |
| | | final IntermediateResponseHandler intermediateResponseHandler, |
| | | final ResultHandler<? super CompareResult> resultHandler) |
| | | final ResultHandler<CompareResult> resultHandler) |
| | | throws UnsupportedOperationException { |
| | | CompareResult result = null; |
| | | final AbandonableRequest abReq = new AbandonableRequest(request); |
| | |
| | | requestsInProgress.remove(context); |
| | | } |
| | | |
| | | /** |
| | | * @param context |
| | | * @param request |
| | | * @param handler |
| | | * @param intermediateResponseHandler |
| | | * @throws UnsupportedOperationException |
| | | */ |
| | | public void handleDelete(final Integer context, final DeleteRequest request, |
| | | final IntermediateResponseHandler intermediateResponseHandler, |
| | | final ResultHandler<? super Result> handler) throws UnsupportedOperationException { |
| | | final ResultHandler<Result> handler) throws UnsupportedOperationException { |
| | | Result result = null; |
| | | final AbandonableRequest abReq = new AbandonableRequest(request); |
| | | requestsInProgress.put(context, abReq); |
| | |
| | | requestsInProgress.remove(context); |
| | | } |
| | | |
| | | /** |
| | | * @param context |
| | | * @param request |
| | | * @param resultHandler |
| | | * @param intermediateResponseHandler |
| | | * @throws UnsupportedOperationException |
| | | */ |
| | | public <R extends ExtendedResult> void handleExtendedRequest(final Integer context, |
| | | final ExtendedRequest<R> request, |
| | | final IntermediateResponseHandler intermediateResponseHandler, |
| | | final ResultHandler<? super R> resultHandler) throws UnsupportedOperationException { |
| | | final ResultHandler<R> resultHandler) throws UnsupportedOperationException { |
| | | if (request.getOID().equals(StartTLSExtendedRequest.OID)) { |
| | | final R result = |
| | | request.getResultDecoder().newExtendedErrorResult(ResultCode.SUCCESS, "", |
| | |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * @param context |
| | | * @param request |
| | | * @param resultHandler |
| | | * @param intermediateResponseHandler |
| | | * @throws UnsupportedOperationException |
| | | */ |
| | | public void handleModify(final Integer context, final ModifyRequest request, |
| | | final IntermediateResponseHandler intermediateResponseHandler, |
| | | final ResultHandler<? super Result> resultHandler) |
| | | throws UnsupportedOperationException { |
| | | final ResultHandler<Result> resultHandler) throws UnsupportedOperationException { |
| | | // TODO: |
| | | } |
| | | |
| | | /** |
| | | * @param context |
| | | * @param request |
| | | * @param resultHandler |
| | | * @param intermediateResponseHandler |
| | | * @throws UnsupportedOperationException |
| | | */ |
| | | public void handleModifyDN(final Integer context, final ModifyDNRequest request, |
| | | final IntermediateResponseHandler intermediateResponseHandler, |
| | | final ResultHandler<? super Result> resultHandler) |
| | | throws UnsupportedOperationException { |
| | | final ResultHandler<Result> resultHandler) throws UnsupportedOperationException { |
| | | // TODO |
| | | } |
| | | |
| | | /** |
| | | * @param request |
| | | * @param intermediateResponseHandler |
| | | * @param resultHandler |
| | | * @param context |
| | | * @throws UnsupportedOperationException |
| | | */ |
| | | public void handleSearch(final Integer context, final SearchRequest request, |
| | | final IntermediateResponseHandler intermediateResponseHandler, |
| | | final SearchResultHandler resultHandler) throws UnsupportedOperationException { |
| | |
| | | private volatile boolean isRunning; |
| | | |
| | | // The mapping between the message id and the requests the server is |
| | | // currently |
| | | // handling. |
| | | // currently handling. |
| | | private final ConcurrentHashMap<Integer, AbandonableRequest> requestsInProgress = |
| | | new ConcurrentHashMap<Integer, AbandonableRequest>(); |
| | | |
| | |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * @param context |
| | | * @return |
| | | */ |
| | | public ServerConnection<Integer> handleAccept(final LDAPClientContext context) { |
| | | return new LDAPServerConnection(context); |
| | | } |