package com.laboki.eclipse.plugin.smartsave.listeners;
import org.eclipse.core.runtime.jobs.ISchedulingRule;
import com.laboki.eclipse.plugin.smartsave.contexts.EditorContext;
import com.laboki.eclipse.plugin.smartsave.events.ScheduleSaveEvent;
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.task.BaseTask;
import com.laboki.eclipse.plugin.smartsave.task.Task;
import com.laboki.eclipse.plugin.smartsave.task.TaskMutexRule;
public abstract class BaseListener extends EventBusInstance {
public static final String FAMILY = "+SmartSaveBaseListenerTaskFamily+";
private static final ISchedulingRule RULE = new TaskMutexRule();
@Override
public Instance
start() {
this.add();
return super.start();
}
protected abstract void
add();
@Override
public final Instance
stop() {
this.remove();
return super.stop();
}
protected abstract void
remove();
protected static final void
scheduleSave() {
EditorContext.cancelSaverTasks();
BaseListener.scheduleTask();
}
private static void
scheduleTask() {
new Task() {
@Override
public boolean
shouldSchedule() {
return BaseTask.noTaskFamilyExists(BaseListener.FAMILY);
}
@Override
public void
execute() {
EventBus.post(new ScheduleSaveEvent());
}
}.setDelay(EditorContext.getSaveIntervalInMilliSeconds())
.setFamily(BaseListener.FAMILY)
.setRule(BaseListener.RULE)
.start();
}
}