From 263d085885df024dca9250cc03c807912b0a7662 Mon Sep 17 00:00:00 2001
From: Matthew Swift <matthew.swift@forgerock.com>
Date: Tue, 24 Apr 2012 22:33:21 +0000
Subject: [PATCH] Reformat to comply with new Checkstyle rules.
---
opendj3/opendj-ldap-sdk/src/main/java/com/forgerock/opendj/util/AsynchronousFutureResult.java | 670 +++++++++++++++++++++++--------------------------------
1 files changed, 283 insertions(+), 387 deletions(-)
diff --git a/opendj3/opendj-ldap-sdk/src/main/java/com/forgerock/opendj/util/AsynchronousFutureResult.java b/opendj3/opendj-ldap-sdk/src/main/java/com/forgerock/opendj/util/AsynchronousFutureResult.java
index c1fd084..370a27d 100644
--- a/opendj3/opendj-ldap-sdk/src/main/java/com/forgerock/opendj/util/AsynchronousFutureResult.java
+++ b/opendj3/opendj-ldap-sdk/src/main/java/com/forgerock/opendj/util/AsynchronousFutureResult.java
@@ -6,17 +6,16 @@
* (the "License"). You may not use this file except in compliance
* with the License.
*
- * You can obtain a copy of the license at
- * trunk/opendj3/legal-notices/CDDLv1_0.txt
+ * You can obtain a copy of the license at legal-notices/CDDLv1_0.txt
* or http://forgerock.org/license/CDDLv1.0.html.
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at
- * trunk/opendj3/legal-notices/CDDLv1_0.txt. If applicable,
- * add the following below this CDDL HEADER, with the fields enclosed
- * by brackets "[]" replaced with your own identifying information:
+ * file and include the License file at legal-notices/CDDLv1_0.txt.
+ * If applicable, add the following below this CDDL HEADER, with the
+ * fields enclosed by brackets "[]" replaced with your own identifying
+ * information:
* Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
@@ -27,17 +26,17 @@
package com.forgerock.opendj.util;
-
-
import static org.forgerock.opendj.ldap.ErrorResultException.newErrorResult;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
import java.util.concurrent.locks.AbstractQueuedSynchronizer;
-import org.forgerock.opendj.ldap.*;
-
-
+import org.forgerock.opendj.ldap.CancelledResultException;
+import org.forgerock.opendj.ldap.ErrorResultException;
+import org.forgerock.opendj.ldap.FutureResult;
+import org.forgerock.opendj.ldap.ResultCode;
+import org.forgerock.opendj.ldap.ResultHandler;
/**
* This class provides a skeletal implementation of the {@code FutureResult}
@@ -64,418 +63,315 @@
* </ul>
*
* @param <M>
- * The type of result returned by this completion future.
+ * The type of result returned by this completion future.
*/
-public class AsynchronousFutureResult<M> implements FutureResult<M>,
- ResultHandler<M>
-{
- @SuppressWarnings("serial")
- private final class Sync extends AbstractQueuedSynchronizer
- {
- // State value representing the initial state before a result has
- // been received.
- private static final int WAITING = 0;
+public class AsynchronousFutureResult<M> implements FutureResult<M>, ResultHandler<M> {
+ @SuppressWarnings("serial")
+ private final class Sync extends AbstractQueuedSynchronizer {
+ // State value representing the initial state before a result has
+ // been received.
+ private static final int WAITING = 0;
- // State value representing that a result has been received and is
- // being processed.
- private static final int PENDING = 1;
+ // State value representing that a result has been received and is
+ // being processed.
+ private static final int PENDING = 1;
- // State value representing that the request was cancelled.
- private static final int CANCELLED = 2;
+ // State value representing that the request was cancelled.
+ private static final int CANCELLED = 2;
- // State value representing that the request has failed.
- private static final int FAIL = 3;
+ // State value representing that the request has failed.
+ private static final int FAIL = 3;
- // State value representing that the request has succeeded.
- private static final int SUCCESS = 4;
+ // State value representing that the request has succeeded.
+ private static final int SUCCESS = 4;
- // These do not need to be volatile since their values are published
- // by updating the state after they are set and reading the state
- // immediately before they are read.
- private ErrorResultException errorResult = null;
+ // These do not need to be volatile since their values are published
+ // by updating the state after they are set and reading the state
+ // immediately before they are read.
+ private ErrorResultException errorResult = null;
- private M result = null;
+ private M result = null;
+ /**
+ * Allow all threads to acquire if future has completed.
+ */
+ @Override
+ protected int tryAcquireShared(final int ignore) {
+ return innerIsDone() ? 1 : -1;
+ }
+ /**
+ * Signal that the future has completed and threads waiting on get() can
+ * be released.
+ */
+ @Override
+ protected boolean tryReleaseShared(final int finalState) {
+ // Ensures that errorResult/result is published.
+ setState(finalState);
+ return true;
+ }
+
+ boolean innerCancel(final boolean mayInterruptIfRunning) {
+ if (!isCancelable() || !setStatePending()) {
+ return false;
+ }
+
+ // Perform implementation defined cancellation.
+ ErrorResultException errorResult = handleCancelRequest(mayInterruptIfRunning);
+ if (errorResult == null) {
+ errorResult = newErrorResult(ResultCode.CLIENT_SIDE_USER_CANCELLED);
+ }
+ this.errorResult = errorResult;
+
+ try {
+ // Invoke error result completion handler.
+ if (handler != null) {
+ handler.handleErrorResult(errorResult);
+ }
+ } finally {
+ releaseShared(CANCELLED); // Publishes errorResult.
+ }
+
+ return true;
+ }
+
+ M innerGet() throws ErrorResultException, InterruptedException {
+ acquireSharedInterruptibly(0);
+ return get0();
+ }
+
+ M innerGet(final long nanosTimeout) throws ErrorResultException, TimeoutException,
+ InterruptedException {
+ if (!tryAcquireSharedNanos(0, nanosTimeout)) {
+ throw new TimeoutException();
+ } else {
+ return get0();
+ }
+ }
+
+ boolean innerIsCancelled() {
+ return getState() == CANCELLED;
+ }
+
+ boolean innerIsDone() {
+ return getState() > 1;
+ }
+
+ void innerSetErrorResult(final ErrorResultException errorResult) {
+ if (setStatePending()) {
+ this.errorResult = errorResult;
+
+ try {
+ // Invoke error result completion handler.
+ if (handler != null) {
+ handler.handleErrorResult(errorResult);
+ }
+ } finally {
+ releaseShared(FAIL); // Publishes errorResult.
+ }
+ }
+ }
+
+ void innerSetResult(final M result) {
+ if (setStatePending()) {
+ this.result = result;
+
+ try {
+ // Invoke result completion handler.
+ if (handler != null) {
+ handler.handleResult(result);
+ }
+ } finally {
+ releaseShared(SUCCESS); // Publishes result.
+ }
+ }
+ }
+
+ private M get0() throws ErrorResultException {
+ if (errorResult != null) {
+ // State must be FAILED or CANCELLED.
+ throw errorResult;
+ } else {
+ // State must be SUCCESS.
+ return result;
+ }
+ }
+
+ private boolean setStatePending() {
+ for (;;) {
+ final int s = getState();
+ if (s != WAITING) {
+ return false;
+ }
+ if (compareAndSetState(s, PENDING)) {
+ return true;
+ }
+ }
+ }
+ }
+
+ private final Sync sync = new Sync();
+
+ private final ResultHandler<? super M> handler;
+
+ private final int requestID;
/**
- * Allow all threads to acquire if future has completed.
+ * Creates a new asynchronous future result with the provided result handler
+ * and a request ID of -1.
+ *
+ * @param handler
+ * A result handler which will be forwarded the result or error
+ * when it arrives, may be {@code null}.
*/
- @Override
- protected int tryAcquireShared(final int ignore)
- {
- return innerIsDone() ? 1 : -1;
+ public AsynchronousFutureResult(final ResultHandler<? super M> handler) {
+ this(handler, -1);
}
-
-
/**
- * Signal that the future has completed and threads waiting on get() can be
- * released.
+ * Creates a new asynchronous future result with the provided result handler
+ * and request ID.
+ *
+ * @param handler
+ * A result handler which will be forwarded the result or error
+ * when it arrives, may be {@code null}.
+ * @param requestID
+ * The request ID which will be returned by the default
+ * implementation of {@link #getRequestID}.
+ */
+ public AsynchronousFutureResult(final ResultHandler<? super M> handler, final int requestID) {
+ this.handler = handler;
+ this.requestID = requestID;
+ }
+
+ /**
+ * {@inheritDoc}
*/
@Override
- protected boolean tryReleaseShared(final int finalState)
- {
- // Ensures that errorResult/result is published.
- setState(finalState);
- return true;
+ public final boolean cancel(final boolean mayInterruptIfRunning) {
+ return sync.innerCancel(mayInterruptIfRunning);
}
-
-
- boolean innerCancel(final boolean mayInterruptIfRunning)
- {
- if (!isCancelable() || !setStatePending())
- {
- return false;
- }
-
- // Perform implementation defined cancellation.
- ErrorResultException errorResult = handleCancelRequest(mayInterruptIfRunning);
- if (errorResult == null)
- {
- errorResult = newErrorResult(ResultCode.CLIENT_SIDE_USER_CANCELLED);
- }
- this.errorResult = errorResult;
-
- try
- {
- // Invoke error result completion handler.
- if (handler != null)
- {
- handler.handleErrorResult(errorResult);
- }
- }
- finally
- {
- releaseShared(CANCELLED); // Publishes errorResult.
- }
-
- return true;
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public final M get() throws ErrorResultException, InterruptedException {
+ return sync.innerGet();
}
-
-
- M innerGet() throws ErrorResultException, InterruptedException
- {
- acquireSharedInterruptibly(0);
- return get0();
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public final M get(final long timeout, final TimeUnit unit) throws ErrorResultException,
+ TimeoutException, InterruptedException {
+ return sync.innerGet(unit.toNanos(timeout));
}
-
-
- M innerGet(final long nanosTimeout) throws ErrorResultException,
- TimeoutException, InterruptedException
- {
- if (!tryAcquireSharedNanos(0, nanosTimeout))
- {
- throw new TimeoutException();
- }
- else
- {
- return get0();
- }
+ /**
+ * {@inheritDoc}
+ * <p>
+ * The default implementation returns the request ID passed in during
+ * construction, or -1 if none was provided.
+ */
+ @Override
+ public int getRequestID() {
+ return requestID;
}
-
-
- boolean innerIsCancelled()
- {
- return getState() == CANCELLED;
+ /**
+ * Sets the error result associated with this future. If ({@code isDone() ==
+ * true}) then the error result will be ignored, otherwise the result
+ * handler will be invoked if one was provided and, on return, any threads
+ * waiting on {@link #get} will be released and the provided error result
+ * will be thrown.
+ *
+ * @param errorResult
+ * The error result.
+ */
+ @Override
+ public final void handleErrorResult(final ErrorResultException errorResult) {
+ sync.innerSetErrorResult(errorResult);
}
-
-
- boolean innerIsDone()
- {
- return getState() > 1;
+ /**
+ * Sets the result associated with this future. If ({@code isDone() == true}
+ * ) then the result will be ignored, otherwise the result handler will be
+ * invoked if one was provided and, on return, any threads waiting on
+ * {@link #get} will be released and the provided result will be returned.
+ *
+ * @param result
+ * The result.
+ */
+ @Override
+ public final void handleResult(final M result) {
+ sync.innerSetResult(result);
}
-
-
- void innerSetErrorResult(final ErrorResultException errorResult)
- {
- if (setStatePending())
- {
- this.errorResult = errorResult;
-
- try
- {
- // Invoke error result completion handler.
- if (handler != null)
- {
- handler.handleErrorResult(errorResult);
- }
- }
- finally
- {
- releaseShared(FAIL); // Publishes errorResult.
- }
- }
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public final boolean isCancelled() {
+ return sync.innerIsCancelled();
}
-
-
- void innerSetResult(final M result)
- {
- if (setStatePending())
- {
- this.result = result;
-
- try
- {
- // Invoke result completion handler.
- if (handler != null)
- {
- handler.handleResult(result);
- }
- }
- finally
- {
- releaseShared(SUCCESS); // Publishes result.
- }
- }
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public final boolean isDone() {
+ return sync.innerIsDone();
}
-
-
- private M get0() throws ErrorResultException
- {
- if (errorResult != null)
- {
- // State must be FAILED or CANCELLED.
- throw errorResult;
- }
- else
- {
- // State must be SUCCESS.
- return result;
- }
+ /**
+ * Invoked when {@link #cancel} is called and {@code isDone() == false} and
+ * immediately before any threads waiting on {@link #get} are released.
+ * Implementations may choose to return a custom error result if needed or
+ * return {@code null} if the following default error result is acceptable:
+ *
+ * <pre>
+ * Result result = Responses.newResult(ResultCode.CLIENT_SIDE_USER_CANCELLED);
+ * </pre>
+ *
+ * In addition, implementations may perform other cleanup, for example, by
+ * issuing an LDAP abandon request. The default implementation is to do
+ * nothing.
+ *
+ * @param mayInterruptIfRunning
+ * {@code true} if the thread executing executing the response
+ * handler should be interrupted; otherwise, in-progress response
+ * handlers are allowed to complete.
+ * @return The custom error result, or {@code null} if the default is
+ * acceptable.
+ */
+ protected ErrorResultException handleCancelRequest(final boolean mayInterruptIfRunning) {
+ // Do nothing by default.
+ return null;
}
-
-
- private boolean setStatePending()
- {
- for (;;)
- {
- final int s = getState();
- if (s != WAITING)
- {
- return false;
- }
- if (compareAndSetState(s, PENDING))
- {
- return true;
- }
- }
+ /**
+ * Indicates whether this future result can be canceled.
+ *
+ * @return {@code true} if this future result is cancelable or {@code false}
+ * otherwise.
+ */
+ protected boolean isCancelable() {
+ // Return true by default.
+ return true;
}
- }
-
-
- private final Sync sync = new Sync();
-
- private final ResultHandler<? super M> handler;
-
- private final int requestID;
-
-
-
- /**
- * Creates a new asynchronous future result with the provided result handler
- * and a request ID of -1.
- *
- * @param handler
- * A result handler which will be forwarded the result or error when
- * it arrives, may be {@code null}.
- */
- public AsynchronousFutureResult(final ResultHandler<? super M> handler)
- {
- this(handler, -1);
- }
-
-
-
- /**
- * Creates a new asynchronous future result with the provided result handler
- * and request ID.
- *
- * @param handler
- * A result handler which will be forwarded the result or error when
- * it arrives, may be {@code null}.
- * @param requestID
- * The request ID which will be returned by the default
- * implementation of {@link #getRequestID}.
- */
- public AsynchronousFutureResult(final ResultHandler<? super M> handler,
- final int requestID)
- {
- this.handler = handler;
- this.requestID = requestID;
- }
-
-
-
- /**
- * {@inheritDoc}
- */
- @Override
- public final boolean cancel(final boolean mayInterruptIfRunning)
- {
- return sync.innerCancel(mayInterruptIfRunning);
- }
-
-
-
- /**
- * {@inheritDoc}
- */
- @Override
- public final M get() throws ErrorResultException, InterruptedException
- {
- return sync.innerGet();
- }
-
-
-
- /**
- * {@inheritDoc}
- */
- @Override
- public final M get(final long timeout, final TimeUnit unit)
- throws ErrorResultException, TimeoutException, InterruptedException
- {
- return sync.innerGet(unit.toNanos(timeout));
- }
-
-
-
- /**
- * {@inheritDoc}
- * <p>
- * The default implementation returns the request ID passed in during
- * construction, or -1 if none was provided.
- */
- @Override
- public int getRequestID()
- {
- return requestID;
- }
-
-
-
- /**
- * Sets the error result associated with this future. If ({@code isDone() ==
- * true}) then the error result will be ignored, otherwise the result handler
- * will be invoked if one was provided and, on return, any threads waiting on
- * {@link #get} will be released and the provided error result will be thrown.
- *
- * @param errorResult
- * The error result.
- */
- @Override
- public final void handleErrorResult(final ErrorResultException errorResult)
- {
- sync.innerSetErrorResult(errorResult);
- }
-
-
-
- /**
- * Sets the result associated with this future. If ({@code isDone() == true})
- * then the result will be ignored, otherwise the result handler will be
- * invoked if one was provided and, on return, any threads waiting on
- * {@link #get} will be released and the provided result will be returned.
- *
- * @param result
- * The result.
- */
- @Override
- public final void handleResult(final M result)
- {
- sync.innerSetResult(result);
- }
-
-
-
- /**
- * {@inheritDoc}
- */
- @Override
- public final boolean isCancelled()
- {
- return sync.innerIsCancelled();
- }
-
-
-
- /**
- * {@inheritDoc}
- */
- @Override
- public final boolean isDone()
- {
- return sync.innerIsDone();
- }
-
-
-
- /**
- * Invoked when {@link #cancel} is called and {@code isDone() == false} and
- * immediately before any threads waiting on {@link #get} are released.
- * Implementations may choose to return a custom error result if needed or
- * return {@code null} if the following default error result is acceptable:
- *
- * <pre>
- * Result result = Responses.newResult(ResultCode.CLIENT_SIDE_USER_CANCELLED);
- * </pre>
- *
- * In addition, implementations may perform other cleanup, for example, by
- * issuing an LDAP abandon request. The default implementation is to do
- * nothing.
- *
- * @param mayInterruptIfRunning
- * {@code true} if the thread executing executing the response
- * handler should be interrupted; otherwise, in-progress response
- * handlers are allowed to complete.
- * @return The custom error result, or {@code null} if the default is
- * acceptable.
- */
- protected ErrorResultException handleCancelRequest(
- final boolean mayInterruptIfRunning)
- {
- // Do nothing by default.
- return null;
- }
-
-
-
- /**
- * Indicates whether this future result can be canceled.
- *
- * @return {@code true} if this future result is cancelable or {@code false}
- * otherwise.
- */
- protected boolean isCancelable()
- {
- // Return true by default.
- return true;
- }
-
-
-
- /**
- * Appends a string representation of this future's state to the provided
- * builder.
- *
- * @param sb
- * The string builder.
- */
- protected void toString(final StringBuilder sb)
- {
- sb.append(" state = ");
- sb.append(sync);
- }
+ /**
+ * Appends a string representation of this future's state to the provided
+ * builder.
+ *
+ * @param sb
+ * The string builder.
+ */
+ protected void toString(final StringBuilder sb) {
+ sb.append(" state = ");
+ sb.append(sync);
+ }
}
--
Gitblit v1.10.0