package com.laboki.eclipse.plugin.smartsave.listeners; import org.eclipse.core.runtime.preferences.IEclipsePreferences; import org.eclipse.core.runtime.preferences.IEclipsePreferences.IPreferenceChangeListener; import org.eclipse.core.runtime.preferences.IEclipsePreferences.PreferenceChangeEvent; import com.laboki.eclipse.plugin.smartsave.events.PreferenceStoreChangeEvent; import com.laboki.eclipse.plugin.smartsave.instance.EventBusInstance; import com.laboki.eclipse.plugin.smartsave.instance.Instance; import com.laboki.eclipse.plugin.smartsave.main.EventBus; import com.laboki.eclipse.plugin.smartsave.preferences.Store; import com.laboki.eclipse.plugin.smartsave.task.BaseTask; import com.laboki.eclipse.plugin.smartsave.task.Task; import com.laboki.eclipse.plugin.smartsave.task.TaskMutexRule; public final class PreferenceChangeListener extends EventBusInstance implements IPreferenceChangeListener { private static final int DELAY = 125; private static final String FAMILY = "SmartSavePreferencesChangeListenerFamily"; private static final TaskMutexRule RULE = new TaskMutexRule(); private static final IEclipsePreferences PREFERENCES = Store.getPreferences(); @Override public void preferenceChange(final PreferenceChangeEvent event) { new Task() { @Override protected boolean shouldSchedule() { return BaseTask.noTaskFamilyExists(PreferenceChangeListener.FAMILY); } @Override public void execute() { EventBus.post(new PreferenceStoreChangeEvent()); } }.setFamily(PreferenceChangeListener.FAMILY) .setRule(PreferenceChangeListener.RULE) .setDelay(PreferenceChangeListener.DELAY) .start(); } @Override public Instance start() { PreferenceChangeListener.PREFERENCES.addPreferenceChangeListener(this); return super.start(); } @Override public Instance stop() { PreferenceChangeListener.PREFERENCES.removePreferenceChangeListener(this); return super.stop(); } }