From 86d6937147012f13f2b3c0b0f16f91c7ba80f38c Mon Sep 17 00:00:00 2001 From: Robert Butora <robert.butora@inaf.it> Date: Thu, 16 May 2024 19:10:30 +0200 Subject: [PATCH] chooses Resolver on Servlet init (if DbUri set) and modifies Resolver's both implementations to return subsurveyId (in ResolverFromId subsurveyId not implemented yet only API) --- .../servlet/src/main/java/ops/JdlMCutout.java | 2 +- .../servlet/src/main/java/ops/Vlkb.java | 5 - .../servlet/src/main/java/ops/VlkbAmqp.java | 67 ++--- .../servlet/src/main/java/ops/VlkbCli.java | 63 ++--- .../src/main/java/resolver/Resolver.java | 1 + .../main/java/resolver/ResolverFromId.java | 13 +- .../src/main/java/webapi/ServletCutout.java | 32 ++- .../src/main/java/webapi/ServletMCutout.java | 157 ----------- .../src/main/java/webapi/ServletMerge.java | 244 ------------------ .../servlet/src/main/java/webapi/UWSSoda.java | 80 ------ .../src/main/java/webapi/UWSSodaWork.java | 193 -------------- .../webapp/WEB-INF/web-cutout-garrtoken.xml | 41 --- .../webapp/WEB-INF/web-cutout-ia2token.xml | 42 +-- .../webapp/WEB-INF/web-cutout-iamtoken.xml | 44 +--- .../servlet/src/main/webapp/WEB-INF/web.xml | 44 +--- 15 files changed, 89 insertions(+), 939 deletions(-) delete mode 100644 data-access/servlet/src/main/java/webapi/ServletMCutout.java delete mode 100644 data-access/servlet/src/main/java/webapi/ServletMerge.java delete mode 100644 data-access/servlet/src/main/java/webapi/UWSSoda.java delete mode 100644 data-access/servlet/src/main/java/webapi/UWSSodaWork.java diff --git a/data-access/servlet/src/main/java/ops/JdlMCutout.java b/data-access/servlet/src/main/java/ops/JdlMCutout.java index e3e7d10..4b24b11 100644 --- a/data-access/servlet/src/main/java/ops/JdlMCutout.java +++ b/data-access/servlet/src/main/java/ops/JdlMCutout.java @@ -35,7 +35,7 @@ public class JdlMCutout FitsCard[] extraCards = null; - Resolver rsl = new ResolverFromId();//settings.dbConn, subsurveys); + Resolver rsl = new ResolverFromId(null);//settings.dbConn, subsurveys); //ResolverByObsCore rsl = new ResolverByObsCore(settings.dbConn, subsurveys); rsl.resolve(publisherDid); diff --git a/data-access/servlet/src/main/java/ops/Vlkb.java b/data-access/servlet/src/main/java/ops/Vlkb.java index a4f3488..3302a40 100644 --- a/data-access/servlet/src/main/java/ops/Vlkb.java +++ b/data-access/servlet/src/main/java/ops/Vlkb.java @@ -19,11 +19,6 @@ public interface Vlkb throws IOException, InterruptedException; - public CutResult doFileById(String id, Pos pos, Band band, Time time, Pol pol, String pixels, - boolean countNullValues, Subsurvey[] subsurveys) - throws IOException, InterruptedException; - - public MCutResult doMCutout(String jdlJson) throws IOException, InterruptedException; diff --git a/data-access/servlet/src/main/java/ops/VlkbAmqp.java b/data-access/servlet/src/main/java/ops/VlkbAmqp.java index 10dfbf2..64af5a4 100644 --- a/data-access/servlet/src/main/java/ops/VlkbAmqp.java +++ b/data-access/servlet/src/main/java/ops/VlkbAmqp.java @@ -33,11 +33,14 @@ class VlkbAmqp implements Vlkb private Settings settings = null; private Subsurvey[] subsurveys = null; + private Resolver resolver = null; public VlkbAmqp() { LOGGER.info("trace VlkbAmqp()"); this.settings = Settings.getInstance(); + this.resolver = (settings.dbConn.isDbUriEmpty() ? new ResolverFromId(subsurveys) + : new ResolverByObsCore(settings.dbConn, subsurveys)); } @@ -45,33 +48,38 @@ class VlkbAmqp implements Vlkb { LOGGER.info("trace VlkbAmqp(settings)"); this.settings = settings; + this.resolver = (settings.dbConn.isDbUriEmpty() ? new ResolverFromId(subsurveys) + : new ResolverByObsCore(settings.dbConn, subsurveys)); } + public VlkbAmqp(Settings settings, Subsurvey[] subsurveys) { LOGGER.info("trace VlkbAmqp(settings, subsurveys)"); this.settings = settings; this.subsurveys = subsurveys; + this.resolver = (settings.dbConn.isDbUriEmpty() ? new ResolverFromId(subsurveys) + : new ResolverByObsCore(settings.dbConn, subsurveys)); } public CutResult doMerge(String[] idArr, Coord coord, boolean countNullValues) - throws FileNotFoundException, IOException - { - LOGGER.info("trace"); + throws FileNotFoundException, IOException + { + LOGGER.info("trace"); - return merge(idArr, coord, countNullValues); - } + return merge(idArr, coord, countNullValues); + } -/////////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////////// public CutResult doFile(String relPathname, int hdunum, - Pos pos, Band band, Time time, Pol pol, String pixels, - boolean countNullValues, FitsCard[] extraCards) + Pos pos, Band band, Time time, Pol pol, String pixels, + boolean countNullValues, FitsCard[] extraCards) throws IOException, InterruptedException { LOGGER.info("trace: " + pos.toString() ); @@ -101,51 +109,26 @@ class VlkbAmqp implements Vlkb - public CutResult doFileById(String id, Pos pos, Band band, Time time, Pol pol, String pixels, + private CutResult doFileById(String id, Pos pos, Band band, Time time, Pol pol, String pixels, boolean countNullValues, Subsurvey[] subsurveys) throws IOException, InterruptedException { LOGGER.info("trace"); - String relPathname; - int hdunum; - FitsCard[] extraCards = null; - String dbUri = settings.dbConn.uri(); + this.resolver.resolve(id); + String relPathname = this.resolver.relPathname(); + int hdunum = this.resolver.hdunum(); + String subsurveyId = this.resolver.obsCollection(); - if(settings.dbConn.isDbUriEmpty()) + if(subsurveyId != null) { - Resolver rsl = new ResolverFromId(); - rsl.resolve(id); - relPathname = rsl.relPathname(); - hdunum = rsl.hdunum(); - - /* FIXME needs also match on filename - some subsurveys have the same storage-path, - * and file-filter distiguishes frequences - * OR - * ivoid must include obs-collection - - Path path = Paths.get(rsl.relPathname()); - String storagePath = path.getParent().toString(); - extraCards = Subsurvey.subsurveysFindCardsByStoragePath(subsurveys, storagePath); - */ + extraCards = Subsurvey.subsurveysFindCards(subsurveys, subsurveyId); } else { - ResolverByObsCore rsl = new ResolverByObsCore(settings.dbConn, subsurveys); - rsl.resolve(id); - relPathname = rsl.relPathname(); - hdunum = rsl.hdunum(); - String subsurveyId = rsl.obsCollection(); - if(subsurveyId != null) - { - extraCards = Subsurvey.subsurveysFindCards(subsurveys, subsurveyId); - } - else - { - LOGGER.info("Resolver with Obscore returns subsurveyId null: no extraCards loaded."); - } + LOGGER.info("Resolver returns subsurveyId null: no extraCards loaded."); } final String DEFAULT_TIME_SYSTEM = "MJD_UTC"; // FIXME take from confif file @@ -209,7 +192,7 @@ class VlkbAmqp implements Vlkb boolean countNullValues) { // ResolverByObsCore rsl = new ResolverByObsCore(settings.dbConn, subsurveys); - Resolver rsl = new ResolverFromId();//settings.dbConn, subsurveys); + Resolver rsl = resolver;//new ResolverFromId();//settings.dbConn, subsurveys); rsl.resolve(publisherDid); FitsCard[] extraCards = null; diff --git a/data-access/servlet/src/main/java/ops/VlkbCli.java b/data-access/servlet/src/main/java/ops/VlkbCli.java index f009948..4e15e3b 100644 --- a/data-access/servlet/src/main/java/ops/VlkbCli.java +++ b/data-access/servlet/src/main/java/ops/VlkbCli.java @@ -44,12 +44,15 @@ class VlkbCli implements Vlkb private Settings settings = null; private Subsurvey[] subsurveys = null; private Soda soda = null; + private Resolver resolver = null; public VlkbCli() { LOGGER.info("trace VlkbCli()"); this.settings = Settings.getInstance(); - soda = new SodaImpl(settings, subsurveys); + this.soda = new SodaImpl(settings, subsurveys); + this.resolver = (settings.dbConn.isDbUriEmpty() ? new ResolverFromId(subsurveys) + : new ResolverByObsCore(settings.dbConn, subsurveys)); } @@ -58,6 +61,8 @@ class VlkbCli implements Vlkb LOGGER.info("trace VlkbCli(settings)"); this.settings = settings; this.soda = new SodaImpl(settings, subsurveys); + this.resolver = (settings.dbConn.isDbUriEmpty() ? new ResolverFromId(subsurveys) + : new ResolverByObsCore(settings.dbConn, subsurveys)); } @@ -67,22 +72,25 @@ class VlkbCli implements Vlkb this.settings = settings; this.subsurveys = subsurveys; this.soda = new SodaImpl(settings, subsurveys); + this.resolver = (settings.dbConn.isDbUriEmpty() ? new ResolverFromId(subsurveys) + : new ResolverByObsCore(settings.dbConn, subsurveys)); } + public CutResult doMerge(String[] idArr, Coord coord, boolean countNullValues) - throws FileNotFoundException, IOException - { - LOGGER.info("trace doMerge by CLI is NOT IMPLEMENTED (only by AMQP)"); + throws FileNotFoundException, IOException + { + LOGGER.info("trace doMerge by CLI is NOT IMPLEMENTED (only by AMQP)"); - return new CutResult(); - } + return new CutResult(); + } -/////////////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////////////// private NullValueCount doCountNullValues(String absPathname, int hdunum) @@ -171,51 +179,26 @@ class VlkbCli implements Vlkb } - public CutResult doFileById(String id, Pos pos, Band band, Time time, Pol pol, String pixels, + private CutResult doFileById(String id, Pos pos, Band band, Time time, Pol pol, String pixels, boolean countNullValues, Subsurvey[] subsurveys) throws IOException, InterruptedException { LOGGER.info("trace"); - String relPathname; - int hdunum; - FitsCard[] extraCards = null; - String dbUri = settings.dbConn.uri(); + this.resolver.resolve(id); + String relPathname = this.resolver.relPathname(); + int hdunum = this.resolver.hdunum(); + String subsurveyId = this.resolver.obsCollection(); - if(settings.dbConn.isDbUriEmpty()) + if(subsurveyId != null) { - Resolver rsl = new ResolverFromId(); - rsl.resolve(id); - relPathname = rsl.relPathname(); - hdunum = rsl.hdunum(); - - /* FIXME needs also match on filename - some subsurveys have the same storage-path, - * and file-filter distiguishes frequences - * OR - * ivoid must include obs-collection - - Path path = Paths.get(rsl.relPathname()); - String storagePath = path.getParent().toString(); - extraCards = Subsurvey.subsurveysFindCardsByStoragePath(subsurveys, storagePath); - */ + extraCards = Subsurvey.subsurveysFindCards(subsurveys, subsurveyId); } else { - ResolverByObsCore rsl = new ResolverByObsCore(settings.dbConn, subsurveys); - rsl.resolve(id); - relPathname = rsl.relPathname(); - hdunum = rsl.hdunum(); - String subsurveyId = rsl.obsCollection(); - if(subsurveyId != null) - { - extraCards = Subsurvey.subsurveysFindCards(subsurveys, subsurveyId); - } - else - { - LOGGER.info("Resolver with Obscore returns subsurveyId null: no extraCards loaded."); - } + LOGGER.info("Resolver returns subsurveyId null: no extraCards loaded."); } final String DEFAULT_TIME_SYSTEM = "MJD_UTC"; // FIXME take from confif file diff --git a/data-access/servlet/src/main/java/resolver/Resolver.java b/data-access/servlet/src/main/java/resolver/Resolver.java index f9b762d..6955b10 100644 --- a/data-access/servlet/src/main/java/resolver/Resolver.java +++ b/data-access/servlet/src/main/java/resolver/Resolver.java @@ -6,6 +6,7 @@ interface Resolver public String relPathname(); public int hdunum(); + public String obsCollection(); } diff --git a/data-access/servlet/src/main/java/resolver/ResolverFromId.java b/data-access/servlet/src/main/java/resolver/ResolverFromId.java index c78fbcd..95ee9ec 100644 --- a/data-access/servlet/src/main/java/resolver/ResolverFromId.java +++ b/data-access/servlet/src/main/java/resolver/ResolverFromId.java @@ -7,13 +7,21 @@ class ResolverFromId implements Resolver { private static final Logger LOGGER = Logger.getLogger(ResolverFromId.class.getName()); + private Subsurvey[] subsurveys; + private String relPathname; private int hdunum; + private String subsurveyId; + + public ResolverFromId(Subsurvey[] subsurveys) + { + this.subsurveys = subsurveys; + } public String relPathname() {return this.relPathname;} public int hdunum() {return this.hdunum;} - + public String obsCollection() { return this.subsurveyId; } public void resolve(String pubdid) { @@ -25,8 +33,11 @@ class ResolverFromId implements Resolver { resolveIvoid(pubdid); + // FIXME resolve subsurveyId by matching relPathname to subsurveys::storage-path & file-filter + LOGGER.info("relPathname : " + relPathname); LOGGER.info("hdunum : " + String.valueOf(hdunum)); + LOGGER.info("subsurveyId : " + ((subsurveyId == null) ? "null" : this.subsurveyId) ); } else { diff --git a/data-access/servlet/src/main/java/webapi/ServletCutout.java b/data-access/servlet/src/main/java/webapi/ServletCutout.java index e484d4a..0eefaf1 100644 --- a/data-access/servlet/src/main/java/webapi/ServletCutout.java +++ b/data-access/servlet/src/main/java/webapi/ServletCutout.java @@ -59,8 +59,9 @@ public class ServletCutout extends javax.servlet.http.HttpServlet private Subsurvey[] subsurveys = null; - protected Soda soda = new SodaImpl(settings, subsurveys); + protected Soda soda = new SodaImpl(settings, subsurveys); protected Vlkb vlkb = ( settings.amqpConn.isHostnameEmpty() ? new VlkbCli(settings): new VlkbAmqp(settings) ); + protected Resolver resolver = null; public void init() throws ServletException { @@ -71,6 +72,9 @@ public class ServletCutout extends javax.servlet.http.HttpServlet String surveysAbsPathname = settings.fitsPaths.surveysMetadataAbsPathname(); if( (surveysAbsPathname != null) && (surveysAbsPathname.length() > 1) ) subsurveys = Subsurvey.loadSubsurveys(surveysAbsPathname); + + resolver = (settings.dbConn.isDbUriEmpty() ? new ResolverFromId(subsurveys) + : new ResolverByObsCore(settings.dbConn, subsurveys)); } @@ -123,21 +127,33 @@ public class ServletCutout extends javax.servlet.http.HttpServlet { LOGGER.info("trace" + pos); - Resolver rsl = new ResolverFromId(); - rsl.resolve(id); + resolver.resolve(id); - soda.doStream(rsl.relPathname(), rsl.hdunum(), pos, band, time, pol, pixels, respOutputStream); + soda.doStream(resolver.relPathname(), resolver.hdunum(), pos, band, time, pol, pixels, respOutputStream); } protected CutResult doCutoutFile(String id, Pos pos, Band band, Time time, Pol pol, String pixels, boolean countNullValues) throws IOException, InterruptedException - { - LOGGER.info("trace"); + { + LOGGER.info("trace"); - return vlkb.doFileById(id, pos, band, time, pol, pixels, countNullValues, subsurveys); - } + FitsCard[] extraCards = null; + + String subsurveyId = resolver.obsCollection(); + if(subsurveyId != null) + { + extraCards = Subsurvey.subsurveysFindCards(subsurveys, subsurveyId); + } + else + { + LOGGER.info("Resolver returns subsurveyId null: no extraCards loaded."); + } + + return vlkb.doFile(resolver.relPathname(), resolver.hdunum(), + pos, band, time, pol, pixels, countNullValues, extraCards); + } protected void doMultiValuedParamNotSupported(String message, PrintWriter printWriter) diff --git a/data-access/servlet/src/main/java/webapi/ServletMCutout.java b/data-access/servlet/src/main/java/webapi/ServletMCutout.java deleted file mode 100644 index 63127de..0000000 --- a/data-access/servlet/src/main/java/webapi/ServletMCutout.java +++ /dev/null @@ -1,157 +0,0 @@ - -import java.util.logging.Logger; - -import java.security.Principal; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import java.io.IOException; -import java.io.OutputStream; -import java.io.OutputStreamWriter; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.BufferedReader; -import java.io.PrintWriter; - -import java.util.Arrays; -import java.util.List; -import java.util.LinkedList; -import java.util.Map; -import java.util.Properties; - -// for Logging/Accounting -import org.json.simple.JSONObject; -import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.TimeZone; - -// read HTTP body -import java.util.stream.Collectors; -import org.apache.commons.io.IOUtils; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.fasterxml.jackson.annotation.JsonProperty; - - -public class ServletMCutout extends javax.servlet.http.HttpServlet -{ - private static final Logger LOGGER = Logger.getLogger(ServletMCutout.class.getName()); - private static final Settings settings = Settings.getInstance(); - - protected Vlkb vlkb = ( settings.amqpConn.isHostnameEmpty() ? new VlkbCli(settings): new VlkbAmqp(settings) ); - - - public void init() throws ServletException - { - super.init(); - - LOGGER.info("FITS : " + settings.fitsPaths.toString()); - LOGGER.info("AMQP : " + settings.amqpConn.toString()); - LOGGER.info("DB : " + settings.dbConn.toString()); - - } - - - /* DALI allows GET and POST for sync services */ - - protected void doGet(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException - { - processRequest(request, response); - } - - protected void doPost(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException - { - processRequest(request, response); - } - - - - protected void processRequest(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException - { - long startTime_msec = System.currentTimeMillis(); - boolean showDuration = true; - - InputStreamReader isr = null; - - response.setContentType("text/xml"); - try - { - isr = new InputStreamReader(request.getInputStream(),"utf-8"); - - - BufferedReader input = new BufferedReader(isr); - StringBuffer jsonStringBuffer = new StringBuffer(); - String line; - while((line = input.readLine()) != null) - { - jsonStringBuffer.append(line); - } - String reqJsonString = jsonStringBuffer.toString(); - - OutputStream respOutputStream = response.getOutputStream(); - - MCutResult result = vlkb.doMCutout(reqJsonString); - - final String contentType = "text/xml"; // FIXME - final String respEncoding = "utf-8"; // FIXME - if(contentType.equals("text/xml") || contentType.equals("application/xml")) - { - PrintWriter writer = new PrintWriter(new OutputStreamWriter(respOutputStream, respEncoding)); - - - 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 ? - { - //LOGGER.info("streaming the file NOT IMPLEMENTED yet for mcutout"); - /* - File downloadFile = new File(cod.absCutPathname); - FileInputStream input = new BuffereInputStream(new FileInputStream(downloadFile)); - input.transferTo(respOutputStream); - LOGGER.info("Deleting after download: " + downloadFile.getName() ); - downloadFile.delete(); - */ - } - else - { - throw new AssertionError("Unsupported contentType for output: " + contentType); - } - - - } - catch(Exception ex) - { - /* FIXME find better exception */ - throw new AssertionError("internal error: jsonFile.open() throws IOException:" + 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; - } - - -} - diff --git a/data-access/servlet/src/main/java/webapi/ServletMerge.java b/data-access/servlet/src/main/java/webapi/ServletMerge.java deleted file mode 100644 index 3c2a8e1..0000000 --- a/data-access/servlet/src/main/java/webapi/ServletMerge.java +++ /dev/null @@ -1,244 +0,0 @@ - -import java.util.logging.Logger; - -import java.io.IOException; -import java.io.PrintWriter; -import java.io.File; -import java.io.OutputStream; -import java.util.Enumeration; -import java.util.*; // ArrayList<String> - -import javax.servlet.ServletConfig; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.ServletOutputStream; // for SOOA - -// from vlkb_mergefiles.java - dir & file handling -import java.io.*; - -import java.nio.file.*; -import static java.nio.file.StandardCopyOption.*; - -//import nom.tam.fits.*;// Fits - for regridding -- merge only - -// config file -import java.util.Properties; - - -// for Logging/Accounting -import org.json.simple.JSONObject; -import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.TimeZone; - -import java.security.Principal; - -import vo.parameter.*; - -public class ServletMerge extends javax.servlet.http.HttpServlet -{ - private static final Logger LOGGER = Logger.getLogger(ServletMerge.class.getName()); - private static final Settings settings = Settings.getInstance(); - - 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; - - - protected Vlkb vlkb = ( settings.amqpConn.isHostnameEmpty() ? new VlkbCli(settings): new VlkbAmqp(settings) ); - - - public void init() throws ServletException - { - super.init(); - - LOGGER.info("FITS : " + settings.fitsPaths.toString()); - LOGGER.info("AMQP : " + settings.amqpConn.toString()); - LOGGER.info("DB : " + settings.dbConn.toString()); - } - - - /* DALI allows GET and POST for sync services */ - - protected void doGet(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException - { - processRequest(request, response); - } - - protected void doPost(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException - { - processRequest(request, response); - } - - - - protected void processRequest(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException - { - long startTime_msec = System.currentTimeMillis(); - boolean showDuration = true; - - ServletOutputStream respOutputStream = response.getOutputStream(); - - try - { - - /* Map<SodaParam, String[]> params = collectSodaParams(request); - SodaParser parser = new SodaParser(params); - - String id = null; - Pos pos = null; - Band band = null; - Time time = null; - Pol pol = 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(); - } -*/ - Map<String, String[]> params = request.getParameterMap(); - String id = null; - Pos pos = null; - Band band = null; - Time time = null; - Pol pol = null; - String pixels = null; - - - - - - String respFormat = DEFAULT_RESPONSEFORMAT;//sodaReq_getResponseFormat(request, DEFAULT_RESPONSEFORMAT); - - Coord coord = new Coord(DEFAULT_SKY_SYSTEM, pos, DEFAULT_SPEC_SYSTEM, band, time, pol); - - // FIXME should parse from params - boolean countNullValues = false; - String respContentType = DEFAULT_RESPONSEFORMAT; - - response.setContentType(respContentType); - - CutResult cutResult = vlkb.doMerge(parseLegacyPubdidArr(id), coord, countNullValues); - - String contentType = respContentType; - String respEncoding = RESPONSE_ENCODING; - - if(contentType.equals("text/xml") || contentType.equals("application/xml")) - { - LOGGER.info("writing 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, countNullValues, - showDuration, startTime_msec); - - writer.close(); - } - else if(contentType.equals("application/fits")) - { - LOGGER.info("streaming the file"); - - String absCutPathname = cutResult.fileName; - File downloadFile = new File(absCutPathname); - FileInputStream input = new FileInputStream(downloadFile); - - input.transferTo(respOutputStream); - - LOGGER.info("Deleting after download: " + downloadFile.getName() ); - downloadFile.delete(); - } - else - { - throw new AssertionError("Unsupported contentType for output: " + contentType); - } - - respOutputStream.close(); - } - catch(IllegalArgumentException ex) - { - LOGGER.info("Illegal arg : " + ex.getMessage()); - - response.setStatus(HttpServletResponse.SC_BAD_REQUEST); - response.setContentType("text/plain"); - PrintWriter writer = new PrintWriter(new OutputStreamWriter(respOutputStream, RESPONSE_ENCODING)); - writer.println("UsageError : " + ex.getMessage()); - writer.close(); - } - catch(Exception ex) - { - ex.printStackTrace(); - - response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); - response.setContentType("text/plain"); - PrintWriter writer = new PrintWriter(new OutputStreamWriter(respOutputStream, RESPONSE_ENCODING)); - writer.println("Error : " + ex.getMessage()); - writer.close(); - } - - LOGGER.info("processRequest normal exit"); - } - - /* - private Map<SodaParam, String[]> collectSodaParams(HttpServletRequest req) - { - Map<SodaParam, String[]> params = new HashMap<SodaParam, String[]>(); - for(SodaParam paramToken : SodaParam.values()) - { - String[] paramValue = req.getParameterValues(paramToken.toString()); - params.put(paramToken, paramValue); - } - return params; - } - */ - - /* 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 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/UWSSoda.java b/data-access/servlet/src/main/java/webapi/UWSSoda.java deleted file mode 100644 index 86d8d87..0000000 --- a/data-access/servlet/src/main/java/webapi/UWSSoda.java +++ /dev/null @@ -1,80 +0,0 @@ -import java.io.IOException; -import java.io.PrintWriter; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import uws.UWSException; -import uws.job.ErrorType; -import uws.job.JobList; -import uws.job.JobThread; -import uws.job.UWSJob; -import uws.job.parameters.InputParamController; -import uws.job.parameters.NumericParamController; -import uws.job.parameters.StringParamController; -import uws.job.user.JobOwner; -import uws.service.UWSServlet; -import uws.service.UWSUrl; - -public class UWSSoda extends UWSServlet { - private static final long serialVersionUID = 1L; - - public static final Settings settings = Settings.getInstance(); - - public static final String csvSurveysFile = settings.fitsPaths.FITSpath + "/" + "survey_populate.csv"; // FIXME make it a settings - public static final Subsurvey[] subsurveys = Subsurvey.loadSubsurveys(csvSurveysFile); - - /* REQUIRED - * Initialize your UWS. At least, you should create one jobs list. */ - @Override - public void initUWS() throws UWSException{ - addJobList(new JobList("soda_cuts")); - - addExpectedAdditionalParameter("ID"); - //setInputParamController("ID", new StringParamController("ID")); - - addExpectedAdditionalParameter("CIRCLE"); - addExpectedAdditionalParameter("BAND"); - - /* non standard params */ - addExpectedAdditionalParameter("skysystem"); - addExpectedAdditionalParameter("specsystem"); - - //setInputParamController("l", new NumericParamController()); - //setInputParamController("vt", new StringParamController("1", "1", new String[]{"1","2"}, false)); - } - - /* - * REQUIRED - * Create instances of jobs, but only the "work" part. The "work" and the description of the job (and all the provided parameters) - * are now separated and only kept in the UWSJob given in parameter. This one is created automatically by the API. - * You just have to provide the "work" part. - */ - @Override - public JobThread createJobThread(UWSJob job) throws UWSException{ - if (job.getJobList().getName().equals("soda_cuts")) - return new UWSSodaWork(job); - else - throw new UWSException("Impossible to create a job inside the jobs list \"" + job.getJobList().getName() + "\" !"); - } - - /* OPTIONAL - * By overriding this function, you can customize the root of your UWS. - * If this function is not overridden an XML document which lists all registered jobs lists is returned. */ - @Override - protected void writeHomePage(UWSUrl requestUrl, HttpServletRequest req, HttpServletResponse resp, JobOwner user) throws UWSException, ServletException, IOException{ - PrintWriter out = resp.getWriter(); - - out.println("<html><head><title>Soda UWSv4 service</title></head><body>"); - out.println("<h1>Soda UWS service</h1"); - out.println("<p>Available job lists:</p>"); - - out.println("<ul>"); - for(JobList jl : this){ - out.println("<li>" + jl.getName() + " - " + jl.getNbJobs() + " jobs - <a href=\"" + requestUrl.listJobs(jl.getName()) + "\">" + requestUrl.listJobs(jl.getName()) + "</a></li>"); - } - out.println("</ul>"); - } - -} diff --git a/data-access/servlet/src/main/java/webapi/UWSSodaWork.java b/data-access/servlet/src/main/java/webapi/UWSSodaWork.java deleted file mode 100644 index c79eac2..0000000 --- a/data-access/servlet/src/main/java/webapi/UWSSodaWork.java +++ /dev/null @@ -1,193 +0,0 @@ -import java.io.PrintWriter; -import java.io.BufferedOutputStream; -import java.io.OutputStream; -import java.io.IOException; -import java.io.OutputStreamWriter; - -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; - -import java.util.Map; -import java.util.HashMap; - -import java.security.Principal; - -public class UWSSodaWork extends JobThread -{ - private Settings settings = UWSSoda.settings; - private Subsurvey[] subsurveys = UWSSoda.subsurveys; - - 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; - - /* NOTE needed if cutouts dir served by vlkb-datasets */ - private String webappRootRequestUrl = null; - - protected Vlkb vlkb = ( settings.amqpConn.isHostnameEmpty() ? new VlkbCli(settings): new VlkbAmqp(settings) );$ - - - public UWSSodaWork(UWSJob j) throws UWSException - { - super(j); - UWSUrl url = j.getUrl(); - webappRootRequestUrl = url.getUrlHeader(); - } - - - - @Override - protected void jobWork() throws UWSException, InterruptedException - { - long startTime_msec = System.currentTimeMillis(); - boolean showDuration = true; - - final String RESPONSE_ENCODING = "utf-8"; - - try - { - 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; - - 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(DEFAULT_SKY_SYSTEM, pos, DEFAULT_SPEC_SYSTEM, band, time, pol); - - final String respContentType = "application/fits"; // FIXME parse this from RESPONSEFORMAT param - - // implementation - - Resolver rsl = new Resolver(settings); - rsl.resolve(id); - - /* metadata/subsurveys */ - FitsCard[] extraCards = null; - if(rsl.subsurveyId != null) - { - extraCards = Subsurvey.subsurveysFindCards(subsurveys, rsl.subsurveyId); - } - - final String DEFAULT_TIME_SYSTEM = "MJD_UTC"; // FIXME take from confif file - - if(pos != null) pos.setSystem(Pos.System.valueOf(DEFAULT_SKY_SYSTEM)); - if(band != null) band.setSystem(Band.System.valueOf(DEFAULT_SPEC_SYSTEM)); - if(time != null) time.setSystem(Time.System.valueOf(DEFAULT_TIME_SYSTEM)); - - CutResult cutResult = vlkb.doCutoutFile(rsl.relPathname, rsl.hdunum, pos, band, time, pol, false, null); - - /* send Results */ - - Result result = createResult("cutout"); - result.setMimeType(respContentType); - OutputStream respOutputStream = getResultOutput(result); - - if(respContentType.equals("text/xml") || respContentType.equals("application/xml")) - { - PrintWriter writer = new PrintWriter(new OutputStreamWriter(respOutputStream, RESPONSE_ENCODING)); - - String accessUrl = convertLocalPathnameToRemoteUrl(cutResult.fileName, - settings.fitsPaths.cutouts(), - settings.fitsPaths.cutoutsUrl()); - - XmlSerializer.serializeToLegacyCutResult(writer, RESPONSE_ENCODING, - cutResult, accessUrl, - id, pos, band, time, pol, null, false, - showDuration, startTime_msec); - - writer.close(); - } - else if(respContentType.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 response: " + respContentType); - } - - respOutputStream.close(); - publishResult(result); - } - catch(IllegalArgumentException ex) - { - throw new UWSException(UWSException.INTERNAL_SERVER_ERROR, ex, - "Illegal arg exception " + job.getJobId() + " !", ErrorType.TRANSIENT); - } - catch(IOException ex) - { - throw new UWSException(UWSException.INTERNAL_SERVER_ERROR, ex, - "IO exception " + job.getJobId() + " !", ErrorType.TRANSIENT); - } - } - - - 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; - } - - - - - /* see UWSParameters::getAdditionalParameter -> UWSParameters.java.l465: ...returned value maybe an array... */ - /* Object getAdditionalParameterValue(String paramName) --> calls UWSParameters::getAdditionalParameters() */ - private Map<SodaParam, String[]> collectSodaParams(UWSJob job) - { - Map<SodaParam, String[]> params = new HashMap<SodaParam, String[]>(); - for(SodaParam paramToken : SodaParam.values()) - { - String[] paramValue = (String[])job.getAdditionalParameterValue(paramToken.toString()); - params.put(paramToken, paramValue); - } - return params; - } - - /* - Map<String, String[]> params = Map.of( - "ID" , new String[]{pubdid}, - "CIRCLE", new String[]{circleStr}, - "BAND", new String[]{bandStr}, - "skysystem", new String[]{skysystemStr}, - "specsystem", new String[]{specsystemStr} - ); - */ -} diff --git a/data-access/servlet/src/main/webapp/WEB-INF/web-cutout-garrtoken.xml b/data-access/servlet/src/main/webapp/WEB-INF/web-cutout-garrtoken.xml index 4bfa308..016c7b9 100644 --- a/data-access/servlet/src/main/webapp/WEB-INF/web-cutout-garrtoken.xml +++ b/data-access/servlet/src/main/webapp/WEB-INF/web-cutout-garrtoken.xml @@ -69,25 +69,6 @@ <url-pattern>/vlkb_cutout</url-pattern> </servlet-mapping> - <servlet> - <servlet-name>vlkb_mcutout</servlet-name> - <servlet-class>ServletMCutout</servlet-class> - </servlet> - <servlet-mapping> - <servlet-name>vlkb_mcutout</servlet-name> - <url-pattern>/vlkb_mcutout</url-pattern> - </servlet-mapping> - - - <servlet> - <servlet-name>vlkb_merge</servlet-name> - <servlet-class>ServletMerge</servlet-class> - </servlet> - <servlet-mapping> - <servlet-name>vlkb_merge</servlet-name> - <url-pattern>/vlkb_merge</url-pattern> - </servlet-mapping> - <servlet> <servlet-name>vlkb_vosi_availability</servlet-name> @@ -116,11 +97,6 @@ <servlet-name>vlkb_soda</servlet-name> <url-pattern>/soda</url-pattern> </servlet-mapping> - <servlet-mapping> - <servlet-name>vlkb_soda</servlet-name> - <url-pattern>/vlkb_soda</url-pattern> - </servlet-mapping> - <servlet> <servlet-name>uws_merge</servlet-name> @@ -158,21 +134,4 @@ </servlet-mapping> - <servlet> - <servlet-name>uws_soda</servlet-name> - <servlet-class>UWSSoda</servlet-class> - <init-param> - <param-name>name</param-name> - <param-value>soda_uws</param-value> - </init-param> - <init-param> - <param-name>rootDirectory</param-name> - <param-value>/tmp</param-value> - </init-param> - </servlet> - <servlet-mapping> - <servlet-name>uws_soda</servlet-name> - <url-pattern>/soda_uws/*</url-pattern> - </servlet-mapping> - </web-app> diff --git a/data-access/servlet/src/main/webapp/WEB-INF/web-cutout-ia2token.xml b/data-access/servlet/src/main/webapp/WEB-INF/web-cutout-ia2token.xml index 4f93735..33c03f4 100644 --- a/data-access/servlet/src/main/webapp/WEB-INF/web-cutout-ia2token.xml +++ b/data-access/servlet/src/main/webapp/WEB-INF/web-cutout-ia2token.xml @@ -79,25 +79,6 @@ <url-pattern>/vlkb_cutout</url-pattern> </servlet-mapping> - <servlet> - <servlet-name>vlkb_mcutout</servlet-name> - <servlet-class>ServletMCutout</servlet-class> - </servlet> - <servlet-mapping> - <servlet-name>vlkb_mcutout</servlet-name> - <url-pattern>/vlkb_mcutout</url-pattern> - </servlet-mapping> - - - <servlet> - <servlet-name>vlkb_merge</servlet-name> - <servlet-class>ServletMerge</servlet-class> - </servlet> - <servlet-mapping> - <servlet-name>vlkb_merge</servlet-name> - <url-pattern>/vlkb_merge</url-pattern> - </servlet-mapping> - <servlet> <servlet-name>vlkb_vosi_availability</servlet-name> @@ -126,11 +107,6 @@ <servlet-name>vlkb_soda</servlet-name> <url-pattern>/soda</url-pattern> </servlet-mapping> - <servlet-mapping> - <servlet-name>vlkb_soda</servlet-name> - <url-pattern>/vlkb_soda</url-pattern> - </servlet-mapping> - <servlet> <servlet-name>uws_merge</servlet-name> @@ -168,21 +144,5 @@ </servlet-mapping> - <servlet> - <servlet-name>uws_soda</servlet-name> - <servlet-class>UWSSoda</servlet-class> - <init-param> - <param-name>name</param-name> - <param-value>soda_uws</param-value> - </init-param> - <init-param> - <param-name>rootDirectory</param-name> - <param-value>/tmp</param-value> - </init-param> - </servlet> - <servlet-mapping> - <servlet-name>uws_soda</servlet-name> - <url-pattern>/soda_uws/*</url-pattern> - </servlet-mapping> - </web-app> + diff --git a/data-access/servlet/src/main/webapp/WEB-INF/web-cutout-iamtoken.xml b/data-access/servlet/src/main/webapp/WEB-INF/web-cutout-iamtoken.xml index 1c3b163..ba077dd 100644 --- a/data-access/servlet/src/main/webapp/WEB-INF/web-cutout-iamtoken.xml +++ b/data-access/servlet/src/main/webapp/WEB-INF/web-cutout-iamtoken.xml @@ -60,26 +60,6 @@ <url-pattern>/vlkb_cutout</url-pattern> </servlet-mapping> - <servlet> - <servlet-name>vlkb_mcutout</servlet-name> - <servlet-class>ServletMCutout</servlet-class> - </servlet> - <servlet-mapping> - <servlet-name>vlkb_mcutout</servlet-name> - <url-pattern>/vlkb_mcutout</url-pattern> - </servlet-mapping> - - - <servlet> - <servlet-name>vlkb_merge</servlet-name> - <servlet-class>ServletMerge</servlet-class> - </servlet> - <servlet-mapping> - <servlet-name>vlkb_merge</servlet-name> - <url-pattern>/vlkb_merge</url-pattern> - </servlet-mapping> - - <servlet> <servlet-name>vlkb_vosi_availability</servlet-name> <servlet-class>VlkbServletFile</servlet-class> @@ -107,11 +87,6 @@ <servlet-name>vlkb_soda</servlet-name> <url-pattern>/soda</url-pattern> </servlet-mapping> - <servlet-mapping> - <servlet-name>vlkb_soda</servlet-name> - <url-pattern>/vlkb_soda</url-pattern> - </servlet-mapping> - <servlet> <servlet-name>uws_merge</servlet-name> @@ -148,22 +123,5 @@ <url-pattern>/uws_mcutout/*</url-pattern> </servlet-mapping> - - <servlet> - <servlet-name>uws_soda</servlet-name> - <servlet-class>UWSSoda</servlet-class> - <init-param> - <param-name>name</param-name> - <param-value>soda_uws</param-value> - </init-param> - <init-param> - <param-name>rootDirectory</param-name> - <param-value>/tmp</param-value> - </init-param> - </servlet> - <servlet-mapping> - <servlet-name>uws_soda</servlet-name> - <url-pattern>/soda_uws/*</url-pattern> - </servlet-mapping> - </web-app> + diff --git a/data-access/servlet/src/main/webapp/WEB-INF/web.xml b/data-access/servlet/src/main/webapp/WEB-INF/web.xml index 5cc30e2..2bd1e53 100644 --- a/data-access/servlet/src/main/webapp/WEB-INF/web.xml +++ b/data-access/servlet/src/main/webapp/WEB-INF/web.xml @@ -93,26 +93,6 @@ <url-pattern>/vlkb_cutout</url-pattern> </servlet-mapping> - <servlet> - <servlet-name>vlkb_mcutout</servlet-name> - <servlet-class>ServletMCutout</servlet-class> - </servlet> - <servlet-mapping> - <servlet-name>vlkb_mcutout</servlet-name> - <url-pattern>/vlkb_mcutout</url-pattern> - </servlet-mapping> - - - <servlet> - <servlet-name>vlkb_merge</servlet-name> - <servlet-class>ServletMerge</servlet-class> - </servlet> - <servlet-mapping> - <servlet-name>vlkb_merge</servlet-name> - <url-pattern>/vlkb_merge</url-pattern> - </servlet-mapping> - - <servlet> <servlet-name>vlkb_vosi_availability</servlet-name> <servlet-class>VlkbServletFile</servlet-class> @@ -140,11 +120,6 @@ <servlet-name>vlkb_soda</servlet-name> <url-pattern>/soda</url-pattern> </servlet-mapping> - <servlet-mapping> - <servlet-name>vlkb_soda</servlet-name> - <url-pattern>/vlkb_soda</url-pattern> - </servlet-mapping> - <servlet> <servlet-name>uws_merge</servlet-name> @@ -181,22 +156,5 @@ <url-pattern>/uws_mcutout/*</url-pattern> </servlet-mapping> - - <servlet> - <servlet-name>uws_soda</servlet-name> - <servlet-class>UWSSoda</servlet-class> - <init-param> - <param-name>name</param-name> - <param-value>soda_uws</param-value> - </init-param> - <init-param> - <param-name>rootDirectory</param-name> - <param-value>/tmp</param-value> - </init-param> - </servlet> - <servlet-mapping> - <servlet-name>uws_soda</servlet-name> - <url-pattern>/soda_uws/*</url-pattern> - </servlet-mapping> - </web-app> + -- GitLab