/* * Copyright 2013 Guidewire Software, Inc. */ package gw.compiler.ij.api; import gw.compiler.ij.api.messages.CompilationDoneMessage; import gw.compiler.ij.api.messages.CompilationItem; import gw.compiler.ij.api.messages.CompileIssueMessage; import gw.compiler.ij.api.messages.CompiledMessage; import gw.compiler.ij.api.messages.CompilingMessage; import gw.compiler.ij.api.messages.RequestCompileMessage; import gw.compiler.ij.api.messages.RequestTerminateMessage; import gw.compiler.ij.api.messages.UncaughtExceptionMessage; import gw.fs.IFile; import java.io.File; import java.io.IOException; import java.util.Set; public class CompilerDriver { private ObjectClient client; public CompilerDriver(ObjectClient client) { this.client = client; } public void connect(CompilerCallback callback) throws IOException { while (true) { final Object message = client.read(); try { if ((message instanceof RequestCompileMessage)) { final RequestCompileMessage m = (RequestCompileMessage) message; callback.compile(m.moduleName, m.items); } if ((message instanceof RequestTerminateMessage)) { break; } } catch (Throwable e) { sendUncaughtException(e); } } } private void sendUncaughtException(Throwable e) throws IOException { client.write(new UncaughtExceptionMessage(e), true); } public void sendCompiling(CompilationItem item) throws IOException { client.write(new CompilingMessage(item), true); } public void sendCompileIssue(File file, CompileIssueMessage.Category category, int offset, int line, int column, String message) throws IOException { client.write(new CompileIssueMessage(file, category, offset, line, column, message), true); } public void sendCompiled(CompilationItem item, int compilationTime, boolean successfully, Set<IFile> dependencies, Set<String> displayKeyDependencies, long fingerprint) throws IOException { client.write(new CompiledMessage(item, compilationTime, successfully, dependencies, displayKeyDependencies, fingerprint), true); } public void sendCompilationDone() throws IOException { client.write(CompilationDoneMessage.INSTANCE, true); } }