diff --git a/data-access/servlet/src/main/java/common/output/MCutResult.java b/data-access/servlet/src/main/java/common/output/MCutResult.java index b65a669a745ef90866b28b98db750a8375876c32..b5dbe1eaeaf167234ef965aec7ca057ce9906305 100644 --- a/data-access/servlet/src/main/java/common/output/MCutResult.java +++ b/data-access/servlet/src/main/java/common/output/MCutResult.java @@ -1,4 +1,5 @@ +import org.json.simple.JSONObject; class MCutResult { @@ -10,6 +11,15 @@ class MCutResult public int index; public ContentType contentType; public String content; + + JSONObject toJsonObject() + { + JSONObject jo = new JSONObject(); + //jo.put("input", inputs.toJsonObject()); + jo.put("type", contentType.toString()); + jo.put("content", content); + return jo; + } } diff --git a/data-access/servlet/src/main/java/cutout/DatasetsCli.java b/data-access/servlet/src/main/java/cutout/DatasetsCli.java index c6d4ee6ef2aa94936f1d2ca5696e30496ac571d9..a8fc5d9999c1943a8ba0d093021800c6058af9e5 100644 --- a/data-access/servlet/src/main/java/cutout/DatasetsCli.java +++ b/data-access/servlet/src/main/java/cutout/DatasetsCli.java @@ -32,6 +32,7 @@ import org.apache.commons.compress.compressors.gzip.GzipCompressorOutputStream; import java.io.BufferedOutputStream; import java.util.Date; import java.text.SimpleDateFormat; +import org.json.simple.JSONArray; import vo.parameter.*; @@ -89,7 +90,8 @@ class DatasetsCli implements Datasets CutArgs[] cutArgsArr = CutArgs.parseCutArgsArr(jdlJson); MCutResult.Cut[] cutResultArr = doCutouts( cutArgsArr ); - mCutResult = doCompressCutFiles( cutResultArr ); + String respJsonString = genResponseJson( cutResultArr ); + mCutResult = doCompressCutFiles( cutResultArr, respJsonString ); return mCutResult; } @@ -121,70 +123,63 @@ class DatasetsCli implements Datasets // FIXME implement similar for Merge: MCutResult = call-Montage-demosaic-sequence(cutResultArr) - private MCutResult doCompressCutFiles(MCutResult.Cut[] cutArr) - throws IOException, InterruptedException - { - String timestamp = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()); - - final String tgzFileName = settings.fitsPaths.cutouts() + "/mcutout_" + timestamp + ".tar.gz"; -/* - StringBuilder sb = new StringBuilder(); - for(MCutResult.Cut cut : cutArr) + private MCutResult doCompressCutFiles(MCutResult.Cut[] cutArr, String respJsonString) + throws IOException, InterruptedException { - LOGGER.info("cut-id"+ String.valueOf(cut.index) + " -> " + cut.content); - if(cut.contentType == MCutResult.Cut.ContentType.FILENAME) + Instant instant = Instant.now(); + String timestamp = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + "_" + instant.getNano(); + + final String tgzFileName = settings.fitsPaths.cutouts() + "/mcutout_" + timestamp + ".tar.gz"; + + // generate response-*.json with timestamp + String respJsonPathname = settings.fitsPaths.cutouts() + "/response_" + timestamp + ".json"; + try (PrintWriter out = new PrintWriter(respJsonPathname)) { - Path p = Paths.get(cut.content); - sb.append(" " + p.getFileName().toString()); + out.print(respJsonString); } - } - String[] cmd = new String[6]; - cmd[0] = "/bin/tar"; - cmd[1] = "cfz"; - cmd[2] = tgzFileName; - cmd[3] = "-C"; - cmd[4] = settings.fitsPaths.cutouts(); - cmd[5] = sb.toString(); + List<Path> paths = new ArrayList<Path>(); - LOGGER.info("CMD: " + String.join(" ",cmd)); + paths.add(Paths.get(respJsonPathname)); - ByteArrayOutputStream bos = new ByteArrayOutputStream(); - if(bos == null) - throw new AssertionError("byte output stream for bounds was not created, is null"); + for(MCutResult.Cut cut : cutArr) + { + LOGGER.info("cut-id"+ String.valueOf(cut.index) + " -> " + cut.content); + if(cut.contentType == MCutResult.Cut.ContentType.FILENAME) + { + Path p = Paths.get(cut.content); + paths.add(p); + } + } - ExecCmd exec = new ExecCmd(); - exec.doRun(bos, cmd); - LOGGER.info("exec tar.gz exitValue: " + exec.exitValue); + Path output = Paths.get(tgzFileName); + createTarGzipFiles(paths, output); - boolean has_result = (exec.exitValue == 0); -*/ - List<Path> paths = new ArrayList<Path>(); + MCutResult mCutResult = new MCutResult(); + mCutResult.cutResArr = cutArr; + mCutResult.fileName = tgzFileName; + mCutResult.fileSize = Files.size(output); - for(MCutResult.Cut cut : cutArr) - { - LOGGER.info("cut-id"+ String.valueOf(cut.index) + " -> " + cut.content); - if(cut.contentType == MCutResult.Cut.ContentType.FILENAME) - { - Path p = Paths.get(cut.content); - paths.add(p); - } + return mCutResult; } - Path output = Paths.get(tgzFileName); - createTarGzipFiles(paths, output); - MCutResult mCutResult = new MCutResult(); - mCutResult.cutResArr = cutArr; - mCutResult.fileName = tgzFileName; - mCutResult.fileSize = Files.size(output); + private String genResponseJson(MCutResult.Cut[] cutArr) + { + List<Path> paths = new ArrayList<Path>(); - // FIXME add response.json to tar.gz, add nanosecs to timestamp + JSONArray jArr = new JSONArray(); - return mCutResult; + for(MCutResult.Cut cut : cutArr) + { + jArr.add(cut.toJsonObject()); + } + + return jArr.toString(); } + private MCutResult.Cut doFileByIdWithErr(String id, Pos pos, Band band, Time time, Pol pol, String pixels, boolean countNullValues, Subsurvey[] subsurveys) { @@ -227,7 +222,7 @@ class DatasetsCli implements Datasets - /* +/* <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-compress</artifactId> @@ -237,11 +232,8 @@ class DatasetsCli implements Datasets import org.apache.commons.compress.archivers.tar.TarArchiveEntry; import org.apache.commons.compress.archivers.tar.TarArchiveOutputStream; import org.apache.commons.compress.compressors.gzip.GzipCompressorOutputStream; - - - */ - public static void createTarGzipFiles(List<Path> paths, Path output) + private static void createTarGzipFiles(List<Path> paths, Path output) throws IOException { try (OutputStream fOut = Files.newOutputStream(output); @@ -270,7 +262,6 @@ class DatasetsCli implements Datasets tOut.finish(); } - } }