package com.laboki.eclipse.plugin.smartsave.main.services; import java.util.List; import com.google.common.collect.ImmutableList; import com.google.common.collect.Lists; import com.laboki.eclipse.plugin.smartsave.contexts.EditorContext; import com.laboki.eclipse.plugin.smartsave.instance.Instance; public abstract class BaseServices implements Instance { private final List<Instance> instances = Lists.newArrayList(); @Override public Instance start() { this.startServices(); return this; } protected abstract void startServices(); protected void startService(final Instance instance) { instance.start(); this.instances.add(instance); } @Override public Instance stop() { this.cancelTasks(); this.stopServices(); this.instances.clear(); return this; } @SuppressWarnings("static-method") protected void cancelTasks() { EditorContext.cancelEventTasks(); EditorContext.cancelPluginTasks(); } private void stopServices() { for (final Instance instance : ImmutableList.copyOf(this.instances)) this.stopService(instance); } private void stopService(final Instance instance) { instance.stop(); this.instances.remove(instance); } }