package monolipse.core.compiler;
import java.io.IOException;
import monolipse.core.BooCore;
import monolipse.core.IBooLaunchConfigurationTypes;
import monolipse.core.launching.BooLauncher;
import monolipse.core.launching.IProcessMessageHandler;
import monolipse.core.launching.ProcessMessage;
import monolipse.core.launching.ProcessMessenger;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.debug.core.DebugPlugin;
import org.eclipse.debug.core.ILaunchConfiguration;
import org.eclipse.debug.core.ILaunchConfigurationType;
import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
public abstract class AbstractBooServiceClient {
private ProcessMessenger _messenger;
private CompilerProposalsMessageHandler _proposalsHandler = new CompilerProposalsMessageHandler();
public AbstractBooServiceClient() throws CoreException {
_messenger = new ProcessMessenger(createLaunchConfiguration());
_messenger.setMessageHandler(getProposalsMessageId() + "-RESPONSE", _proposalsHandler);
}
public CompilerProposal[] getCompletionProposals(String code) throws IOException {
try {
_messenger.send(createMessage(getProposalsMessageId(), code));
return _proposalsHandler.getProposals();
} catch (Exception e) {
BooCore.logException(e);
}
return null;
}
public void unload() {
try {
_messenger.unload();
} catch (Exception x) {
BooCore.logException(x);
}
}
public void dispose() {
_messenger.dispose();
}
protected abstract String getProposalsMessageId();
protected ProcessMessage createMessage(String name, String code) {
return new ProcessMessage(name, code);
}
protected void setMessageHandler(String messageName, IProcessMessageHandler handler) {
_messenger.setMessageHandler(messageName, handler);
}
protected void send(String messageName, String payload) throws IOException {
// BooCore.logInfo(messageName + ":" + payload);
_messenger.send(messageName, payload);
}
public static ILaunchConfiguration createLaunchConfiguration() throws CoreException {
ILaunchConfigurationType configType = BooLauncher.getLaunchConfigurationType(IBooLaunchConfigurationTypes.ID_INTERPRETER_SUPPORT);
ILaunchConfigurationWorkingCopy wc = configType.newInstance(null, "interpreter support");
wc.setAttribute(DebugPlugin.ATTR_CAPTURE_OUTPUT, true);
return wc;
}
}