diff --git a/data-access/servlet/Makefile b/data-access/servlet/Makefile index 9bf61a92e47411e9ebf168e9c9c7cb0861c0a31f..a803aa9632e07ac35ce1c0b4003338fa261bc3f3 100644 --- a/data-access/servlet/Makefile +++ b/data-access/servlet/Makefile @@ -17,6 +17,8 @@ AUTHFILTERS = $(wildcard $(AUTH_DIR)/src/main/java/*Filter.java) $(AUTH_DIR)/sr FILTERS = $(wildcard src/main/java/webapi/*Filter.java) FILTERS += $(wildcard src/main/java/authz/*Filter.java) SERVLETS = $(wildcard src/main/java/webapi/Servlet*.java) +UWS = $(wildcard src/main/java/webapi/UWSMCutout.java) +UWS += $(wildcard src/main/java/webapi/UWSMerge.java) #SERVLETS = $(wildcard src/main/java/webapi/*Servlet.java) #=============================================================================== JFLAGS = -g @@ -26,7 +28,7 @@ CLASSPATH = $(LIB_DIR)/* .PHONY: build build: echo "class Version { static String asString = \"$(VERSION)\";}" > src/main/java/Version.java - javac $(JFLAGS) -cp :$(CLASSPATH) -sourcepath $(SRC_DIR) -d $(CLASS_DIR) $(SERVLETS) $(FILTERS) $(AUTHFILTERS) $(VOSI) + javac $(JFLAGS) -cp :$(CLASSPATH) -sourcepath $(SRC_DIR) -d $(CLASS_DIR) $(SERVLETS) $(FILTERS) $(AUTHFILTERS) $(VOSI) $(UWS) .PHONY: clean clean : diff --git a/data-access/servlet/src/main/java/cutout/DatasetsImpl.java b/data-access/servlet/src/main/java/cutout/DatasetsImpl.java index c00c675362c3356a7d1b98fd232963eb9f7873ef..45de1df526f38e7a88ba4357f2123825e08f3d21 100644 --- a/data-access/servlet/src/main/java/cutout/DatasetsImpl.java +++ b/data-access/servlet/src/main/java/cutout/DatasetsImpl.java @@ -154,10 +154,11 @@ class DatasetsImpl implements Datasets String publisherDid, Coord coord, boolean countNullValues) { - ResolverByObsCore rsl = new ResolverByObsCore(settings.dbConn, subsurveys); + // ResolverByObsCore rsl = new ResolverByObsCore(settings.dbConn, subsurveys); + Resolver rsl = new ResolverFromId();//settings.dbConn, subsurveys); rsl.resolve(publisherDid); - FitsCard[] extraCards = Subsurvey.subsurveysFindCards(subsurveys, rsl.obsCollection());//rsl.subsurveyId); + FitsCard[] extraCards = null;//Subsurvey.subsurveysFindCards(subsurveys, rsl.obsCollection());//rsl.subsurveyId); String absSubimgPathname = settings.fitsPaths.cutouts() + "/" + generateSubimgPathname(rsl.relPathname(), rsl.hdunum()); LOGGER.info("absSubimgPathname: " + absSubimgPathname); diff --git a/data-access/servlet/src/main/java/cutout/json/JdlMCutout.java b/data-access/servlet/src/main/java/cutout/json/JdlMCutout.java index 5791ca4ab181a3129b116d63399a1c721bf700ea..432910febe1e8f796ed4e8abb9d7470ddc33405c 100644 --- a/data-access/servlet/src/main/java/cutout/json/JdlMCutout.java +++ b/data-access/servlet/src/main/java/cutout/json/JdlMCutout.java @@ -32,10 +32,11 @@ public class JdlMCutout FitsCard[] extraCards = null; - ResolverByObsCore rsl = new ResolverByObsCore(settings.dbConn, subsurveys); + Resolver rsl = new ResolverFromId();//settings.dbConn, subsurveys); + //ResolverByObsCore rsl = new ResolverByObsCore(settings.dbConn, subsurveys); rsl.resolve(publisherDid); - extraCards = Subsurvey.subsurveysFindCards(subsurveys, rsl.obsCollection());//subsurveyId); + extraCards = null;// Subsurvey.subsurveysFindCards(subsurveys, rsl.obsCollection());//subsurveyId); /* add resolved info to json */ diff --git a/data-access/servlet/src/main/java/webapi/ServletMCutout.java b/data-access/servlet/src/main/java/webapi/ServletMCutout.java index db6133e8176f502e87f0db2245b2f5e905d3f13c..3afae6d0067fb9ccda3b8d7114b45cffbed26696 100644 --- a/data-access/servlet/src/main/java/webapi/ServletMCutout.java +++ b/data-access/servlet/src/main/java/webapi/ServletMCutout.java @@ -96,8 +96,8 @@ public class ServletMCutout extends javax.servlet.http.HttpServlet OutputStream respOutputStream = response.getOutputStream(); - MCutResult mCutRes = datasets.doMCutout(reqJsonString); - DataLink dlk = new DataLink(mCutRes); + MCutResult result = datasets.doMCutout(reqJsonString); + // DataLink dlk = new DataLink(mCutRes); final String contentType = "text/xml"; // FIXME final String respEncoding = "utf-8"; // FIXME @@ -105,7 +105,19 @@ public class ServletMCutout extends javax.servlet.http.HttpServlet { //LOGGER.info("writing xml"); PrintWriter writer = new PrintWriter(new OutputStreamWriter(respOutputStream, respEncoding)); - XmlSerializer.serializeToLegacyCutResults(writer, respEncoding, dlk, showDuration, startTime_msec); + // XmlSerializer.serializeToLegacyCutResults(writer, respEncoding, dlk, showDuration, startTime_msec); + + + String accessUrl = convertLocalPathnameToRemoteUrl(result.fileName, + settings.fitsPaths.cutouts(), + settings.fitsPaths.cutoutsUrl()); + + XmlSerializer.serializeToLegacyCutResult(writer, respEncoding, + result, accessUrl, + //id, pos, band, time, pol, pixels, countNullValues, + showDuration, startTime_msec); + + writer.close(); } else if(contentType.equals("application/tar.gz")) // FIXME mime for tgz ? @@ -133,5 +145,17 @@ public class ServletMCutout extends javax.servlet.http.HttpServlet } } + private String convertLocalPathnameToRemoteUrl(String localPathname, + String FITScutpath, String FITSRemoteUrlCutouts) + { + LOGGER.info("trace " + localPathname); + String fileName = localPathname.replaceAll(FITScutpath + "/", ""); + LOGGER.info("local filename: " + fileName); + String remotefname = FITSRemoteUrlCutouts + "/" + fileName; + LOGGER.info("remote url : " + remotefname); + return remotefname; + } + + } diff --git a/data-access/servlet/src/main/java/webapi/UWSMCutoutWork.java b/data-access/servlet/src/main/java/webapi/UWSMCutoutWork.java index 393b81f5e8aae78b0f0ebb5af2a4af8206202e68..14d64c257802ff79bcd90fddd3e2565348a8acfc 100644 --- a/data-access/servlet/src/main/java/webapi/UWSMCutoutWork.java +++ b/data-access/servlet/src/main/java/webapi/UWSMCutoutWork.java @@ -35,7 +35,7 @@ import org.json.simple.parser.ParseException; public class UWSMCutoutWork extends JobThread { - final String RESP_ENCODING = "utf-8"; + final String RESPONSE_ENCODING = "utf-8"; private Settings settings = UWSMCutout.settings; @@ -83,13 +83,24 @@ public class UWSMCutoutWork extends JobThread /* SODA -> Implementation */ - MCutResult mCutResults = datasets.doMCutout(reqJsonString); - DataLink dlk = new DataLink(mCutResults); + MCutResult mresult = datasets.doMCutout(reqJsonString); + //DataLink dlk = new DataLink(mCutResults); /* Implement -> SODA */ - PrintWriter writer = new PrintWriter(new OutputStreamWriter(respOutputStream, RESP_ENCODING)); - XmlSerializer.serializeToLegacyCutResults(writer, RESP_ENCODING, dlk, showDuration, startTime_msec); + PrintWriter writer = new PrintWriter(new OutputStreamWriter(respOutputStream, RESPONSE_ENCODING)); + + //XmlSerializer.serializeToLegacyCutResults(writer, RESPONSE_ENCODING, dlk, showDuration, startTime_msec); + + String accessUrl = convertLocalPathnameToRemoteUrl(mresult.fileName, + settings.fitsPaths.cutouts(), + settings.fitsPaths.cutoutsUrl()); + + XmlSerializer.serializeToLegacyCutResult(writer, RESPONSE_ENCODING, + mresult, accessUrl, + //id, pos, band, time, pol, pixels, countNullValues, + showDuration, startTime_msec); + writer.close(); /* SODA -> UWS */ @@ -109,4 +120,16 @@ public class UWSMCutoutWork extends JobThread } } + private String convertLocalPathnameToRemoteUrl(String localPathname, + String FITScutpath, String FITSRemoteUrlCutouts) + { + //LOGGER.info("trace " + localPathname); + String fileName = localPathname.replaceAll(FITScutpath + "/", ""); + //LOGGER.info("local filename: " + fileName); + String remotefname = FITSRemoteUrlCutouts + "/" + fileName; + //LOGGER.info("remote url : " + remotefname); + return remotefname; + } + + } diff --git a/data-access/servlet/src/main/java/webapi/UWSMergeWork.java b/data-access/servlet/src/main/java/webapi/UWSMergeWork.java index a6e75ce1216d9402f1b79c49b25746f2e2838f6c..32d1e41c0607583868499efa062043fda2aabc19 100644 --- a/data-access/servlet/src/main/java/webapi/UWSMergeWork.java +++ b/data-access/servlet/src/main/java/webapi/UWSMergeWork.java @@ -23,6 +23,8 @@ import java.util.Set; import java.util.List; import java.util.ArrayList; +import vo.parameter.*; + public class UWSMergeWork extends JobThread { private Settings settings = UWSMerge.settings; @@ -31,7 +33,7 @@ public class UWSMergeWork extends JobThread final String DEFAULT_RESPONSEFORMAT = settings.defaults.responseFormat; final String DEFAULT_SKY_SYSTEM = settings.defaults.skySystem; final String DEFAULT_SPEC_SYSTEM = settings.defaults.specSystem; - + final String DEFAULT_TIME_SYSTEM = "MJD_UTC"; Datasets datasets = new DatasetsImpl(settings); @@ -56,32 +58,31 @@ public class UWSMergeWork extends JobThread long startTime_msec = System.currentTimeMillis(); boolean showDuration = true; - Map<SodaParam, String[]> params = collectSodaParams(job); - SodaParser parser = new SodaParser(params); - - String id = null; - Pos pos = null; - Band band = null; - Time time = null; - Pol pol = null; - String pixels = null; - - if(parser.sodaReq_hasSodaId()) - { - id = parser.sodaReq_getId(); - pos = parser.sodaReq_getPosCirclePolygon(); - band = parser.sodaReq_getBand(); - time = parser.sodaReq_getTime(); - pol = parser.sodaReq_getPol(); - } - else - { - id = parser.vlkbReq_getPubdid(); - pos = parser.vlkbReq_getCircleRect(); - band = parser.vlkbReq_getVelocity(); - } - - Coord coord = new Coord(pos, band, time, pol); + Map<String, String[]> params = collectSodaParams(job); + + String id = SingleStringParam.parseSingleStringParam(params, "ID"); + Pos pos = Pos.parsePos(params, DEFAULT_SKY_SYSTEM); + Band band = Band.parseBand(params, DEFAULT_SPEC_SYSTEM); + Time time = Time.parseTime(params, DEFAULT_TIME_SYSTEM); + Pol pol = Pol.parsePol(params); + String pixels = SingleStringParam.parseSingleStringParam(params, "PIXELS"); + + /* if(parser.sodaReq_hasSodaId()) + { + id = parser.sodaReq_getId(); + pos = parser.sodaReq_getPosCirclePolygon(); + band = parser.sodaReq_getBand(); + time = parser.sodaReq_getTime(); + pol = parser.sodaReq_getPol(); + } + else + { + id = parser.vlkbReq_getPubdid(); + pos = parser.vlkbReq_getCircleRect(); + band = parser.vlkbReq_getVelocity(); + } + */ + Coord coord = new Coord(pos, band, time, pol, pixels); CutResult cutResult = datasets.doMerge(parseLegacyPubdidArr(id), coord, false);//countNullValues); @@ -146,11 +147,11 @@ public class UWSMergeWork extends JobThread private String convertLocalPathnameToRemoteUrl(String localPathname, String FITScutpath, String FITSRemoteUrlCutouts) { - LOGGER.info("trace " + localPathname); + //LOGGER.info("trace " + localPathname); String fileName = localPathname.replaceAll(FITScutpath + "/", ""); - LOGGER.info("local filename: " + fileName); + //LOGGER.info("local filename: " + fileName); String remotefname = FITSRemoteUrlCutouts + "/" + fileName; - LOGGER.info("remote url : " + remotefname); + //LOGGER.info("remote url : " + remotefname); return remotefname; } @@ -170,12 +171,13 @@ public class UWSMergeWork extends JobThread return pubdidList.toArray(pubdidArr); } - private Map<SodaParam, String[]> collectSodaParams(UWSJob job) + private Map<String, String[]> collectSodaParams(UWSJob job) { - Map<SodaParam, String[]> params = new HashMap<SodaParam, String[]>(); - for(SodaParam paramToken : SodaParam.values()) + Map<String, String[]> params = new HashMap<String, String[]>(); + String[] paraTokens = {"POS", "BAND", "TIME", "POL", "PIXELS"}; + for(String paramToken : paraTokens) { - String[] paramValue = (String[])job.getAdditionalParameterValue(paramToken.toString()); + String[] paramValue = (String[])job.getAdditionalParameterValue(paramToken); params.put(paramToken, paramValue); } return params; diff --git a/data-access/servlet/src/main/java/webapi/output/XmlSerializer.java b/data-access/servlet/src/main/java/webapi/output/XmlSerializer.java index f76d3081261554576fa53fc8cc03145979bdefcc..56447ae0f51e80b09830a075d9a77dfefd24468d 100644 --- a/data-access/servlet/src/main/java/webapi/output/XmlSerializer.java +++ b/data-access/servlet/src/main/java/webapi/output/XmlSerializer.java @@ -11,7 +11,7 @@ public final class XmlSerializer private XmlSerializer() {} // disables instatiation - public static void serializeToLegacyCutResults(PrintWriter writer, String charEncoding, DataLink dataLink, +/* public static void serializeToLegacyCutResults(PrintWriter writer, String charEncoding, DataLink dataLink, boolean showDuration, long startTime_msec) { LOGGER.info("trace"); @@ -40,7 +40,7 @@ public final class XmlSerializer writer.println("</results>"); } - +*/ public static void serializeToLegacyCutResult(PrintWriter writer, String charEncoding, CutResult cutResult, String accessUrl, @@ -82,6 +82,60 @@ public final class XmlSerializer } + public static void serializeToLegacyCutResult(PrintWriter writer, String charEncoding, + MCutResult result, String accessUrl, + //String id, Pos pos, Band band, Time time, Pol pol, String pixels, boolean countNullValues, + boolean showDuration, long startTime_msec) + { + LOGGER.info("trace serialize for accessUrl: " + ((accessUrl==null)? "null":accessUrl)); + + writer.println("<?xml version=\"1.0\" encoding=\"" + charEncoding + "\" standalone=\"yes\"?>"); + writer.println("<results>"); + writer.println("<description> SODA mcutout </description>"); + + //Coord coord = new Coord(pos, band, time, pol, pixels);// pixels-input + //Inputs inputs = new Inputs(id, null, false);//countNullValues); + //serialize(writer, inputs); + + // pixels-output +// if(cutResult.pixels != null) +// writer.println("<CUT> " + result.pixels + " </CUT>"); + + if(accessUrl != null) + { + writer.println("<URL> " + accessUrl + " </URL>"); + writer.println("<cutoutSize> " + result.fileSize + " </cutoutSize>"); + } + + + if(result.cutResArr != null) + { + writer.println("<URL_CONTENT> "); + for(MCutResult.Cut cut : result.cutResArr) + { + writer.println("<ITEM>"); + writer.println("<INDEX> " + cut.index + " </INDEX>"); + writer.println("<CONTENT_CODE> " + cut.contentType.toString() + " </CONTENT_CODE>"); + writer.println("<CONTENT> " + cut.content + " </CONTENT>"); + writer.println("</ITEM>"); + } + writer.println("</URL_CONTENT>"); + } + + // if(cutResult.nullValueCount != null) + // writer.println(serialize(cutResult.nullValueCount )); + + writer.println("<msg> " + Version.asString + " </msg>"); + + // writer.println("<DatacubeCount> " + result.cuts.length + " </DatacubeCount>"); + + if(showDuration) + writer.println("<duration unit=\"msec\">"+(System.currentTimeMillis() - startTime_msec)+"</duration>"); + + writer.println("</results>"); + } + + public static String serialize(NullValueCount nullVals)