package sk.stuba.fiit.perconik.activity.listeners.ui.text;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.IWorkbenchPartSite;
import org.eclipse.ui.IWorkbenchWindow;
import sk.stuba.fiit.perconik.activity.events.LocalEvent;
import sk.stuba.fiit.perconik.activity.listeners.ActivityListener;
import sk.stuba.fiit.perconik.activity.serializers.ui.PartSerializer;
import sk.stuba.fiit.perconik.activity.serializers.ui.text.LineRegionSerializer;
import sk.stuba.fiit.perconik.data.events.Event;
import sk.stuba.fiit.perconik.eclipse.jface.text.LineRegion;
import static sk.stuba.fiit.perconik.activity.serializers.Serializations.identifyObject;
import static sk.stuba.fiit.perconik.activity.serializers.Serializers.asDisplayTask;
import static sk.stuba.fiit.perconik.data.content.StructuredContents.key;
/**
* TODO
*
* @author Pavol Zbell
* @since 1.0
*/
abstract class AbstractTextListener extends ActivityListener {
AbstractTextListener() {}
final Event build(final long time, final Action action, final IWorkbenchPart part) {
Event data = LocalEvent.of(time, action.getName());
data.put(key("part"), this.execute(asDisplayTask(new PartSerializer(), part)));
IWorkbenchPartSite site = part.getSite();
if (site != null) {
IWorkbenchPage page = site.getPage();
IWorkbenchWindow window = page.getWorkbenchWindow();
IWorkbench workbench = window.getWorkbench();
data.put(key("part", "page"), identifyObject(page));
data.put(key("part", "page", "window"), identifyObject(window));
data.put(key("part", "page", "window", "workbench"), identifyObject(workbench));
}
return data;
}
final Event build(final long time, final Action action, final IWorkbenchPart part, final LineRegion region) {
Event data = this.build(time, action, part);
data.put(key("region"), new LineRegionSerializer().serialize(region));
return data;
}
final void process(final long time, final Action action, final IWorkbenchPart part, final LineRegion region) {
this.send(action.getPath(), this.intern(this.build(time, action, part, region)));
}
}