package sk.stuba.fiit.perconik.activity.listeners.ui.assist;
import org.eclipse.jface.text.contentassist.ContentAssistEvent;
import org.eclipse.jface.text.contentassist.ICompletionProposal;
import sk.stuba.fiit.perconik.activity.events.LocalEvent;
import sk.stuba.fiit.perconik.activity.listeners.ActivityListener;
import sk.stuba.fiit.perconik.core.annotations.Unsupported;
import sk.stuba.fiit.perconik.core.annotations.Version;
import sk.stuba.fiit.perconik.data.events.Event;
import static sk.stuba.fiit.perconik.activity.listeners.ui.assist.CompletionSelectionListener.Action.SELECT;
import static sk.stuba.fiit.perconik.data.content.StructuredContents.key;
/**
* TODO
*
* @author Pavol Zbell
* @since 1.0
*/
@Version("0.0.0.alpha")
@Unsupported
public final class CompletionSelectionListener extends ActivityListener implements sk.stuba.fiit.perconik.core.listeners.CompletionListener {
public CompletionSelectionListener() {}
enum Action implements ActivityListener.Action {
SELECT;
private final String name;
private final String path;
private Action() {
this.name = actionName("eclipse", "completion", this);
this.path = actionPath(this.name);
}
public String getName() {
return this.name;
}
public String getPath() {
return this.path;
}
}
// TODO
// private static void put(final StructuredContent content, ) {
// content.put(key(""), );
// }
static Event build(final long time, final Action action, final ICompletionProposal proposal, final boolean smart) {
Event data = LocalEvent.of(time, action.getName());
// ICompletionProposal
// IJavaCompletionProposal
// IContextInformation
// + a lot of *Extension*
data.put(key("proposal", "displayString"), proposal.getDisplayString());
data.put(key("proposal", "additionalInformation"), proposal.getAdditionalProposalInfo());
// TODO refactor
data.put(key("proposal", "context", "displayString"), proposal.getContextInformation().getContextDisplayString());
data.put(key("proposal", "context", "informationDisplayString"), proposal.getContextInformation().getInformationDisplayString());
data.put(key("smart"), smart);
return data;
}
void process(final long time, final Action action, final ICompletionProposal proposal, final boolean smart) {
this.send(action.getPath(), build(time, action, proposal, smart));
}
public void selectionChanged(final ICompletionProposal proposal, final boolean smart) {
final long time = this.currentTime();
this.execute(new Runnable() {
public void run() {
process(time, SELECT, proposal, smart);
}
});
}
public void assistSessionStarted(final ContentAssistEvent event) {
// ignore
}
public void assistSessionRestarted(final ContentAssistEvent event) {
// ignore
}
public void assistSessionEnded(final ContentAssistEvent event) {
// ignore
}
public void applied(final ICompletionProposal proposal) {
// ignore
}
}