package org.eclipse.core.internal.refresh;
import org.eclipse.core.internal.resources.IManager;
import org.eclipse.core.internal.utils.Messages;
import org.eclipse.core.resources.*;
import org.eclipse.core.resources.refresh.IRefreshMonitor;
import org.eclipse.core.resources.refresh.IRefreshResult;
import org.eclipse.core.runtime.*;
import org.eclipse.core.runtime.Preferences.PropertyChangeEvent;
public class RefreshManager implements IRefreshResult, IManager, Preferences.IPropertyChangeListener {
public static final String DEBUG_PREFIX = "Auto-refresh: ";
MonitorManager monitors;
private RefreshJob refreshJob;
private IWorkspace workspace;
public RefreshManager(IWorkspace workspace) {
this.workspace = workspace;
}
protected void manageAutoRefresh(boolean enabled, IProgressMonitor progressMonitor) {
if (refreshJob == null) {
return;
}
SubMonitor subMonitor = SubMonitor.convert(progressMonitor, 1);
if (enabled) {
refreshJob.start();
monitors.start(subMonitor.split(1));
} else {
refreshJob.stop();
monitors.stop();
}
}
@Override
public void monitorFailed(IRefreshMonitor monitor, IResource resource) {
monitors.monitorFailed(monitor, resource);
}
@Deprecated
@Override
public void propertyChange(PropertyChangeEvent event) {
String property = event.getProperty();
if (ResourcesPlugin.PREF_AUTO_REFRESH.equals(property)) {
Preferences preferences = ResourcesPlugin.getPlugin().getPluginPreferences();
final boolean autoRefresh = preferences.getBoolean(ResourcesPlugin.PREF_AUTO_REFRESH);
String jobName = autoRefresh ? Messages.refresh_installMonitorsOnWorkspace : Messages.refresh_uninstallMonitorsOnWorkspace;
MonitorJob.createSystem(jobName, ResourcesPlugin.getWorkspace().getRoot(), (ICoreRunnable) monitor -> manageAutoRefresh(autoRefresh, monitor)).schedule();
}
}
@Override
public void refresh(IResource resource) {
if (refreshJob != null)
refreshJob.refresh(resource);
}
@Override
public void shutdown(IProgressMonitor monitor) {
ResourcesPlugin.getPlugin().getPluginPreferences().removePropertyChangeListener(this);
if (monitors != null) {
monitors.stop();
monitors = null;
}
if (refreshJob != null) {
refreshJob.stop();
refreshJob = null;
}
}
@Override
public void startup(IProgressMonitor monitor) {
SubMonitor subMonitor = SubMonitor.convert(monitor, 1);
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, subMonitor.split(1));
}
}