diff --git a/WEB-INF/classes/com/cohort/util/File2.java b/WEB-INF/classes/com/cohort/util/File2.java index 9f2a19cfb..d79c694a6 100644 --- a/WEB-INF/classes/com/cohort/util/File2.java +++ b/WEB-INF/classes/com/cohort/util/File2.java @@ -400,12 +400,13 @@ public static int deleteIfOld(String dir, long time, } int nDeleted = files.length - nDir + nRemain; if (nDir != 0 || nDeleted != 0 || nRemain != 0) - String2.log("File2.deleteIfOld(" + dir + - (time == Long.MAX_VALUE? "" : - ", " + Calendar2.safeEpochSecondsToIsoStringTZ(time / 1000.0, "" + time)) + - ") nDir=" + nDir + - " nDeleted=" + nDeleted + - " nRemain=" + (nRemain < 0? String2.ERROR : nRemain)); + String2.log("File2.deleteIfOld(" + + String2.left(dir + + (time == Long.MAX_VALUE? "" : + ", " + Calendar2.safeEpochSecondsToIsoStringTZ(time / 1000.0, "" + time)), 50) + + ") nDir=" + String2.right("" + nDir, 2) + + " nDeleted=" + String2.right("" + nDeleted, 4) + + " nRemain=" + String2.right(nRemain < 0? String2.ERROR : "" + nRemain, 2)); return nRemain; } catch (Exception e3) { String2.log(MustBe.throwable(String2.ERROR + " in File2.deleteIfOld(" + diff --git a/WEB-INF/classes/gov/noaa/pfel/coastwatch/TestAll.java b/WEB-INF/classes/gov/noaa/pfel/coastwatch/TestAll.java index b18f241d8..86565494c 100644 --- a/WEB-INF/classes/gov/noaa/pfel/coastwatch/TestAll.java +++ b/WEB-INF/classes/gov/noaa/pfel/coastwatch/TestAll.java @@ -156,7 +156,7 @@ public static void main(String args[]) throws Throwable { // Table.testReadMultidimNc(); // Table.testReadNcCFMATimeSeriesReversed(false); //readMultidimNc // { -// String tFileName = "C:/data/gtspp/bestNcZip/gtspp_31645513_xb_111.nc"; +// String tFileName = "C:/temp/gtspp_34775909_ba_111.nc"; // String2.log(NcHelper.ncdump(tFileName, "-h")); // Table table = new Table(); // table.readMultidimNc(tFileName, null, null, null, true, true, null, null, null); @@ -837,12 +837,12 @@ public static void main(String args[]) throws Throwable { // "", // tSortFilesBySourceNames, // "", "", "", "", 0, "", null)); //info, institution, summary, title, standardizeWhat=0, cacheFromUrl, atts - // Sync with various remote directories -// Table table = FileVisitorDNLS.sync( -// "http://flux.aos.wisc.edu/data/aoss/ghg/DataLog_User_Sync/2016/07/", -// "/u00/data/points/lterWiscAoss/2016/07/", -// ".*\\.dat", true, ".*", true); //doIt +// FileVisitorDNLS.sync( +// "https://www.ngdc.noaa.gov/thredds/catalog/dart_bpr/processed", //omit /catalog.html +// "/u00/data/points/nceiDartBpr/", +// ".*\\.nc", true, ".*", false).dataToString(); //recursive, doAll (or just 1) +// String2.log(NcHelper.ncdump("/u00/data/points/nceiDartBpr/ed/21413/21413_20061126to20080422_qc.nc", "-h")); // Do this periodically to update the local cache of InPort xml files // Last done: 2017-08-09, now /inport-xml/ @@ -1071,9 +1071,9 @@ public static void main(String args[]) throws Throwable { // String2.log(NcHelper.ncdump("/u00/data/points/caricoos/181p1_historic.nc", "-v metaStationLatitude;metaStationLongitude")); -/* s = EDDTableFromMultidimNcFiles.generateDatasetsXml( - //EDStatic.unitTestDataDir + "nc", "GL_.*\\.nc", "", - "/data/joe/", "20171208.syslog\\.nc", "", +/* + s = EDDTableFromMultidimNcFiles.generateDatasetsXml( + "/u00/data/points/nceiDartBpr", ".*\\.nc", "", "", //dims 1440, "", "", "", "", //pre, post, extract, varname @@ -1082,10 +1082,10 @@ public static void main(String args[]) throws Throwable { "", "", "", "", 0, //standardizeWhat 1+2(numericTime)+256(catch numeric mv)+4096(units) "", //treatDimensionsAs - "", //cacheFromUrl + "https://www.ngdc.noaa.gov/thredds/catalog/dart_bpr/processed", //cacheFromUrl /catalog.html null) + "\n"; String2.setClipboardString(s); String2.log(s); - /* */ + // */ // Table.debugMode = true; DasDds.main(new String[]{"joe", "-verbose"}); // EDDTableFromMultidimNcFiles.testBasic(); // EDDTableFromMultidimNcFiles.testCharAsString(true); @@ -1225,6 +1225,7 @@ public static void main(String args[]) throws Throwable { EDDGridAggregateExistingDimension.testGenerateDatasetsXml(); //after EDDGridFromDap EDDGridFromAudioFiles.testGenerateDatasetsXml(); + EDDGridFromAudioFiles.testGenerateDatasetsXml2(); EDDGridFromDap.testGenerateDatasetsXml(); //often not accessible EDDGridFromDap.testGenerateDatasetsXml2(); //EDDGridFromDap.testGenerateDatasetsXml3(); //source is gone @@ -1236,6 +1237,8 @@ public static void main(String args[]) throws Throwable { EDDGridFromNcFiles.testGenerateDatasetsXml2(); EDDGridFromNcFiles.testGenerateDatasetsXml3(); EDDGridFromNcFiles.testGenerateDatasetsXmlAwsS3(); //slow! + EDDGridFromNcFiles.testGenerateDatasetsXmlCopy(); + EDDGridFromNcFiles.testGenerateDatasetsXmlWithRemoteThreddsFiles(); EDDGridFromNcFilesUnpacked.testGenerateDatasetsXml(); EDDGridLonPM180.testGenerateDatasetsXmlFromErddapCatalog(); @@ -1264,11 +1267,13 @@ public static void main(String args[]) throws Throwable { EDDTableFromJsonlCSVFiles.testGenerateDatasetsXml(); EDDTableFromMultidimNcFiles.testGenerateDatasetsXml(); EDDTableFromMultidimNcFiles.testGenerateDatasetsXmlSeaDataNet(); + EDDTableFromMultidimNcFiles.testGenerateDatasetsXmlDimensions(); EDDTableFromNcCFFiles.testGenerateDatasetsXml(); EDDTableFromNcCFFiles.testGenerateDatasetsXml2(); EDDTableFromNccsvFiles.testGenerateDatasetsXml(); EDDTableFromNcFiles.testGenerateDatasetsXml(); EDDTableFromNcFiles.testGenerateDatasetsXml2(); + EDDTableFromNcFiles.testCopyFilesGenerateDatasetsXml(); //EDDTableFromNWISDV.testGenerateDatasetsXml(); //inactive EDDTableFromOBIS.testGenerateDatasetsXml(); EDDTableFromSOS.testGenerateDatasetsXml(true); //useCachedInfo); @@ -1280,9 +1285,9 @@ public static void main(String args[]) throws Throwable { //2018-09-13 https: works in browser by not yet in Java // String2.log(EDDTableFromThreddsFiles.generateDatasetsXml( -// "http://tds.coaps.fsu.edu/thredds/catalog/samos/data/research/WTEP/2012/catalog.xml", +// "https://tds.coaps.fsu.edu/thredds/catalog/samos/data/research/WTEP/2012/catalog.xml", // "WTEP_20120215.*", -// "http://tds.coaps.fsu.edu/thredds/dodsC/samos/data/quick/WTEP/2012/WTEP_20120215v10002.nc", +// "https://tds.coaps.fsu.edu/thredds/dodsC/samos/data/quick/WTEP/2012/WTEP_20120215v10002.nc", // "https://data.nodc.noaa.gov/thredds/dodsC/testdata/netCDFTemplateExamples/timeSeries/catalog.xml", // "BodegaMarineLabBuoyCombined.nc", // "https://data.nodc.noaa.gov/thredds/dodsC/testdata/netCDFTemplateExamples/timeSeries/BodegaMarineLabBuoyCombined.nc", @@ -1479,7 +1484,7 @@ public static void main(String args[]) throws Throwable { // set jplG1SST flags !!!!! //SSR.touchUrl( - // "http://upwell.pfeg.noaa.gov/erddap/setDatasetFlag.txt?datasetID=jplG1SST&flagKey=1879976078", + // "https://upwell.pfeg.noaa.gov/erddap/setDatasetFlag.txt?datasetID=jplG1SST&flagKey=1879976078", // 60000); //while email systems are down... @@ -1496,7 +1501,7 @@ public static void main(String args[]) throws Throwable { // Projects.erddapTunnelTest(); // Projects.makeNetcheckErddapTests( //results are on clipboard // "https://coastwatch.pfeg.noaa.gov/erddap/"); -// "http://upwell.pfeg.noaa.gov/erddap/"); +// "https://upwell.pfeg.noaa.gov/erddap/"); // "http://75.101.155.155/erddap/"); // :8081 led to out-of-date oceanwatch dataset!! but now disabled // Projects.testOpendapAvailability("https://oceanwatch.pfeg.noaa.gov/thredds/dodsC/satellite/CM/usfc/hday", diff --git a/WEB-INF/classes/gov/noaa/pfel/coastwatch/griddata/OQNux10S1day_20050712_x-135_X-105_y22_Y50.nc b/WEB-INF/classes/gov/noaa/pfel/coastwatch/griddata/OQNux10S1day_20050712_x-135_X-105_y22_Y50.nc index 9f597da9e..f36ea82cb 100644 Binary files a/WEB-INF/classes/gov/noaa/pfel/coastwatch/griddata/OQNux10S1day_20050712_x-135_X-105_y22_Y50.nc and b/WEB-INF/classes/gov/noaa/pfel/coastwatch/griddata/OQNux10S1day_20050712_x-135_X-105_y22_Y50.nc differ diff --git a/WEB-INF/classes/gov/noaa/pfel/coastwatch/griddata/OpendapHelper.java b/WEB-INF/classes/gov/noaa/pfel/coastwatch/griddata/OpendapHelper.java index af76cd469..342a16da3 100644 --- a/WEB-INF/classes/gov/noaa/pfel/coastwatch/griddata/OpendapHelper.java +++ b/WEB-INF/classes/gov/noaa/pfel/coastwatch/griddata/OpendapHelper.java @@ -1179,8 +1179,8 @@ public static void testFindAllScalarOrMultiDimVars() throws Throwable { //test of DArray DAP dataset -//2018-09-13 https: works in browser by not yet in Java - url = "http://tds.coaps.fsu.edu/thredds/dodsC/samos/data/research/WTEP/2012/WTEP_20120128v30001.nc"; + //2018-09-13 https: works in browser by not yet in Java. 2019-06-28 https works in Java + url = "https://tds.coaps.fsu.edu/thredds/dodsC/samos/data/research/WTEP/2012/WTEP_20120128v30001.nc"; String2.log("\n*** test of DArray DAP dataset\n" + url); try { dConnect = new DConnect(url, true, 1, 1); @@ -2134,8 +2134,8 @@ public static void dapToNc(String dapUrl, String varNames[], String projection, /** This tests getting attibutes, notably the DODS_strlen attribute. */ public static void testGetAttributes() throws Throwable { - //https almost works, but java objects to invalid certificate - String url = "http://tds.coaps.fsu.edu/thredds/dodsC/samos/data/research/WTEP/2012/WTEP_20120128v30001.nc"; + //https almost works, but java objects to invalid certificate. 2019-06 https works in Java + String url = "https://tds.coaps.fsu.edu/thredds/dodsC/samos/data/research/WTEP/2012/WTEP_20120128v30001.nc"; String2.log("\n* OpendapHelper.testGetAttributes\n" + url); try { DConnect dConnect = new DConnect(url, true, 1, 1); @@ -2189,7 +2189,7 @@ public static void testDapToNcDArray() throws Throwable { String today = Calendar2.getCurrentISODateTimeStringLocalTZ().substring(0, 10); fileName = SSR.getTempDirectory() + "testDapToNcDArray.nc"; - String dArrayUrl = "http://tds.coaps.fsu.edu/thredds/dodsC/samos/data/research/WTEP/2012/WTEP_20120128v30001.nc"; + String dArrayUrl = "https://tds.coaps.fsu.edu/thredds/dodsC/samos/data/research/WTEP/2012/WTEP_20120128v30001.nc"; try { dapToNc(dArrayUrl, //note that request for zztop is ignored (because not found) @@ -2328,7 +2328,7 @@ public static void testDapToNcDArray() throws Throwable { try { String2.log("\n* testDapToNcDArray Subset"); fileName = SSR.getTempDirectory() + "testDapToNcDArraySubset.nc"; - String dArraySubsetUrl = "http://tds.coaps.fsu.edu/thredds/dodsC/samos/data/research/WTEP/2012/WTEP_20120128v30001.nc"; + String dArraySubsetUrl = "https://tds.coaps.fsu.edu/thredds/dodsC/samos/data/research/WTEP/2012/WTEP_20120128v30001.nc"; dapToNc(dArraySubsetUrl, new String[] {"zztop", "time", "lat", "lon", "PL_HD", "flag"}, "[0:10:99]", //projection fileName, false); //jplMode @@ -2418,7 +2418,7 @@ public static void testDapToNcDArray() throws Throwable { " {75.53, 75.72, 76.65, 76.43, 76.58, 63.34, 266.49, 246.52, 220.81, 242.11}\n" + "}\n"; /* from -http://tds.coaps.fsu.edu/thredds/dodsC/samos/data/research/WTEP/2012/WTEP_20120128v30001.nc.ascii?time[0:10:99],lat[0:10:99],lon[0:10:99],PL_HD[0:10:99] +https://tds.coaps.fsu.edu/thredds/dodsC/samos/data/research/WTEP/2012/WTEP_20120128v30001.nc.ascii?time[0:10:99],lat[0:10:99],lon[0:10:99],PL_HD[0:10:99] time[10] 16870896, 16870906, 16870916, 16870926, 16870936, 16870946, 16870956, 16870966, 16870976, 16870986 lat[10] 44.63, 44.63, 44.63, 44.63, 44.63, 44.63, 44.63, 44.63, 44.62, 44.61 lon[10] 235.95, 235.95, 235.95, 235.95, 235.95, 235.95, 235.95, 235.95, 235.94, 235.91 @@ -2463,7 +2463,7 @@ public static void testDapToNcDArray() throws Throwable { results = t.toString(); expected = "java.lang.RuntimeException: ERROR in OpendapHelper.dapToNc\n" + -" url=http://tds.coaps.fsu.edu/thredds/dodsC/samos/data/research/WTEP/2012/WTEP_20120128v30001.nc\n" + +" url=https://tds.coaps.fsu.edu/thredds/dodsC/samos/data/research/WTEP/2012/WTEP_20120128v30001.nc\n" + " varNames=zztop,time,lat,lon,PL_HD,history projection=null\n" + " file=C:/programs/_tomcat/webapps/cwexperimental/WEB-INF/temp/testDapToNcDArraySubset.nc\n" + "var=history has different dimensions than previous vars."; diff --git a/WEB-INF/classes/gov/noaa/pfel/erddap/Erddap.java b/WEB-INF/classes/gov/noaa/pfel/erddap/Erddap.java index 29a755b1f..b1ff0f5d4 100644 --- a/WEB-INF/classes/gov/noaa/pfel/erddap/Erddap.java +++ b/WEB-INF/classes/gov/noaa/pfel/erddap/Erddap.java @@ -982,11 +982,13 @@ public void doIndex(HttpServletRequest request, HttpServletResponse response, } catch (Throwable t) { EDStatic.rethrowClientAbortException(t); //first thing in catch{} writer.write(EDStatic.htmlForException(t)); - } + throw t; + } finally { - //end of home page - writer.write("\n"); - endHtmlWriter(out, writer, tErddapUrl, false); + //end of home page + writer.write("\n"); + endHtmlWriter(out, writer, tErddapUrl, false); + } } /** @@ -1007,9 +1009,11 @@ public void doInformationHtml(HttpServletRequest request, HttpServletResponse re } catch (Throwable t) { EDStatic.rethrowClientAbortException(t); //first thing in catch{} writer.write(EDStatic.htmlForException(t)); + throw t; + } finally { + writer.write("\n"); + endHtmlWriter(out, writer, tErddapUrl, false); } - writer.write("\n"); - endHtmlWriter(out, writer, tErddapUrl, false); } /** @@ -1039,9 +1043,11 @@ public void doLegalHtml(HttpServletRequest request, HttpServletResponse response } catch (Throwable t) { EDStatic.rethrowClientAbortException(t); //first thing in catch{} writer.write(EDStatic.htmlForException(t)); + throw t; + } finally { + writer.write("\n"); + endHtmlWriter(out, writer, tErddapUrl, false); } - writer.write("\n"); - endHtmlWriter(out, writer, tErddapUrl, false); } /** This is used by doLogin to add a failed login attempt to failedLogins */ @@ -1443,10 +1449,11 @@ public void doLogin(HttpServletRequest request, HttpServletResponse response, } catch (Throwable t) { EDStatic.rethrowClientAbortException(t); //first thing in catch{} writer.write(EDStatic.htmlForException(t)); + throw t; + } finally { + writer.write("\n"); + endHtmlWriter(out, writer, tErddapUrl, false); } - - writer.write("\n"); - endHtmlWriter(out, writer, tErddapUrl, false); return; } @@ -1624,10 +1631,11 @@ public void doLogin(HttpServletRequest request, HttpServletResponse response, } catch (Throwable t) { EDStatic.rethrowClientAbortException(t); //first thing in catch{} writer.write(EDStatic.htmlForException(t)); + throw t; + } finally { + writer.write("\n"); + endHtmlWriter(out, writer, tErddapUrl, false); } - - writer.write("\n"); - endHtmlWriter(out, writer, tErddapUrl, false); return; } @@ -1738,10 +1746,11 @@ public void doLogin(HttpServletRequest request, HttpServletResponse response, } catch (Throwable t) { EDStatic.rethrowClientAbortException(t); //first thing in catch{} writer.write(EDStatic.htmlForException(t)); + throw t; + } finally { + writer.write("\n"); + endHtmlWriter(out, writer, tErddapUrl, false); } - - writer.write("\n"); - endHtmlWriter(out, writer, tErddapUrl, false); return; } @@ -1759,9 +1768,11 @@ public void doLogin(HttpServletRequest request, HttpServletResponse response, } catch (Throwable t) { EDStatic.rethrowClientAbortException(t); //first thing in catch{} writer.write(EDStatic.htmlForException(t)); + throw t; + } finally { + writer.write("\n"); + endHtmlWriter(out, writer, tErddapUrl, false); } - writer.write("\n"); - endHtmlWriter(out, writer, tErddapUrl, false); return; } @@ -1863,10 +1874,11 @@ public void doLogout(HttpServletRequest request, HttpServletResponse response, } catch (Throwable t) { EDStatic.rethrowClientAbortException(t); //first thing in catch{} writer.write(EDStatic.htmlForException(t)); + throw t; + } finally { + writer.write("\n"); + endHtmlWriter(out, writer, tErddapUrl, false); } - - writer.write("\n"); - endHtmlWriter(out, writer, tErddapUrl, false); return; } @@ -1970,9 +1982,11 @@ public void doDataProviderForm(HttpServletRequest request, HttpServletResponse r } catch (Throwable t) { EDStatic.rethrowClientAbortException(t); //first thing in catch{} writer.write(EDStatic.htmlForException(t)); + throw t; + } finally { + writer.write("\n"); + endHtmlWriter(out, writer, tErddapUrl, false); } - writer.write("\n"); - endHtmlWriter(out, writer, tErddapUrl, false); return; } @@ -2207,12 +2221,15 @@ public void doDataProviderForm1(HttpServletRequest request, HttpServletResponse } catch (Throwable t) { EDStatic.rethrowClientAbortException(t); //first thing in catch{} - if (out == null || writer == null) - throw t; - else writer.write(EDStatic.htmlForException(t)); + if (writer != null) + writer.write(EDStatic.htmlForException(t)); + throw t; + } finally { + if (writer != null) { + writer.write("\n"); + endHtmlWriter(out, writer, tErddapUrl, false); + } } - writer.write("\n"); - endHtmlWriter(out, writer, tErddapUrl, false); return; } @@ -2313,7 +2330,7 @@ public void doDataProviderForm2(HttpServletRequest request, HttpServletResponse tCreatorType, creatorTypes.length - 1, errorMsgSB); tCreatorEmail = HtmlWidgets.validateIsSomethingNotTooLong("creator_email", "", tCreatorEmail, 80, errorMsgSB); tInstitution = HtmlWidgets.validateIsSomethingNotTooLong("institution", "", tInstitution, 80, errorMsgSB); - tInfoUrl = HtmlWidgets.validateIsSomethingNotTooLong("infoUrl", "", tInfoUrl, 120, errorMsgSB); + tInfoUrl = HtmlWidgets.validateIsSomethingNotTooLong("infoUrl", "", tInfoUrl, 200, errorMsgSB); tLicense = HtmlWidgets.validateIsSomethingNotTooLong("license", "[standard]", tLicense, 500, errorMsgSB); tCdmDataType = HtmlWidgets.validate0ToMax("cdm_data_type", defaultCdmDataType, tCdmDataType, cdmDataTypes.length - 1, errorMsgSB); @@ -2656,12 +2673,15 @@ public void doDataProviderForm2(HttpServletRequest request, HttpServletResponse } catch (Throwable t) { EDStatic.rethrowClientAbortException(t); //first thing in catch{} - if (out == null || writer == null) - throw t; - else writer.write(EDStatic.htmlForException(t)); + if (writer != null) + writer.write(EDStatic.htmlForException(t)); + throw t; + } finally { + if (writer != null) { + writer.write("\n"); + endHtmlWriter(out, writer, tErddapUrl, false); + } } - writer.write("\n"); - endHtmlWriter(out, writer, tErddapUrl, false); return; } @@ -3073,12 +3093,15 @@ public void doDataProviderForm3(HttpServletRequest request, HttpServletResponse } catch (Throwable t) { EDStatic.rethrowClientAbortException(t); //first thing in catch{} - if (out == null || writer == null) - throw t; - else writer.write(EDStatic.htmlForException(t)); + if (writer != null) + writer.write(EDStatic.htmlForException(t)); + throw t; + } finally { + if (writer != null) { + writer.write("\n"); + endHtmlWriter(out, writer, tErddapUrl, false); + } } - writer.write("\n"); - endHtmlWriter(out, writer, tErddapUrl, false); return; } @@ -3216,12 +3239,15 @@ public void doDataProviderForm4(HttpServletRequest request, HttpServletResponse } catch (Throwable t) { EDStatic.rethrowClientAbortException(t); //first thing in catch{} - if (out == null || writer == null) - throw t; - else writer.write(EDStatic.htmlForException(t)); + if (writer != null) + writer.write(EDStatic.htmlForException(t)); + throw t; + } finally { + if (writer != null) { + writer.write("\n"); + endHtmlWriter(out, writer, tErddapUrl, false); + } } - writer.write("\n"); - endHtmlWriter(out, writer, tErddapUrl, false); return; } @@ -3272,12 +3298,15 @@ public void doDataProviderFormDone(HttpServletRequest request, HttpServletRespon } catch (Throwable t) { EDStatic.rethrowClientAbortException(t); //first thing in catch{} - if (out == null || writer == null) - throw t; - else writer.write(EDStatic.htmlForException(t)); + if (writer != null) + writer.write(EDStatic.htmlForException(t)); + throw t; + } finally { + if (writer != null) { + writer.write("\n"); + endHtmlWriter(out, writer, tErddapUrl, false); + } } - writer.write("\n"); - endHtmlWriter(out, writer, tErddapUrl, false); return; } @@ -3318,14 +3347,17 @@ public void doStatus(HttpServletRequest request, HttpServletResponse response, } catch (Throwable t) { EDStatic.rethrowClientAbortException(t); //first thing in catch{} writer.write(EDStatic.htmlForException(t)); - } + throw t; + } finally { - //end of status.html - writer.write("\n"); - endHtmlWriter(out, writer, tErddapUrl, false); + //end of status.html + writer.write("\n"); + endHtmlWriter(out, writer, tErddapUrl, false); + + //as a convenience to admins, viewing status.html calls String2.flushLog() + String2.flushLog(); + } - //as a convenience to admins, viewing status.html calls String2.flushLog() - String2.flushLog(); } /** @@ -3788,10 +3820,11 @@ public void doRestHtml(HttpServletRequest request, HttpServletResponse response, } catch (Throwable t) { EDStatic.rethrowClientAbortException(t); //first thing in catch{} writer.write(EDStatic.htmlForException(t)); + throw t; + } finally { + writer.write("\n"); + endHtmlWriter(out, writer, tErddapUrl, false); } - writer.write("\n"); - endHtmlWriter(out, writer, tErddapUrl, false); - } /** @@ -4044,9 +4077,11 @@ else if (protocol.equals("tabledap")) } catch (Throwable t) { EDStatic.rethrowClientAbortException(t); //first thing in catch{} writer.write(EDStatic.htmlForException(t)); + throw t; + } finally { + writer.write("\n"); + endHtmlWriter(out, writer, tErddapUrl, false); } - writer.write("\n"); - endHtmlWriter(out, writer, tErddapUrl, false); return; } @@ -4126,10 +4161,15 @@ else if (protocol.equals("tabledap")) writer.write(EDStatic.htmlForException(t)); } writer.write("\n"); + } catch (Exception e) { + EDStatic.rethrowClientAbortException(e); //first thing in catch{} + writer.write(EDStatic.htmlForException(e)); + throw e; + } finally { writer.write(EDStatic.endBodyHtml(tErddapUrl)); + writer.write(""); writer.flush(); //essential if (out instanceof ZipOutputStream) ((ZipOutputStream)out).closeEntry(); - } finally { writer.close(); } @@ -4427,26 +4467,33 @@ public void doFiles(HttpServletRequest request, HttpServletResponse response, table.addColumn("Description", new StringArray(new String[]{"Documentation for ERDDAP's \"files\" system."})); OutputStream out = getHtmlOutputStream(request, response); Writer writer = getHtmlWriter(loggedInAs, "Browse Source Files", out); - writer.write( - "
\n" + - EDStatic.youAreHere(loggedInAs, "files") + - EDStatic.filesDescription + - "\n
" + EDStatic.warning + " " + - EDStatic.filesWarning + "\n" + - "(" + - MessageFormat.format(EDStatic.indexDocumentation, "\"files\"") + "" + - ", including \"How can I work with these files?\")\n" + - "
 \n"); - writer.flush(); - writer.write( - table.directoryListing( - null, fullRequestUrl, userDapQuery, //may have sort instructions - EDStatic.imageDirUrl(loggedInAs) + "fileIcons/", - EDStatic.imageDirUrl(loggedInAs) + EDStatic.questionMarkImageFile, - true, subDirNames, subDirDes)); //addParentDir - writer.write("
\n"); - endHtmlWriter(out, writer, tErddapUrl, false); + try { + writer.write( + "
\n" + + EDStatic.youAreHere(loggedInAs, "files") + + EDStatic.filesDescription + + "\n
" + EDStatic.warning + " " + + EDStatic.filesWarning + "\n" + + "(" + + MessageFormat.format(EDStatic.indexDocumentation, "\"files\"") + "" + + ", including \"How can I work with these files?\")\n" + + "
 \n"); + writer.flush(); + writer.write( + table.directoryListing( + null, fullRequestUrl, userDapQuery, //may have sort instructions + EDStatic.imageDirUrl(loggedInAs) + "fileIcons/", + EDStatic.imageDirUrl(loggedInAs) + EDStatic.questionMarkImageFile, + true, subDirNames, subDirDes)); //addParentDir + } catch (Exception e) { + EDStatic.rethrowClientAbortException(e); //first thing in catch{} + writer.write(EDStatic.htmlForException(e)); + throw e; + } finally { + writer.write("
\n"); + endHtmlWriter(out, writer, tErddapUrl, false); + } //tally EDStatic.tally.add("files browse DatasetID (since startup)", ""); @@ -4476,12 +4523,19 @@ public void doFiles(HttpServletRequest request, HttpServletResponse response, if (id.equals("documentation.html")) { OutputStream out = getHtmlOutputStream(request, response); Writer writer = getHtmlWriter(loggedInAs, "ERDDAP \"files\" Documentation", out); - writer.write("
\n"); - writer.write(EDStatic.youAreHere(loggedInAs, "files", "Documentation")); - writer.write(EDStatic.filesDocumentation(tErddapUrl)); - writer.write("\n" + - "
\n"); - endHtmlWriter(out, writer, tErddapUrl, false); + try { + writer.write("
\n"); + writer.write(EDStatic.youAreHere(loggedInAs, "files", "Documentation")); + writer.write(EDStatic.filesDocumentation(tErddapUrl)); + } catch (Exception e) { + EDStatic.rethrowClientAbortException(e); //first thing in catch{} + writer.write(EDStatic.htmlForException(e)); + throw e; + } finally { + writer.write("\n" + + "
\n"); + endHtmlWriter(out, writer, tErddapUrl, false); + } return; } else { @@ -4650,40 +4704,47 @@ public void doFiles(HttpServletRequest request, HttpServletResponse response, fileTable.addColumn("Description", new StringArray(fileTableNRows, true)); OutputStream out = getHtmlOutputStream(request, response); Writer writer = getHtmlWriter(loggedInAs, "files/" + id + "/" + nextPath, out); - writer.write("
\n"); - writer.write( - nextPath.length() == 0? EDStatic.youAreHere(loggedInAs, "files", id) : - "\n

" + EDStatic.erddapHref(tErddapUrl) + - "\n > files" + - "\n > " + id + "" + - "\n > " + XML.encodeAsXML(nextPath) + - "

\n"); - writer.write(EDStatic.filesDescription + "\n"); - if (!(edd instanceof EDDTableFromFileNames)) + try { + writer.write("
\n"); writer.write( - "
" + EDStatic.warning + " " + - EDStatic.filesWarning + "\n"); - writer.write(" (" + - MessageFormat.format(EDStatic.indexDocumentation, "\"files\"") + "" + - ", including \"How can I work with these files?\")\n" + - "
 \n"); - edd.writeHtmlDatasetInfo(loggedInAs, writer, true, true, false, true, "", ""); - writer.write("
"); //causes nice spacing between datasetInfo and file table - writer.flush(); - writer.write( - fileTable.directoryListing( - localDir, fullRequestUrl, userDapQuery, //may have sort instructions - EDStatic.imageDirUrl(loggedInAs) + "fileIcons/", - EDStatic.imageDirUrl(loggedInAs) + EDStatic.questionMarkImageFile, - true, subDirs, null)); //addParentDir - writer.write("
\n"); - endHtmlWriter(out, writer, tErddapUrl, false); + nextPath.length() == 0? EDStatic.youAreHere(loggedInAs, "files", id) : + "\n

" + EDStatic.erddapHref(tErddapUrl) + + "\n > files" + + "\n > " + id + "" + + "\n > " + XML.encodeAsXML(nextPath) + + "

\n"); + writer.write(EDStatic.filesDescription + "\n"); + if (!(edd instanceof EDDTableFromFileNames)) + writer.write( + "
" + EDStatic.warning + " " + + EDStatic.filesWarning + "\n"); + writer.write(" (" + + MessageFormat.format(EDStatic.indexDocumentation, "\"files\"") + "" + + ", including \"How can I work with these files?\")\n" + + "
 \n"); + edd.writeHtmlDatasetInfo(loggedInAs, writer, true, true, false, true, "", ""); + writer.write("
"); //causes nice spacing between datasetInfo and file table + writer.flush(); + writer.write( + fileTable.directoryListing( + localDir, fullRequestUrl, userDapQuery, //may have sort instructions + EDStatic.imageDirUrl(loggedInAs) + "fileIcons/", + EDStatic.imageDirUrl(loggedInAs) + EDStatic.questionMarkImageFile, + true, subDirs, null)); //addParentDir + } catch (Exception e) { + EDStatic.rethrowClientAbortException(e); //first thing in catch{} + writer.write(EDStatic.htmlForException(e)); + throw e; + } finally { + writer.write("
\n"); + endHtmlWriter(out, writer, tErddapUrl, false); + } //tally EDStatic.tally.add("files browse DatasetID (since startup)", id); @@ -4948,11 +5009,13 @@ public void sendDatasetList(HttpServletRequest request, HttpServletResponse resp } catch (Throwable t) { EDStatic.rethrowClientAbortException(t); //first thing in catch{} writer.write(EDStatic.htmlForException(t)); - } + throw t; + } finally { - //end of document - writer.write("\n"); - endHtmlWriter(out, writer, tErddapUrl, false); + //end of document + writer.write("\n"); + endHtmlWriter(out, writer, tErddapUrl, false); + } } @@ -5063,9 +5126,11 @@ Spec questions? Ask Jeff DLb (author of WMS spec!): Jeff.deLaBeaujardiere@noaa.g } catch (Throwable t) { EDStatic.rethrowClientAbortException(t); //first thing in catch{} writer.write(EDStatic.htmlForException(t)); + throw t; + } finally { + writer.write("\n"); + endHtmlWriter(out, writer, tErddapUrl, false); } - writer.write("\n"); - endHtmlWriter(out, writer, tErddapUrl, false); return; } @@ -5354,9 +5419,11 @@ public void doSosDocumentation(HttpServletRequest request, HttpServletResponse r } catch (Throwable t) { EDStatic.rethrowClientAbortException(t); //first thing in catch{} writer.write(EDStatic.htmlForException(t)); + throw t; + } finally { + writer.write("\n"); + endHtmlWriter(out, writer, tErddapUrl, false); } - writer.write("\n"); - endHtmlWriter(out, writer, tErddapUrl, false); } @@ -5458,9 +5525,11 @@ public void doWcs(HttpServletRequest request, HttpServletResponse response, } catch (Throwable t) { EDStatic.rethrowClientAbortException(t); //first thing in catch{} writer.write(EDStatic.htmlForException(t)); + throw t; + } finally { + writer.write("\n"); + endHtmlWriter(out, writer, tErddapUrl, false); } - writer.write("\n"); - endHtmlWriter(out, writer, tErddapUrl, false); return; } @@ -5653,9 +5722,11 @@ public void doWcsDocumentation(HttpServletRequest request, HttpServletResponse r } catch (Throwable t) { EDStatic.rethrowClientAbortException(t); //first thing in catch{} writer.write(EDStatic.htmlForException(t)); + throw t; + } finally { + writer.write("\n"); + endHtmlWriter(out, writer, tErddapUrl, false); } - writer.write("\n"); - endHtmlWriter(out, writer, tErddapUrl, false); } @@ -6355,11 +6426,11 @@ public void doWmsDocumentation(HttpServletRequest request, HttpServletResponse r } catch (Throwable t) { EDStatic.rethrowClientAbortException(t); //first thing in catch{} writer.write(EDStatic.htmlForException(t)); + throw t; + } finally { + writer.write("\n"); + endHtmlWriter(out, writer, tErddapUrl, false); } - - writer.write("\n"); - endHtmlWriter(out, writer, tErddapUrl, false); - } /** @@ -7710,23 +7781,23 @@ public void doWmsDemo(HttpServletRequest request, HttpServletResponse response, //*** html head OutputStream out = getHtmlOutputStream(request, response); Writer writer = new BufferedWriter(new OutputStreamWriter(out)); - writer.write(EDStatic.startHeadHtml(tErddapUrl, eddGrid.title() + " - WMS")); - writer.write("\n" + eddGrid.rssHeadLink()); - if (thisWmsClientActive) - writer.write(HtmlWidgets.leafletHead(tErddapUrl)); - writer.flush(); //Steve Souder says: the sooner you can send some html to user, the better - writer.write( - "\n"); - - //*** html body - String makeAGraphRef = "" + - EDStatic.mag + ""; - writer.write( - EDStatic.startBodyHtml(loggedInAs) + "\n" + - HtmlWidgets.htmlTooltipScript(EDStatic.imageDirUrl(loggedInAs)) + - "
\n" + - EDStatic.youAreHere(loggedInAs, "wms", tDatasetID)); try { + writer.write(EDStatic.startHeadHtml(tErddapUrl, eddGrid.title() + " - WMS")); + writer.write("\n" + eddGrid.rssHeadLink()); + if (thisWmsClientActive) + writer.write(HtmlWidgets.leafletHead(tErddapUrl)); + writer.flush(); //Steve Souder says: the sooner you can send some html to user, the better + writer.write( + "\n"); + + //*** html body + String makeAGraphRef = "" + + EDStatic.mag + ""; + writer.write( + EDStatic.startBodyHtml(loggedInAs) + "\n" + + HtmlWidgets.htmlTooltipScript(EDStatic.imageDirUrl(loggedInAs)) + + "
\n" + + EDStatic.youAreHere(loggedInAs, "wms", tDatasetID)); String queryString = request.getQueryString(); if (queryString == null) queryString = ""; @@ -7921,14 +7992,15 @@ public void doWmsDemo(HttpServletRequest request, HttpServletResponse response, writer.flush(); //Steve Souder says: the sooner you can send some html to user, the better writer.write(scripts.toString()); - } catch (Throwable t) { - EDStatic.rethrowClientAbortException(t); //first thing in catch{} - writer.write(EDStatic.htmlForException(t)); - } - - writer.write("
\n"); - endHtmlWriter(out, writer, tErddapUrl, false); + writer.write("
\n"); + } catch (Exception e) { + EDStatic.rethrowClientAbortException(e); //first thing in catch{} + writer.write(EDStatic.htmlForException(e)); + throw e; + } finally { + endHtmlWriter(out, writer, tErddapUrl, false); + } } /** @@ -7998,16 +8070,23 @@ public void doMetadata(HttpServletRequest request, HttpServletResponse response, String title = "Index of " + tErddapUrl + "/" + endOfRequest; OutputStream out = getHtmlOutputStream(request, response); Writer writer = getHtmlWriter(loggedInAs, title, out); - writer.write( - "
\n" + - "

" + title + "

\n"); - writer.write( - table.directoryListing( - null, tErddapUrl + "/" + endOfRequest, userQuery, - fileIconsDir, questionMarkUrl, - true, dirNames, null)); - writer.write("
\n"); - endHtmlWriter(out, writer, tErddapUrl, false); + try { + writer.write( + "
\n" + + "

" + title + "

\n"); + writer.write( + table.directoryListing( + null, tErddapUrl + "/" + endOfRequest, userQuery, + fileIconsDir, questionMarkUrl, + true, dirNames, null)); + } catch (Exception e) { + EDStatic.rethrowClientAbortException(e); //first thing in catch{} + writer.write(EDStatic.htmlForException(e)); + throw e; + } finally { + writer.write("
\n"); + endHtmlWriter(out, writer, tErddapUrl, false); + } return; } @@ -8042,15 +8121,22 @@ public void doMetadata(HttpServletRequest request, HttpServletResponse response, String title = "Index of " + tErddapUrl + "/" + endOfRequest; OutputStream out = getHtmlOutputStream(request, response); Writer writer = getHtmlWriter(loggedInAs, title, out); - writer.write( - "
\n" + - "

" + title + "

\n"); - writer.write( - table.directoryListing( - null, tErddapUrl + "/" + endOfRequest, userQuery, - fileIconsDir, questionMarkUrl, true, dirNames, null)); - writer.write("
\n"); - endHtmlWriter(out, writer, tErddapUrl, false); + try { + writer.write( + "
\n" + + "

" + title + "

\n"); + writer.write( + table.directoryListing( + null, tErddapUrl + "/" + endOfRequest, userQuery, + fileIconsDir, questionMarkUrl, true, dirNames, null)); + } catch (Exception e) { + EDStatic.rethrowClientAbortException(e); //first thing in catch{} + writer.write(EDStatic.htmlForException(e)); + throw e; + } finally { + writer.write("
\n"); + endHtmlWriter(out, writer, tErddapUrl, false); + } return; } @@ -8361,6 +8447,7 @@ public void doGeoServicesRest(HttpServletRequest request, HttpServletResponse re OutputStream out = getHtmlOutputStream(request, response); Writer writer = getHtmlWriter(loggedInAs, "Folder: /", out); + try { writer.write( //?? "
\n" + //esri has different header @@ -8396,7 +8483,13 @@ public void doGeoServicesRest(HttpServletRequest request, HttpServletResponse re //"  Sitemap\n" + //"  Geo Sitemap\n" + "
\n"); - endHtmlWriter(out, writer, tErddapUrl, false); + } catch (Exception e) { + EDStatic.rethrowClientAbortException(e); //first thing in catch{} + writer.write(EDStatic.htmlForException(e)); + throw e; + } finally { + endHtmlWriter(out, writer, tErddapUrl, false); + } } else { sendGeoServicesRestError(request, response, @@ -8796,6 +8889,10 @@ public void doGeoServicesRest(HttpServletRequest request, HttpServletResponse re "  Query\n" + "  Identify\n" + "
\n"); + } catch (Exception e) { + EDStatic.rethrowClientAbortException(e); //first thing in catch{} + writer.write(EDStatic.htmlForException(e)); + throw e; } finally { endHtmlWriter(out, writer, tErddapUrl, false); //better to call writer.close() here } @@ -9647,11 +9744,12 @@ public void doOutOfDateDatasets(HttpServletRequest request, HttpServletResponse } catch (Throwable t) { EDStatic.rethrowClientAbortException(t); //first thing in catch{} writer.write(EDStatic.htmlForException(t)); - } + throw t; + } finally { - writer.write("
\n"); - endHtmlWriter(out, writer, tErddapUrl, false); - + writer.write("\n"); + endHtmlWriter(out, writer, tErddapUrl, false); + } } @@ -10062,11 +10160,13 @@ public void doSlideSorter(HttpServletRequest request, HttpServletResponse respon } catch (Throwable t) { EDStatic.rethrowClientAbortException(t); //first thing in catch{} writer.write(EDStatic.htmlForException(t)); - } + throw t; + } finally { - //end of slidesorter - writer.write("\n"); - endHtmlWriter(out, writer, tErddapUrl, false); + //end of slidesorter + writer.write("\n"); + endHtmlWriter(out, writer, tErddapUrl, false); + } } @@ -10259,11 +10359,13 @@ public void doSearch(HttpServletRequest request, HttpServletResponse response, } catch (Throwable t) { EDStatic.rethrowClientAbortException(t); //first thing in catch{} writer.write(EDStatic.htmlForException(t)); - } + throw t; + } finally { - //end of document - writer.write("\n"); - endHtmlWriter(out, writer, tErddapUrl, false); + //end of document + writer.write("\n"); + endHtmlWriter(out, writer, tErddapUrl, false); + } return; } @@ -10318,9 +10420,11 @@ public void doSearch(HttpServletRequest request, HttpServletResponse response, } catch (Throwable t2) { EDStatic.rethrowClientAbortException(t2); //first thing in catch{} writer.write(EDStatic.htmlForException(t2)); + throw t2; + } finally { + writer.write("\n"); + endHtmlWriter(out, writer, tErddapUrl, false); } - writer.write("\n"); - endHtmlWriter(out, writer, tErddapUrl, false); return; } } @@ -11086,8 +11190,8 @@ public void doAdvancedSearch(HttpServletRequest request, HttpServletResponse res writer.write(EDStatic.htmlForException(t)); writer.write("\n"); endHtmlWriter(out, writer, tErddapUrl, false); - return; - } + throw t; + } //otherwise there is more to the document below... } //*** do the search @@ -11341,9 +11445,11 @@ public void doAdvancedSearch(HttpServletRequest request, HttpServletResponse res } catch (Throwable t) { EDStatic.rethrowClientAbortException(t); //first thing in catch{} writer.write(EDStatic.htmlForException(t)); + throw t; + } finally { + writer.write("\n"); //which controls width + endHtmlWriter(out, writer, tErddapUrl, false); } - writer.write("\n"); //which controls width - endHtmlWriter(out, writer, tErddapUrl, false); return; } @@ -11846,9 +11952,11 @@ public void doCategorize(HttpServletRequest request, HttpServletResponse respons } catch (Throwable t) { EDStatic.rethrowClientAbortException(t); //first thing in catch{} writer.write(EDStatic.htmlForException(t)); + throw t; + } finally { + writer.write("\n"); + endHtmlWriter(out, writer, tErddapUrl, false); } - writer.write("\n"); - endHtmlWriter(out, writer, tErddapUrl, false); } return; } @@ -11937,9 +12045,11 @@ public void doCategorize(HttpServletRequest request, HttpServletResponse respons } catch (Throwable t) { EDStatic.rethrowClientAbortException(t); //first thing in catch{} writer.write(EDStatic.htmlForException(t)); + throw t; + } finally { + writer.write("\n"); + endHtmlWriter(out, writer, tErddapUrl, false); } - writer.write("\n"); - endHtmlWriter(out, writer, tErddapUrl, false); } return; } @@ -12070,11 +12180,13 @@ public void doCategorize(HttpServletRequest request, HttpServletResponse respons } catch (Throwable t) { EDStatic.rethrowClientAbortException(t); //first thing in catch{} writer.write(EDStatic.htmlForException(t)); - } + throw t; + } finally { - //end of document - writer.write("\n"); - endHtmlWriter(out, writer, tErddapUrl, false); + //end of document + writer.write("\n"); + endHtmlWriter(out, writer, tErddapUrl, false); + } return; } @@ -12274,11 +12386,13 @@ public void doInfo(HttpServletRequest request, HttpServletResponse response, } catch (Throwable t) { EDStatic.rethrowClientAbortException(t); //first thing in catch{} writer.write(EDStatic.htmlForException(t)); - } + throw t; + } finally { - //end of document - writer.write("\n"); - endHtmlWriter(out, writer, tErddapUrl, false); + //end of document + writer.write("\n"); + endHtmlWriter(out, writer, tErddapUrl, false); + } } else { if (error != null) throw new SimpleException(error[0] + " " + error[1]); @@ -12515,11 +12629,13 @@ public void doInfo(HttpServletRequest request, HttpServletResponse response, } catch (Throwable t) { EDStatic.rethrowClientAbortException(t); //first thing in catch{} writer.write(EDStatic.htmlForException(t)); - } + throw t; + } finally { - //end of document - writer.write("\n"); - endHtmlWriter(out, writer, tErddapUrl, false); + //end of document + writer.write("\n"); + endHtmlWriter(out, writer, tErddapUrl, false); + } return; } @@ -12962,11 +13078,13 @@ public void doSubscriptions(HttpServletRequest request, HttpServletResponse resp } catch (Throwable t) { EDStatic.rethrowClientAbortException(t); //first thing in catch{} writer.write(EDStatic.htmlForException(t)); - } + throw t; + } finally { - //end of document - writer.write("\n"); - endHtmlWriter(out, writer, tErddapUrl, false); + //end of document + writer.write("\n"); + endHtmlWriter(out, writer, tErddapUrl, false); + } } @@ -13176,11 +13294,13 @@ public void doAddSubscription(HttpServletRequest request, HttpServletResponse re } catch (Throwable t) { EDStatic.rethrowClientAbortException(t); //first thing in catch{} writer.write(EDStatic.htmlForException(t)); - } + throw t; + } finally { - //end of document - writer.write("\n"); - endHtmlWriter(out, writer, tErddapUrl, false); + //end of document + writer.write("\n"); + endHtmlWriter(out, writer, tErddapUrl, false); + } } /** @@ -13296,11 +13416,13 @@ public void doListSubscriptions(HttpServletRequest request, HttpServletResponse } catch (Throwable t) { EDStatic.rethrowClientAbortException(t); //first thing in catch{} writer.write(EDStatic.htmlForException(t)); - } + throw t; + } finally { - //end of document - writer.write("\n"); - endHtmlWriter(out, writer, tErddapUrl, false); + //end of document + writer.write("\n"); + endHtmlWriter(out, writer, tErddapUrl, false); + } } /** @@ -13425,11 +13547,13 @@ public void doValidateSubscription(HttpServletRequest request, HttpServletRespon } catch (Throwable t) { EDStatic.rethrowClientAbortException(t); //first thing in catch{} writer.write(EDStatic.htmlForException(t)); - } + throw t; + } finally { - //end of document - writer.write("\n"); - endHtmlWriter(out, writer, tErddapUrl, false); + //end of document + writer.write("\n"); + endHtmlWriter(out, writer, tErddapUrl, false); + } } @@ -13555,12 +13679,14 @@ public void doRemoveSubscription(HttpServletRequest request, HttpServletResponse } catch (Throwable t) { EDStatic.rethrowClientAbortException(t); //first thing in catch{} writer.write(EDStatic.htmlForException(t)); - } + throw t; + } finally { - //end of document - writer.write("\n"); - endHtmlWriter(out, writer, tErddapUrl, false); - } + //end of document + writer.write("\n"); + endHtmlWriter(out, writer, tErddapUrl, false); + } + } /** @@ -13711,11 +13837,13 @@ public void doConvert(HttpServletRequest request, HttpServletResponse response, } catch (Throwable t) { EDStatic.rethrowClientAbortException(t); //first thing in catch{} writer.write(EDStatic.htmlForException(t)); - } + throw t; + } finally { - //end of document - writer.write("\n"); - endHtmlWriter(out, writer, tErddapUrl, false); + //end of document + writer.write("\n"); + endHtmlWriter(out, writer, tErddapUrl, false); + } } /** @@ -13916,11 +14044,13 @@ else if (toCounty) } catch (Throwable t) { EDStatic.rethrowClientAbortException(t); //first thing in catch{} writer.write(EDStatic.htmlForException(t)); - } + throw t; + } finally { - //end of document - writer.write("\n"); - endHtmlWriter(out, writer, tErddapUrl, false); + //end of document + writer.write("\n"); + endHtmlWriter(out, writer, tErddapUrl, false); + } } /** @@ -14127,11 +14257,13 @@ else if (toFullName) } catch (Throwable t) { EDStatic.rethrowClientAbortException(t); //first thing in catch{} writer.write(EDStatic.htmlForException(t)); - } + throw t; + } finally { - //end of document - writer.write("\n"); - endHtmlWriter(out, writer, tErddapUrl, false); + //end of document + writer.write("\n"); + endHtmlWriter(out, writer, tErddapUrl, false); + } } /** @@ -14335,11 +14467,13 @@ else if (toFullName) } catch (Throwable t) { EDStatic.rethrowClientAbortException(t); //first thing in catch{} writer.write(EDStatic.htmlForException(t)); - } + throw t; + } finally { - //end of document - writer.write("\n"); - endHtmlWriter(out, writer, tErddapUrl, false); + //end of document + writer.write("\n"); + endHtmlWriter(out, writer, tErddapUrl, false); + } } @@ -14554,11 +14688,13 @@ else if (toGCMD) } catch (Throwable t) { EDStatic.rethrowClientAbortException(t); //first thing in catch{} writer.write(EDStatic.htmlForException(t)); - } + throw t; + } finally { - //end of document - writer.write("\n"); - endHtmlWriter(out, writer, tErddapUrl, false); + //end of document + writer.write("\n"); + endHtmlWriter(out, writer, tErddapUrl, false); + } } /** @@ -14918,11 +15054,13 @@ public void doConvertTime(HttpServletRequest request, HttpServletResponse respon } catch (Throwable t) { EDStatic.rethrowClientAbortException(t); //first thing in catch{} writer.write(EDStatic.htmlForException(t)); - } + throw t; + } finally { - //end of document - writer.write("\n"); - endHtmlWriter(out, writer, tErddapUrl, false); + //end of document + writer.write("\n"); + endHtmlWriter(out, writer, tErddapUrl, false); + } } @@ -15129,11 +15267,13 @@ public void doConvertUnits(HttpServletRequest request, HttpServletResponse respo } catch (Throwable t) { EDStatic.rethrowClientAbortException(t); //first thing in catch{} writer.write(EDStatic.htmlForException(t)); - } + throw t; + } finally { - //end of document - writer.write("\n"); - endHtmlWriter(out, writer, tErddapUrl, false); + //end of document + writer.write("\n"); + endHtmlWriter(out, writer, tErddapUrl, false); + } } /** @@ -15235,11 +15375,12 @@ public void doConvertURLs(HttpServletRequest request, HttpServletResponse respon } catch (Throwable t) { EDStatic.rethrowClientAbortException(t); //first thing in catch{} writer.write(EDStatic.htmlForException(t)); + throw t; + } finally { + //end of document + writer.write("\n"); + endHtmlWriter(out, writer, tErddapUrl, false); } - - //end of document - writer.write("\n"); - endHtmlWriter(out, writer, tErddapUrl, false); } diff --git a/WEB-INF/classes/gov/noaa/pfel/erddap/GenerateDatasetsXml.java b/WEB-INF/classes/gov/noaa/pfel/erddap/GenerateDatasetsXml.java index adb7aaf4e..771a4fb18 100644 --- a/WEB-INF/classes/gov/noaa/pfel/erddap/GenerateDatasetsXml.java +++ b/WEB-INF/classes/gov/noaa/pfel/erddap/GenerateDatasetsXml.java @@ -255,7 +255,7 @@ public String doIt(String args[], boolean loop) throws Throwable { s2 = get(args, 2, s2, "ReloadEveryNMinutes (e.g., " + EDD.DEFAULT_RELOAD_EVERY_N_MINUTES + ", recommended: -1 generates suggested values)"); String2.log("working..."); - printToBoth(EDDGridFromDap.generateDatasetsXml(true, //writeInstructions + printToBoth(EDDGridFromDap.generateDatasetsXml( s1, null, null, null, String2.parseInt(s2, EDD.DEFAULT_RELOAD_EVERY_N_MINUTES), null)); diff --git a/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDD.java b/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDD.java index ca22825c8..dd8c1888e 100644 --- a/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDD.java +++ b/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDD.java @@ -9208,7 +9208,7 @@ else if (!ooIoosCat.equals(oIoosCat)) addAtts.add("ioos_category", "Currents"); } else if ( - (lcu.indexOf("o2") >= 0 && lcu.indexOf("co2") < 0) || //no2 was caught above + lcu.indexOf("|o2|") >= 0 || //no2 was caught above lcu.indexOf("oxygen") >= 0) { addAtts.add("ioos_category", "Dissolved O2"); diff --git a/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDGrid.java b/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDGrid.java index 013475349..1899aa23a 100644 --- a/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDGrid.java +++ b/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDGrid.java @@ -2396,10 +2396,13 @@ public void respondToDapQuery(HttpServletRequest request, "
\n"); writeGeneralDapHtmlInstructions(tErddapUrl, writer, false); writer.write("\n"); - writer.write(EDStatic.endBodyHtml(tErddapUrl)); - writer.write("\n\n"); - writer.flush(); //essential + } catch (Exception e) { + EDStatic.rethrowClientAbortException(e); //first thing in catch{} + writer.write(EDStatic.htmlForException(e)); + throw e; } finally { + writer.write(EDStatic.endBodyHtml(tErddapUrl)); + writer.write(""); writer.close(); } return; @@ -4422,12 +4425,13 @@ public void respondToGraphQuery(HttpServletRequest request, String loggedInAs, sliderInitFromPositions, sliderInitToPositions, EDV.SLIDER_PIXELS - 1)); writer.write("\n"); //standard_width - writer.write(EDStatic.endBodyHtml(tErddapUrl)); - writer.write("\n\n"); - - //essential - writer.flush(); + } catch (Exception e) { + EDStatic.rethrowClientAbortException(e); //first thing in catch{} + writer.write(EDStatic.htmlForException(e)); + throw e; } finally { + writer.write(EDStatic.endBodyHtml(tErddapUrl)); + writer.write(""); if (!dimensionValuesInMemory) setDimensionValuesToNull(); @@ -11497,7 +11501,7 @@ public String[] wcsQueryToDapQuery(HashMap wcsQueryMap) throws T * @throws Throwable if trouble (there shouldn't be) */ public void wcsDatasetHtml(String loggedInAs, Writer writer) throws Throwable { - + String tErddapUrl = EDStatic.erddapUrl(loggedInAs); String wcsUrl = tErddapUrl + "/wcs/" + datasetID + "/" + wcsServer; diff --git a/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDGridAggregateExistingDimension.java b/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDGridAggregateExistingDimension.java index be58fea58..c5c86e6a6 100644 --- a/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDGridAggregateExistingDimension.java +++ b/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDGridAggregateExistingDimension.java @@ -619,21 +619,19 @@ public static String generateDatasetsXml(String serverType, String startUrl, throw new RuntimeException("ERROR: No matching URLs were found."); if (sa.length == 1) - return EDDGridFromDap.generateDatasetsXml(true, //writeDirections, + return EDDGridFromDap.generateDatasetsXml( sa[0], null, null, null, tReloadEveryNMinutes, null); //multiple URLs, so aggregate them //outer EDDGridAggregateExistingDimension sb.append( - directionsForGenerateDatasetsXml() + - "-->\n\n" + "\n" + "\n"); //first child -- fully defined - sb.append(EDDGridFromDap.generateDatasetsXml(false, //writeDirections, + sb.append(EDDGridFromDap.generateDatasetsXml( sa[0], null, null, null, tReloadEveryNMinutes, null)); @@ -669,36 +667,6 @@ public static void testGenerateDatasetsXml() throws Throwable { "https://thredds1.pfeg.noaa.gov/thredds/catalog/Satellite/aggregsatMH/chla/catalog.xml", ".*", 1440); //recursive expected = -"\n" + -"\n" + "\n" + "\n" + "\n" + @@ -913,36 +881,6 @@ public static void testGenerateDatasetsXml() throws Throwable { "month_[0-9]{8}_v11l35flk\\.nc\\.gz", //note: v one one L 1440); expected = -"\n" + -"\n" + "\n" + "\n" + "\n" + diff --git a/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDGridFromAudioFiles.java b/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDGridFromAudioFiles.java index 099055266..bec119a6d 100644 --- a/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDGridFromAudioFiles.java +++ b/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDGridFromAudioFiles.java @@ -400,21 +400,18 @@ public static String generateDatasetsXml( //write results sb.append( - directionsForGenerateDatasetsXml() + - "-->\n" + - "\n" + "\n" + - " " + tReloadEveryNMinutes + "\n" + - " -1\n" + " " + XML.encodeAsXML(defGraph) + "\n" + " " + XML.encodeAsXML(defData) + "\n" + + " " + tReloadEveryNMinutes + "\n" + + (String2.isUrl(tCacheFromUrl)? + " " + XML.encodeAsXML(tCacheFromUrl) + "\n" : + " " + suggestUpdateEveryNMillis(tFileDir) + "\n") + " " + XML.encodeAsXML(tFileDir) + "\n" + " " + XML.encodeAsXML(tFileNameRegex) + "\n" + " true\n" + " .*\n" + - (String2.isRemote(tCacheFromUrl)? - " " + XML.encodeAsXML(tCacheFromUrl) + "\n" : "") + " last\n" + " " + tMatchNDigits + "\n" + " false\n" + @@ -462,14 +459,11 @@ public static void testGenerateDatasetsXml() throws Throwable { -1, null, null) + "\n"; String expected = -directionsForGenerateDatasetsXml() + -"-->\n" + -"\n" + "\n" + -" 1440\n" + -" -1\n" + " channel_1[0][(0):(1)]&.draw=lines&.vars=elapsedTime|time\n" + " &time=min(time)\n" + +" 1440\n" + +" 10000\n" + " /erddapTest/audio/floatWav/\n" + " aco_acoustic\\.[0-9]{8}_[0-9]{6}\\.wav\n" + " true\n" + @@ -595,14 +589,11 @@ public static void testGenerateDatasetsXml2() throws Throwable { -1, null, null) + "\n"; String expected = -directionsForGenerateDatasetsXml() + -"-->\n" + -"\n" + "\n" + -" 1440\n" + -" -1\n" + " channel_1[0][(0):(1)]&.draw=lines&.vars=elapsedTime|time\n" + " &time=min(time)\n" + +" 1440\n" + +" 10000\n" + " /erddapTest/audio/wav/\n" + " aco_acoustic\\.[0-9]{8}_[0-9]{6}\\.wav\n" + " true\n" + diff --git a/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDGridFromDap.java b/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDGridFromDap.java index 99a50962e..87d4407c7 100644 --- a/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDGridFromDap.java +++ b/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDGridFromDap.java @@ -921,7 +921,6 @@ public PrimitiveArray[] getSourceData(Table tDirTable, Table tFileTable, *

If this fails because no Grid or Array variables found, it automatically calls * EDDTableFromDapSequence.generateDatasetsXml to see if that works. * - * @param writeDirections * @param tLocalSourceUrl the base url for the dataset (no extension), e.g., * "https://thredds1.pfeg.noaa.gov/thredds/dodsC/satellite/BA/ssta/5day" * @param das The das for the tLocalSourceUrl, or null. @@ -940,7 +939,7 @@ public PrimitiveArray[] getSourceData(Table tDirTable, Table tFileTable, * @throws Throwable if trouble, e.g., if no Grid or Array variables are found. * If no trouble, then a valid dataset.xml chunk has been returned. */ - public static String generateDatasetsXml(boolean writeDirections, + public static String generateDatasetsXml( String tLocalSourceUrl, DAS das, DDS dds, String dimensionNames[], int tReloadEveryNMinutes, Attributes externalAddGlobalAttributes) throws Throwable { @@ -1023,8 +1022,6 @@ public static String generateDatasetsXml(boolean writeDirections, boolean otherComboFound = false; String sourceDimensionNamesInBrackets = null; String destDimensionNamesInBrackets = null; - if (writeDirections) - results.append(directionsForGenerateDatasetsXml() + "-->\n\n"); NEXT_VAR: while (vars.hasMoreElements()) { BaseType bt = (BaseType)vars.nextElement(); @@ -1097,7 +1094,7 @@ else if (bt instanceof DArray) if (!alreadyExisted) { //It shouldn't fail. But if it does, keep going. try { - results.append(generateDatasetsXml(false, //writeDirections handled above + results.append(generateDatasetsXml( tLocalSourceUrl, das, dds, tDimensionNames, tReloadEveryNMinutes, externalAddGlobalAttributes)); } catch (Throwable t) { @@ -1468,7 +1465,7 @@ public static void safelyGenerateDatasetsXml(String tLocalSourceUrl, tLocalSourceUrl = EDStatic.updateUrls(tLocalSourceUrl); //http: to https: try { //append to results (it should succeed completely, or fail) - results.write(generateDatasetsXml(false, tLocalSourceUrl, + results.write(generateDatasetsXml(tLocalSourceUrl, null, null, null, tReloadEveryNMinutes, externalAddGlobalAttributes)); time = System.currentTimeMillis() - time; @@ -1613,8 +1610,6 @@ public static void runGenerateDatasetsXmlFromThreddsCatalog( Writer results = new BufferedWriter(new OutputStreamWriter( new BufferedOutputStream(new FileOutputStream(resultsFileName)), String2.ISO_8859_1)); try { - results.write(directionsForGenerateDatasetsXml() + "-->\n\n"); - //crawl THREDDS catalog crawlThreddsCatalog( oLocalSourceUrl == null? @@ -1927,7 +1922,6 @@ public static String generateErdThreddsDatasetXml(String search1, String search2 int mainCount = 0; StringBuilder sb = new StringBuilder(); - sb.append(directionsForGenerateDatasetsXml()); while (true) { //search for and extract from... @@ -4815,9 +4809,6 @@ public static void testGenerateDatasetsXml() throws Throwable { String2.log("\n*** EDDGridFromDap.testGenerateDatasetsXml"); String expected1 = -directionsForGenerateDatasetsXml() + -"-->\n" + -"\n" + "\n" + " http://apdrc.soest.hawaii.edu/dods/public_data/SODA/soda_pop2.1.6\n" + " 43200\n" + @@ -5018,7 +5009,7 @@ public static void testGenerateDatasetsXml() throws Throwable { "\n"; try { - String results = generateDatasetsXml(true, url, + String results = generateDatasetsXml(url, null, null, null, -1, null); Test.ensureEqual(results.substring(0, expected1.length()), expected1, @@ -5067,9 +5058,6 @@ public static void testGenerateDatasetsXml2() throws Throwable { String2.log("\n*** EDDGridFromDap.testGenerateDatasetsXml2"); String expected1 = -directionsForGenerateDatasetsXml() + -"-->\n" + -"\n" + "\n" + " https://coastwatch.pfeg.noaa.gov/erddap/griddap/erdGAsstahday\n" + " 60\n" + //60 or 180, important test of suggestReloadEveryNMinutes @@ -5238,7 +5226,7 @@ public static void testGenerateDatasetsXml2() throws Throwable { "\n"; try { - String results = generateDatasetsXml(true, url, + String results = generateDatasetsXml(url, null, null, null, -1, null); Test.ensureEqual(results.substring(0, expected1.length()), expected1, @@ -5271,7 +5259,7 @@ public static void testGenerateDatasetsXml3() throws Throwable { String url = "http://oos.soest.hawaii.edu/thredds/dodsC/pacioos/ncom/global/NCOM_Global_Ocean_Model_fmrc.ncd"; try { - String results = generateDatasetsXml(true, url, + String results = generateDatasetsXml(url, null, null, new String[]{"run", "time"}, -1, null); throw new RuntimeException("Shouldn't get here."); @@ -8902,7 +8890,7 @@ public static void testValidMinMax() throws Throwable { public static void testGenerateDatasetsXml4() throws Throwable { String2.log("*** EDDGridFromDap.testGenerateDatasetsXml4"); try { - String results = generateDatasetsXml(false, + String results = generateDatasetsXml( "https://thredds.jpl.nasa.gov/thredds/dodsC/OceanTemperature/AVHRR_SST_METOP_A_GLB-OSISAF-L3C-v1.0.nc", null, null, null, 10080, null); String expected = @@ -9368,7 +9356,7 @@ public static void testGenerateDatasetsXml4() throws Throwable { public static void testGenerateDatasetsXml5() throws Throwable { String2.log("*** EDDGridFromDap.testGenerateDatasetsXml5"); try { - String results = generateDatasetsXml(false, + String results = generateDatasetsXml( "https://oceanwatch.pfeg.noaa.gov/thredds/dodsC/satellite/MUR41/ssta/1day", null, null, null, -1, null); String2.log(results); @@ -9965,9 +9953,6 @@ public static void testFromNccsv() throws Throwable { String2.log("\n*** EDDGridFromDap.testFromJson"); String expected = -directionsForGenerateDatasetsXml() + -"-->\n" + -"\n" + "\n" + " https://opendap.jpl.nasa.gov/opendap/allData/amsre/L3/sst_1deg_1mo/tos_AMSRE_L3_v7_200206-201012.nc\n" + " 43200\n" + @@ -10091,7 +10076,7 @@ public static void testFromNccsv() throws Throwable { "\n"; try { - String results = generateDatasetsXml(true, url, + String results = generateDatasetsXml(url, null, null, null, -1, null); Test.ensureEqual(results, expected, @@ -11093,86 +11078,86 @@ public static void testActualRange() throws Throwable { results = String2.directReadFrom88591File(tDir + tName); expected = "Dataset {\n" + -" Float64 time[time = 1183];\n" + //time=# changes here and below +" Float64 time[time = 1203];\n" + //time=# changes here and below " Float64 latitude[latitude = 62];\n" + " Float64 longitude[longitude = 122];\n" + " GRID {\n" + " ARRAY:\n" + -" Float32 SST[time = 1183][latitude = 62][longitude = 122];\n" + +" Float32 SST[time = 1203][latitude = 62][longitude = 122];\n" + " MAPS:\n" + -" Float64 time[time = 1183];\n" + +" Float64 time[time = 1203];\n" + " Float64 latitude[latitude = 62];\n" + " Float64 longitude[longitude = 122];\n" + " } SST;\n" + " GRID {\n" + " ARRAY:\n" + -" Float32 SSS[time = 1183][latitude = 62][longitude = 122];\n" + +" Float32 SSS[time = 1203][latitude = 62][longitude = 122];\n" + " MAPS:\n" + -" Float64 time[time = 1183];\n" + +" Float64 time[time = 1203];\n" + " Float64 latitude[latitude = 62];\n" + " Float64 longitude[longitude = 122];\n" + " } SSS;\n" + " GRID {\n" + " ARRAY:\n" + -" Float32 pCO2sw[time = 1183][latitude = 62][longitude = 122];\n" + +" Float32 pCO2sw[time = 1203][latitude = 62][longitude = 122];\n" + " MAPS:\n" + -" Float64 time[time = 1183];\n" + +" Float64 time[time = 1203];\n" + " Float64 latitude[latitude = 62];\n" + " Float64 longitude[longitude = 122];\n" + " } pCO2sw;\n" + " GRID {\n" + " ARRAY:\n" + -" Float32 TA[time = 1183][latitude = 62][longitude = 122];\n" + +" Float32 TA[time = 1203][latitude = 62][longitude = 122];\n" + " MAPS:\n" + -" Float64 time[time = 1183];\n" + +" Float64 time[time = 1203];\n" + " Float64 latitude[latitude = 62];\n" + " Float64 longitude[longitude = 122];\n" + " } TA;\n" + " GRID {\n" + " ARRAY:\n" + -" Float32 TC[time = 1183][latitude = 62][longitude = 122];\n" + +" Float32 TC[time = 1203][latitude = 62][longitude = 122];\n" + " MAPS:\n" + -" Float64 time[time = 1183];\n" + +" Float64 time[time = 1203];\n" + " Float64 latitude[latitude = 62];\n" + " Float64 longitude[longitude = 122];\n" + " } TC;\n" + " GRID {\n" + " ARRAY:\n" + -" Float32 pH[time = 1183][latitude = 62][longitude = 122];\n" + +" Float32 pH[time = 1203][latitude = 62][longitude = 122];\n" + " MAPS:\n" + -" Float64 time[time = 1183];\n" + +" Float64 time[time = 1203];\n" + " Float64 latitude[latitude = 62];\n" + " Float64 longitude[longitude = 122];\n" + " } pH;\n" + " GRID {\n" + " ARRAY:\n" + -" Float32 SSA[time = 1183][latitude = 62][longitude = 122];\n" + +" Float32 SSA[time = 1203][latitude = 62][longitude = 122];\n" + " MAPS:\n" + -" Float64 time[time = 1183];\n" + +" Float64 time[time = 1203];\n" + " Float64 latitude[latitude = 62];\n" + " Float64 longitude[longitude = 122];\n" + " } SSA;\n" + " GRID {\n" + " ARRAY:\n" + -" Float32 HCO3[time = 1183][latitude = 62][longitude = 122];\n" + +" Float32 HCO3[time = 1203][latitude = 62][longitude = 122];\n" + " MAPS:\n" + -" Float64 time[time = 1183];\n" + +" Float64 time[time = 1203];\n" + " Float64 latitude[latitude = 62];\n" + " Float64 longitude[longitude = 122];\n" + " } HCO3;\n" + " GRID {\n" + " ARRAY:\n" + -" Float32 CO3[time = 1183][latitude = 62][longitude = 122];\n" + +" Float32 CO3[time = 1203][latitude = 62][longitude = 122];\n" + " MAPS:\n" + -" Float64 time[time = 1183];\n" + +" Float64 time[time = 1203];\n" + " Float64 latitude[latitude = 62];\n" + " Float64 longitude[longitude = 122];\n" + " } CO3;\n" + " GRID {\n" + " ARRAY:\n" + -" Float32 surface_flag[time = 1183][latitude = 62][longitude = 122];\n" + +" Float32 surface_flag[time = 1203][latitude = 62][longitude = 122];\n" + " MAPS:\n" + -" Float64 time[time = 1183];\n" + +" Float64 time[time = 1203];\n" + " Float64 latitude[latitude = 62];\n" + " Float64 longitude[longitude = 122];\n" + " } surface_flag;\n" + diff --git a/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDGridFromEDDTable.java b/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDGridFromEDDTable.java index 043c34f79..43d76d432 100644 --- a/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDGridFromEDDTable.java +++ b/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDGridFromEDDTable.java @@ -831,9 +831,7 @@ public static String generateDatasetsXml(String eddTableID, } //write the information - StringBuilder results = new StringBuilder(directionsForGenerateDatasetsXml()); - results.append( - "-->\n\n"); + StringBuilder results = new StringBuilder(); results.append( "\n" + -"\n" + "\n" + " 10080\n" + " 1000\n" + diff --git a/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDGridFromMatFiles.javaINACTIVE b/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDGridFromMatFiles.javaINACTIVE index c5740bef7..5847671a3 100644 --- a/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDGridFromMatFiles.javaINACTIVE +++ b/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDGridFromMatFiles.javaINACTIVE @@ -427,15 +427,13 @@ public class EDDGridFromMatFiles extends EDDGridFromFiles { //gather the results String tDatasetID = suggestDatasetID(tFileDir + tFileNameRegex); - sb.append(directionsForGenerateDatasetsXml()); if (nGridsAtSource > dataAddTable.nColumns()) sb.append( - "!!! The source for " + tDatasetID + " has nGridVariables=" + nGridsAtSource + ",\n" + - "but this dataset will only serve " + dataAddTable.nColumns() + - " because the others use different dimensions.\n"); + "\n"); sb.append( - "-->\n\n" + "\n" + " " + tReloadEveryNMinutes + "\n" + @@ -502,9 +500,6 @@ public class EDDGridFromMatFiles extends EDDGridFromFiles { String expected = -directionsForGenerateDatasetsXml() + -"-->\n" + -"\n" + "\n" + " 10080\n" + " " + EDStatic.unitTestDataDir + "erdQSwind1day/\n" + diff --git a/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDGridFromMergeIRFiles.java b/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDGridFromMergeIRFiles.java index 54c91639d..62077e50d 100644 --- a/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDGridFromMergeIRFiles.java +++ b/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDGridFromMergeIRFiles.java @@ -515,22 +515,20 @@ public static String generateDatasetsXml(String tFileDir, String tFileNameRegex, StringBuilder sb = new StringBuilder(); //gather the results String tDatasetID = "mergeIR"; - sb.append(directionsForGenerateDatasetsXml()); //??? - //sb.append( "!!! The source for " + tDatasetID + " has nGridVariables=" + 2 +".\n"); + //sb.append( "\n"); sb.append( - "-->\n\n" + "\n" + " " + tReloadEveryNMinutes + "\n" + - " 10000\n" + + (String2.isUrl(tCacheFromUrl)? + " " + XML.encodeAsXML(tCacheFromUrl) + "\n" : + " " + suggestUpdateEveryNMillis(tFileDir) + "\n") + " " + XML.encodeAsXML(tFileDir) + "\n" + " " + XML.encodeAsXML(tFileNameRegex) + "\n" + " true\n" + " .*\n" + - (String2.isRemote(tCacheFromUrl)? - " " + XML.encodeAsXML(tCacheFromUrl) + "\n" : "") + " last\n" + " false\n"); @@ -641,9 +639,6 @@ public static void testGenerateDatasetsXml() throws Throwable { gdxResults.length() + " " + results.length()); String expected = -directionsForGenerateDatasetsXml() + -"-->\n" + -"\n" + "\n" + " 1440\n" + " 10000\n" + diff --git a/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDGridFromNcFiles.java b/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDGridFromNcFiles.java index 825ac7a02..5215e08e4 100644 --- a/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDGridFromNcFiles.java +++ b/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDGridFromNcFiles.java @@ -143,11 +143,8 @@ public static void testGenerateDatasetsXml() throws Throwable { gdxResults.length() + " " + results.length()); String expected = -directionsForGenerateDatasetsXml() + -"!!! The source for " + suggDatasetID + " has nGridVariables=7,\n" + -"but this dataset will only serve 3 because the others use different dimensions.\n" + -"-->\n" + -"\n" + +"\n" + "\n" + " 10080\n" + " 10000\n" + @@ -396,11 +393,8 @@ public static void testGenerateDatasetsXml2() throws Throwable { String2.unitTestBigDataDir + "geosgrib/.*"); String expected = //as of 2012-02-20. Will change if John Caron fixes bugs I reported. -directionsForGenerateDatasetsXml() + -"!!! The source for " + suggDatasetID + " has nGridVariables=17,\n" + -"but this dataset will only serve 3 because the others use different dimensions.\n" + -"-->\n" + -"\n" + +"\n" + "\n" + " 10080\n" + " 10000\n" + @@ -612,11 +606,8 @@ public static void testGenerateDatasetsXml3() throws Throwable { String expected = //wind_speed is important additional test where scale_factor=1 and add_offset=0 -directionsForGenerateDatasetsXml() + -"!!! The source for 1day_1fe9_4979_3661 has nGridVariables=14,\n" + -"but this dataset will only serve 11 because the others use different dimensions.\n" + -"-->\n" + -"\n" + +"\n" + "\n" + " 12000\n" + " 10000\n" + @@ -1094,11 +1085,8 @@ public static void testGenerateDatasetsXml4() throws Throwable { gdxResults.length() + " " + results.length()); String expected = -directionsForGenerateDatasetsXml() + -"!!! The source for 1day_328e_9133_37c0 has nGridVariables=8,\n" + -"but this dataset will only serve 5 because the others use different dimensions.\n" + -"-->\n" + -"\n" + +"\n" + "\n" + " 1440\n" + //because using updateEveryNMillis " 10000\n" + @@ -1442,18 +1430,15 @@ public static void testGenerateDatasetsXmlAwsS3() throws Throwable { gdxResults.length() + " " + results.length()); String expected = -directionsForGenerateDatasetsXml() + -"!!! The source for testAwsS3NexDcp_1136_fade_0b0e has nGridVariables=7,\n" + -"but this dataset will only serve 1 because the others use different dimensions.\n" + -"-->\n" + -"\n" + -"\n" + +"\n" + +"\n" + " 1000000\n" + +" http://nasanex.s3.amazonaws.com/NEX-DCP30/BCSD/rcp26/mon/atmos/tasmin/r1i1p1/v1.0/CONUS\n" + " /u00/data/points/testAwsS3NexDcp/\n" + " .*_CESM1-CAM5_201.*\\.nc\n" + " true\n" + " .*\n" + -" http://nasanex.s3.amazonaws.com/NEX-DCP30/BCSD/rcp26/mon/atmos/tasmin/r1i1p1/v1.0/CONUS\n" + " last\n" + " 20\n" + " false\n" + @@ -1462,7 +1447,7 @@ public static void testGenerateDatasetsXmlAwsS3() throws Throwable { " Amon\n" + " Dr. Rama Nemani: rama.nemani@nasa.gov, Dr. Bridget Thrasher: bridget@climateanalyticsgroup.org, and Dr. Mark Snyder: mark@climateanalyticsgroup.org\n" + " CF-1.4\n" + -" Wed Sep 12 14:44:16 PDT 2012\n" + +" Wed Sep 12 14:44:42 PDT 2012\n" + //varies a little with sample file " http://dx.doi.org/10.7292/W0WD3XH4\n" + " BCSD\n" + " N/A\n" + @@ -1495,7 +1480,7 @@ public static void testGenerateDatasetsXmlAwsS3() throws Throwable { " 800m\n" + " Table Amon\n" + " 800m Downscaled NEX CMIP5 Climate Projections for the Continental US\n" + -" d7ed8c4a-af11-11e2-9608-e41f13ef9be2\n" + +" da8a69d2-af11-11e2-a9d5-e41f134d5304\n" + //varies with sample file " tasmin\n" + " 1.0\n" + " \n" + @@ -4242,8 +4227,8 @@ public static void testSpeed(int firstTest, int lastTest) throws Throwable { // The advantage is: curl will detect if outputstream isn't being closed. //2018-05-17 problems with curl, switched to SSR.downloadFile String baseRequest = "http://localhost:8080/cwexperimental/griddap/testGriddedNcFiles"; - String userDapQuery = "?" + SSR.minimalPercentEncode("y_wind[(1.1999664e9)][0][][0:719]" + //719 avoids esriAsc cross lon=180 - "&.vec="); //avoid get cached response + String userDapQuery = "?" + SSR.minimalPercentEncode("y_wind[(2008-01-07T12:00:00Z)][0][][0:719]") + //719 avoids esriAsc cross lon=180 + "&.vec="; //avoid get cached response String baseOut = EDStatic.fullTestCacheDirectory + "EDDGridFromNcFilesTestSpeed"; ArrayList al; int timeOutSeconds = 120; @@ -5484,9 +5469,6 @@ public static void testRTechHdf() throws Throwable { String results = generateDatasetsXml(dir, regex, dir + fileName, DEFAULT_RELOAD_EVERY_N_MINUTES, null, null) + "\n"; //cacheFromUrl String expected = -directionsForGenerateDatasetsXml() + -"-->\n" + -"\n" + "zztop\n\n"; Test.ensureEqual(results, expected, "results.length=" + results.length() + " expected.length=" + expected.length() + @@ -6297,38 +6279,8 @@ public static void testGenerateDatasetsXmlWithRemoteThreddsFiles() throws Throwa String2.setClipboardString(results); expected = -"\n" + -"\n" + +"\n" + "\n" + " 1440\n" + " 0\n" + @@ -8081,11 +8033,8 @@ public static void testGenerateDatasetsXmlGroups() throws Throwable { DEFAULT_RELOAD_EVERY_N_MINUTES, null, null) + "\n"; //cacheFromUrl String expected = -directionsForGenerateDatasetsXml() + -"!!! The source for nc_7d6c_1a03_1145 has nGridVariables=154,\n" + -"but this dataset will only serve 1 because the others use different dimensions.\n" + -"-->\n" + -"\n" + +"\n" + "\n" + " 10080\n" + " 10000\n" + @@ -8892,7 +8841,7 @@ public static void testMakeCopyFileTasks(boolean deleteAllLocalFiles) throws Exc Test.ensureEqual(nTasks, expectedN, "nFilesToDownload"); String2.pressEnterToContinue("\nPress Enter when the download tasks are finished (" + expectedN + " minutes?)."); - + try { results = FileVisitorDNLS.oneStep(tLocalDir, tFileNameRegex, tRecursive, tPathRegex, false).dataToString(); expected = @@ -8903,6 +8852,11 @@ public static void testMakeCopyFileTasks(boolean deleteAllLocalFiles) throws Exc Test.ensureEqual(results, expected, "results=\n" + results); String2.log("\n*** EDDGridFromNcFiles.testMakeCopyFileTasks finished successfully"); + } catch (Throwable t) { + String2.pressEnterToContinue(MustBe.throwableToString(t) + + "\nUnexpected error."); + } + FileVisitorDNLS.debugMode=false; @@ -8937,18 +8891,15 @@ public static void testGenerateDatasetsXmlCopy() throws Throwable { DEFAULT_RELOAD_EVERY_N_MINUTES, tSourceUrl, null) + "\n"; //cacheFromUrl expected = -directionsForGenerateDatasetsXml() + -"!!! The source for testEDDGridCopyFiles_2192_6b1a_7764 has nGridVariables=5,\n" + -"but this dataset will only serve 1 because the others use different dimensions.\n" + -"-->\n" + -"\n" + +"\n" + "\n" + " 10080\n" + +" http://localhost:8080/cwexperimental/files/erdMWchla1day/\n" + " /u00/data/points/testEDDGridCopyFiles/\n" + " MW200219.*\\.nc(|\\.gz)\n" + " true\n" + " .*\n" + -" http://localhost:8080/cwexperimental/files/erdMWchla1day/\n" + " last\n" + " 20\n" + " false\n" + @@ -11130,7 +11081,7 @@ public static void testDapErrors() throws Throwable { * @throws Throwable if trouble */ public static void test(boolean deleteCachedDatasetInfo) throws Throwable { -/* for releases, this line should have open/close comment */ +/* for releases, this line should have open/close comment */ testNc(deleteCachedDatasetInfo); testCwHdf(deleteCachedDatasetInfo); testHdf(); diff --git a/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDGridFromNcFilesUnpacked.java b/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDGridFromNcFilesUnpacked.java index d55df4010..359aac64a 100644 --- a/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDGridFromNcFilesUnpacked.java +++ b/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDGridFromNcFilesUnpacked.java @@ -253,11 +253,8 @@ public static void testGenerateDatasetsXml() throws Throwable { gdxResults.length() + " " + results.length()); expected = -directionsForGenerateDatasetsXml() + -"!!! The source for nc_5633_008e_cd85 has nGridVariables=4,\n" + -"but this dataset will only serve 1 because the others use different dimensions.\n" + -"-->\n" + -"\n" + +"\n" + "\n" + " 10080\n" + " 10000\n" + diff --git a/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDGridFromNcLow.java b/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDGridFromNcLow.java index 0a32eb8b8..be2b60a49 100644 --- a/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDGridFromNcLow.java +++ b/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDGridFromNcLow.java @@ -613,15 +613,13 @@ else if (tFileDir.endsWith("/contents.html")) //hyrax catalog dataAddTable.columnAttributes(dv).set("actual_range", "null"); } - } else { - sb.append(directionsForGenerateDatasetsXml()); } if (nGridsAtSource > dataAddTable.nColumns()) sb.append(generateDatasetsXmlCoastwatchErdMode? "": - "!!! The source for " + tDatasetID + " has nGridVariables=" + nGridsAtSource + ",\n" + - "but this dataset will only serve " + dataAddTable.nColumns() + - " because the others use different dimensions.\n"); + "\n"); //tryToFindLLAT tryToFindLLAT( axisSourceTable, axisAddTable); //just axisTables @@ -641,20 +639,16 @@ else if (tFileDir.endsWith("/contents.html")) //hyrax catalog //write results sb.append( - (generateDatasetsXmlCoastwatchErdMode? "": "-->\n") + - "\n" + "\n" + " " + tReloadEveryNMinutes + "\n" + - (String2.isRemote(tCacheFromUrl)? "" : - " " + suggestUpdateEveryNMillis(tFileDir) + - "\n") + + (String2.isUrl(tCacheFromUrl)? + " " + XML.encodeAsXML(tCacheFromUrl) + "\n" : + " " + suggestUpdateEveryNMillis(tFileDir) + "\n") + " " + XML.encodeAsXML(tFileDir) + "\n" + " " + XML.encodeAsXML(tFileNameRegex) + "\n" + " true\n" + " .*\n" + - (String2.isRemote(tCacheFromUrl)? - " " + XML.encodeAsXML(tCacheFromUrl) + "\n" : "") + " last\n" + " " + tMatchNDigits + "\n" + " false\n" + diff --git a/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDTable.java b/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDTable.java index 937ed34d2..a5962c930 100644 --- a/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDTable.java +++ b/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDTable.java @@ -2719,50 +2719,57 @@ public void respondToDapQuery(HttpServletRequest request, //With HTML 5 and for future, best to go with UTF_8. Also, says UTF_8. OutputStream out = outputStreamSource.outputStream(String2.UTF_8); Writer writer = new BufferedWriter(new OutputStreamWriter(out, String2.UTF_8)); - writer.write(EDStatic.startHeadHtml(tErddapUrl, - title() + " - " + EDStatic.daf)); - writer.write("\n" + rssHeadLink()); - writer.write("\n\n"); - writer.write(EDStatic.startBodyHtml(loggedInAs)); - writer.write("\n"); - writer.write(HtmlWidgets.htmlTooltipScript(EDStatic.imageDirUrl(loggedInAs))); //this is a link to a script - writer.write(HtmlWidgets.dragDropScript(EDStatic.imageDirUrl(loggedInAs))); //this is a link to a script - writer.flush(); //Steve Souder says: the sooner you can send some html to user, the better - writer.write( - "

\n"); - writer.write(EDStatic.youAreHereWithHelp(loggedInAs, dapProtocol, - EDStatic.daf, - "
" + - EDStatic.dafTableTooltip + - "

" + EDStatic.EDDTableDownloadDataTooltip + - "\n" + - EDStatic.dafTableBypassTooltip + - "

")); - writeHtmlDatasetInfo(loggedInAs, writer, true, false, true, true, - userDapQuery, ""); - if (userDapQuery.length() == 0) - userDapQuery = defaultDataQuery(); //after writeHtmlDatasetInfo and before writeDapHtmlForm - writeDapHtmlForm(loggedInAs, userDapQuery, writer); - - //info at end of page - - //then das (with info about this dataset - writer.write("
\n"); - writer.write("

" + - EDStatic.dasTitle + "

\n" + - "
\n");
-            table.writeDAS(writer, SEQUENCE_NAME, true); //useful so search engines find all relevant words
-            writer.write("
\n"); - - //then dap instructions - writer.write("
 \n"); - writer.write("
\n"); - writeGeneralDapHtmlInstructions(tErddapUrl, writer, false); - writer.write("
\n"); - writer.write(EDStatic.endBodyHtml(tErddapUrl)); - writer.write("\n\n"); - writer.flush(); //essential - return; + try { + writer.write(EDStatic.startHeadHtml(tErddapUrl, + title() + " - " + EDStatic.daf)); + writer.write("\n" + rssHeadLink()); + writer.write("\n\n"); + writer.write(EDStatic.startBodyHtml(loggedInAs)); + writer.write("\n"); + writer.write(HtmlWidgets.htmlTooltipScript(EDStatic.imageDirUrl(loggedInAs))); //this is a link to a script + writer.write(HtmlWidgets.dragDropScript(EDStatic.imageDirUrl(loggedInAs))); //this is a link to a script + writer.flush(); //Steve Souder says: the sooner you can send some html to user, the better + writer.write( + "
\n"); + writer.write(EDStatic.youAreHereWithHelp(loggedInAs, dapProtocol, + EDStatic.daf, + "
" + + EDStatic.dafTableTooltip + + "

" + EDStatic.EDDTableDownloadDataTooltip + + "\n" + + EDStatic.dafTableBypassTooltip + + "

")); + writeHtmlDatasetInfo(loggedInAs, writer, true, false, true, true, + userDapQuery, ""); + if (userDapQuery.length() == 0) + userDapQuery = defaultDataQuery(); //after writeHtmlDatasetInfo and before writeDapHtmlForm + writeDapHtmlForm(loggedInAs, userDapQuery, writer); + + //info at end of page + + //then das (with info about this dataset + writer.write("
\n"); + writer.write("

" + + EDStatic.dasTitle + "

\n" + + "
\n");
+                table.writeDAS(writer, SEQUENCE_NAME, true); //useful so search engines find all relevant words
+                writer.write("
\n"); + + //then dap instructions + writer.write("
 \n"); + writer.write("
\n"); + writeGeneralDapHtmlInstructions(tErddapUrl, writer, false); + writer.write("
\n"); + } catch (Exception e) { + EDStatic.rethrowClientAbortException(e); //first thing in catch{} + writer.write(EDStatic.htmlForException(e)); + throw e; + } finally { + writer.write(EDStatic.endBodyHtml(tErddapUrl)); + writer.write("\n\n"); + writer.flush(); //essential + return; + } } if (fileTypeName.endsWith("Info") && @@ -6445,6 +6452,7 @@ public void getMinMaxTime(String loggedInAs, double lon, double lat, */ public void writeDapHtmlForm(String loggedInAs, String userDapQuery, Writer writer) throws Throwable { + HtmlWidgets widgets = new HtmlWidgets(true, EDStatic.imageDirUrl(loggedInAs)); //parse userDapQuery @@ -6735,8 +6743,8 @@ public void writeDapHtmlForm(String loggedInAs, maxs = tMinMaxTable.getStringData(dv, 1); if (mins == null) mins = ""; if (maxs == null) maxs = ""; - if (mins.length() > 18) mins = mins.substring(0, 16) + "..."; - if (maxs.length() > 18) maxs = mins.substring(0, 16) + "..."; + if (mins.length() > 20) mins = mins.substring(0, 18) + "..."; + if (maxs.length() > 20) maxs = maxs.substring(0, 18) + "..."; //web page is UTF-8, so it/browser will deal with all characters mins = String2.toJson(mins, 65536, true); //encodeNewline maxs = String2.toJson(maxs, 65536, true); //encodeNewline @@ -6869,7 +6877,6 @@ public void writeDapHtmlForm(String loggedInAs, //be nice writer.flush(); - } @@ -8747,16 +8754,16 @@ public void respondToGraphQuery(HttpServletRequest request, String loggedInAs, //*** write the header OutputStream out = outputStreamSource.outputStream(String2.UTF_8); Writer writer = new BufferedWriter(new OutputStreamWriter(out, String2.UTF_8)); - HtmlWidgets widgets = new HtmlWidgets(true, EDStatic.imageDirUrl(loggedInAs)); - writer.write(EDStatic.startHeadHtml(tErddapUrl, - title() + " - " + EDStatic.mag)); - writer.write("\n" + rssHeadLink()); - writer.write("\n\n"); - writer.write(EDStatic.startBodyHtml(loggedInAs)); - writer.write("\n"); - writer.write(HtmlWidgets.htmlTooltipScript(EDStatic.imageDirUrl(loggedInAs))); //this is a link to a script - writer.flush(); //Steve Souder says: the sooner you can send some html to user, the better try { + HtmlWidgets widgets = new HtmlWidgets(true, EDStatic.imageDirUrl(loggedInAs)); + writer.write(EDStatic.startHeadHtml(tErddapUrl, + title() + " - " + EDStatic.mag)); + writer.write("\n" + rssHeadLink()); + writer.write("\n\n"); + writer.write(EDStatic.startBodyHtml(loggedInAs)); + writer.write("\n"); + writer.write(HtmlWidgets.htmlTooltipScript(EDStatic.imageDirUrl(loggedInAs))); //this is a link to a script + writer.flush(); //Steve Souder says: the sooner you can send some html to user, the better writer.write( "
\n"); writer.write(EDStatic.youAreHereWithHelp(loggedInAs, "tabledap", @@ -10666,17 +10673,19 @@ else if (tOp == REGEX_OP_INDEX || "
\n"); writeGeneralDapHtmlInstructions(tErddapUrl, writer, false); + writer.write("
\n"); //*** end of document - } catch (Throwable t) { - EDStatic.rethrowClientAbortException(t); //first thing in catch{} - writer.write(EDStatic.htmlForException(t)); - } - writer.write("\n"); - writer.write(EDStatic.endBodyHtml(tErddapUrl)); - writer.write("\n\n"); + } catch (Exception e) { + EDStatic.rethrowClientAbortException(e); //first thing in catch{} + writer.write(EDStatic.htmlForException(e)); + throw e; + } finally { + writer.write(EDStatic.endBodyHtml(tErddapUrl)); + writer.write("\n\n"); - //essential - writer.flush(); + //essential + writer.flush(); + } } /** @@ -11080,16 +11089,16 @@ public void respondToSubsetQuery(HttpServletRequest request, widgets.enterTextSubmitsForm = true; OutputStream out = outputStreamSource.outputStream(String2.UTF_8); Writer writer = new BufferedWriter(new OutputStreamWriter(out, String2.UTF_8)); - writer.write(EDStatic.startHeadHtml(tErddapUrl, - title() + " - " + EDStatic.subset)); - writer.write("\n" + rssHeadLink()); - writer.write("\n\n"); - writer.write(EDStatic.startBodyHtml(loggedInAs)); - writer.write("\n"); - writer.write("
\n"); - writer.write(HtmlWidgets.htmlTooltipScript(EDStatic.imageDirUrl(loggedInAs))); //this is a link to a script - writer.flush(); //Steve Souder says: the sooner you can send some html to user, the better try { + writer.write(EDStatic.startHeadHtml(tErddapUrl, + title() + " - " + EDStatic.subset)); + writer.write("\n" + rssHeadLink()); + writer.write("\n\n"); + writer.write(EDStatic.startBodyHtml(loggedInAs)); + writer.write("\n"); + writer.write("
\n"); + writer.write(HtmlWidgets.htmlTooltipScript(EDStatic.imageDirUrl(loggedInAs))); //this is a link to a script + writer.flush(); //Steve Souder says: the sooner you can send some html to user, the better writer.write(EDStatic.youAreHereWithHelp(loggedInAs, dapProtocol, EDStatic.subset, "
" + EDStatic.subsetTooltip + @@ -11913,15 +11922,17 @@ relatedTable, new OutputStreamSourceSimple(out), String2.replaceAll(EDStatic.subsetWarn, "
", " ") + "\n"); } + writer.write("
\n"); } catch (Throwable t) { EDStatic.rethrowClientAbortException(t); //first thing in catch{} writer.write(EDStatic.htmlForException(t)); + throw t; + } finally { + writer.write(EDStatic.endBodyHtml(tErddapUrl)); + writer.write("\n\n"); + writer.flush(); //essential } - writer.write("
\n"); - writer.write(EDStatic.endBodyHtml(tErddapUrl)); - writer.write("\n\n"); - writer.flush(); //essential } /** diff --git a/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDTableFromAsciiFiles.java b/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDTableFromAsciiFiles.java index 9a0f0a6aa..5f569c473 100644 --- a/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDTableFromAsciiFiles.java +++ b/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDTableFromAsciiFiles.java @@ -405,32 +405,30 @@ else if (tColumnNameForExtract.length() > 0) tSortFilesBySourceNames = tSortedColumnSourceName; } sb.append( - directionsForGenerateDatasetsXml() + - " * Since the source files don't have any metadata, you must add metadata\n" + - " below, notably 'units' for each of the dataVariables.\n" + - "-->\n\n" + + "\n" + "\n" + " " + tReloadEveryNMinutes + "\n" + - " " + suggestUpdateEveryNMillis(tFileDir) + - "\n" + + (String2.isUrl(tCacheFromUrl)? + " " + XML.encodeAsXML(tCacheFromUrl) + "\n" : + " " + suggestUpdateEveryNMillis(tFileDir) + "\n") + " " + XML.encodeAsXML(tFileDir) + "\n" + " " + XML.encodeAsXML(tFileNameRegex) + "\n" + " true\n" + " .*\n" + - (String2.isRemote(tCacheFromUrl)? - " " + XML.encodeAsXML(tCacheFromUrl) + "\n" : "") + " last\n" + " " + tStandardizeWhat + "\n" + " " + charset + "\n" + " " + XML.encodeAsXML(columnSeparator) + "\n" + " " + columnNamesRow + "\n" + " " + firstDataRow + "\n" + - " " + XML.encodeAsXML(tPreExtractRegex) + "\n" + - " " + XML.encodeAsXML(tPostExtractRegex) + "\n" + - " " + XML.encodeAsXML(tExtractRegex) + "\n" + - " " + tColumnNameForExtract + "\n" + + (String2.isSomething(tColumnNameForExtract)? //Discourage Extract. Encourage sourceName=***fileName,... + " " + XML.encodeAsXML(tPreExtractRegex) + "\n" + + " " + XML.encodeAsXML(tPostExtractRegex) + "\n" + + " " + XML.encodeAsXML(tExtractRegex) + "\n" + + " " + tColumnNameForExtract + "\n" : "") + " " + XML.encodeAsXML(tSortedColumnSourceName) + "\n" + " " + XML.encodeAsXML(tSortFilesBySourceNames) + "\n" + " false\n" + @@ -487,11 +485,8 @@ public static void testGenerateDatasetsXml() throws Throwable { Test.ensureEqual(gdxResults, results, "Unexpected results from GenerateDatasetsXml.doIt."); String expected = -directionsForGenerateDatasetsXml() + -" * Since the source files don't have any metadata, you must add metadata\n" + -" below, notably 'units' for each of the dataVariables.\n" + -"-->\n" + -"\n" + +"\n" + "\n" + " 1440\n" + " 10000\n" + @@ -741,11 +736,8 @@ public static void testGenerateDatasetsXml2() throws Throwable { Test.ensureEqual(gdxResults, results, "Unexpected results from GenerateDatasetsXml.doIt."); String expected = -directionsForGenerateDatasetsXml() + -" * Since the source files don't have any metadata, you must add metadata\n" + -" below, notably 'units' for each of the dataVariables.\n" + -"-->\n" + -"\n" + +"\n" + "\n" + " 1440\n" + " 10000\n" + @@ -759,10 +751,6 @@ public static void testGenerateDatasetsXml2() throws Throwable { " \n" + " 1\n" + " 3\n" + -" \n" + -" \n" + -" \n" + -" \n" + " time\n" + " time\n" + " false\n" + @@ -887,11 +875,8 @@ public static void testGenerateDatasetsXmlWithMV() throws Throwable { -1, "", externalAddAttributes) + "\n"; String expected = -directionsForGenerateDatasetsXml() + -" * Since the source files don't have any metadata, you must add metadata\n" + -" below, notably 'units' for each of the dataVariables.\n" + -"-->\n" + -"\n" + +"\n" + "\n" + " 1440\n" + " 10000\n" + @@ -905,10 +890,6 @@ public static void testGenerateDatasetsXmlWithMV() throws Throwable { " \n" + " 1\n" + " 2\n" + -" \n" + -" \n" + -" \n" + -" \n" + " \n" + " \n" + " false\n" + @@ -3465,7 +3446,7 @@ public static void testGenerateDatasetsXmlFromInPort() throws Throwable { "There are combined 18.6 billions points of data in the full dataset. This includes data from Trackline GeoPhysics, Hydro Surveyes, Lidar, and Multibeam trackliens.\n" + "2015-09-22T22:56:00Z Steve Lewis originally created InPort catalog-item-id #27377.\n" + "2017-07-06T21:18:53Z Steve Lewis last modified InPort catalog-item-id #27377.\n" + -today + " GenerateDatasetsXml in ERDDAP v1.83 (contact: bob.simons@noaa.gov) converted inport-xml metadata from https://inport.nmfs.noaa.gov/inport-metadata/NOAA/NMFS/AKRO/inport-xml/xml/27377.xml into an ERDDAP dataset description.\n" + +today + " GenerateDatasetsXml in ERDDAP v2.01 (contact: bob.simons@noaa.gov) converted inport-xml metadata from https://inport.nmfs.noaa.gov/inport-metadata/NOAA/NMFS/AKRO/inport-xml/xml/27377.xml into an ERDDAP dataset description.\n" + " https://inport.nmfs.noaa.gov/inport-metadata/NOAA/NMFS/AKRO/inport-xml/xml/27377.xml\n" + " 1/4 degree grids multibean at a resolution of 40m\n" + "\n" + @@ -3638,7 +3619,7 @@ public static void testGenerateDatasetsXmlFromInPort() throws Throwable { "There are combined 18.6 billions points of data in the full dataset. This includes data from Trackline GeoPhysics, Hydro Surveyes, Lidar, and Multibeam trackliens.\n" + "2015-09-22T22:56:00Z Steve Lewis originally created InPort catalog-item-id #27377.\n" + "2017-07-06T21:18:53Z Steve Lewis last modified InPort catalog-item-id #27377.\n" + -today + " GenerateDatasetsXml in ERDDAP v1.83 (contact: bob.simons@noaa.gov) converted inport-xml metadata from https://inport.nmfs.noaa.gov/inport-metadata/NOAA/NMFS/AKRO/inport-xml/xml/27377.xml into an ERDDAP dataset description.\n" + +today + " GenerateDatasetsXml in ERDDAP v2.01 (contact: bob.simons@noaa.gov) converted inport-xml metadata from https://inport.nmfs.noaa.gov/inport-metadata/NOAA/NMFS/AKRO/inport-xml/xml/27377.xml into an ERDDAP dataset description.\n" + " https://inport.nmfs.noaa.gov/inport-metadata/NOAA/NMFS/AKRO/inport-xml/xml/27377.xml\n" + " 1/4 degree grids multibean at a resolution of 40m\n" + "\n" + @@ -4046,7 +4027,7 @@ public static void testGenerateDatasetsXmlFromInPort2() throws Throwable { "Lineage Step #4: Analysis of distribution\n" + "2015-09-10T12:44:50Z Nancy Roberson originally created InPort catalog-item-id #26938.\n" + "2017-03-01T12:53:25Z Jeremy Mays last modified InPort catalog-item-id #26938.\n" + -today + " GenerateDatasetsXml in ERDDAP v1.83 (contact: bob.simons@noaa.gov) converted inport-xml metadata from https://inport.nmfs.noaa.gov/inport-metadata/NOAA/NMFS/AFSC/inport-xml/xml/26938.xml into an ERDDAP dataset description.\n" + +today + " GenerateDatasetsXml in ERDDAP v2.01 (contact: bob.simons@noaa.gov) converted inport-xml metadata from https://inport.nmfs.noaa.gov/inport-metadata/NOAA/NMFS/AFSC/inport-xml/xml/26938.xml into an ERDDAP dataset description.\n" + " https://inport.nmfs.noaa.gov/inport-metadata/NOAA/NMFS/AFSC/inport-xml/xml/26938.xml\n" + " 26939\n" + " Entity\n" + @@ -4181,7 +4162,7 @@ public static void testGenerateDatasetsXmlFromInPort2() throws Throwable { "Lineage Step #4: Analysis of distribution\n" + "2015-09-10T12:44:50Z Nancy Roberson originally created InPort catalog-item-id #26938.\n" + "2017-03-01T12:53:25Z Jeremy Mays last modified InPort catalog-item-id #26938.\n" + -today + " GenerateDatasetsXml in ERDDAP v1.83 (contact: bob.simons@noaa.gov) converted inport-xml metadata from https://inport.nmfs.noaa.gov/inport-metadata/NOAA/NMFS/AFSC/inport-xml/xml/26938.xml into an ERDDAP dataset description.\n" + +today + " GenerateDatasetsXml in ERDDAP v2.01 (contact: bob.simons@noaa.gov) converted inport-xml metadata from https://inport.nmfs.noaa.gov/inport-metadata/NOAA/NMFS/AFSC/inport-xml/xml/26938.xml into an ERDDAP dataset description.\n" + " https://inport.nmfs.noaa.gov/inport-metadata/NOAA/NMFS/AFSC/inport-xml/xml/26938.xml\n" + " See Hurst, T.P., Moss, J.H., Miller, J.A., 2012. Distributional patterns of 0-group Pacific cod (Gadus macrocephalus) in the eastern Bering Sea under variable recruitment and thermal conditions. ICES Journal of Marine Science, 69: 163-174\n" + " Data was checked for outliers.\n" + @@ -5266,10 +5247,8 @@ else if (tColumnNameForExtract.length() > 0) tSortFilesBySourceNames = tSortedColumnSourceName; } sb.append( - //directionsForGenerateDatasetsXml() + - //" * Since the source files don't have any metadata, you must add metadata\n" + - //" below, notably 'units' for each of the dataVariables.\n" + - //"-->\n\n" + + //"\n" + "\n" + " \n" + diff --git a/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDTableFromAudioFiles.java b/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDTableFromAudioFiles.java index 6d3b36f17..20547e641 100644 --- a/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDTableFromAudioFiles.java +++ b/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDTableFromAudioFiles.java @@ -315,27 +315,26 @@ public static String generateDatasetsXml( tSortFilesBySourceNames = tColumnNameForExtract; } sb.append( - directionsForGenerateDatasetsXml() + - "-->\n\n" + "\n" + " " + tReloadEveryNMinutes + "\n" + - " -1\n" + + (String2.isUrl(tCacheFromUrl)? + " " + XML.encodeAsXML(tCacheFromUrl) + "\n" : + " " + suggestUpdateEveryNMillis(tFileDir) + "\n") + " " + XML.encodeAsXML(defGraph) + "\n" + " " + XML.encodeAsXML(defData) + "\n" + " " + XML.encodeAsXML(tFileDir) + "\n" + " " + XML.encodeAsXML(suggestedRegex) + "\n" + " true\n" + " .*\n" + - (String2.isRemote(tCacheFromUrl)? - " " + XML.encodeAsXML(tCacheFromUrl) + "\n" : "") + " last\n" + " " + tStandardizeWhat + "\n" + - " " + XML.encodeAsXML(tPreExtractRegex) + "\n" + - " " + XML.encodeAsXML(tPostExtractRegex) + "\n" + - " " + XML.encodeAsXML(tExtractRegex) + "\n" + - " " + XML.encodeAsXML(tColumnNameForExtract) + "\n" + + (String2.isSomething(tColumnNameForExtract)? //Discourage Extract. Encourage sourceName=***fileName,... + " " + XML.encodeAsXML(tPreExtractRegex) + "\n" + + " " + XML.encodeAsXML(tPostExtractRegex) + "\n" + + " " + XML.encodeAsXML(tExtractRegex) + "\n" + + " " + XML.encodeAsXML(tColumnNameForExtract) + "\n" : "") + " " + XML.encodeAsXML(Table.ELAPSED_TIME) + "\n" + " " + XML.encodeAsXML(tSortFilesBySourceNames) + "\n" + " false\n" + @@ -391,12 +390,9 @@ public static void testGenerateDatasetsXml() throws Throwable { Test.ensureEqual(gdxResults, results, "Unexpected results from GenerateDatasetsXml.doIt."); String expected = -directionsForGenerateDatasetsXml() + -"-->\n" + -"\n" + "\n" + " 1440\n" + -" -1\n" + +" 10000\n" + " elapsedTime,channel_1&time=min(time)&elapsedTime>=0&elapsedTime<=1&.draw=lines\n" + " &time=min(time)\n" + " /erddapTest/audio/wav/\n" + diff --git a/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDTableFromAwsXmlFiles.java b/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDTableFromAwsXmlFiles.java index 008632b25..754d13c0b 100644 --- a/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDTableFromAwsXmlFiles.java +++ b/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDTableFromAwsXmlFiles.java @@ -312,30 +312,28 @@ else if (tColumnNameForExtract.length() > 0) tSortFilesBySourceNames = tSortedColumnSourceName; } sb.append( - directionsForGenerateDatasetsXml() + - " * Since the source files don't have any metadata, you must add metadata\n" + - " below, notably 'units' for each of the dataVariables.\n" + - "-->\n\n" + + "\n" + "\n" + " " + tReloadEveryNMinutes + "\n" + - " " + suggestUpdateEveryNMillis(tFileDir) + - "\n" + + (String2.isUrl(tCacheFromUrl)? + " " + XML.encodeAsXML(tCacheFromUrl) + "\n" : + " " + suggestUpdateEveryNMillis(tFileDir) + "\n") + " " + XML.encodeAsXML(tFileDir) + "\n" + " " + XML.encodeAsXML(tFileNameRegex) + "\n" + " true\n" + " .*\n" + - (String2.isRemote(tCacheFromUrl)? - " " + XML.encodeAsXML(tCacheFromUrl) + "\n" : "") + " last\n" + " " + columnNamesRow + "\n" + " " + firstDataRow + "\n" + " " + tStandardizeWhat + "\n" + - " " + XML.encodeAsXML(tPreExtractRegex) + "\n" + - " " + XML.encodeAsXML(tPostExtractRegex) + "\n" + - " " + XML.encodeAsXML(tExtractRegex) + "\n" + - " " + XML.encodeAsXML(tColumnNameForExtract) + "\n" + + (String2.isSomething(tColumnNameForExtract)? //Discourage Extract. Encourage sourceName=***fileName,... + " " + XML.encodeAsXML(tPreExtractRegex) + "\n" + + " " + XML.encodeAsXML(tPostExtractRegex) + "\n" + + " " + XML.encodeAsXML(tExtractRegex) + "\n" + + " " + XML.encodeAsXML(tColumnNameForExtract) + "\n" : "") + " " + XML.encodeAsXML(tSortedColumnSourceName) + "\n" + " " + XML.encodeAsXML(tSortFilesBySourceNames) + "\n" + " false\n" + @@ -387,11 +385,8 @@ public static void testGenerateDatasetsXml() throws Throwable { Test.ensureEqual(gdxResults, results, "Unexpected results from GenerateDatasetsXml.doIt."); String expected = -directionsForGenerateDatasetsXml() + -" * Since the source files don't have any metadata, you must add metadata\n" + -" below, notably 'units' for each of the dataVariables.\n" + -"-->\n" + -"\n" + +"\n" + "\n" + " 1440\n" + " 10000\n" + diff --git a/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDTableFromCassandra.java b/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDTableFromCassandra.java index ba8f9f55a..c166167fc 100644 --- a/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDTableFromCassandra.java +++ b/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDTableFromCassandra.java @@ -1860,10 +1860,8 @@ else if (cassType == DataType.cdouble() || //write the information StringBuilder sb = new StringBuilder(); sb.append( - directionsForGenerateDatasetsXml() + - " *** Since Cassandra tables don't have any metadata, you must add metadata\n" + - " below, notably 'units' for each of the dataVariables.\n" + - "-->\n\n" + + "\n" + "\n" + -"\n" + +"\n" + "\n" + " 127.0.0.1\n" + " bobKeyspace\n" + @@ -2346,38 +2314,8 @@ public static void testGenerateDatasetsXml() throws Throwable { tReloadEveryNMinutes, tInfoUrl, tInstitution, tSummary, "Cassandra Static Test", new Attributes()); expected = -"\n" + -"\n" + +"\n" + "\n" + " 127.0.0.1\n" + " bobKeyspace\n" + diff --git a/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDTableFromColumnarAsciiFiles.java b/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDTableFromColumnarAsciiFiles.java index f09eabb31..aa2058bdc 100644 --- a/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDTableFromColumnarAsciiFiles.java +++ b/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDTableFromColumnarAsciiFiles.java @@ -450,31 +450,29 @@ public static String generateDatasetsXml(String tFileDir, String tFileNameRegex, if (tSortFilesBySourceNames.length() == 0) tSortFilesBySourceNames = tColumnNameForExtract; sb.append( - directionsForGenerateDatasetsXml() + - " * Since the source files don't have any metadata, you must add metadata\n" + - " below, notably 'units' for each of the dataVariables.\n" + - "-->\n\n" + + "\n" + "\n" + " " + tReloadEveryNMinutes + "\n" + - " " + suggestUpdateEveryNMillis(tFileDir) + - "\n" + + (String2.isUrl(tCacheFromUrl)? + " " + XML.encodeAsXML(tCacheFromUrl) + "\n" : + " " + suggestUpdateEveryNMillis(tFileDir) + "\n") + " " + XML.encodeAsXML(tFileDir) + "\n" + " " + XML.encodeAsXML(tFileNameRegex) + "\n" + " true\n" + " .*\n" + - (String2.isRemote(tCacheFromUrl)? - " " + XML.encodeAsXML(tCacheFromUrl) + "\n" : "") + " last\n" + " " + charset + "\n" + " " + columnNamesRow + "\n" + " " + firstDataRow + "\n" + " " + tStandardizeWhat + "\n" + - " " + XML.encodeAsXML(tPreExtractRegex) + "\n" + - " " + XML.encodeAsXML(tPostExtractRegex) + "\n" + - " " + XML.encodeAsXML(tExtractRegex) + "\n" + - " " + XML.encodeAsXML(tColumnNameForExtract) + "\n" + + (String2.isSomething(tColumnNameForExtract)? //Discourage Extract. Encourage sourceName=***fileName,... + " " + XML.encodeAsXML(tPreExtractRegex) + "\n" + + " " + XML.encodeAsXML(tPostExtractRegex) + "\n" + + " " + XML.encodeAsXML(tExtractRegex) + "\n" + + " " + XML.encodeAsXML(tColumnNameForExtract) + "\n" : "") + //" " + XML.encodeAsXML(tSortedColumnSourceName) + "\n" + " " + XML.encodeAsXML(tSortFilesBySourceNames) + "\n" + " false\n" + @@ -2113,8 +2111,6 @@ else if (tUnits.endsWith("Z") || String tSortFilesBySourceNames = ""; sb.append( - //directionsForGenerateDatasetsXml() + - //"-->\n\n" + "\n" + (tAccessibleTo == null || tAccessibleTo == "null" ? "" : @@ -3121,11 +3117,8 @@ public static void testGenerateDatasetsXml() throws Throwable { Test.ensureEqual(gdxResults, results, "Unexpected results from GenerateDatasetsXml.doIt."); String expected = -directionsForGenerateDatasetsXml() + -" * Since the source files don't have any metadata, you must add metadata\n" + -" below, notably 'units' for each of the dataVariables.\n" + -"-->\n" + -"\n" + +"\n" + "\n" + " 1440\n" + " 10000\n" + @@ -3138,10 +3131,6 @@ public static void testGenerateDatasetsXml() throws Throwable { " 3\n" + " 4\n" + " 0\n" + -" \n" + -" \n" + -" \n" + -" \n" + " \n" + " false\n" + " false\n" + diff --git a/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDTableFromDapSequence.java b/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDTableFromDapSequence.java index 72daf4a01..fbb8d2398 100644 --- a/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDTableFromDapSequence.java +++ b/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDTableFromDapSequence.java @@ -871,8 +871,6 @@ public static String generateDatasetsXml(String tLocalSourceUrl, boolean isDapper = tLocalSourceUrl.indexOf("dapper") > 0; StringBuilder sb = new StringBuilder(); sb.append( - directionsForGenerateDatasetsXml() + - "-->\n\n" + "\n" + @@ -915,9 +913,6 @@ public static void testGenerateDatasetsXml() throws Throwable { String tUrl = "http://cimt.dyndns.org:8080/dods/drds/vCTD"; String expected = -directionsForGenerateDatasetsXml() + -"-->\n" + -"\n" + "\n" + " http://cimt.dyndns.org:8080/dods/drds/vCTD\n" + " vCTD\n" + @@ -1128,7 +1123,7 @@ public static void testGenerateDatasetsXml() throws Throwable { Test.ensureEqual(gdxResults, results, "Unexpected results from GenerateDatasetsXml.doIt."); //EDDGridFromDap should fail and try EDDTableFromDapSequence and generate same result - results = EDDGridFromDap.generateDatasetsXml(true, tUrl, null, null, null, 1440, null) + "\n"; + results = EDDGridFromDap.generateDatasetsXml(tUrl, null, null, null, 1440, null) + "\n"; Test.ensureEqual(results, expected, "results=\n" + results); //ensure it is ready-to-use by making a dataset from it @@ -1158,9 +1153,6 @@ public static void testGenerateDatasetsXml2() throws Throwable { String results = generateDatasetsXml(tUrl, 1440, null) + "\n"; String expected = -directionsForGenerateDatasetsXml() + -"-->\n" + -"\n" + "\n" + " http://localhost:8080/cwexperimental/tabledap/testNccsvScalar\n" + " s\n" + diff --git a/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDTableFromDatabase.java b/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDTableFromDatabase.java index 4fc6bc995..0dcdcaf5d 100644 --- a/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDTableFromDatabase.java +++ b/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDTableFromDatabase.java @@ -1311,10 +1311,8 @@ public static String generateDatasetsXml( //write the information StringBuilder sb = new StringBuilder(); sb.append( - directionsForGenerateDatasetsXml() + - " *** Since database tables don't have any metadata, you must add metadata\n" + - " below, notably 'units' for each of the dataVariables.\n" + - "-->\n\n" + + "\n" + " 0)? catalogName + "_" : "") + @@ -1454,38 +1452,8 @@ public static void testGenerateDatasetsXml() throws Throwable { false); //doIt loop? expected = -"\n" + -"\n" + +"\n" + "\n" + " " + testUrl + "\n" + " " + testDriver + "\n" + diff --git a/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDTableFromFileNames.java b/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDTableFromFileNames.java index ac25fff7a..9c9ec3fc4 100644 --- a/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDTableFromFileNames.java +++ b/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDTableFromFileNames.java @@ -691,8 +691,6 @@ public static String generateDatasetsXml( //write the information StringBuilder sb = new StringBuilder(); sb.append( - directionsForGenerateDatasetsXml() + - "-->\n\n" + "\n" + " " + XML.encodeAsXML(tFileDir) + "\n" + @@ -770,9 +768,6 @@ public static void testGenerateDatasetsXml() throws Throwable { //datasetID changes with different unitTestDataDir String tDatasetID = "fileNames_e21d_ef79_13da"; String expected = -directionsForGenerateDatasetsXml() + -"-->\n" + -"\n" + "\n" + " " + tDir + "/\n" + " .*\\.png\n" + @@ -930,9 +925,6 @@ public static void testGenerateDatasetsXmlAwsS3() throws Throwable { String tTitle = "My Great Title"; String tDatasetID = "s3nasanex_803b_6c09_f004"; String expected = -directionsForGenerateDatasetsXml() + -"-->\n" + -"\n" + "\n" + " " + tDir + "/\n" + " " + tRegex + "\n" + diff --git a/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDTableFromHttpGet.java b/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDTableFromHttpGet.java index 603739c92..94e7fab37 100644 --- a/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDTableFromHttpGet.java +++ b/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDTableFromHttpGet.java @@ -1838,10 +1838,8 @@ public static String generateDatasetsXml( //write the information StringBuilder sb = new StringBuilder(); sb.append( - directionsForGenerateDatasetsXml() + - "\nNOTE! Since JSON Lines CSV files have no metadata, you MUST edit the chunk\n" + - "of datasets.xml below to add all of the metadata (especially \"units\").\n" + - "-->\n\n" + + "\n" + "\n" + -"\n" + +"\n" + "\n" + " 1440\n" + " -1\n" + diff --git a/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDTableFromHyraxFiles.java b/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDTableFromHyraxFiles.java index 39c9ea683..80787b432 100644 --- a/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDTableFromHyraxFiles.java +++ b/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDTableFromHyraxFiles.java @@ -540,8 +540,6 @@ else if (tColumnNameForExtract.length() > 0) tSortFilesBySourceNames = tSortedColumnSourceName; } sb.append( - directionsForGenerateDatasetsXml() + - "-->\n\n" + "\n" + @@ -553,10 +551,11 @@ else if (tColumnNameForExtract.length() > 0) " .*\n" + " last\n" + " " + tStandardizeWhat + "\n" + - " " + XML.encodeAsXML(tPreExtractRegex) + "\n" + - " " + XML.encodeAsXML(tPostExtractRegex) + "\n" + - " " + XML.encodeAsXML(tExtractRegex) + "\n" + - " " + XML.encodeAsXML(tColumnNameForExtract) + "\n" + + (String2.isSomething(tColumnNameForExtract)? //Discourage Extract. Encourage sourceName=***fileName,... + " " + XML.encodeAsXML(tPreExtractRegex) + "\n" + + " " + XML.encodeAsXML(tPostExtractRegex) + "\n" + + " " + XML.encodeAsXML(tExtractRegex) + "\n" + + " " + XML.encodeAsXML(tColumnNameForExtract) + "\n" : "") + " " + XML.encodeAsXML(tSortedColumnSourceName) + "\n" + " " + XML.encodeAsXML(tSortFilesBySourceNames) + "\n" + " false\n" + @@ -597,9 +596,6 @@ public static void testGenerateDatasetsXml() throws Throwable { new Attributes()); String expected = -directionsForGenerateDatasetsXml() + -"-->\n" + -"\n" + "\n" + " 2880\n" + " 0\n" + @@ -609,10 +605,6 @@ public static void testGenerateDatasetsXml() throws Throwable { " .*\n" + " last\n" + " 0\n" + -" \n" + -" \n" + -" \n" + -" \n" + " time\n" + " time\n" + " false\n" + @@ -873,9 +865,6 @@ public static void testGenerateDatasetsXml2() throws Throwable { at gov.noaa.pfel.coastwatch.TestAll.main(TestAll.java:1395) */ String expected = -directionsForGenerateDatasetsXml() + -"-->\n" + -"\n" + "\n\n" + "\n" + " " + tReloadEveryNMinutes + "\n" + - " " + suggestUpdateEveryNMillis(tFileDir) + - "\n" + + (String2.isUrl(tCacheFromUrl)? + " " + XML.encodeAsXML(tCacheFromUrl) + "\n" : + " " + suggestUpdateEveryNMillis(tFileDir) + "\n") + " " + XML.encodeAsXML(tFileDir) + "\n" + " " + XML.encodeAsXML(suggestedRegex) + "\n" + " true\n" + " .*\n" + - (String2.isRemote(tCacheFromUrl)? - " " + XML.encodeAsXML(tCacheFromUrl) + "\n" : "") + " last\n" + " " + tStandardizeWhat + "\n" + - " " + XML.encodeAsXML(tPreExtractRegex) + "\n" + - " " + XML.encodeAsXML(tPostExtractRegex) + "\n" + - " " + XML.encodeAsXML(tExtractRegex) + "\n" + - " " + XML.encodeAsXML(tColumnNameForExtract) + "\n" + + (String2.isSomething(tColumnNameForExtract)? //Discourage Extract. Encourage sourceName=***fileName,... + " " + XML.encodeAsXML(tPreExtractRegex) + "\n" + + " " + XML.encodeAsXML(tPostExtractRegex) + "\n" + + " " + XML.encodeAsXML(tExtractRegex) + "\n" + + " " + XML.encodeAsXML(tColumnNameForExtract) + "\n" : "")+ " " + XML.encodeAsXML(tSortFilesBySourceNames) + "\n" + " false\n" + " false\n"); @@ -417,9 +415,6 @@ public static void testGenerateDatasetsXml() throws Throwable { Test.ensureEqual(gdxResults, results, "Unexpected results from GenerateDatasetsXml.doIt."); String expected = -directionsForGenerateDatasetsXml() + -"-->\n" + -"\n" + "\n" + " 1440\n" + " 10000\n" + @@ -429,10 +424,6 @@ public static void testGenerateDatasetsXml() throws Throwable { " .*\n" + " last\n" + " 0\n" + -" \n" + -" \n" + -" \n" + -" \n" + " time\n" + " false\n" + " false\n" + diff --git a/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDTableFromJsonlCSVFiles.java b/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDTableFromJsonlCSVFiles.java index f5eaa5488..c265ead3b 100644 --- a/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDTableFromJsonlCSVFiles.java +++ b/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDTableFromJsonlCSVFiles.java @@ -316,29 +316,28 @@ public static String generateDatasetsXml( // tSortFilesBySourceNames = tSortedColumnSourceName; } sb.append( - directionsForGenerateDatasetsXml() + - "\nNOTE! Since JSON Lines CSV files have no metadata, you MUST edit the chunk\n" + - "of datasets.xml below to add all of the metadata (especially \"units\").\n" + - "-->\n\n" + + "\n" + " different md5 "\" active=\"true\">\n" + " " + tReloadEveryNMinutes + "\n" + - " -1\n" + + (String2.isUrl(tCacheFromUrl)? + " " + XML.encodeAsXML(tCacheFromUrl) + "\n" : + " " + suggestUpdateEveryNMillis(tFileDir) + "\n") + " " + XML.encodeAsXML(tFileDir) + "\n" + " " + XML.encodeAsXML(suggestedRegex) + "\n" + " true\n" + " .*\n" + - (String2.isRemote(tCacheFromUrl)? - " " + XML.encodeAsXML(tCacheFromUrl) + "\n" : "") + " last\n" + " " + tStandardizeWhat + "\n" + - " " + XML.encodeAsXML(tPreExtractRegex) + "\n" + - " " + XML.encodeAsXML(tPostExtractRegex) + "\n" + - " " + XML.encodeAsXML(tExtractRegex) + "\n" + - " " + XML.encodeAsXML(tColumnNameForExtract) + "\n" + + (String2.isSomething(tColumnNameForExtract)? //Discourage Extract. Encourage sourceName=***fileName,... + " " + XML.encodeAsXML(tPreExtractRegex) + "\n" + + " " + XML.encodeAsXML(tPostExtractRegex) + "\n" + + " " + XML.encodeAsXML(tExtractRegex) + "\n" + + " " + XML.encodeAsXML(tColumnNameForExtract) + "\n" : "") + //" " + XML.encodeAsXML(tSortedColumnSourceName) + "\n" + " " + XML.encodeAsXML(tSortFilesBySourceNames) + "\n" + " false\n" + @@ -397,25 +396,17 @@ public static void testGenerateDatasetsXml() throws Throwable { Test.ensureEqual(gdxResults, results, "Unexpected results from GenerateDatasetsXml.doIt."); String expected = -directionsForGenerateDatasetsXml() + -"\n" + -"NOTE! Since JSON Lines CSV files have no metadata, you MUST edit the chunk\n" + -"of datasets.xml below to add all of the metadata (especially \"units\").\n" + -"-->\n" + -"\n" + +"\n" + "\n" + " 1440\n" + -" -1\n" + +" 10000\n" + " /erddapTest/jsonl/\n" + " sampleCSV\\.jsonl\n" + " true\n" + " .*\n" + " last\n" + " 0\n" + -" \n" + -" \n" + -" \n" + -" \n" + " ship time\n" + " false\n" + " true\n" + diff --git a/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDTableFromMultidimNcFiles.java b/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDTableFromMultidimNcFiles.java index 7338f3e34..3dcdf8878 100644 --- a/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDTableFromMultidimNcFiles.java +++ b/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDTableFromMultidimNcFiles.java @@ -329,26 +329,24 @@ public static String generateDatasetsXml( if (tSortFilesBySourceNames.length() == 0) tSortFilesBySourceNames = tColumnNameForExtract; sb.append( - directionsForGenerateDatasetsXml() + - "-->\n\n" + "\n" + " " + tReloadEveryNMinutes + "\n" + - " " + suggestUpdateEveryNMillis(tFileDir) + - "\n" + + (String2.isUrl(tCacheFromUrl)? + " " + XML.encodeAsXML(tCacheFromUrl) + "\n" : + " " + suggestUpdateEveryNMillis(tFileDir) + "\n") + " " + XML.encodeAsXML(tFileDir) + "\n" + " " + XML.encodeAsXML(suggestedRegex) + "\n" + " true\n" + " .*\n" + - (String2.isRemote(tCacheFromUrl)? - " " + XML.encodeAsXML(tCacheFromUrl) + "\n" : "") + " last\n" + " " + tStandardizeWhat + "\n" + - " " + XML.encodeAsXML(tPreExtractRegex) + "\n" + - " " + XML.encodeAsXML(tPostExtractRegex) + "\n" + - " " + XML.encodeAsXML(tExtractRegex) + "\n" + - " " + XML.encodeAsXML(tColumnNameForExtract) + "\n" + + (String2.isSomething(tColumnNameForExtract)? //Discourage Extract. Encourage sourceName=***fileName,... + " " + XML.encodeAsXML(tPreExtractRegex) + "\n" + + " " + XML.encodeAsXML(tPostExtractRegex) + "\n" + + " " + XML.encodeAsXML(tExtractRegex) + "\n" + + " " + XML.encodeAsXML(tColumnNameForExtract) + "\n" : "") + //" " + XML.encodeAsXML(tSortedColumnSourceName) + "\n" + " " + ("" + tRemoveMVRows).toLowerCase() + "\n" + " " + XML.encodeAsXML(tSortFilesBySourceNames) + "\n" + @@ -394,9 +392,6 @@ public static void testGenerateDatasetsXml() throws Throwable { null) + "\n"; String expected = -directionsForGenerateDatasetsXml() + -"-->\n" + -"\n" + "\n" + " 1440\n" + " 10000\n" + @@ -1846,9 +1841,6 @@ public static void testGenerateDatasetsXmlSeaDataNet() throws Throwable { String2.setClipboardString(results); String expected = -directionsForGenerateDatasetsXml() + -"-->\n" + -"\n" + "\n" + " 1440\n" + " 10000\n" + @@ -1858,10 +1850,6 @@ public static void testGenerateDatasetsXmlSeaDataNet() throws Throwable { " .*\n" + " last\n" + " 0\n" + -" \n" + -" \n" + -" \n" + -" \n" + " true\n" + " \n" + " false\n" + @@ -2301,9 +2289,6 @@ public static void testGenerateDatasetsXmlDimensions() throws Throwable { null) + "\n"; String expected = -directionsForGenerateDatasetsXml() + -"-->\n" + -"\n" + "\n" + " 1440\n" + " 10000\n" + @@ -2313,10 +2298,6 @@ public static void testGenerateDatasetsXmlDimensions() throws Throwable { " .*\n" + " last\n" + " 4355\n" + -" \n" + -" \n" + -" \n" + -" \n" + " false\n" + " TIME\n" + " false\n" + diff --git a/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDTableFromNWISDV.javaINACTIVE b/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDTableFromNWISDV.javaINACTIVE index b7bddf722..93769f287 100644 --- a/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDTableFromNWISDV.javaINACTIVE +++ b/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDTableFromNWISDV.javaINACTIVE @@ -1440,7 +1440,6 @@ public class EDDTableFromNWISDV extends EDDTable{ tPublicWaterMLUrl + "?" + tParameterCode + "_" + tStatisticCode + "_" + nonQualifierVars.toString()); sb.append( - (includeInstructions? directionsForGenerateDatasetsXml() + "-->\n\n" : "") + "\n" + " " + XML.encodeAsXML(tLocalWaterMLUrl) + "\n" + @@ -1692,9 +1691,6 @@ public class EDDTableFromNWISDV extends EDDTable{ NWISDailyValueQualificationCodes); String expected = -directionsForGenerateDatasetsXml() + -"-->\n" + -"\n" + "\n" + " http://interim.waterservices.usgs.gov/NWISQuery/GetDV1\n" + " 1000000000\n" + diff --git a/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDTableFromNcCFFiles.java b/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDTableFromNcCFFiles.java index 9b7177cb3..fe1f9d50e 100644 --- a/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDTableFromNcCFFiles.java +++ b/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDTableFromNcCFFiles.java @@ -306,26 +306,24 @@ public static String generateDatasetsXml( if (tSortFilesBySourceNames.length() == 0) tSortFilesBySourceNames = tColumnNameForExtract; sb.append( - directionsForGenerateDatasetsXml() + - "-->\n\n" + "\n" + " " + tReloadEveryNMinutes + "\n" + - " " + suggestUpdateEveryNMillis(tFileDir) + - "\n" + + (String2.isUrl(tCacheFromUrl)? + " " + XML.encodeAsXML(tCacheFromUrl) + "\n" : + " " + suggestUpdateEveryNMillis(tFileDir) + "\n") + " " + XML.encodeAsXML(tFileDir) + "\n" + " " + XML.encodeAsXML(suggestedRegex) + "\n" + " true\n" + " .*\n" + - (String2.isRemote(tCacheFromUrl)? - " " + XML.encodeAsXML(tCacheFromUrl) + "\n" : "") + " last\n" + " " + tStandardizeWhat + "\n" + - " " + XML.encodeAsXML(tPreExtractRegex) + "\n" + - " " + XML.encodeAsXML(tPostExtractRegex) + "\n" + - " " + XML.encodeAsXML(tExtractRegex) + "\n" + - " " + XML.encodeAsXML(tColumnNameForExtract) + "\n" + + (String2.isSomething(tColumnNameForExtract)? //Discourage Extract. Encourage sourceName=***fileName,... + " " + XML.encodeAsXML(tPreExtractRegex) + "\n" + + " " + XML.encodeAsXML(tPostExtractRegex) + "\n" + + " " + XML.encodeAsXML(tExtractRegex) + "\n" + + " " + XML.encodeAsXML(tColumnNameForExtract) + "\n" : "") + " " + XML.encodeAsXML(tSortFilesBySourceNames) + "\n" + " false\n" + " false\n"); @@ -388,9 +386,6 @@ public static void testGenerateDatasetsXml() throws Throwable { Test.ensureEqual(gdxResults, results, "Unexpected results from GenerateDatasetsXml.doIt."); String expected = -directionsForGenerateDatasetsXml() + -"-->\n" + -"\n" + "\n" + " 1440\n" + " 10000\n" + @@ -400,10 +395,6 @@ public static void testGenerateDatasetsXml() throws Throwable { " .*\n" + " last\n" + " 0\n" + -" \n" + -" \n" + -" \n" + -" \n" + " line_station time\n" + " false\n" + " false\n" + @@ -662,9 +653,6 @@ public static void testGenerateDatasetsXml2() throws Throwable { Test.ensureEqual(gdxResults, results, "Unexpected results from GenerateDatasetsXml.doIt."); String expected = -directionsForGenerateDatasetsXml() + -"-->\n" + -"\n" + "\n" + " 1440\n" + " 10000\n" + @@ -674,10 +662,6 @@ public static void testGenerateDatasetsXml2() throws Throwable { " .*\n" + " last\n" + " 0\n" + -" \n" + -" \n" + -" \n" + -" \n" + " WOD_cruise_identifier, time\n" + " false\n" + " false\n" + diff --git a/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDTableFromNcFiles.java b/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDTableFromNcFiles.java index 6c1fd3686..330bf7e8d 100644 --- a/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDTableFromNcFiles.java +++ b/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDTableFromNcFiles.java @@ -450,26 +450,24 @@ else if (tColumnNameForExtract.length() > 0) tSortFilesBySourceNames = tSortedColumnSourceName; } sb.append( - directionsForGenerateDatasetsXml() + - "-->\n\n" + "\n" + " " + tReloadEveryNMinutes + "\n" + - " " + suggestUpdateEveryNMillis(tFileDir) + - "\n" + + (String2.isUrl(tCacheFromUrl)? + " " + XML.encodeAsXML(tCacheFromUrl) + "\n" : + " " + suggestUpdateEveryNMillis(tFileDir) + "\n") + " " + XML.encodeAsXML(tFileDir) + "\n" + " " + XML.encodeAsXML(suggestedRegex) + "\n" + " true\n" + " .*\n" + - (String2.isRemote(tCacheFromUrl)? - " " + XML.encodeAsXML(tCacheFromUrl) + "\n" : "") + " last\n" + " " + tStandardizeWhat + "\n" + - " " + XML.encodeAsXML(tPreExtractRegex) + "\n" + - " " + XML.encodeAsXML(tPostExtractRegex) + "\n" + - " " + XML.encodeAsXML(tExtractRegex) + "\n" + - " " + XML.encodeAsXML(tColumnNameForExtract) + "\n" + + (String2.isSomething(tColumnNameForExtract)? //Discourage Extract. Encourage sourceName=***fileName,... + " " + XML.encodeAsXML(tPreExtractRegex) + "\n" + + " " + XML.encodeAsXML(tPostExtractRegex) + "\n" + + " " + XML.encodeAsXML(tExtractRegex) + "\n" + + " " + XML.encodeAsXML(tColumnNameForExtract) + "\n" : "") + " " + XML.encodeAsXML(tSortedColumnSourceName) + "\n" + " " + XML.encodeAsXML(tSortFilesBySourceNames) + "\n" + " false\n" + @@ -530,9 +528,6 @@ public static void testGenerateDatasetsXml() throws Throwable { Test.ensureEqual(gdxResults, results, "Unexpected results from GenerateDatasetsXml.doIt."); String expected = -directionsForGenerateDatasetsXml() + -"-->\n" + -"\n" + "\n" + " 1440\n" + " 10000\n" + @@ -559,8 +554,8 @@ public static void testGenerateDatasetsXml() throws Throwable { " dave.foley@noaa.gov\n" + " NOAA CoastWatch, West Coast Node\n" + " http://coastwatch.pfeg.noaa.gov\n" + -" 2019-06-07\n" + //changes -" 2019-06-07\n" + //changes +" 2019-07-01\n" + //changes +" 2019-07-01\n" + //changes " -79.099\n" + " 32.501\n" + " 32.501\n" + @@ -588,7 +583,7 @@ public static void testGenerateDatasetsXml() throws Throwable { " The National Data Buoy Center (NDBC) distributes meteorological data from moored buoys maintained by NDBC and others. Moored buoys are the weather sentinels of the sea. They are deployed in the coastal and offshore waters from the western Atlantic to the Pacific Ocean around Hawaii, and from the Bering Sea to the South Pacific. NDBC's moored buoys measure and transmit barometric pressure; wind direction, speed, and gust; air and sea temperature; and wave energy spectra from which significant wave height, dominant wave period, and average wave period are derived. Even the direction of wave propagation is measured on many moored buoys. \n" + "\n" + //changes 2 places... date is old, but this is what's in the file "This dataset has both historical data (quality controlled, before 2018-11-01T00:00:00) and near real time data (less quality controlled, from 2018-11-01T00:00:00 on).\n" + -" 2019-06-07T21:00:00Z\n" + //changes +" 2019-07-01T15:00:00Z\n" + //changes " P1H\n" + " 1978-06-27T13:00:00Z\n" + " NOAA NDBC Standard Meteorological\n" + @@ -626,7 +621,7 @@ public static void testGenerateDatasetsXml() throws Throwable { " double\n" + " \n" + -"\n" + "\n" + " 1440\n" + -" 10000\n" + +" https://coastwatch.pfeg.noaa.gov/erddap/files/fedCalLandings/\n" + " /u00/data/points/testEDDTableCopyFiles/\n" + " 19\\d7\\.nc\n" + " true\n" + " .*\n" + -" https://coastwatch.pfeg.noaa.gov/erddap/files/fedCalLandings/\n" + " last\n" + " 0\n" + -" \n" + -" \n" + -" \n" + -" \n" + " time\n" + " region year\n" + " false\n" + @@ -17624,7 +17611,7 @@ public static void testCopyFilesGenerateDatasetsXml() throws Throwable { String tDatasetID = "testEDDTableCopyFiles_e52a_9290_6c34"; EDD.deleteCachedDatasetInfo(tDatasetID); EDD edd = oneFromXmlFragment(null, results); - Math2.sleep(25000); + Math2.sleep(20000); String2.pressEnterToContinue( "\n*** When the tasks are finished, press Enter."); edd = oneFromXmlFragment(null, results); @@ -18075,7 +18062,7 @@ public static void testCacheFiles(boolean deleteCachedInfo) throws Throwable { " }\n" + " station_id {\n" + " Int32 _FillValue 2147483647;\n" + -" Int32 actual_range 1, 34760170;\n" + //changes +" Int32 actual_range 1, 35341816;\n" + //changes " String cf_role \"profile_id\";\n" + " String comment \"Identification number of the station (profile) in the GTSPP Continuously Managed Database\";\n" + " String ioos_category \"Identifier\";\n" + @@ -18120,7 +18107,7 @@ public static void testCacheFiles(boolean deleteCachedInfo) throws Throwable { " }\n" + " time {\n" + " String _CoordinateAxisType \"Time\";\n" + -" Float64 actual_range 4.811229e+8, 1.55369232e+9;\n" + //changes +" Float64 actual_range 4.811229e+8, 1.5591264e+9;\n" + //changes " String axis \"T\";\n" + " String ioos_category \"Time\";\n" + " String long_name \"Time\";\n" + @@ -18182,7 +18169,7 @@ public static void testCacheFiles(boolean deleteCachedInfo) throws Throwable { " }\n" + " NC_GLOBAL {\n" + " String acknowledgment \"These data were acquired from the US NOAA National Oceanographic Data Center (NODC) on " + - "2019-05-10 from https://www.nodc.noaa.gov/GTSPP/.\";\n" + //changes + "2019-06-10 from https://www.nodc.noaa.gov/GTSPP/.\";\n" + //changes " String cdm_altitude_proxy \"depth\";\n" + " String cdm_data_type \"TrajectoryProfile\";\n" + " String cdm_profile_variables \"station_id, longitude, latitude, time\";\n" + @@ -18580,7 +18567,7 @@ public static void testDapErrors() throws Throwable { " code=404;\n" + " message=\"Not Found: Your query produced no matching results. " + "(No data matches time>2050-01-01T00:00:00Z because the numeric variable's source " + - "min=1970-02-26T20:00:00Z, max=2019-06-07T21:00:00Z, and hasNaN=false.)\";\n" + //end date changes + "min=1970-02-26T20:00:00Z, max=2019-07-01T15:00:00Z, and hasNaN=false.)\";\n" + //end date changes "})", "results=\n" + results + comment); @@ -18652,7 +18639,7 @@ public static void testDapErrors() throws Throwable { " code=404;\n" + " message=\"Not Found: Your query produced no matching results. (No data matches " + "time>2050-01-01T00:00:00Z because the numeric variable's source min=1970-02-26T20:00:00Z, " + - "max=2019-06-07T21:00:00Z, and hasNaN=false.)\";\n" + //end date changes + "max=2019-07-01T15:00:00Z, and hasNaN=false.)\";\n" + //end date changes "})", "results=\n" + results + comment); diff --git a/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDTableFromNccsvFiles.java b/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDTableFromNccsvFiles.java index 4afc167cc..729ec4901 100644 --- a/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDTableFromNccsvFiles.java +++ b/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDTableFromNccsvFiles.java @@ -314,25 +314,24 @@ public static String generateDatasetsXml( // tSortFilesBySourceNames = tSortedColumnSourceName; } sb.append( - directionsForGenerateDatasetsXml() + - "-->\n\n" + "\n" + " " + tReloadEveryNMinutes + "\n" + - " -1\n" + + (String2.isUrl(tCacheFromUrl)? + " " + XML.encodeAsXML(tCacheFromUrl) + "\n" : + " " + suggestUpdateEveryNMillis(tFileDir) + "\n") + " " + XML.encodeAsXML(tFileDir) + "\n" + " " + XML.encodeAsXML(suggestedRegex) + "\n" + " true\n" + " .*\n" + - (String2.isRemote(tCacheFromUrl)? - " " + XML.encodeAsXML(tCacheFromUrl) + "\n" : "") + " last\n" + " " + tStandardizeWhat + "\n" + - " " + XML.encodeAsXML(tPreExtractRegex) + "\n" + - " " + XML.encodeAsXML(tPostExtractRegex) + "\n" + - " " + XML.encodeAsXML(tExtractRegex) + "\n" + - " " + XML.encodeAsXML(tColumnNameForExtract) + "\n" + + (String2.isSomething(tColumnNameForExtract)? //Discourage Extract. Encourage sourceName=***fileName,... + " " + XML.encodeAsXML(tPreExtractRegex) + "\n" + + " " + XML.encodeAsXML(tPostExtractRegex) + "\n" + + " " + XML.encodeAsXML(tExtractRegex) + "\n" + + " " + XML.encodeAsXML(tColumnNameForExtract) + "\n" : "") + //" " + XML.encodeAsXML(tSortedColumnSourceName) + "\n" + " " + XML.encodeAsXML(tSortFilesBySourceNames) + "\n" + " false\n" + @@ -391,22 +390,15 @@ public static void testGenerateDatasetsXml() throws Throwable { Test.ensureEqual(gdxResults, results, "Unexpected results from GenerateDatasetsXml.doIt."); String expected = -directionsForGenerateDatasetsXml() + -"-->\n" + -"\n" + "\n" + " 1440\n" + -" -1\n" + +" 10000\n" + " /erddapTest/nccsv/\n" + " sampleScalar\\.csv\n" + " true\n" + " .*\n" + " last\n" + " 0\n" + -" \n" + -" \n" + -" \n" + -" \n" + " ship time\n" + " false\n" + " true\n" + @@ -2465,7 +2457,7 @@ public static void testChar() throws Throwable { expected = //"//https://coastwatch.pfeg.noaa.gov/erddap/download/NCCSV.html[10]\n" + //"//2017-04-21T21:32:32[10]\n" + -"//ERDDAP - Version 1.83[10]\n" + +"//ERDDAP - Version 2.01[10]\n" + "//http://localhost:8080/cwexperimental/tabledap/testNccsvScalar.html[10]\n" + "//ODV Spreadsheet V4.0[10]\n" + "//GeneralField[10]\n" + diff --git a/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDTableFromOBIS.java b/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDTableFromOBIS.java index fc6a40a06..c56129c04 100644 --- a/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDTableFromOBIS.java +++ b/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDTableFromOBIS.java @@ -743,8 +743,6 @@ public static String generateDatasetsXml( //generate the datasets.xml StringBuilder sb = new StringBuilder(); sb.append( -directionsForGenerateDatasetsXml() + -"-->\n\n" + "\n" + " " + XML.encodeAsXML(tLocalSourceUrl) + "\n" + @@ -794,9 +792,6 @@ public static void testGenerateDatasetsXml() throws Throwable { Test.ensureEqual(gdxResults, results, "Unexpected results from GenerateDatasetsXml.doIt."); expected = -directionsForGenerateDatasetsXml() + -"-->\n" + -"\n" + "\n" + " http://iobis.marine.rutgers.edu/digir2/DiGIR.php\n" + " OBIS-SEAMAP\n" + diff --git a/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDTableFromSOS.java b/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDTableFromSOS.java index 0ea47ea96..0d8f1ad8f 100644 --- a/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDTableFromSOS.java +++ b/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDTableFromSOS.java @@ -7035,7 +7035,7 @@ public static String generateDatasetsXml(boolean useCachedInfo, throw new RuntimeException("No stations found! Try a different sosServerType.\n" + " offeringTag=" + offeringTag + " stationID name tag=" + ""); - sb.append("You have to choose which observedProperties will be used for this dataset.\n\n"); + sb.append("\n\n"); + "-->\n"); sb.append( "\n" + -"\n" + "\n" + " https://sdf.ndbc.noaa.gov/sos/server.php\n" + " 1.0.0\n" + @@ -7673,12 +7641,10 @@ else if (tInstitution.equals("National Ocean Service")) //write the station/obsProp info StringBuilder sb = new StringBuilder(); sb.append( - directionsForGenerateDatasetsXml() + - "\n" + //make these comments stand out - " * !!! Some of the standard_names below probably aren't CF standard names!\n" + + "\n\n"); + sb.append("-->\n"); //make a dataset for each observed_property diff --git a/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDTableFromThreddsFiles.java b/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDTableFromThreddsFiles.java index 6aa3d610b..bf0c845c6 100644 --- a/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDTableFromThreddsFiles.java +++ b/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDTableFromThreddsFiles.java @@ -800,8 +800,6 @@ else if (tColumnNameForExtract.length() > 0) tSortFilesBySourceNames = tSortedColumnSourceName; } sb.append( - directionsForGenerateDatasetsXml() + - "-->\n\n" + "\n" + " " + tReloadEveryNMinutes + "\n" + @@ -812,10 +810,11 @@ else if (tColumnNameForExtract.length() > 0) " .*\n" + " last\n" + " " + tStandardizeWhat + "\n" + - " " + XML.encodeAsXML(tPreExtractRegex) + "\n" + - " " + XML.encodeAsXML(tPostExtractRegex) + "\n" + - " " + XML.encodeAsXML(tExtractRegex) + "\n" + - " " + XML.encodeAsXML(tColumnNameForExtract) + "\n" + + (String2.isSomething(tColumnNameForExtract)? //Discourage Extract. Encourage sourceName=***fileName,... + " " + XML.encodeAsXML(tPreExtractRegex) + "\n" + + " " + XML.encodeAsXML(tPostExtractRegex) + "\n" + + " " + XML.encodeAsXML(tExtractRegex) + "\n" + + " " + XML.encodeAsXML(tColumnNameForExtract) + "\n" : "") + " " + XML.encodeAsXML(tSortedColumnSourceName) + "\n" + " " + XML.encodeAsXML(tSortFilesBySourceNames) + "\n" + " false\n" + @@ -870,9 +869,6 @@ public static void testGenerateDatasetsXml() throws Throwable { Test.ensureEqual(gdxResults, results, "Unexpected results from GenerateDatasetsXml.doIt."); String expected = -directionsForGenerateDatasetsXml() + -"-->\n" + -"\n" + "\n" + " 1440\n" + " 0\n" + @@ -1876,7 +1872,7 @@ public static void testShipWTEP(boolean deleteCachedInfo) throws Throwable { Test.repeatedlyTestLinesMatch(results.substring(0, tPo + seek.length()), expected, "\nresults=\n" + results); -//+ " http://tds.coaps.fsu.edu/thredds/catalog/samos/data/research/WTEP/catalog.xml\n" + +//+ " https://tds.coaps.fsu.edu/thredds/catalog/samos/data/research/WTEP/catalog.xml\n" + //today + " http://localhost:8080/cwexperimental/tabledap/ expected = "fsuNoaaShipWTEP.das\";\n" + @@ -1895,7 +1891,7 @@ public static void testShipWTEP(boolean deleteCachedInfo) throws Throwable { " String naming_authority \"gov.noaa.pfeg.coastwatch\";\n" + " Float64 Northernmost_Northing 70.05856;\n" + " String receipt_order \"01\";\n" + -" String sourceUrl \"http://tds.coaps.fsu.edu/thredds/catalog/samos/data/research/WTEP/catalog.xml\";\n" + +" String sourceUrl \"https://tds.coaps.fsu.edu/thredds/catalog/samos/data/research/WTEP/catalog.xml\";\n" + " Float64 Southernmost_Northing -46.45;\n" + " String standard_name_vocabulary \"CF Standard Name Table v55\";\n" + " String subsetVariables \"cruise_id, expocode, facility, ID, IMO, platform, platform_version, site\";\n" + @@ -2032,10 +2028,10 @@ public static void testGetThreddsFileInfo() throws Throwable { StringArray fileName = new StringArray(); LongArray fileLastMod = new LongArray(); - //*** test http://tds.coaps.fsu.edu/thredds/catalog/samos/data/quick/WTEP/2011/catalog.html + //*** test https://tds.coaps.fsu.edu/thredds/catalog/samos/data/quick/WTEP/2011/catalog.html if (true) { getThreddsFileInfo( - "http://tds.coaps.fsu.edu/thredds/catalog/samos/data/quick/WTEP/catalog.xml", + "https://tds.coaps.fsu.edu/thredds/catalog/samos/data/quick/WTEP/catalog.xml", "WTEP_2011082.*\\.nc", true, "", //recursive, pathRegex fileDir, fileName, fileLastMod); @@ -2050,15 +2046,15 @@ public static void testGetThreddsFileInfo() throws Throwable { results = fileDir.toNewlineString(); expected = -"http://tds.coaps.fsu.edu/thredds/dodsC/samos/data/quick/WTEP/2011/\n" + -"http://tds.coaps.fsu.edu/thredds/dodsC/samos/data/quick/WTEP/2011/\n" + -"http://tds.coaps.fsu.edu/thredds/dodsC/samos/data/quick/WTEP/2011/\n" + -"http://tds.coaps.fsu.edu/thredds/dodsC/samos/data/quick/WTEP/2011/\n" + -"http://tds.coaps.fsu.edu/thredds/dodsC/samos/data/quick/WTEP/2011/\n" + -"http://tds.coaps.fsu.edu/thredds/dodsC/samos/data/quick/WTEP/2011/\n" + -"http://tds.coaps.fsu.edu/thredds/dodsC/samos/data/quick/WTEP/2011/\n" + -"http://tds.coaps.fsu.edu/thredds/dodsC/samos/data/quick/WTEP/2011/\n" + -"http://tds.coaps.fsu.edu/thredds/dodsC/samos/data/quick/WTEP/2011/\n"; +"https://tds.coaps.fsu.edu/thredds/dodsC/samos/data/quick/WTEP/2011/\n" + +"https://tds.coaps.fsu.edu/thredds/dodsC/samos/data/quick/WTEP/2011/\n" + +"https://tds.coaps.fsu.edu/thredds/dodsC/samos/data/quick/WTEP/2011/\n" + +"https://tds.coaps.fsu.edu/thredds/dodsC/samos/data/quick/WTEP/2011/\n" + +"https://tds.coaps.fsu.edu/thredds/dodsC/samos/data/quick/WTEP/2011/\n" + +"https://tds.coaps.fsu.edu/thredds/dodsC/samos/data/quick/WTEP/2011/\n" + +"https://tds.coaps.fsu.edu/thredds/dodsC/samos/data/quick/WTEP/2011/\n" + +"https://tds.coaps.fsu.edu/thredds/dodsC/samos/data/quick/WTEP/2011/\n" + +"https://tds.coaps.fsu.edu/thredds/dodsC/samos/data/quick/WTEP/2011/\n"; Test.ensureEqual(results, expected, "results=\n" + results); results = fileName.toNewlineString(); diff --git a/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDTableFromWFSFiles.java b/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDTableFromWFSFiles.java index 51dc27b2b..fa7640613 100644 --- a/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDTableFromWFSFiles.java +++ b/WEB-INF/classes/gov/noaa/pfel/erddap/dataset/EDDTableFromWFSFiles.java @@ -300,10 +300,8 @@ public static String generateDatasetsXml(String tSourceUrl, String tRowElementXP //write the information StringBuilder sb = new StringBuilder(); sb.append( - directionsForGenerateDatasetsXml() + - " * Since the source files don't have any metadata, you must add metadata\n" + - " below, notably 'units' for each of the dataVariables.\n" + - "-->\n\n" + + "\n" + "\n" + " " + tReloadEveryNMinutes + "\n" + @@ -319,10 +317,11 @@ public static String generateDatasetsXml(String tSourceUrl, String tRowElementXP //" UTF-8\n" + //" 1\n" + //" 3\n" + - //" " + XML.encodeAsXML(tPreExtractRegex) + "\n" + - //" " + XML.encodeAsXML(tPostExtractRegex) + "\n" + - //" " + XML.encodeAsXML(tExtractRegex) + "\n" + - //" " + tColumnNameForExtract + "\n" + + //(String2.isSomething(tColumnNameForExtract)? //Discourage Extract. Encourage sourceName=***fileName,... + // " " + XML.encodeAsXML(tPreExtractRegex) + "\n" + + // " " + XML.encodeAsXML(tPostExtractRegex) + "\n" + + // " " + XML.encodeAsXML(tExtractRegex) + "\n" + + // " " + tColumnNameForExtract + "\n" : "") + //" " + tSortedColumnSourceName + "\n" + //" " + tSortFilesBySourceNames + "\n"); sb.append(writeAttsForDatasetsXml(false, dataSourceTable.globalAttributes(), " ")); @@ -365,11 +364,8 @@ public static void testGenerateDatasetsXml(boolean tDevelopmentMode) throws Thro externalAddAttributes) + "\n"; String expected = -directionsForGenerateDatasetsXml() + -" * Since the source files don't have any metadata, you must add metadata\n" + -" below, notably 'units' for each of the dataVariables.\n" + -"-->\n" + -"\n" + +"\n" + "\n" + " 10080\n" + " 0\n" + diff --git a/WEB-INF/classes/gov/noaa/pfel/erddap/util/EDStatic.java b/WEB-INF/classes/gov/noaa/pfel/erddap/util/EDStatic.java index 97051889f..c1ae2b6c5 100644 --- a/WEB-INF/classes/gov/noaa/pfel/erddap/util/EDStatic.java +++ b/WEB-INF/classes/gov/noaa/pfel/erddap/util/EDStatic.java @@ -165,6 +165,7 @@ public class EDStatic { *
1.80 released on 2017-08-04 *
1.82 released on 2018-01-26 *
2.00 released on 2019-06-26 + *
2.01 released on 2019-07-02 * * For master branch releases, this will be a floating point * number with 2 decimal digits, with no additional text. @@ -178,7 +179,7 @@ public class EDStatic { * A request to http.../erddap/version will return just the number (as text). * A request to http.../erddap/version_string will return the full string. */ - public static String erddapVersion = "2.00"; //see comment above + public static String erddapVersion = "2.01"; //see comment above /** * This is almost always false. @@ -4074,14 +4075,12 @@ public static String adminContact() { * aren't available. */ public static String htmlForException(Throwable t) { - String message = MustBe.getShortErrorMessage(t); - String2.log("HtmlForException is processing:\n " + - MustBe.throwableToString(t)); //log full message with stack trace + String message = MustBe.throwableToShortString(t); return "

 


\n" + "

" + errorOnWebPage + "\n" + "

" + XML.encodeAsPreHTML(message, 100) +
-            "
\n"; + "

 

\n"; } /** This interrupts/kill all of the thredds in runningThreads. diff --git a/WEB-INF/classes/gov/noaa/pfel/erddap/util/Projects2.java b/WEB-INF/classes/gov/noaa/pfel/erddap/util/Projects2.java index be5ade295..8ac153229 100644 --- a/WEB-INF/classes/gov/noaa/pfel/erddap/util/Projects2.java +++ b/WEB-INF/classes/gov/noaa/pfel/erddap/util/Projects2.java @@ -99,7 +99,7 @@ public static void copyKeywords() throws Throwable { handXmlBasePo = handXmlSource2Po; String url = handXml.substring(handXmlSource1Po + 11, handXmlSource2Po); - if (url.startsWith("http://upwell.")) + if (url.startsWith("https://upwell.")) continue; if (url.endsWith("hdayCompress")) break; @@ -211,15 +211,15 @@ public static String getKeywords(String datasetID) throws Throwable { String servers[] = { "https://coastwatch.pfeg.noaa.gov/erddap/griddap/", "https://coastwatch.pfeg.noaa.gov/erddap/tabledap/", - "http://upwell.pfeg.noaa.gov/erddap/griddap/", - "http://upwell.pfeg.noaa.gov/erddap/tabledap/"}; + "https://upwell.pfeg.noaa.gov/erddap/griddap/", + "https://upwell.pfeg.noaa.gov/erddap/tabledap/"}; String keywords = ""; String2.log("datasetID=" + datasetID); for (int serv = 0; serv < servers.length; serv++) { try { //try EDDGrid - String s = EDDGridFromDap.generateDatasetsXml(false, + String s = EDDGridFromDap.generateDatasetsXml( servers[serv] + datasetID, null, null, null, EDD.DEFAULT_RELOAD_EVERY_N_MINUTES, new Attributes()); @@ -370,7 +370,7 @@ public static void copyHyraxFiles(String urlDir, String fileNameRegex, } public static void touchUsgs() throws Throwable { -SSR.touchUrl("http://upwell.pfeg.noaa.gov/erddap/setDatasetFlag.txt?datasetID=usgs_waterservices_0125_011b_2920&flagKey=780628796", 60000); +SSR.touchUrl("https://upwell.pfeg.noaa.gov/erddap/setDatasetFlag.txt?datasetID=usgs_waterservices_0125_011b_2920&flagKey=780628796", 60000); } diff --git a/WEB-INF/classes/gov/noaa/pfel/erddap/util/messages.xml b/WEB-INF/classes/gov/noaa/pfel/erddap/util/messages.xml index 6d6b65b1f..569459916 100644 --- a/WEB-INF/classes/gov/noaa/pfel/erddap/util/messages.xml +++ b/WEB-INF/classes/gov/noaa/pfel/erddap/util/messages.xml @@ -5341,7 +5341,7 @@ please include that in the citation you create.

How to Cite ERDDAP in a Paper
If you want to cite ERDDAP itself in a scientific paper, please use something like
-Simons, R.A. 2017. ERDDAP. https://coastwatch.pfeg.noaa.gov/erddap . Monterey, CA: NOAA/NMFS/SWFSC/ERD. +Simons, R.A. 2019. ERDDAP. https://coastwatch.pfeg.noaa.gov/erddap . Monterey, CA: NOAA/NMFS/SWFSC/ERD.

What does the acronym "ERDDAP" stand for?
"ERDDAP" used to be an acronym, but it outgrew that original description. @@ -5982,9 +5982,15 @@ https://secoora.org/ http://serverfault.com https://serverfault.com +http://spray.ucsd.edu +https://spray.ucsd.edu + http://stackoverflow.com https://stackoverflow.com +http://tds.coaps.fsu.edu +https://tds.coaps.fsu.edu + http://tds.glos.us https://tds.glos.us @@ -6354,6 +6360,7 @@ https://fgdcxml.sourceforge.net https://geoport.whoi.edu/ https://geoport.whoi.edu/thredds/catalog.html https://hadobs.metoffice.com +https://hfrnet-tds.ucsd.edu/thredds/catalog.html https://hudson.dl.stevens-tech.edu/maritimeforecast/ https://hydromet-thredds.princeton.edu/erddap/index.html (http uses :8000) https://jkorpela.fi @@ -6376,8 +6383,6 @@ https://sccoos.org/erddap/index.html https://schemas.opengis.net https://sensorweb.demo.52north.org https://sfbaynutrients.sfei.org/erddap/index.html -https://spray.ucsd.edu -https://tds.coaps.fsu.edu close, but java doesn't like it yet, see OpendapHelper.testGetAttributes https://tds.marine.rutgers.edu/thredds/catalog.html https://tds.marine.rutgers.edu/erddap/info/index.html?page=1&itemsPerPage=1000 https://udig.refractions.net diff --git a/download/changes.html b/download/changes.html index e16b9401c..556d7826d 100644 --- a/download/changes.html +++ b/download/changes.html @@ -68,10 +68,37 @@

ERDDAP Changes

--> + +

Changes +in ERDDAP version 2.01 (released 2019-07-02)

+
    +
  • New Features and Changes (for users): +
      +
    • None. +
    +
  • Things ERDDAP Administrators Need to Know and Do: +
      +
    • BUG FIX: A bug in the code which generates the Data Access Form for tabledap datasets + caused that web page to be blank for some datasets. + Also, I improved the handling of unexpected errors on all HTML pages so they + will (usually) display an error message. + Thanks to Marco Alba. +
    • CHANGE: GenerateDatasetsXml no longer prints a lengthy warning at the top of the output. + Instead, please see + Editing GenerateDatasetsXml Output. + Thanks to Steven Baum. +
    • CHANGE: GenerateDatasetsXml now makes slightly different recommendations + in different situations for <updateEveryNMillis> for EDD...From...Files datasets. + Also, GenerateDatasetsXml now discourages the original "extract" system for EDDTableFromFiles datasets. +
    +
+

Changes -in ERDDAP version 2.00 (released 2019-06-18)

+in ERDDAP version 2.00 (released 2019-06-26) If you use "GenerateDatasetsXml -verbose", it will print more diagnostic messages than usual. -

DISCLAIMER: - The chunk of datasets.xml made by GenerateDatasetsXml isn't perfect. - YOU MUST READ AND EDIT THE XML BEFORE USING IT IN A PUBLIC ERDDAP. - GenerateDatasetsXml relies on a lot of rules-of-thumb which aren't always correct. - YOU ARE RESPONSIBLE FOR ENSURING THE CORRECTNESS OF THE XML THAT YOU - ADD TO ERDDAP'S datasets.xml FILE. -

Special/Pseudo Dataset Types
In general, the EDDType options in GenerateDatasetsXml @@ -6755,7 +6795,7 @@

mode is SAMOS which is used with datasets from - http://tds.coaps.fsu.edu/thredds/catalog/samos to download only the + https://tds.coaps.fsu.edu/thredds/catalog/samos to download only the files with the last version number. --> <sourceUrl>...</sourceUrl> <-- For subclasses like EDDTableFromHyraxFiles and EDDTableFromThreddsFiles, this is where @@ -8794,7 +8834,7 @@

Detailed Information about EDDTableFromHttpGet

which can be used to specify that special, hard-coded rules should be used to determine which files should be downloaded from the server. Currently, the only valid mode is SAMOS which is used with datasets - from http://tds.coaps.fsu.edu/thredds/catalog/samos to download only the files with + from https://tds.coaps.fsu.edu/thredds/catalog/samos to download only the files with the last version number.
  • See this class' superclass, EDDTableFromFiles, for information on how this class works and how to use this class.