platform35/org.eclipse.core.resources/src/org/eclipse/core/internal/refresh/RefreshManager.java
changeset 40 eb3c938c7fef
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/platform35/org.eclipse.core.resources/src/org/eclipse/core/internal/refresh/RefreshManager.java	Thu Jul 30 11:56:23 2009 -0500
@@ -0,0 +1,119 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 IBM Corporation 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:
+ *     IBM - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.core.internal.refresh;
+
+import org.eclipse.core.internal.resources.IManager;
+import org.eclipse.core.internal.utils.Policy;
+import org.eclipse.core.resources.*;
+import org.eclipse.core.resources.refresh.IRefreshMonitor;
+import org.eclipse.core.resources.refresh.IRefreshResult;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.Preferences;
+import org.eclipse.core.runtime.Preferences.PropertyChangeEvent;
+
+/**
+ * Manages auto-refresh functionality, including maintaining the active
+ * set of monitors and controlling the job that performs periodic refreshes
+ * on out of sync resources.
+ * 
+ * @since 3.0
+ */
+public class RefreshManager implements IRefreshResult, IManager, Preferences.IPropertyChangeListener {
+	public static boolean DEBUG = Policy.DEBUG_AUTO_REFRESH;
+	public static final String DEBUG_PREFIX = "Auto-refresh: "; //$NON-NLS-1$
+	MonitorManager monitors;
+	private RefreshJob refreshJob;
+
+	/**
+	 * The workspace.
+	 */
+	private IWorkspace workspace;
+
+	public RefreshManager(IWorkspace workspace) {
+		this.workspace = workspace;
+	}
+
+	/*
+	 * Starts or stops auto-refresh depending on the auto-refresh preference.
+	 */
+	protected void manageAutoRefresh(boolean enabled) {
+		//do nothing if we have already shutdown
+		if (refreshJob == null)
+			return;
+		if (enabled) {
+			refreshJob.start();
+			monitors.start();
+		} else {
+			refreshJob.stop();
+			monitors.stop();
+		}
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.core.resources.refresh.IRefreshResult#monitorFailed(org.eclipse.core.resources.refresh.IRefreshMonitor, org.eclipse.core.resources.IResource)
+	 */
+	public void monitorFailed(IRefreshMonitor monitor, IResource resource) {
+		monitors.monitorFailed(monitor, resource);
+	}
+
+	/**
+	 * Checks for changes to the PREF_AUTO_UPDATE property.
+	 * @see Preferences.IPropertyChangeListener#propertyChange(Preferences.PropertyChangeEvent)
+	 */
+	public void propertyChange(PropertyChangeEvent event) {
+		String property = event.getProperty();
+		if (ResourcesPlugin.PREF_AUTO_REFRESH.equals(property)) {
+			Preferences preferences = ResourcesPlugin.getPlugin().getPluginPreferences();
+			boolean autoRefresh = preferences.getBoolean(ResourcesPlugin.PREF_AUTO_REFRESH);
+			manageAutoRefresh(autoRefresh);
+		}
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.core.resources.refresh.IRefreshResult#refresh(org.eclipse.core.resources.IResource)
+	 */
+	public void refresh(IResource resource) {
+		//do nothing if we have already shutdown
+		if (refreshJob != null)
+			refreshJob.refresh(resource);
+	}
+
+	/**
+	 * Shuts down the refresh manager.  This only happens when
+	 * the resources plugin is going away.
+	 */
+	public void shutdown(IProgressMonitor monitor) {
+		ResourcesPlugin.getPlugin().getPluginPreferences().removePropertyChangeListener(this);
+		if (monitors != null) {
+			monitors.stop();
+			monitors = null;
+		}
+		if (refreshJob != null) {
+			refreshJob.stop();
+			refreshJob = null;
+		}
+	}
+
+	/**
+	 * Initializes the refresh manager. This does a minimal amount of work
+	 * if auto-refresh is turned off.
+	 */
+	public void startup(IProgressMonitor monitor) {
+		Preferences preferences = ResourcesPlugin.getPlugin().getPluginPreferences();
+		preferences.addPropertyChangeListener(this);
+
+		refreshJob = new RefreshJob();
+		monitors = new MonitorManager(workspace, this);
+		boolean autoRefresh = preferences.getBoolean(ResourcesPlugin.PREF_AUTO_REFRESH);
+		if (autoRefresh)
+			manageAutoRefresh(autoRefresh);
+	}
+}