package org.kevoree.library.javase.webserver.latexEditor;
import com.google.gwt.user.server.rpc.RPC;
import org.kevoree.library.javase.webserver.latexEditor.server.latexEditorServiceImpl;
import org.kevoree.annotation.*;
import org.kevoree.framework.message.StdKevoreeMessage;
import org.kevoree.library.javase.fileSystem.LockFilesService;
import org.kevoree.library.javase.webserver.AbstractPage;
import org.kevoree.library.javase.webserver.FileServiceHelper;
import org.kevoree.library.javase.webserver.KevoreeHttpRequest;
import org.kevoree.library.javase.webserver.KevoreeHttpResponse;
import org.kevoree.library.javase.webserver.servlet.LocalServletRegistry;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.*;
/**
* Created by IntelliJ IDEA.
* User: duke
* Date: 17/10/11
* Time: 09:29
* To change this template use File | Settings | File Templates.
*/
@ComponentType
@MessageTypes({
@MessageType(name = "COMPILE",
elems = {@MsgElem(name = "id", className = UUID.class), @MsgElem(name = "file",
className = String.class)}),
@MessageType(name = "COMPILE_CALLBACK",
elems = {@MsgElem(name = "id", className = UUID.class), @MsgElem(name = "path",
className = String.class), @MsgElem(name = "log", className = String.class), @MsgElem(
name = "success", className = boolean.class)})
})
@Requires({
@RequiredPort(name = "files", type = PortType.SERVICE, className = LockFilesService.class),
@RequiredPort(name = "compile", type = PortType.MESSAGE, optional = true, messageType = "COMPILE")
})
@Provides({
@ProvidedPort(name = "compileCallback", type = PortType.MESSAGE, messageType = "COMPILE_CALLBACK")
})
public class LatexEditor extends AbstractPage {
private Logger logger = LoggerFactory.getLogger(this.getClass());
public List<String> waitingID = Collections.synchronizedList(new ArrayList<String>());
public Map<String, Boolean> compileResult = Collections.synchronizedMap(new HashMap<String, Boolean>());
public Map<String, Object> compileLog = Collections.synchronizedMap(new HashMap<String, Object>());
private LocalServletRegistry servletRepository = null;//new LocalServletRegistry();
@Override
public void startPage() {
//Bundle b = (Bundle) this.getDictionary().get("osgi.bundle");
servletRepository = new LocalServletRegistry(/*b*/){
@Override
public String getCDefaultPath(){
return "/latexEditor";
}
};
super.startPage();
RPC.setClassLoader(this.getClass().getClassLoader());
//RPC.setCurrentBundle(b); //GWT ACK
servletRepository.registerServlet("/latexEditor/latexEditorService",new latexEditorServiceImpl(this));
}
@Port(name = "compileCallback")
public void compileCallback(Object o) {
StdKevoreeMessage msg = (StdKevoreeMessage) o;
logger.debug("Compilation result for uuid = {} ",msg.getValue("id").toString());
Boolean compileresult = (Boolean) msg.getValue("success").get();
compileResult.put(msg.getValue("id").get().toString(), compileresult);
compileLog.put(msg.getValue("id").get().toString(), msg.getValue("log").get());
waitingID.remove(msg.getValue("id").get().toString());
}
@Override
public KevoreeHttpResponse process(KevoreeHttpRequest request, KevoreeHttpResponse response) {
if(servletRepository.tryURL(request.getUrl(),request,response)){
return response;
}
if (LatexService.checkService(this, request, response)) {
return response;
}
if (FileServiceHelper.checkStaticFile("latexEditor.html", this, request, response)) {
return response;
}
response.setContent("Bad request");
return response;
}
}