package limitedwip.autorevert.components; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.application.ModalityState; import com.intellij.openapi.components.AbstractProjectComponent; import com.intellij.openapi.components.ServiceManager; import com.intellij.openapi.project.Project; import limitedwip.autorevert.AutoRevert; import limitedwip.common.LimitedWipCheckin; import limitedwip.common.TimerComponent; import limitedwip.common.settings.LimitedWIPSettings; import limitedwip.common.settings.LimitedWipConfigurable; public class AutoRevertComponent extends AbstractProjectComponent { private final TimerComponent timer; private AutoRevert autoRevert; protected AutoRevertComponent(Project project) { super(project); timer = ApplicationManager.getApplication().getComponent(TimerComponent.class); } @Override public void projectOpened() { LimitedWIPSettings settings = ServiceManager.getService(LimitedWIPSettings.class); autoRevert = new AutoRevert(new IdeAdapter(myProject)).init(convert(settings)); timer.addListener(new TimerComponent.Listener() { @Override public void onUpdate(final int seconds) { ApplicationManager.getApplication().invokeLater(new Runnable() { @Override public void run() { autoRevert.onTimer(seconds); } }, ModalityState.any()); } }, myProject); LimitedWipConfigurable.registerSettingsListener(myProject, new LimitedWipConfigurable.Listener() { @Override public void onSettingsUpdate(LimitedWIPSettings settings) { autoRevert.onSettings(convert(settings)); } }); LimitedWipCheckin.registerListener(myProject, new LimitedWipCheckin.Listener() { @Override public void onSuccessfulCheckin(boolean allFileAreCommitted) { if (allFileAreCommitted) autoRevert.onAllFilesCommitted(); } }); } public void startAutoRevert() { autoRevert.start(); } public boolean isAutoRevertStarted() { return autoRevert.isStarted(); } public void stopAutoRevert() { autoRevert.stop(); } private static AutoRevert.Settings convert(LimitedWIPSettings settings) { return new AutoRevert.Settings( settings.autoRevertEnabled, settings.secondsTillRevert(), settings.notifyOnRevert ); } }