package sk.stuba.fiit.perconik.activity.listeners.debug;
import java.util.List;
import org.eclipse.debug.core.ILaunch;
import sk.stuba.fiit.perconik.activity.events.LocalEvent;
import sk.stuba.fiit.perconik.activity.listeners.ActivityListener;
import sk.stuba.fiit.perconik.activity.serializers.debug.LaunchSerializer;
import sk.stuba.fiit.perconik.core.annotations.Version;
import sk.stuba.fiit.perconik.core.listeners.LaunchesListener;
import sk.stuba.fiit.perconik.data.events.Event;
import static java.util.Arrays.asList;
import static sk.stuba.fiit.perconik.activity.listeners.debug.LaunchListener.Action.ADD;
import static sk.stuba.fiit.perconik.activity.listeners.debug.LaunchListener.Action.CHANGE;
import static sk.stuba.fiit.perconik.activity.listeners.debug.LaunchListener.Action.REMOVE;
import static sk.stuba.fiit.perconik.activity.listeners.debug.LaunchListener.Action.TERMINATE;
import static sk.stuba.fiit.perconik.data.content.StructuredContents.key;
/**
* TODO
*
* @author Pavol Zbell
* @since 1.0
*/
@Version("0.0.4.alpha")
public final class LaunchListener extends ActivityListener implements LaunchesListener {
public LaunchListener() {}
enum Action implements ActivityListener.Action {
ADD,
REMOVE,
CHANGE,
TERMINATE;
private final String name;
private final String path;
private Action() {
this.name = actionName("eclipse", "launch", this);
this.path = actionPath(this.name);
}
public String getName() {
return this.name;
}
public String getPath() {
return this.path;
}
}
static Event build(final long time, final Action action, final List<ILaunch> launches) {
Event data = LocalEvent.of(time, action.getName());
data.put(key("launches"), new LaunchSerializer().serialize(launches));
return data;
}
void process(final long time, final Action action, final List<ILaunch> launches) {
this.send(action.getPath(), build(time, action, launches));
}
void execute(final long time, final Action action, final List<ILaunch> launches) {
this.execute(new Runnable() {
public void run() {
process(time, action, launches);
}
});
}
public void launchesAdded(final ILaunch[] launches) {
final long time = this.currentTime();
this.execute(time, ADD, asList(launches));
}
public void launchesRemoved(final ILaunch[] launches) {
final long time = this.currentTime();
this.execute(time, REMOVE, asList(launches));
}
public void launchesChanged(final ILaunch[] launches) {
final long time = this.currentTime();
this.execute(time, CHANGE, asList(launches));
}
public void launchesTerminated(final ILaunch[] launches) {
final long time = this.currentTime();
this.execute(time, TERMINATE, asList(launches));
}
}