Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'bundles/org.eclipse.team.core/src/org/eclipse/team/core/subscribers/JobStatusHandler.java')
-rw-r--r--bundles/org.eclipse.team.core/src/org/eclipse/team/core/subscribers/JobStatusHandler.java232
1 files changed, 0 insertions, 232 deletions
diff --git a/bundles/org.eclipse.team.core/src/org/eclipse/team/core/subscribers/JobStatusHandler.java b/bundles/org.eclipse.team.core/src/org/eclipse/team/core/subscribers/JobStatusHandler.java
deleted file mode 100644
index 9927b094e..000000000
--- a/bundles/org.eclipse.team.core/src/org/eclipse/team/core/subscribers/JobStatusHandler.java
+++ /dev/null
@@ -1,232 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.team.core.subscribers;
-
-import java.util.*;
-
-import org.eclipse.core.runtime.*;
-import org.eclipse.core.runtime.jobs.*;
-
-/**
- * This class is reponsible for notifying listeners when jobs registered
- * with the handler start and stop. Start is invoked when the first registered job starts
- * anf finish is invoked when the last registered job finishes.
- */
-public class JobStatusHandler extends JobChangeAdapter {
-
- private static Map handlers = new HashMap();
-
- private QualifiedName jobType;
- private Set jobs = new HashSet();
- private List listeners = new ArrayList();
-
- /*
- * Private class used to safely notify listeners of job type starts and
- * finishes. Subclass override the notify(IJobListener) method to
- * fire specific events inside an ISafeRunnable.
- */
- private abstract class Notification implements ISafeRunnable {
- private IJobListener listener;
- public void handleException(Throwable exception) {
- // don't log the exception....it is already being logged in Platform#run
- }
- public void run(IJobListener listener) {
- this.listener = listener;
- Platform.run(this);
- }
- public void run() throws Exception {
- notify(listener);
- }
- /**
- * Subsclasses overide this method to send an event safely to a lsistener
- * @param listener
- */
- protected abstract void notify(IJobListener listener);
- }
-
- /**
- * Associate the job with the given jobType and schedule the job for
- * immediate start.
- * @param job
- * @param jobType
- */
- public static void schedule(Job job, QualifiedName jobType) {
- JobStatusHandler handler;
- synchronized (handlers) {
- handler = getHandler(jobType);
- if (handler == null) {
- handler = createHandler(jobType);
- }
- }
- handler.schedule(job);
- }
-
- /**
- * Add a listener for the given job type.
- * @param listener
- * @param jobType
- */
- public static void addJobListener(IJobListener listener, QualifiedName jobType) {
- synchronized (handlers) {
- JobStatusHandler handler = getHandler(jobType);
- if (handler == null) {
- handler = createHandler(jobType);
- }
- handler.addJobListener(listener);
- }
- }
-
- /**
- * Remove a previously registered listener for the given job type.
- * @param listener
- * @param jobType
- */
- public static void removeJobListener(IJobListener listener, QualifiedName jobType) {
- synchronized (handlers) {
- JobStatusHandler handler = getHandler(jobType);
- if (handler != null) {
- handler.removeJobListener(listener);
- }
- }
- }
-
- /**
- * Return whether a job of the given type is currently running.
- * @param jobType
- * @return
- */
- public static boolean hasRunningJobs(QualifiedName jobType) {
- JobStatusHandler handler = getHandler(jobType);
- if (handler != null) {
- return handler.hasRunningJobs();
- }
- return false;
- }
-
- private static JobStatusHandler getHandler(QualifiedName jobType) {
- return (JobStatusHandler)handlers.get(jobType);
- }
-
- private static JobStatusHandler createHandler(QualifiedName jobType) {
- JobStatusHandler existing = getHandler(jobType);
- if (existing != null) return existing;
- JobStatusHandler newHandler = new JobStatusHandler(jobType);
- handlers.put(jobType, newHandler);
- return newHandler;
- }
-
- protected JobStatusHandler(QualifiedName jobType) {
- super();
- this.jobType = jobType;
- }
-
- public void schedule(Job job) {
- job.addJobChangeListener(this);
- job.schedule();
- }
-
- public void done(IJobChangeEvent event) {
- jobDone(event.getJob());
-
- }
-
- public void addJobListener(IJobListener listener) {
- synchronized (listeners) {
- listeners.add(listener);
- }
- }
- public void removeJobListener(IJobListener listener) {
- synchronized (listeners) {
- listeners.remove(listener);
- }
- }
-
- private void fireNotification(Notification notification) {
- // Get a snapshot of the listeners so the list doesn't change while we're firing
- IJobListener[] listenerArray;
- synchronized (listeners) {
- listenerArray = (IJobListener[]) listeners.toArray(new IJobListener[listeners.size()]);
- }
- // Notify each listener in a safe manner (i.e. so their exceptions don't kill us)
- for (int i = 0; i < listenerArray.length; i++) {
- IJobListener listener = listenerArray[i];
- notification.run(listener);
- }
- }
-
- private void jobStarted(Job job) {
- if (recordJob(job)) {
- fireStartNotification();
- }
- }
-
- /*
- * Record the job and return true if it's the first job of that type
- */
- private boolean recordJob(Job job) {
- if (!jobs.add(job)) {
- // The job was already in the set.
- return false;
- }
- return jobs.size() == 1;
- }
-
- /*
- * Remove the job and return true if it is the last job for the type
- */
- private boolean removeJob(Job job) {
- if (!jobs.remove(job)) {
- // The job wasn't in the list.
- return false;
- }
- return jobs.isEmpty();
- }
-
- private void fireStartNotification() {
- fireNotification(new Notification() {
- public void notify(IJobListener listener) {
- listener.started(getJobType());
- }
- });
- }
-
- private void jobDone(Job job) {
- if (removeJob(job)) {
- fireEndNotification();
- }
- }
-
- private void fireEndNotification() {
- fireNotification(new Notification() {
- public void notify(IJobListener listener) {
- listener.finished(getJobType());
- }
- });
- }
-
- public boolean hasRunningJobs() {
- return !jobs.isEmpty();
- }
-
- /**
- * @return Returns the jobType.
- */
- public QualifiedName getJobType() {
- return jobType;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.core.runtime.jobs.IJobChangeListener#aboutToRun(org.eclipse.core.runtime.jobs.IJobChangeEvent)
- */
- public void aboutToRun(IJobChangeEvent event) {
- jobStarted(event.getJob());
- }
-}

Back to the top