<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page trimDirectiveWhitespaces="true" %> <%@ page import="java.io.IOException" %> <%@ page import="java.io.InputStream" %> <%@ page import="java.io.BufferedReader" %> <%@ page import="java.io.StringReader" %> <%@ page import="java.io.File" %> <%@ page import="java.io.FileOutputStream" %> <%@ page import="java.nio.charset.Charset" %> <%@ page import="java.io.InputStreamReader" %> <%@ page import="java.util.Date" %> <%@ page import="java.util.Map" %> <%@ page import="java.util.HashMap" %> <%@ page import="org.apache.log4j.Logger" %> <%@ page import="javax.json.Json" %> <%@ page import="javax.json.JsonReader" %> <%@ page import="javax.json.JsonObject" %> <%@ page import="javax.json.JsonValue" %> <%@ page import="javax.json.JsonArray" %> <%@ page import="javax.servlet.http.Cookie" %> <%! public static void dumpCallInfo(HttpServletRequest request, Logger logger) { logger.info("CallInfo..."); logger.info("request.getContentType: " + request.getContentType()); logger.info("Headers: "); for (Object o: java.util.Collections.list(request.getHeaderNames())) { logger.info(o + "=" + request.getHeader(o.toString())); } logger.info("Attributes: "); for (Object o: java.util.Collections.list(request.getAttributeNames())) { logger.info(o + "=" + request.getAttribute(o.toString())); } logger.info("Parameters: "); for (Object o: java.util.Collections.list(request.getParameterNames())) { for (String v: request.getParameterValues(o.toString())) { logger.info(o + "=" + v); } } } %> <% Logger logger = Logger.getLogger("collation_editor/vmrcre_collation"); String requestURI = request.getRequestURI(); // strip the webapp name off the URI requestURI = requestURI.substring(requestURI.indexOf("/", 2)); File collate_cli = new File(getServletContext().getRealPath(requestURI)); collate_cli = new File(collate_cli.getParent(), "collate_cli.py"); File to_collate_log = new File(getServletContext().getRealPath(requestURI)); to_collate_log = new File(collate_cli.getParent(), "to_collate.log"); File from_collate_log = new File(getServletContext().getRealPath(requestURI)); from_collate_log = new File(collate_cli.getParent(), "from_collate.log"); boolean reEncode = false; //dumpCallInfo(request, logger); String options = request.getParameter("options"); String action = request.getParameter("action"); if (options != null) { response.setContentType("application/json"); // collation if ("collation".equals(action)) { } // apparatus export else { response.setContentType("text/plain"); response.setHeader("Content-Disposition", "attachment; filename=\"negative-apparatus.xml\""); response.setHeader("Set-Cookie", "fileDownload=true; path=/"); reEncode = true; } String args[] = new String[] { "python3.8", // "-m", // "cProfile", // "-o", // "/home/ntvmr/tmp/" + collate_cli.getName() + ".profile", collate_cli.getAbsolutePath(), "--action=" + action, }; StringBuffer resultBuf = new StringBuffer(); StringBuffer errorBuf = new StringBuffer(); logger.info("About to call Cat's stuff."); //logger.info("********************************************************* Action: " + action); //logger.info("********************************************************* Input: " + options); /* FileOutputStream fos = new FileOutputStream(to_collate_log, true); fos.write(("\n=== START === " + new Date() + " ===\n").getBytes()); fos.write(options.getBytes()); fos.write(("\n=== END === " + new Date() + " ===\n").getBytes()); fos.close(); */ /* // docID, language Map documentLanguages = new HashMap(); try { StringReader optionsString = new StringReader(options); JsonReader reader = Json.createReader(optionsString); JsonObject optionsJson = reader.readObject(); JsonObject data = optionsJson.getJsonObject("data"); JsonObject dataSettings = data.getJsonObject("data_settings"); String baseTextID = dataSettings.getString("base_text"); JsonObject unitData = data.getJsonObject("unit_data"); JsonArray documents = unitData.getJsonArray("data"); for (JsonValue v : documents) { JsonObject document = (JsonObject)v; documentLanguages.put(document.getString("_id"), document.getString("language")); } // this should be where our project language lives, but... String projectLanguage = dataSettings.getString("language"); // let's reset our project language based on our baseText language projectLanguage = documentLanguages.get(baseTextID); System.out.println("Witness Languages: " + documentLanguages); System.out.println("Project Language: " + projectLanguage); } catch(Exception e) {e.printStackTrace();} */ runCommand(args, resultBuf, errorBuf, options, logger); logger.info("Finished calling Cat's stuff."); if (reEncode) resultBuf = new StringBuffer(new String(resultBuf.toString().getBytes("iso8859-1"), "UTF-8")); /* fos = new FileOutputStream(from_collate_log, true); fos.write(("\n=== START === " + new Date() + " ===\n").getBytes()); fos.write(resultBuf.toString().getBytes()); fos.write(("\n=== END === " + new Date() + " ===\n").getBytes()); fos.close(); */ //logger.info("********************************************************* Result: " + resultBuf + "***** END RESULT *****"); // if (errorBuf.length() > 0) logger.error("*********************************************** Collation Error: " + errorBuf); %> <%= resultBuf %> <% return; } %>

vmrcre_collation

collation from the collation_editor to collatex

Parameters

optionsdata from collation_editor
<%! public static Thread startSlurpStreamThreaded(final InputStream is, final StringBuffer outBuf) { Thread t = new Thread() { InputStream myIS = is; StringBuffer myOutBuf = outBuf; public void run() { try { InputStreamReader isr = new InputStreamReader(myIS); BufferedReader br = new BufferedReader(isr); String line=null; while ( (line = br.readLine()) != null) myOutBuf.append(line + "\n"); } catch (IOException ioe) { ioe.printStackTrace(); } } }; t.start(); return t; } public static int runCommand(String command[], StringBuffer result, StringBuffer error, String toStdin, Logger logger) { int retVal = -1; try { File cwd = new File("."); String cmd = ""; for (String s: command) { cmd += " [" + s + "]"; } logger.debug("executing from cwd ("+cwd.getAbsolutePath()+"):" + cmd); java.lang.Process p = Runtime.getRuntime().exec(command, new String[0], cwd); p.getOutputStream().write(toStdin.getBytes(Charset.forName("UTF-8"))); Thread o = startSlurpStreamThreaded(p.getInputStream(), result); Thread e = startSlurpStreamThreaded(p.getErrorStream(), error); p.getOutputStream().close(); retVal = p.waitFor(); o.join(); e.join(); logger.debug("returned from executing executing...."); if (error.length() > 0) { logger.warn("ERROR!!!!!!!!!!!!!!!!!!!!!!: " + error.toString()); } } catch (Exception e) { logger.error("ERROR!!!!!!!!!!!!!!!!!!!!!!!!!!!: " + e + "; retVal: " + retVal + "; stdout: " + result); e.printStackTrace(); } logger.debug("returned: " + retVal + "; stdout: " + result); return retVal; } %>