package org.kevoree.library.javase.webserver.latexEditor.server;
/**
* Created by IntelliJ IDEA.
* User: duke
* Date: 08/12/11
* Time: 10:49
* To change this template use File | Settings | File Templates.
*/
import com.google.gwt.user.server.rpc.RemoteServiceServlet;
import org.kevoree.framework.MessagePort;
import org.kevoree.framework.message.StdKevoreeMessage;
import org.kevoree.library.javase.fileSystem.LockFilesService;
import org.kevoree.library.javase.webserver.latexEditor.LatexEditor;
import org.kevoree.library.javase.webserver.latexEditor.client.latexEditorService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.HashSet;
import java.util.Set;
import java.util.UUID;
public class latexEditorServiceImpl extends RemoteServiceServlet implements latexEditorService {
private Logger logger = LoggerFactory.getLogger(this.getClass().getName());
private LatexEditor editor = null;
LockFilesService portService = null;
Set<String> extensions = new HashSet<String>();
public latexEditorServiceImpl() {
//EMPTY CONSTRUCTOR FOR DEBUG ONLY IN IDE
//INSERT FAKE COMPONENT
portService = new LockFilesService(){
@Override
public Set<String> getFilesPath() {
Set<String> files = new HashSet<String>();
for(int i =0 ;i< 20; i ++){
files.add("/fakeFile"+i+".tex");
}
return files;
}
@Override
public Set<String> getFilteredFilesPath(Set<String> extensions) {
Set<String> files = new HashSet<String>();
for(int i =0 ;i< 20; i ++){
files.add("/fakeFile"+i+".tex");
}
return files;
}
@Override
public byte[] getFileContent(String relativePath, Boolean lock) {
return "fake content \n %comment \n".getBytes();
}
@Override
public String getAbsolutePath(String relativePath) {
return null; //To change body of implemented methods use File | Settings | File Templates.
}
@Override
public boolean saveFile(String relativePath, byte[] data, Boolean unlock) {
System.out.println("FAKE SAVE "+ relativePath);
return false; //To change body of implemented methods use File | Settings | File Templates.
}
@Override
public void unlock(String relativePath) {
//To change body of implemented methods use File | Settings | File Templates.
}
@Override
public boolean mkdirs(String s) {
return false; //To change body of implemented methods use File | Settings | File Templates.
}
@Override
public boolean delete(String s) {
return false; //To change body of implemented methods use File | Settings | File Templates.
}
};
}
public latexEditorServiceImpl(LatexEditor _editor) {
editor = _editor;
portService= editor.getPortByName("files", LockFilesService.class);
extensions.add("tex");
extensions.add("cls");
extensions.add("txt");
extensions.add("sty");
extensions.add("bst");
extensions.add("bib");
logger.debug("Latex Editor Service Init "+portService);
}
@Override
public boolean saveFile(String fileName, String content) {
boolean saveResult = portService.saveFile(fileName, content.getBytes(), true);
if (!saveResult) {
logger.debug("Error while saving file = {}", fileName);
}
return saveResult;
}
@Override
public Set<String> getFlatFiles() {
try {
return portService.getFilteredFilesPath(extensions);
} catch(Exception e) {
logger.debug("",e);
return null;
}
}
@Override
public String getFileContent(String fileName, Boolean lock) {
byte[] content = portService.getFileContent(fileName, lock);
/*
if (content.length > 0) {
response.setRawContent(content);
if (request.getResolvedParams().get("file").endsWith(".pdf")) {
response.setContentType("application/pdf");
}
if (request.getResolvedParams().get("file").endsWith(".log")) {
response.setContentType("text/plain");
}
return true;
} else {
logger.debug("No file exist = {}", request.getResolvedParams().get("file"));
}*/
return new String(content);
}
@Override
public String compile(String fileName) throws Exception {
if (editor.isPortBinded("compile")) {
String absolutePath = portService.getAbsolutePath(fileName);
StdKevoreeMessage message = new StdKevoreeMessage();
message.putValue("file", absolutePath);
//CREATE TEMP UUID
UUID compileID = UUID.randomUUID();
message.putValue("id", compileID);
editor.waitingID.add(compileID.toString());
editor.getPortByName("compile", MessagePort.class).process(message);
return compileID.toString();
}
throw new Exception("No Compiler Ready");
}
@Override
public String[] compileresult(String uuid) {
if (editor.waitingID.contains(uuid)) {
return new String[] {"waiting", ""};
} else {
/*if (editor.compileResult.get(uuid) != null) {*/
String[] result = {editor.compileResult.get(uuid).toString(), editor.compileLog.get(uuid).toString()};
editor.compileResult.remove(uuid);
editor.compileLog.remove(uuid);
return result;
/*}
return new String[]{"", ""};*/
}
}
@Override
public void log(String msg) {
logger.debug(msg);
}
@Override
public void log(String message, Throwable t) {
logger.debug(message, t);
}
}