Commit bdf5b164 authored by Robert Butora's avatar Robert Butora
Browse files

simplifies param parsing in output-filter (vlkb nneeds only Pos Band in output-formatting-filter)

parent 7fe049fd
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -69,7 +69,7 @@ class Dataset
      this.access = new Access();
      this.access = new Access();
      this.access.accessFileUrl   = null;
      this.access.accessFileUrl   = null;
      this.access.accessCutoutUrl = null;
      this.access.accessCutoutUrl = null;
      this.access.accessMosaicUrl = mergeUrlRoot + "?" + mergeQueryString + publisherDid;
      this.access.accessMosaicUrl = mergeUrlRoot + "?" + mergeQueryString + "&ID=" + publisherDid;


      //this.vertices_deg = mergeVertices(datasetList, /*inputs.*/coord);
      //this.vertices_deg = mergeVertices(datasetList, /*inputs.*/coord);
   }
   }
+26 −18
Original line number Original line Diff line number Diff line
@@ -12,6 +12,7 @@ import java.io.BufferedWriter;
import java.util.List;
import java.util.List;
import java.util.ArrayList;
import java.util.ArrayList;


import vo.parameter.*;


final class XmlSerializer
final class XmlSerializer
{
{
@@ -255,7 +256,7 @@ final class XmlSerializer


   public static void serializeToLegacyResults(
   public static void serializeToLegacyResults(
         PrintWriter writer, String charEncoding,
         PrintWriter writer, String charEncoding,
         AuthPolicy inputAuth, Coord inputCoord, SubsurveyId inputSubsurveyId,
         AuthPolicy inputAuth, Pos pos, Band band, SubsurveyId inputSubsurveyId,
         SearchOutputData searchOutputData,
         SearchOutputData searchOutputData,
         boolean showDuration, long startTime_msec)
         boolean showDuration, long startTime_msec)
   {
   {
@@ -265,7 +266,8 @@ final class XmlSerializer


      writer.println("<inputs>");
      writer.println("<inputs>");
      if(inputSubsurveyId != null) writer.println(serialize(inputSubsurveyId));
      if(inputSubsurveyId != null) writer.println(serialize(inputSubsurveyId));
      if(inputCoord       != null) writer.println(serialize(inputCoord));
      if(pos       != null) writer.println(serialize(pos));
      if(band       != null) writer.println(serialize(band));
      if(inputAuth        != null) writer.println(serialize(inputAuth));
      if(inputAuth        != null) writer.println(serialize(inputAuth));
      writer.println("</inputs>");
      writer.println("</inputs>");


@@ -280,34 +282,40 @@ final class XmlSerializer
      writer.println("</results>");
      writer.println("</results>");
   }
   }


   private static String serialize(Coord coord)
   private static String serialize(Pos pos)
   {
   {
      StringBuilder xml = new StringBuilder();
      StringBuilder xml = new StringBuilder();
      if(coord.pos != null)
      if(pos != null)
      {
      {
         xml.append("<SkySystem>"+coord.pos.system+"</SkySystem>");
         xml.append("<SkySystem>"+pos.system+"</SkySystem>");
         switch(coord.pos.shape)
         switch(pos.shape)
         {
         {
            case CIRCLE:
            case CIRCLE:
               xml.append("<l>" + String.valueOf(coord.pos.circle.lon) + "</l>");
               xml.append("<l>" + String.valueOf(pos.circle.lon) + "</l>");
               xml.append("<b>" + String.valueOf(coord.pos.circle.lat) + "</b>");
               xml.append("<b>" + String.valueOf(pos.circle.lat) + "</b>");
               xml.append("<r>" + String.valueOf(coord.pos.circle.radius)+"</r>"); break;
               xml.append("<r>" + String.valueOf(pos.circle.radius)+"</r>");
               break;
            case RANGE:
            case RANGE:
               xml.append("<l>" + String.valueOf((coord.pos.range.lon1 + coord.pos.range.lon2)/2.0) + "</l>");
               xml.append("<l>" + String.valueOf((pos.range.lon1 + pos.range.lon2)/2.0) + "</l>");
               xml.append("<b>" + String.valueOf((coord.pos.range.lat1 + coord.pos.range.lat2)/2.0) + "</b>");
               xml.append("<b>" + String.valueOf((pos.range.lat1 + pos.range.lat2)/2.0) + "</b>");
               xml.append("<dl>" + String.valueOf(coord.pos.range.lon2 - coord.pos.range.lon1) + "</dl>");
               xml.append("<dl>" + String.valueOf(pos.range.lon2 - pos.range.lon1) + "</dl>");
               xml.append("<db>" + String.valueOf(coord.pos.range.lat2 - coord.pos.range.lat1) + "</db>");
               xml.append("<db>" + String.valueOf(pos.range.lat2 - pos.range.lat1) + "</db>");
               break;
               break;
            default: // POLYGON was not used in VLKB-legacy -> let it fail with error
            default: // POLYGON was not used in VLKB-legacy -> let it fail with error
               xml.append("<shape> unknown shape: " + coord.pos.shape + " </shape>");
               xml.append("<shape> unknown shape: " + pos.shape + " </shape>");
         }
      }
      }
      return xml.toString();
   }
   }


      if(coord.band != null)
   private static String serialize(Band band)
   {
      StringBuilder xml = new StringBuilder();
      if(band != null)
      {
      {
         xml.append("<vl>"   + String.valueOf(coord.band.getMin())  +"</vl>");
         xml.append("<vl>"   + String.valueOf(band.getMin())  +"</vl>");
         xml.append("<vu>"   + String.valueOf(coord.band.getMax())   +"</vu>");
         xml.append("<vu>"   + String.valueOf(band.getMax())   +"</vu>");
         xml.append("<vtype>"+ coord.band.system                 +"</vtype>");
         xml.append("<vtype>"+ band.system                 +"</vtype>");
      }
      }


      return xml.toString();
      return xml.toString();
+3 −3
Original line number Original line Diff line number Diff line
@@ -163,14 +163,14 @@ public class DbPSearch






   public FormatResponseFilter.ObsCore[] queryOutputData(String[] pubdidArr, Coord coord)
   public FormatResponseFilter.ObsCore[] queryOutputData(String[] pubdidArr, Pos pos)
   {
   {
      LOGGER.info("");
      LOGGER.info("");


      String commaSepPubdids  = String.join("\',\'", pubdidArr);
      String commaSepPubdids  = String.join("\',\'", pubdidArr);


      String inputRegion = toPgSphereSqlTypeString(coord.pos);
      String inputRegion = toPgSphereSqlTypeString(pos);
      String dbRegion    = toRegionColumnName(coord.pos.system);
      String dbRegion    = toRegionColumnName(pos.system);


      String theQuery ="SELECT *," 
      String theQuery ="SELECT *," 
         + inputRegion + " <@ " + dbRegion + " AS inputInsideDb, " 
         + inputRegion + " <@ " + dbRegion + " AS inputInsideDb, " 
+42 −46
Original line number Original line Diff line number Diff line
@@ -101,30 +101,26 @@ public class FormatResponseFilter implements Filter
      {
      {
         PrintWriter responseWriter = ((HttpServletResponse)response).getWriter();
         PrintWriter responseWriter = ((HttpServletResponse)response).getWriter();


         // VLKB: reconstruct cutout/merge queryStrings and overlap code
         Map<String, String[]> params = request.getParameterMap();
         Map<String, String[]> params = request.getParameterMap();
//         Coord       coord            = new Coord(params);
         SubsurveyId subsurveyId = new SubsurveyId(params);
         SubsurveyId subsurveyId = new SubsurveyId(params);
         // FIXME add invalid param excpetions -> params already parsed in servlet
         Pos  pos  = Pos.parsePos(params, DEFAULT_SKY_SYSTEM);

         Band band = Band.parseBand(params, DEFAULT_SPEC_SYSTEM);
         Coord coord = new Coord();
         String queryStringBase = toQueryString(pos, band);
         coord.pos  = Pos.parsePos(params, DEFAULT_SKY_SYSTEM);
         coord.band = Band.parseBand(params, DEFAULT_SPEC_SYSTEM);
         coord.time = Time.parseTime(params, DEFAULT_TIME_SYSTEM);
         coord.pol  = Pol.parsePol(params);


         ObsCore[] obsCoreArr = queryObsCore(pubdidArr,
         ObsCore[] obsCoreArr = queryObsCore(pubdidArr,
               coord); // VLKB: calc overlap-code for sky
               pos); // VLKB: calc overlap-code for sky


         Dataset[] datasetArr = convert(obsCoreArr,
         Dataset[] datasetArr = convert(obsCoreArr,
               coord, // VLKB: calc overlap-code for velocity
               band, // VLKB: calc overlap-code for velocity
               settings.serviceUrls.cutoutUrl(),
               settings.serviceUrls.cutoutUrl(),
               toQueryString(coord));
               queryStringBase);


         SearchOutputData searchOutputData = SearchOutputData.marshall(datasetArr,
         SearchOutputData searchOutputData = SearchOutputData.marshall(datasetArr,
               subsurveyId,
               subsurveyId,
               dbSubsurveyArr,
               dbSubsurveyArr,
               settings.serviceUrls.mergeUrl(),
               settings.serviceUrls.mergeUrl(),
               toQueryString(coord));
               queryStringBase);


         String respFormat;
         String respFormat;
         String respFormatReq[] = params.get("RESPONSEFORMAT");
         String respFormatReq[] = params.get("RESPONSEFORMAT");
@@ -146,7 +142,7 @@ public class FormatResponseFilter implements Filter
            response.setContentType("application/xml");
            response.setContentType("application/xml");
            boolean showDuration = true;
            boolean showDuration = true;
            XmlSerializer.serializeToLegacyResults(responseWriter, RESPONSE_ENCODING,
            XmlSerializer.serializeToLegacyResults(responseWriter, RESPONSE_ENCODING,
                  responseWrapper.auth, coord, subsurveyId, // <inputs/>
                  responseWrapper.auth, pos, band, subsurveyId, // <inputs/>
                  searchOutputData,
                  searchOutputData,
                  showDuration,startTime_msec);
                  showDuration,startTime_msec);
         }
         }
@@ -241,7 +237,7 @@ public class FormatResponseFilter implements Filter






   private FormatResponseFilter.ObsCore[] queryObsCore(String[] pubdidArr, Coord coord)//, String fitsRemotePath)
   private FormatResponseFilter.ObsCore[] queryObsCore(String[] pubdidArr, Pos pos)//, String fitsRemotePath)
   {
   {
      LOGGER.info("trace");
      LOGGER.info("trace");


@@ -251,7 +247,7 @@ public class FormatResponseFilter implements Filter
         dbps = new DbPSearch(settings.dbConn);
         dbps = new DbPSearch(settings.dbConn);
      }
      }


      return dbps.queryOutputData(pubdidArr, coord);
      return dbps.queryOutputData(pubdidArr, pos);
      //FormatResponseFilter.ObsCore[] obsCoreArr = dbps.queryOutputData(pubdidArr, coord);
      //FormatResponseFilter.ObsCore[] obsCoreArr = dbps.queryOutputData(pubdidArr, coord);
      //return convert(obsCoreArr, coord, fitsRemotePath);
      //return convert(obsCoreArr, coord, fitsRemotePath);
   }
   }
@@ -260,7 +256,7 @@ public class FormatResponseFilter implements Filter






   private Dataset[] convert(FormatResponseFilter.ObsCore[] obsCoreArr, Coord coord,
   private Dataset[] convert(FormatResponseFilter.ObsCore[] obsCoreArr, Band band,
         String cutoutUrlRoot, String cutoutQueryString)
         String cutoutUrlRoot, String cutoutQueryString)
   {
   {
      List<Dataset> datasetList  = new ArrayList<Dataset>();
      List<Dataset> datasetList  = new ArrayList<Dataset>();
@@ -273,13 +269,13 @@ public class FormatResponseFilter implements Filter


         dataset.subsurvey_id   = obsCore.obs_collection;
         dataset.subsurvey_id   = obsCore.obs_collection;
         dataset.overlapCodeSky = convertToOverlapCodeSky(obsCore.inputInsideDb, obsCore.dbInsideInput);
         dataset.overlapCodeSky = convertToOverlapCodeSky(obsCore.inputInsideDb, obsCore.dbInsideInput);
         dataset.overlapCodeVel = convertToOverlapCodeVel(coord,obsCore.em_valid,obsCore.em_min,obsCore.em_max);
         dataset.overlapCodeVel = convertToOverlapCodeVel(band,obsCore.em_valid,obsCore.em_min,obsCore.em_max);
         dataset.overlapCode    = convertToOverlapCode(dataset.overlapCodeSky, dataset.overlapCodeVel);
         dataset.overlapCode    = convertToOverlapCode(dataset.overlapCodeSky, dataset.overlapCodeVel);
         dataset.dataType       = obsCore.dataproduct_type;
         dataset.dataType       = obsCore.dataproduct_type;
         dataset.publisherDid   = obsCore.obs_publisher_did;
         dataset.publisherDid   = obsCore.obs_publisher_did;


         dataset.access.accessFileUrl   = obsCore.access_url;
         dataset.access.accessFileUrl   = obsCore.access_url;
         dataset.access.accessCutoutUrl = cutoutUrlRoot + "?" + cutoutQueryString + dataset.publisherDid;
         dataset.access.accessCutoutUrl = cutoutUrlRoot + "?" + cutoutQueryString + "&ID=" + dataset.publisherDid;
         dataset.access.accessMosaicUrl  = null;
         dataset.access.accessMosaicUrl  = null;


         dataset.vertices_deg = convertToVertices(obsCore.vertices_str);
         dataset.vertices_deg = convertToVertices(obsCore.vertices_str);
@@ -300,20 +296,20 @@ public class FormatResponseFilter implements Filter
   }
   }




   private int convertToOverlapCodeVel(Coord coord, boolean v_valid, double v_min, double v_max)
   private int convertToOverlapCodeVel(Band band, boolean v_valid, double v_min, double v_max)
   {
   {
      if((coord.band != null) && v_valid)
      if((band != null) && v_valid)
      {
      {
         if(coord.band.system == Band.System.VELO_LSRK)
         if(band.system == Band.System.VELO_LSRK)
         {
         {
            // FIXME assert coord: vel_min <= vel_max
            // FIXME assert coord: vel_min <= vel_max
            // FIXME assert cube:  v_min   <= v_max
            // FIXME assert cube:  v_min   <= v_max


            boolean dbInInp = (coord.band.getMin() <= v_min) && (v_min <= coord.band.getMax())
            boolean dbInInp = (band.getMin() <= v_min) && (v_min <= band.getMax())
               && (coord.band.getMin() <= v_max) && (v_max <= coord.band.getMax());
               && (band.getMin() <= v_max) && (v_max <= band.getMax());


            boolean inpInDb = (v_min <= coord.band.getMin()) && (coord.band.getMin() <= v_max)
            boolean inpInDb = (v_min <= band.getMin()) && (band.getMin() <= v_max)
               && (v_min <= coord.band.getMax() ) && (coord.band.getMax() <= v_max);
               && (v_min <= band.getMax() ) && (band.getMax() <= v_max);


            return convertToOverlapCodeSky(inpInDb, dbInInp);
            return convertToOverlapCodeSky(inpInDb, dbInInp);


@@ -362,39 +358,39 @@ public class FormatResponseFilter implements Filter




   // generate cutout/merge queryStrings
   // generate cutout/merge queryStrings
   private String toQueryString(Coord coord)
   private String toQueryString(Pos pos, Band band)
   {
   {
      LOGGER.info("trace");
      LOGGER.info("trace");


      StringBuilder sb = new StringBuilder();
      StringBuilder sb = new StringBuilder();


      //sb.append("POSSYS=" + coord.pos.system.toString());
      if(pos!=null)
      switch(coord.pos.shape)
      {
         switch(pos.shape)
         {
         {
            case CIRCLE:
            case CIRCLE:
            sb.append("POS=" + coord.pos.circle.toString());
               sb.append("POS=" + pos.circle.toString());
               break;
               break;


            case RANGE:
            case RANGE:
            sb.append("POS=" + coord.pos.range.toString());
               sb.append("POS=" + pos.range.toString());
               break;
               break;


            case POLYGON:
            case POLYGON:
            sb.append("POS=" + coord.pos.polygon.toString());
               sb.append("POS=" + pos.polygon.toString());
               break;
               break;


            default:
            default:
            LOGGER.info("Coord::toQueryString: unknown shape: " + coord.pos.shape.toString());
               LOGGER.info("Coord::toQueryString: unknown shape: " + pos.shape.toString());
         }
         }
      }
      sb.append("&POSSYS=" + pos.system.toString());


      if(coord.band != null)
      if(band != null)
      {
      {
         sb.append("&" + coord.band.toString());
         sb.append("&" + band.toString());
         //sb.append("&BANDSYS=" + coord.band.system.toString() );
      }
      }


      sb.append("&ID="); // FIXME id-value will be added in FormatResponseFilter

      return sb.toString();
      return sb.toString();
   }
   }