Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'target_explorer/plugins/org.eclipse.tm.te.core/src/org/eclipse/tm/te/core/async/AsyncCallbackCollector.java')
-rw-r--r--target_explorer/plugins/org.eclipse.tm.te.core/src/org/eclipse/tm/te/core/async/AsyncCallbackCollector.java260
1 files changed, 0 insertions, 260 deletions
diff --git a/target_explorer/plugins/org.eclipse.tm.te.core/src/org/eclipse/tm/te/core/async/AsyncCallbackCollector.java b/target_explorer/plugins/org.eclipse.tm.te.core/src/org/eclipse/tm/te/core/async/AsyncCallbackCollector.java
deleted file mode 100644
index f0fb15908..000000000
--- a/target_explorer/plugins/org.eclipse.tm.te.core/src/org/eclipse/tm/te/core/async/AsyncCallbackCollector.java
+++ /dev/null
@@ -1,260 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2011 Wind River Systems, Inc. and others. All rights reserved.
- * This program and the accompanying materials are made available under the terms
- * of the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Wind River Systems - initial API and implementation
- *******************************************************************************/
-package org.eclipse.tm.te.core.async;
-
-import java.util.concurrent.ExecutionException;
-
-import org.eclipse.core.runtime.Assert;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.OperationCanceledException;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.tm.te.core.activator.CoreBundleActivator;
-import org.eclipse.tm.te.runtime.callback.Callback;
-import org.eclipse.tm.te.runtime.interfaces.callback.ICallback;
-
-/**
- * The asynchronous callback collector is an extension to the asynchronous callback handler. The
- * difference is that the collector is not blocking a thread for waiting till all associated
- * callback's have been finished, the collector will by itself call an asynchronous callback if all
- * other callback's have been removed from the collector.
- *
- * In case of an error, all outstanding asynchronous callback's are ignored and the master callback
- * is invoked directly.
- *
- * Note: The creator of the asynchronous callback collector must call <code>AsyncCallbackCollector.initDone()</code>
- * if all initialization work and chaining of the target callback's are done. This will do avoid that
- * the collector is fired before all pending callback could have been added!
- */
-public class AsyncCallbackCollector extends AsyncCallbackHandler {
- // The final master callback to send if all other callback have been removed.
- final ICallback callback;
- // Once the master callback has been fired, the collector is marked finish.
- private boolean isFinished;
- private boolean initDone;
-
- // The reference to the callback invocation delegate
- private ICallbackInvocationDelegate delegate = null;
-
- /**
- * Delegation interfaces used by the asynchronous callback collector to
- * invoke the final callback.
- */
- public static interface ICallbackInvocationDelegate {
-
- /**
- * Invokes the given runnable.
- *
- * @param runnable The runnable. Must not be <code>null</code>.
- */
- public void invoke(Runnable runnable);
- }
-
- /**
- * Simple target callback handling an asynchronous callback collector parent itself and remove
- * themselves from the collector after callback has done.
- * <p>
- * Errors are handled using the collector.
- */
- public static class SimpleCollectorCallback extends Callback {
- private final AsyncCallbackCollector collector;
-
- /**
- * Constructor.
- *
- * @param collector The parent asynchronous callback collector. Must be not
- * <code>null</code>.
- */
- public SimpleCollectorCallback(AsyncCallbackCollector collector) {
- Assert.isNotNull(collector);
- // Remember the callback collector instance
- this.collector = collector;
- // Add ourself to the callback collector
- this.collector.addCallback(this);
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.te.runtime.callback.Callback#internalDone(java.lang.Object, org.eclipse.core.runtime.IStatus)
- */
- @Override
- protected void internalDone(Object caller, IStatus status) {
- // If an error occurred, pass on to the collector and
- // let the collector handle the error.
- if (status.getException() != null) {
- collector.handleError(status.getMessage(), status.getException());
- }
- else {
- collector.removeCallback(this);
- }
- }
-
- /**
- * Return the collector using this callback.
- */
- protected AsyncCallbackCollector getCollector() {
- return collector;
- }
- }
-
- /**
- * Constructor.
- */
- public AsyncCallbackCollector() {
- this(null, null);
- }
-
- /**
- * Constructor.
- *
- * @param callback The final callback to invoke if the collector enters the finished state.
- * @param delegate The callback invocation delegate. Must not be <code>null</code> if the callback is not <code>null</code>.
- */
- public AsyncCallbackCollector(ICallback callback, ICallbackInvocationDelegate delegate) {
- super();
-
- if (callback != null) Assert.isNotNull(delegate);
-
- // We have to add our master callback to the list of callback to avoid that
- // the collector is running empty to early!
- addCallback(callback);
- this.callback = callback;
- this.delegate = delegate;
-
- // We are not finished yet.
- isFinished = false;
- initDone = false;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.te.core.async.AsyncCallbackHandler#addCallback(org.eclipse.tm.te.runtime.interfaces.callback.ICallback)
- */
- @Override
- public final synchronized void addCallback(ICallback callback) {
- Assert.isTrue(!isFinished() || getError() != null);
- super.addCallback(callback);
- }
-
- /**
- * Checks if the collector run empty and we can fire the master callback.
- */
- protected final synchronized void checkAndFireCallback() {
- if (!isEmpty() || isFinished()) {
- return;
- }
- isFinished = true;
- onCollectorFinished();
- }
-
- /**
- * Called from {@link #checkAndFireCallback()} once the collector has been marked finished.
- * Subclasses may override this method for any necessary finished handling necessary.<br>
- * The default implementation is just firing the collectors final callback.
- * <p>
- * Note: The method does not need to be explicitly synchronized. It's called from inside a
- * <code>synchronized(this)</code> block!
- */
- protected void onCollectorFinished() {
- if (callback != null) {
- Assert.isNotNull(delegate);
- delegate.invoke(new Runnable() {
- @Override
- public void run() {
- Throwable error = getError();
- IStatus status = new Status((error != null ? (error instanceof OperationCanceledException ? IStatus.CANCEL : IStatus.ERROR) : IStatus.OK), CoreBundleActivator
- .getUniqueIdentifier(), 0, (error != null ? error.getMessage() : null), error);
- callback.done(this, status);
- }
- });
- }
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tm.te.core.async.AsyncCallbackHandler#removeCallback(org.eclipse.tm.te.runtime.interfaces.callback.ICallback)
- */
- @Override
- public final synchronized void removeCallback(ICallback callback) {
- super.removeCallback(callback);
- checkAndFireCallback();
- }
-
- /**
- * Returns if or if not all pending callback's have been invoked and the collector entered the
- * finished state. Once in the finished state, the state cannot be reversed anymore!
- */
- public final boolean isFinished() {
- return isFinished;
- }
-
- /**
- * Method to be called if the initialization of the collector is finished. The creator of the
- * collector must call this method in order to "activate" the collector finally.
- */
- public final synchronized void initDone() {
- Assert.isTrue(initDone == false);
- if (callback != null) {
- removeCallback(callback);
- }
- initDone = true;
- }
-
- /**
- * Creates and {@link ExecutionException} for the given error message and the given cause. Calls
- * {@link #handleError(Throwable)} afterwards. If the given cause is an
- * {@link OperationCanceledException}, the cause will be passed on untouched.
- *
- * @param errMsg The error message or <code>null</code>.
- * @param cause The cause or <code>null</code>.
- */
- public final synchronized void handleError(final String errMsg, Throwable cause) {
- // In case of an error, isFinished() can be set before all callback's are in.
- // Callback's that come later do not change the result, they are silently ignored.
- Assert.isTrue(!isFinished() || getError() != null);
-
- Throwable error = cause;
-
- // In case the incoming error is itself an OperationCanceledException, re-throw it as is.
- // Otherwise re-package the cause to an ExecutionException.
- //
- // In all cases the exceptions will be thrown here in order to create a useful back trace.
- if (error instanceof OperationCanceledException) {
- // leave everything as is
- }
- else {
- cause = new ExecutionException(errMsg, error);
- }
- error.fillInStackTrace();
- handleError(error);
- }
-
- /**
- * Handles the given error. If the collector is not yet finished and not error has been set yet,
- * the collector is finished and the error is set as the error to pass on with the callback. If
- * the collector is already finished, the method will return immediately.
- *
- * @param error The error to handle. Must be not <code>null</code>.
- */
- public final synchronized void handleError(final Throwable error) {
- Assert.isNotNull(error);
-
- // In case of an error, isFinished() can be set before all callback's are in.
- // Callback's that come later do not change the result, they are silently ignored.
- Assert.isTrue(!isFinished() || getError() != null);
-
- if (!isFinished()) {
- setError(error);
- clear();
- checkAndFireCallback();
- }
-
- // Re-throw any Error except assertion errors ! NEVER REMOVE THIS !
- if ((error instanceof Error) && !(error instanceof AssertionError)) {
- throw (Error) error;
- }
- }
-}

Back to the top