Skip to content
Snippets Groups Projects
Select Git revision
  • d8788298eb103e8d1cf1c7049a1f09c52ed6676f
  • master default protected
  • v4.5.2
  • v4.5.1
  • v4.5.0
  • v4.4.0
  • v4.3.3
  • v4.3.2
  • v4.3.1
  • v4.3.0
  • v4.2.0
  • v4.1.0
  • v4.0.2
  • v4.0.1
  • v4.0.0
  • v3.4.0
  • v3.3.0
  • v3.2.0
  • v3.1.1
  • v3.1.0
  • v3.0.1
  • v3.0.0
22 results

PartOfPacket.cpp

Blame
  • UWSMergeWork.java 6.23 KiB
    import java.io.PrintWriter;
    import java.io.OutputStream;
    import java.io.OutputStreamWriter;
    import java.io.BufferedOutputStream;
    import javax.servlet.ServletOutputStream;
    import java.io.IOException;
    import java.io.FileNotFoundException;
    import java.io.File;
    import java.io.FileInputStream;
    
    import uws.UWSException;
    import uws.job.ErrorType;
    import uws.job.JobThread;
    import uws.job.Result;
    import uws.job.UWSJob;
    import uws.service.UWSUrl;
    
    /* for datasets::doAction */
    import java.security.Principal;
    import java.util.Map;
    import java.util.HashMap;
    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;
    
       final String RESPONSE_ENCODING = "utf-8";
       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";
    
       protected Vlkb vlkb = ( settings.amqpConn.isHostnameEmpty() ? new VlkbCli(settings): new VlkbAmqp(settings) );
    
       /* NOTE needed if cutouts dir served by vlkb-datasets */
       private String webappRootRequestUrl = null;
    
       public UWSMergeWork(UWSJob j) throws UWSException
       {
          super(j);
          UWSUrl url = j.getUrl();
          webappRootRequestUrl = url.getUrlHeader();
       }
    
    
       /* FIXME in UWS howto result.setSize(size); */
    
       @Override
       protected void jobWork() throws UWSException, InterruptedException
       {
          try
          {
             long startTime_msec = System.currentTimeMillis();
             boolean showDuration = true;
    
             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  = null;// FIXME 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  = vlkb.doMerge(parseLegacyPubdidArr(id), coord, false);//countNullValues);
    
             final String respFormat = "text/xml";// FIXME read from param RESPONSEFORMAT ?
    
    
             String contentType = respFormat;
             String respEncoding = RESPONSE_ENCODING;
             Result result = createResult("Report");
             result.setMimeType(respFormat);
             OutputStream respOutputStream = getResultOutput(result);
    
             if(contentType.equals("text/xml") || contentType.equals("application/xml"))
             {
                PrintWriter writer = new PrintWriter(new OutputStreamWriter(respOutputStream, respEncoding));
    
                String accessUrl = convertLocalPathnameToRemoteUrl(cutResult.fileName,
                      settings.fitsPaths.cutouts(),
                      settings.fitsPaths.cutoutsUrl());
    
                XmlSerializer.serializeToLegacyCutResult(writer, RESPONSE_ENCODING,
                      cutResult, accessUrl,
                      id, pos, band, time, pol, pixels, false,//countNullValues,
                      showDuration, startTime_msec);
    
                writer.close();
             }
             else if(contentType.equals("application/fits"))
             {
                String absCutPathname = cutResult.fileName;
                File downloadFile = new File(absCutPathname);
                FileInputStream input = new FileInputStream(downloadFile);
                input.transferTo(respOutputStream);
                downloadFile.delete();
             }
             else
             {
                throw new AssertionError("Unsupported contentType for output: " + contentType);
             }
    
             /* publishResult(result);*/
             respOutputStream.close();
          }
          catch(IllegalArgumentException ex)
          {
             throw new UWSException(UWSException.BAD_REQUEST, ex.getMessage());
          }
          catch(FileNotFoundException ex)
          {
             throw new UWSException(UWSException.BAD_REQUEST, ex.getMessage());
          }
          catch(IOException ex)
          {
             throw new UWSException(UWSException.BAD_REQUEST, ex.getMessage());
          }
       }
    
    
    
    
    
       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;
       }
    
    
    
    
       /* semi-colon separated list of pudids convert to arra */
       private String[] parseLegacyPubdidArr(String pubdids)
       {
          List<String> pubdidList = new ArrayList<String>();
          String[] pdArr = pubdids.split(";");
          for(String pd : pdArr)
             if(pd.length() > 0) pubdidList.add(pd);
    
          String[] pubdidArr = new String[pubdidList.size()];
    
          return pubdidList.toArray(pubdidArr);
       }
    
       private Map<String, String[]> collectSodaParams(UWSJob job)
       {
          Map<String, String[]> params = new HashMap<String, String[]>();
          String[] paraTokens = {"skysystem","specsystem","pubdid","l","b","r","dl","db","vl","vu","vt","ID","POSSYS","BANDSYS","POS", "BAND", "TIME", "POL", "PIXELS"};
          for(String paramToken : paraTokens)
          {
             String[] paramValue = new String[1];
             paramValue[0] = (String)job.getAdditionalParameterValue(paramToken);
             params.put(paramToken, paramValue);
          }
          return params;
       }
    
    }