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 1f2aac894a3733a7a885d0d77549142ab4a400aa..95e0408e6960a5dc48a54dfe2d00fd33d6c93579 100644 --- a/data-access/servlet/src/main/java/common/output/MCutResult.java +++ b/data-access/servlet/src/main/java/common/output/MCutResult.java @@ -30,6 +30,16 @@ class MCutResult cutFile.delete(); } } + + } + + void deleteResJson() + { + if(resJsonPathname != null) + { + File resJson = new File(resJsonPathname); + resJson.delete(); + } } public void deleteCutFiles() @@ -41,6 +51,7 @@ class MCutResult } public String fileName; + public String resJsonPathname; public long fileSize; Cut[] cutResArr; } diff --git a/data-access/servlet/src/main/java/mcutout/VlkbCli.java b/data-access/servlet/src/main/java/mcutout/VlkbCli.java index 060670ee8bfc8b461934a0bac2e66332fb9b9315..fc010cfb9df51470b152cae3c8b13da101ce15ea 100644 --- a/data-access/servlet/src/main/java/mcutout/VlkbCli.java +++ b/data-access/servlet/src/main/java/mcutout/VlkbCli.java @@ -313,6 +313,7 @@ class VlkbCli implements Vlkb MCutResult mCutResult = new MCutResult(); mCutResult.cutResArr = cutArr; mCutResult.fileName = tgzFileName; + mCutResult.resJsonPathname = respJsonPathname; mCutResult.fileSize = Files.size(output); return mCutResult; diff --git a/data-access/servlet/src/main/java/mcutout/webapi/UWSMCutoutWork.java b/data-access/servlet/src/main/java/mcutout/webapi/UWSMCutoutWork.java index 2d4ca488fd8c10f512fe1401cda02744012ddefb..a124b15c63ac75ae9918b11a61be9a33e0277b38 100644 --- a/data-access/servlet/src/main/java/mcutout/webapi/UWSMCutoutWork.java +++ b/data-access/servlet/src/main/java/mcutout/webapi/UWSMCutoutWork.java @@ -66,8 +66,6 @@ public class UWSMCutoutWork extends JobThread long startTime_msec = System.currentTimeMillis(); boolean showDuration = true; - /* UWS -> SODA (JDL in POST body is part of SODA REC) */ - UploadFile jsonFile = (UploadFile)job.getAdditionalParameterValue("mcutout"); InputStreamReader isr = new InputStreamReader(jsonFile.open()); @@ -80,86 +78,55 @@ public class UWSMCutoutWork extends JobThread } String reqJsonString = jsonStringBuffer.toString(); - /* SODA -> Implementation */ - MCutResult mresult = vlkb.doMCutout(reqJsonString); - /* Implement -> SODA */ + logger.logThread(LogLevel.INFO, this, "Prepare Result", + " job:requestUrl: " + job.getUrl().getRequestURL(), null); - final String contentType = "application/gzip";// FIXME force stream output + // publish Report - if(contentType.equals("text/xml") || contentType.equals("application/xml")) - { - logger.logThread(LogLevel.INFO, this, - "Prepare Result", "content type:" + contentType, null); + Result resultRes = new Result("Report", "none", null, false); + resultRes.setMimeType("application/json"); + OutputStream respResOutputStream = getResultOutput(resultRes); - Result result = createResult("Report"); - result.setMimeType("text/xml"); - OutputStream respOutputStream = getResultOutput(result); - final String RESPONSE_ENCODING = "utf-8"; + String absResPathname = mresult.resJsonPathname; + File downloadResFile = new File(absResPathname); + FileInputStream fileResInput = new FileInputStream(downloadResFile); - PrintWriter writer = new PrintWriter(new OutputStreamWriter(respOutputStream, RESPONSE_ENCODING)); + fileResInput.transferTo(respResOutputStream); + publishResult(resultRes); - String accessUrl = convertLocalPathnameToRemoteUrl(mresult.fileName, - settings.fitsPaths.cutouts(), - settings.fitsPaths.cutoutsUrl()); + downloadResFile.delete(); - XmlSerializer.serializeToLegacyCutResult(writer, RESPONSE_ENCODING, - mresult, accessUrl, - //id, pos, band, time, pol, pixels, countNullValues, - showDuration, startTime_msec); + // publish mcutout.tar.gz - writer.close(); + final String id = "mcutout.tar.gz"; + Result result = new Result(id, "none", null, false); + result.setMimeType("application/gzip"); + OutputStream respOutputStream = getResultOutput(result); - /* SODA -> UWS */ + String absCutPathname = mresult.fileName; + File downloadFile = new File(absCutPathname); + FileInputStream fileInput = new FileInputStream(downloadFile); - publishResult(result); - } - else if(contentType.equals("application/gzip") || contentType.equals("application/x-tar+gzip")) - { - logger.logThread(LogLevel.INFO, this, - "Prepare Result", "content type:" + contentType + " job:requestUrl: " + job.getUrl().getRequestURL(), null); + fileInput.transferTo(respOutputStream); + publishResult(result); - final String id = "mcutout.tar.gz"; - Result result = new Result(id, "none", null, false); - result.setMimeType("application/gzip"); - OutputStream respOutputStream = getResultOutput(result); + downloadFile.delete(); - String absCutPathname = mresult.fileName; - File downloadFile = new File(absCutPathname); - FileInputStream fileInput = new FileInputStream(downloadFile); + // delete cut-files (were published/copied to uws-file store) - fileInput.transferTo(respOutputStream); + mresult.deleteResJson(); + mresult.deleteCutFiles(); - downloadFile.delete(); - mresult.deleteCutFiles(); - publishResult(result); - } - else - { - throw new AssertionError("Unsupported contentType for output: " + contentType); - } - - /* FIXME here was uws-check is-job-Interrupted */ - } - catch(IOException ex) - { + /* FIXME here was uws-check is-job-Interrupted */ + } + catch(IOException ex) + { logger.error("MCutout error", ex); - throw new UWSException("Internal error: jsonFile.open() throws IOException:" + ex.getMessage()); - } - } - - private String convertLocalPathnameToRemoteUrl(String localPathname, - String FITScutpath, String FITSRemoteUrlCutouts) - { - //LOGGER.fine("trace " + localPathname); - String fileName = localPathname.replaceAll(FITScutpath + "/", ""); - //LOGGER.finer("local filename: " + fileName); - String remotefname = FITSRemoteUrlCutouts + "/" + fileName; - //LOGGER.finer("remote url : " + remotefname); - return remotefname; - } - + throw new UWSException("Internal error: jsonFile.open() throws IOException:" + ex.getMessage()); + } + } }