From 546091d115a8407d193b4e1307f05eba6737d2a8 Mon Sep 17 00:00:00 2001 From: Ayush Singh Date: Wed, 7 Aug 2024 11:42:51 +0530 Subject: [PATCH 1/9] EDDGridSideBySideHandler and Test --- .../handlers/EDDGridSideBySideHandler.java | 119 +++++++++++++++++ .../pfel/erddap/handlers/HandlerFactory.java | 3 + .../erddap/handler/DatasetHandlerTests.java | 4 + .../resources/datasets/datasetHandlerTest.xml | 124 ++++++++++++++++++ 4 files changed, 250 insertions(+) create mode 100644 WEB-INF/classes/gov/noaa/pfel/erddap/handlers/EDDGridSideBySideHandler.java diff --git a/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/EDDGridSideBySideHandler.java b/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/EDDGridSideBySideHandler.java new file mode 100644 index 00000000..219f05c8 --- /dev/null +++ b/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/EDDGridSideBySideHandler.java @@ -0,0 +1,119 @@ +package gov.noaa.pfel.erddap.handlers; + +import static gov.noaa.pfel.erddap.dataset.EDDGrid.DEFAULT_MATCH_AXIS_N_DIGITS; + +import com.cohort.array.StringArray; +import com.cohort.util.String2; +import gov.noaa.pfel.erddap.dataset.EDD; +import gov.noaa.pfel.erddap.dataset.EDDGrid; +import gov.noaa.pfel.erddap.dataset.EDDGridSideBySide; +import gov.noaa.pfel.erddap.util.EDStatic; +import java.util.ArrayList; +import org.xml.sax.Attributes; +import org.xml.sax.SAXException; + +public class EDDGridSideBySideHandler extends State { + private StringBuilder content = new StringBuilder(); + private String datasetID; + private State completeState; + private SaxParsingContext context; + + public EDDGridSideBySideHandler( + SaxHandler saxHandler, String datasetID, State completeState, SaxParsingContext context) { + super(saxHandler); + this.datasetID = datasetID; + this.completeState = completeState; + this.context = context; + } + + private ArrayList tChildDatasets = new ArrayList(); + private StringBuilder messages = new StringBuilder(); + private String tAccessibleTo = null; + private String tGraphsAccessibleTo = null; + private boolean tAccessibleViaWMS = true; + private boolean tAccessibleViaFiles = EDStatic.defaultAccessibleViaFiles; + private int tMatchAxisNDigits = DEFAULT_MATCH_AXIS_N_DIGITS; + private StringArray tOnChange = new StringArray(); + private String tFgdcFile = null; + private String tIso19115File = null; + private String tDefaultDataQuery = null; + private String tDefaultGraphQuery = null; + private int tnThreads = -1; + private boolean tDimensionValuesInMemory = true; + + @Override + public void startElement(String uri, String localName, String qName, Attributes attributes) + throws SAXException { + if (localName.equals("dataset")) { + String tType = attributes.getValue("type"); + if (tType == null || !tType.startsWith("EDDGrid")) { + throw new RuntimeException( + "The datasets defined in an " + "EDDGridSideBySide must be a subclass of EDDGrid."); + } + String active = attributes.getValue("active"); + String childDatasetID = attributes.getValue("datasetID"); + State state = + HandlerFactory.getHandlerFor(tType, childDatasetID, active, this, saxHandler, context); + saxHandler.setState(state); + } + } + + @Override + public void characters(char[] ch, int start, int length) throws SAXException { + content.append(ch, start, length); + } + + @Override + public void endElement(String uri, String localName, String qName) throws Throwable { + String contentStr = content.toString().trim(); + + switch (localName) { + case "onChange" -> tOnChange.add(contentStr); + case "matchAxisNDigits" -> + tMatchAxisNDigits = String2.parseInt(contentStr, DEFAULT_MATCH_AXIS_N_DIGITS); + case "ensureAxisValuesAreEqual" -> + tMatchAxisNDigits = String2.parseBoolean(contentStr) ? 20 : 0; + case "accessibleTo" -> tAccessibleTo = contentStr; + case "graphsAccessibleTo" -> tGraphsAccessibleTo = contentStr; + case "accessibleViaWMS" -> tAccessibleViaWMS = String2.parseBoolean(contentStr); + case "accessibleViaFiles" -> tAccessibleViaFiles = String2.parseBoolean(contentStr); + case "fgdcFile" -> tFgdcFile = contentStr; + case "iso19115File" -> tIso19115File = contentStr; + case "defaultDataQuery" -> tDefaultDataQuery = contentStr; + case "defaultGraphQuery" -> tDefaultGraphQuery = contentStr; + case "nThreads" -> tnThreads = String2.parseInt(contentStr); + case "dimensionValuesInMemory" -> tDimensionValuesInMemory = String2.parseBoolean(contentStr); + case "dataset" -> { + EDDGrid[] tcds = new EDDGrid[tChildDatasets.size()]; + for (int c = 0; c < tChildDatasets.size(); c++) { + tcds[c] = (EDDGrid) tChildDatasets.get(c); + } + EDD dataset = + new EDDGridSideBySide( + datasetID, + tAccessibleTo, + tGraphsAccessibleTo, + tAccessibleViaWMS, + tAccessibleViaFiles, + tMatchAxisNDigits, + tOnChange, + tFgdcFile, + tIso19115File, + tDefaultDataQuery, + tDefaultGraphQuery, + tcds, + tnThreads, + tDimensionValuesInMemory); + this.completeState.handleDataset(dataset); + saxHandler.setState(this.completeState); + } + default -> String2.log("Unexpected end tag: " + localName); + } + content.setLength(0); + } + + @Override + public void handleDataset(EDD dataset) { + tChildDatasets.add(dataset); + } +} diff --git a/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/HandlerFactory.java b/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/HandlerFactory.java index 4b202ee8..55bea297 100644 --- a/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/HandlerFactory.java +++ b/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/HandlerFactory.java @@ -65,6 +65,9 @@ public static State getHandlerFor( case "EDDGridLon0360" -> { return new EDDGridLon0360Handler(saxHandler, datasetID, completeState, context); } + case "EDDGridSideBySide" -> { + return new EDDGridSideBySideHandler(saxHandler, datasetID, completeState, context); + } default -> { nTry--; context.getNTryAndDatasets()[0] = nTry; diff --git a/src/test/java/gov/noaa/pfel/erddap/handler/DatasetHandlerTests.java b/src/test/java/gov/noaa/pfel/erddap/handler/DatasetHandlerTests.java index 462fd999..44198be3 100644 --- a/src/test/java/gov/noaa/pfel/erddap/handler/DatasetHandlerTests.java +++ b/src/test/java/gov/noaa/pfel/erddap/handler/DatasetHandlerTests.java @@ -95,5 +95,9 @@ void parserAllDatasets() throws IOException, SAXException { EDDTableFromAsciiFiles eddTableFromAsciiFiles = (EDDTableFromAsciiFiles) context.getErddap().tableDatasetHashMap.get("testTimeAxis"); assertEquals("historical_tsi\\.csv", eddTableFromAsciiFiles.fileNameRegex()); + + EDDGridSideBySide eddGridSideBySide = + (EDDGridSideBySide) context.getErddap().gridDatasetHashMap.get("erdTAssh1day"); + assertEquals(2, eddGridSideBySide.childDatasetIDs().size()); } } diff --git a/src/test/resources/datasets/datasetHandlerTest.xml b/src/test/resources/datasets/datasetHandlerTest.xml index aa37c856..4249c796 100644 --- a/src/test/resources/datasets/datasetHandlerTest.xml +++ b/src/test/resources/datasets/datasetHandlerTest.xml @@ -399,4 +399,128 @@ + + + https://oceanwatch.pfeg.noaa.gov/thredds/dodsC/satellite/TA/sshl/1day + 10080 + + null + COARDS, CF-1.6, ACDD-1.3 + erd.data@noaa.gov + NOAA NMFS SWFSC ERD + institution + https://www.pfeg.noaa.gov + null + null + null + null + null + null + null + https://coastwatch.pfeg.noaa.gov/infog/TA_sshl_las.html + NOAA NMFS SWFSC ERD + above, absolute, altitude, archiving, aviso, coast, coastwatch, data, degrees, earth, geodetics, geoid, global, gravity, height, interpretation, level, long, ltm, mean, noaa, node, ocean, oceanography, oceans, + Earth Science > Oceans > Sea Surface Topography > Sea Surface Height, + properties, quality, satellite, science, science quality, sea, sea level, sea_surface_height_above_geoid, solid, + Earth Science > Solid Earth > Geodetics/Gravity > Geoid Properties, + ssh, surface, TAsshl, term, time, topography, validation, wcn, west + [standard] + gov.noaa.pfeg.coastwatch + null + null + null + CoastWatch (https://coastwatch.noaa.gov/) + erd.data@noaa.gov + NOAA NMFS SWFSC ERD + institution + https://www.pfeg.noaa.gov + Aviso: https://www.aviso.altimetry.fr/en/my-aviso.html . + null + CF Standard Name Table v29 + null + Sea Surface Height, Absolute, Aviso, 0.25 degrees, Global, 1992-2012, Science Quality (1 Day Composite) + + + time + + + altitude + + + lat + latitude + + + lon + longitude + + + TAsshl + ssh + + Sea Level + Sea Surface Height + -10 + 10 + + + + + + + + https://oceanwatch.pfeg.noaa.gov/thredds/dodsC/satellite/TA/sshd/1day + 10080 + + COARDS, CF-1.6, Unidata Dataset Discovery v1.0 + COARDS, CF-1.6, Unidata Dataset Discovery v1.0 + https://coastwatch.pfeg.noaa.gov/infog/TA_sshd_las.html + NOAA CoastWatch, West Coast Node + CF-12 + Sea Surface Height Deviation, Aviso, Global, Science Quality (1 Day Composite) + + + + + + + + + + + + + + + + + + time + + + altitude + + + lat + latitude + + + lon + longitude + + + TAsshd + sshd + + Sea Level + Sea Surface Height Deviation + -0.5 + 0.5 + + + + + + + \ No newline at end of file From 132aea17befcac50cb5ca5486c5ea92d769e9bf2 Mon Sep 17 00:00:00 2001 From: Ayush Singh Date: Wed, 7 Aug 2024 20:48:34 +0530 Subject: [PATCH 2/9] EDDTableAggregateRowsHandler --- .../EDDTableAggregateRowsHandler.java | 126 ++++++++++++++++++ 1 file changed, 126 insertions(+) create mode 100644 WEB-INF/classes/gov/noaa/pfel/erddap/handlers/EDDTableAggregateRowsHandler.java diff --git a/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/EDDTableAggregateRowsHandler.java b/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/EDDTableAggregateRowsHandler.java new file mode 100644 index 00000000..e857b34b --- /dev/null +++ b/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/EDDTableAggregateRowsHandler.java @@ -0,0 +1,126 @@ +package gov.noaa.pfel.erddap.handlers; + +import static gov.noaa.pfel.erddap.dataset.EDD.DEFAULT_RELOAD_EVERY_N_MINUTES; + +import com.cohort.array.StringArray; +import com.cohort.util.SimpleException; +import com.cohort.util.String2; +import gov.noaa.pfel.erddap.dataset.EDD; +import gov.noaa.pfel.erddap.dataset.EDDTable; +import gov.noaa.pfel.erddap.dataset.EDDTableAggregateRows; +import java.util.ArrayList; +import org.xml.sax.Attributes; +import org.xml.sax.SAXException; + +public class EDDTableAggregateRowsHandler extends State { + private StringBuilder content = new StringBuilder(); + private String datasetID; + private State completeState; + private SaxParsingContext context; + + public EDDTableAggregateRowsHandler( + SaxHandler saxHandler, String datasetID, State completeState, SaxParsingContext context) { + super(saxHandler); + this.datasetID = datasetID; + this.completeState = completeState; + this.context = context; + } + + private ArrayList tChildren = new ArrayList(); + private com.cohort.array.Attributes tAddGlobalAttributes = new com.cohort.array.Attributes(); + private String tAccessibleTo = null; + private String tGraphsAccessibleTo = null; + private StringArray tOnChange = new StringArray(); + private String tFgdcFile = null; + private String tIso19115File = null; + private String tSosOfferingPrefix = null; + private int tReloadEveryNMinutes = DEFAULT_RELOAD_EVERY_N_MINUTES; + private int tUpdateEveryNMillis = 0; + private String tDefaultDataQuery = null; + private String tDefaultGraphQuery = null; + private String tAddVariablesWhere = null; + + @Override + public void startElement(String uri, String localName, String qName, Attributes attributes) + throws SAXException { + switch (localName) { + case "dataset" -> { + String tType = attributes.getValue("type"); + if (tType == null || !tType.startsWith("EDDTable")) { + throw new SimpleException( + "type=\"" + + tType + + "\" is not allowed for the dataset within the EDDTableAggregateRows. " + + "The type MUST start with \"EDDTable\"."); + } + String active = attributes.getValue("active"); + String childDatasetID = attributes.getValue("datasetID"); + State state = + HandlerFactory.getHandlerFor(tType, childDatasetID, active, this, saxHandler, context); + saxHandler.setState(state); + } + case "addAttributes" -> { + State state = new AddAttributesHandler(saxHandler, tAddGlobalAttributes, this); + saxHandler.setState(state); + } + } + } + + @Override + public void characters(char[] ch, int start, int length) throws SAXException { + content.append(ch, start, length); + } + + @Override + public void endElement(String uri, String localName, String qName) throws Throwable { + String contentStr = content.toString().trim(); + + switch (localName) { + case "accessibleTo" -> tAccessibleTo = contentStr; + case "graphsAccessibleTo" -> tGraphsAccessibleTo = contentStr; + case "reloadEveryNMinutes" -> tReloadEveryNMinutes = String2.parseInt(contentStr); + case "updateEveryNMillis" -> tUpdateEveryNMillis = String2.parseInt(contentStr); + case "onChange" -> tOnChange.add(contentStr); + case "fgdcFile" -> tFgdcFile = contentStr; + case "iso19115File" -> tIso19115File = contentStr; + case "sosOfferingPrefix" -> tSosOfferingPrefix = contentStr; + case "defaultDataQuery" -> tDefaultDataQuery = contentStr; + case "defaultGraphQuery" -> tDefaultGraphQuery = contentStr; + case "addVariablesWhere" -> tAddVariablesWhere = contentStr; + case "dataset" -> { + int nChildren = tChildren.size(); + EDDTable[] ttChildren = new EDDTable[nChildren]; + for (int i = 0; i < nChildren; i++) { + ttChildren[i] = tChildren.get(i); + } + + EDD dataset = + new EDDTableAggregateRows( + context.getErddap(), + datasetID, + tAccessibleTo, + tGraphsAccessibleTo, + tOnChange, + tFgdcFile, + tIso19115File, + tSosOfferingPrefix, + tDefaultDataQuery, + tDefaultGraphQuery, + tAddVariablesWhere, + tAddGlobalAttributes, + tReloadEveryNMinutes, + tUpdateEveryNMillis, + ttChildren); + this.completeState.handleDataset(dataset); + saxHandler.setState(this.completeState); + } + default -> String2.log("Unexpected end tag: " + localName); + } + content.setLength(0); + } + + @Override + public void handleDataset(EDD dataset) { + tChildren.add((EDDTable) dataset); + } +} From cdb68308d7367d34642bb4f2bee44e83ee27a8f9 Mon Sep 17 00:00:00 2001 From: Ayush Singh Date: Wed, 7 Aug 2024 20:49:16 +0530 Subject: [PATCH 3/9] EDDTableCopyHandler --- .../erddap/handlers/EDDTableCopyHandler.java | 129 ++++++++++++++++++ .../pfel/erddap/handlers/HandlerFactory.java | 6 + 2 files changed, 135 insertions(+) create mode 100644 WEB-INF/classes/gov/noaa/pfel/erddap/handlers/EDDTableCopyHandler.java diff --git a/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/EDDTableCopyHandler.java b/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/EDDTableCopyHandler.java new file mode 100644 index 00000000..c42d3da7 --- /dev/null +++ b/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/EDDTableCopyHandler.java @@ -0,0 +1,129 @@ +package gov.noaa.pfel.erddap.handlers; + +import static gov.noaa.pfel.erddap.dataset.EDDTableCopy.defaultCheckSourceData; + +import com.cohort.array.StringArray; +import com.cohort.util.SimpleException; +import com.cohort.util.String2; +import gov.noaa.pfel.erddap.dataset.EDD; +import gov.noaa.pfel.erddap.dataset.EDDTable; +import gov.noaa.pfel.erddap.dataset.EDDTableCopy; +import gov.noaa.pfel.erddap.util.EDStatic; +import org.xml.sax.Attributes; +import org.xml.sax.SAXException; + +public class EDDTableCopyHandler extends State { + private StringBuilder content = new StringBuilder(); + private String datasetID; + private State completeState; + private SaxParsingContext context; + + public EDDTableCopyHandler( + SaxHandler saxHandler, String datasetID, State completeState, SaxParsingContext context) { + super(saxHandler); + this.datasetID = datasetID; + this.completeState = completeState; + this.context = context; + } + + private EDDTable tSourceEdd = null; + private int tReloadEveryNMinutes = Integer.MAX_VALUE; + private String tAccessibleTo = null; + private String tGraphsAccessibleTo = null; + private StringArray tOnChange = new StringArray(); + private String tFgdcFile = null; + private String tIso19115File = null; + private String tSosOfferingPrefix = null; + private String tExtractDestinationNames = ""; + private String tOrderExtractBy = ""; + private boolean checkSourceData = defaultCheckSourceData; + private boolean tSourceNeedsExpandedFP_EQ = true; + private boolean tFileTableInMemory = false; + private String tDefaultDataQuery = null; + private String tDefaultGraphQuery = null; + private String tAddVariablesWhere = null; + private boolean tAccessibleViaFiles = EDStatic.defaultAccessibleViaFiles; + private int tStandardizeWhat = Integer.MAX_VALUE; + private int tnThreads = -1; + + @Override + public void startElement(String uri, String localName, String qName, Attributes attributes) + throws SAXException { + if (localName.equals("dataset")) { + if (tSourceEdd != null) { + throw new SimpleException("Cannot Have multiple Child datasets for" + datasetID); + } + String tType = attributes.getValue("type"); + String active = attributes.getValue("active"); + String childDatasetID = attributes.getValue("datasetID"); + State state = + HandlerFactory.getHandlerFor(tType, childDatasetID, active, this, saxHandler, context); + saxHandler.setState(state); + } + } + + @Override + public void characters(char[] ch, int start, int length) throws SAXException { + content.append(ch, start, length); + } + + @Override + public void endElement(String uri, String localName, String qName) throws Throwable { + String contentStr = content.toString().trim(); + + switch (localName) { + case "accessibleTo" -> tAccessibleTo = contentStr; + case "graphsAccessibleTo" -> tGraphsAccessibleTo = contentStr; + case "onChange" -> tOnChange.add(contentStr); + case "fgdcFile" -> tFgdcFile = contentStr; + case "iso19115File" -> tIso19115File = contentStr; + case "sosOfferingPrefix" -> tSosOfferingPrefix = contentStr; + case "reloadEveryNMinutes" -> tReloadEveryNMinutes = String2.parseInt(contentStr); + case "extractDestinationNames" -> tExtractDestinationNames = contentStr; + case "orderExtractBy" -> tOrderExtractBy = contentStr; + case "checkSourceData" -> checkSourceData = String2.parseBoolean(contentStr); + case "sourceNeedsExpandedFP_EQ" -> + tSourceNeedsExpandedFP_EQ = String2.parseBoolean(contentStr); + case "fileTableInMemory" -> tFileTableInMemory = String2.parseBoolean(contentStr); + case "defaultDataQuery" -> tDefaultDataQuery = contentStr; + case "defaultGraphQuery" -> tDefaultGraphQuery = contentStr; + case "addVariablesWhere" -> tAddVariablesWhere = contentStr; + case "accessibleViaFiles" -> tAccessibleViaFiles = String2.parseBoolean(contentStr); + case "standardizeWhat" -> tStandardizeWhat = String2.parseInt(contentStr); + case "nThreads" -> tnThreads = String2.parseInt(contentStr); + case "dataset" -> { + EDD dataset = + new EDDTableCopy( + datasetID, + tAccessibleTo, + tGraphsAccessibleTo, + tOnChange, + tFgdcFile, + tIso19115File, + tSosOfferingPrefix, + tDefaultDataQuery, + tDefaultGraphQuery, + tAddVariablesWhere, + tReloadEveryNMinutes, + tStandardizeWhat, + tExtractDestinationNames, + tOrderExtractBy, + tSourceNeedsExpandedFP_EQ, + tSourceEdd, + tFileTableInMemory, + tAccessibleViaFiles, + tnThreads); + + this.completeState.handleDataset(dataset); + saxHandler.setState(this.completeState); + } + default -> String2.log("Unexpected end tag: " + localName); + } + content.setLength(0); + } + + @Override + public void handleDataset(EDD dataset) { + tSourceEdd = (EDDTable) dataset; + } +} diff --git a/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/HandlerFactory.java b/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/HandlerFactory.java index 55bea297..21ff2259 100644 --- a/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/HandlerFactory.java +++ b/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/HandlerFactory.java @@ -68,6 +68,12 @@ public static State getHandlerFor( case "EDDGridSideBySide" -> { return new EDDGridSideBySideHandler(saxHandler, datasetID, completeState, context); } + case "EDDTableAggregateRows" -> { + return new EDDTableAggregateRowsHandler(saxHandler, datasetID, completeState, context); + } + case "EDDTableCopyHandler" -> { + return new EDDTableCopyHandler(saxHandler, datasetID, completeState, context); + } default -> { nTry--; context.getNTryAndDatasets()[0] = nTry; From 9812be8157ba76239653fd01de31c1d94747d48c Mon Sep 17 00:00:00 2001 From: Ayush Singh Date: Wed, 7 Aug 2024 21:13:02 +0530 Subject: [PATCH 4/9] EDDTableFromCassandraHandler --- .../EDDTableFromCassandraHandler.java | 135 ++++++++++++++++++ 1 file changed, 135 insertions(+) create mode 100644 WEB-INF/classes/gov/noaa/pfel/erddap/handlers/EDDTableFromCassandraHandler.java diff --git a/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/EDDTableFromCassandraHandler.java b/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/EDDTableFromCassandraHandler.java new file mode 100644 index 00000000..6d37753b --- /dev/null +++ b/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/EDDTableFromCassandraHandler.java @@ -0,0 +1,135 @@ +package gov.noaa.pfel.erddap.handlers; + +import com.cohort.array.StringArray; +import com.cohort.util.String2; +import gov.noaa.pfel.erddap.dataset.EDD; +import gov.noaa.pfel.erddap.dataset.EDDTableFromCassandra; +import java.util.ArrayList; +import org.xml.sax.Attributes; +import org.xml.sax.SAXException; + +public class EDDTableFromCassandraHandler extends State { + private StringBuilder content = new StringBuilder(); + private String datasetID; + private State completeState; + + public EDDTableFromCassandraHandler( + SaxHandler saxHandler, String datasetID, State completeState) { + super(saxHandler); + this.datasetID = datasetID; + this.completeState = completeState; + } + + private com.cohort.array.Attributes tGlobalAttributes = new com.cohort.array.Attributes(); + private ArrayList tDataVariables = new ArrayList(); + private int tReloadEveryNMinutes = Integer.MAX_VALUE; + private String tAccessibleTo = null; + private String tGraphsAccessibleTo = null; + private StringArray tOnChange = new StringArray(); + private String tFgdcFile = null; + private String tIso19115File = null; + private String tSosOfferingPrefix = null; + private String tLocalSourceUrl = null; + private String tKeyspace = null; + private String tTableName = null; + private String tPartitionKeySourceNames = null; + private String tClusterColumnSourceNames = null; + private String tIndexColumnSourceNames = null; + private double tMaxRequestFraction = 1; + private String tColumnNameQuotes = ""; + private StringArray tConnectionProperties = new StringArray(); + private boolean tSourceNeedsExpandedFP_EQ = true; + private String tDefaultDataQuery = null; + private String tDefaultGraphQuery = null; + private String tAddVariablesWhere = null; + private String tPartitionKeyCSV = null; + + @Override + public void startElement(String uri, String localName, String qName, Attributes attributes) + throws SAXException { + switch (localName) { + case "addAttributes" -> { + State state = new AddAttributesHandler(saxHandler, tGlobalAttributes, this); + saxHandler.setState(state); + } + case "dataVariable" -> { + State state = new DataVariableHandler(saxHandler, tDataVariables, this); + saxHandler.setState(state); + } + } + } + + @Override + public void characters(char[] ch, int start, int length) throws SAXException { + content.append(ch, start, length); + } + + @Override + public void endElement(String uri, String localName, String qName) throws Throwable { + String contentStr = content.toString().trim(); + + switch (localName) { + case "accessibleTo" -> tAccessibleTo = contentStr; + case "graphsAccessibleTo" -> tGraphsAccessibleTo = contentStr; + case "reloadEveryNMinutes" -> tReloadEveryNMinutes = String2.parseInt(contentStr); + case "sourceUrl" -> tLocalSourceUrl = contentStr; + case "connectionProperty" -> tConnectionProperties.add(contentStr); + case "keyspace" -> tKeyspace = contentStr; + case "tableName" -> tTableName = contentStr; + case "partitionKeySourceNames" -> tPartitionKeySourceNames = contentStr; + case "clusterColumnSourceNames" -> tClusterColumnSourceNames = contentStr; + case "indexColumnSourceNames" -> tIndexColumnSourceNames = contentStr; + case "maxRequestFraction" -> tMaxRequestFraction = String2.parseDouble(contentStr); + case "columnNameQuotes" -> tColumnNameQuotes = contentStr; + case "partitionKeyCSV" -> tPartitionKeyCSV = contentStr; + case "sourceNeedsExpandedFP_EQ" -> + tSourceNeedsExpandedFP_EQ = String2.parseBoolean(contentStr); + case "onChange" -> tOnChange.add(contentStr); + case "fgdcFile" -> tFgdcFile = contentStr; + case "iso19115File" -> tIso19115File = contentStr; + case "sosOfferingPrefix" -> tSosOfferingPrefix = contentStr; + case "defaultDataQuery" -> tDefaultDataQuery = contentStr; + case "defaultGraphQuery" -> tDefaultGraphQuery = contentStr; + case "addVariablesWhere" -> tAddVariablesWhere = contentStr; + case "dataset" -> { + int ndv = tDataVariables.size(); + Object[][] ttDataVariables = new Object[ndv][]; + for (int i = 0; i < tDataVariables.size(); i++) { + ttDataVariables[i] = (Object[]) tDataVariables.get(i); + } + + EDD dataset = + new EDDTableFromCassandra( + datasetID, + tAccessibleTo, + tGraphsAccessibleTo, + tOnChange, + tFgdcFile, + tIso19115File, + tSosOfferingPrefix, + tDefaultDataQuery, + tDefaultGraphQuery, + tAddVariablesWhere, + tGlobalAttributes, + ttDataVariables, + tReloadEveryNMinutes, + tLocalSourceUrl, + tConnectionProperties.toArray(), + tKeyspace, + tTableName, + tPartitionKeySourceNames, + tClusterColumnSourceNames, + tIndexColumnSourceNames, + tPartitionKeyCSV, + tMaxRequestFraction, + tColumnNameQuotes, + tSourceNeedsExpandedFP_EQ); + + this.completeState.handleDataset(dataset); + saxHandler.setState(this.completeState); + } + default -> String2.log("Unexpected end tag: " + localName); + } + content.setLength(0); + } +} From d99f87a280318e1ab573ae85c205af269d614803 Mon Sep 17 00:00:00 2001 From: Ayush Singh Date: Wed, 7 Aug 2024 21:13:47 +0530 Subject: [PATCH 5/9] EDDTableFromDapSequenceHandler --- .../EDDTableFromDapSequenceHandler.java | 128 ++++++++++++++++++ .../pfel/erddap/handlers/HandlerFactory.java | 8 +- 2 files changed, 135 insertions(+), 1 deletion(-) create mode 100644 WEB-INF/classes/gov/noaa/pfel/erddap/handlers/EDDTableFromDapSequenceHandler.java diff --git a/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/EDDTableFromDapSequenceHandler.java b/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/EDDTableFromDapSequenceHandler.java new file mode 100644 index 00000000..7872ae5b --- /dev/null +++ b/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/EDDTableFromDapSequenceHandler.java @@ -0,0 +1,128 @@ +package gov.noaa.pfel.erddap.handlers; + +import com.cohort.array.StringArray; +import com.cohort.util.String2; +import gov.noaa.pfel.erddap.dataset.EDD; +import gov.noaa.pfel.erddap.dataset.EDDTableFromDapSequence; +import java.util.ArrayList; +import org.xml.sax.Attributes; +import org.xml.sax.SAXException; + +public class EDDTableFromDapSequenceHandler extends State { + private StringBuilder content = new StringBuilder(); + private String datasetID; + private State completeState; + + public EDDTableFromDapSequenceHandler( + SaxHandler saxHandler, String datasetID, State completeState) { + super(saxHandler); + this.datasetID = datasetID; + this.completeState = completeState; + } + + private com.cohort.array.Attributes tGlobalAttributes = new com.cohort.array.Attributes(); + private ArrayList tDataVariables = new ArrayList(); + private int tReloadEveryNMinutes = Integer.MAX_VALUE; + private String tAccessibleTo = null; + private String tGraphsAccessibleTo = null; + private StringArray tOnChange = new StringArray(); + private String tFgdcFile = null; + private String tIso19115File = null; + private String tSosOfferingPrefix = null; + private String tLocalSourceUrl = null; + private String tOuterSequenceName = null; + private String tInnerSequenceName = null; + private boolean tSourceNeedsExpandedFP_EQ = true; + private boolean tSourceCanConstrainStringEQNE = true; + private boolean tSourceCanConstrainStringGTLT = true; + private String tSourceCanConstrainStringRegex = null; + private boolean tSkipDapperSpacerRows = false; + private String tDefaultDataQuery = null; + private String tDefaultGraphQuery = null; + private String tAddVariablesWhere = null; + + @Override + public void startElement(String uri, String localName, String qName, Attributes attributes) + throws SAXException { + switch (localName) { + case "addAttributes" -> { + State state = new AddAttributesHandler(saxHandler, tGlobalAttributes, this); + saxHandler.setState(state); + } + case "dataVariable" -> { + State state = new DataVariableHandler(saxHandler, tDataVariables, this); + saxHandler.setState(state); + } + } + } + + @Override + public void characters(char[] ch, int start, int length) throws SAXException { + content.append(ch, start, length); + } + + @Override + public void endElement(String uri, String localName, String qName) throws Throwable { + String contentStr = content.toString().trim(); + + switch (localName) { + case "accessibleTo" -> tAccessibleTo = contentStr; + case "graphsAccessibleTo" -> tGraphsAccessibleTo = contentStr; + case "reloadEveryNMinutes" -> tReloadEveryNMinutes = String2.parseInt(contentStr); + case "sourceUrl" -> tLocalSourceUrl = contentStr; + case "outerSequenceName" -> tOuterSequenceName = contentStr; + case "innerSequenceName" -> tInnerSequenceName = contentStr; + case "sourceNeedsExpandedFP_EQ" -> + tSourceNeedsExpandedFP_EQ = String2.parseBoolean(contentStr); + case "sourceCanConstrainStringEQNE" -> + tSourceCanConstrainStringEQNE = String2.parseBoolean(contentStr); + case "sourceCanConstrainStringGTLT" -> + tSourceCanConstrainStringGTLT = String2.parseBoolean(contentStr); + case "sourceCanConstrainStringRegex" -> tSourceCanConstrainStringRegex = contentStr; + case "skipDapperSpacerRows" -> tSkipDapperSpacerRows = String2.parseBoolean(contentStr); + case "onChange" -> tOnChange.add(contentStr); + case "fgdcFile" -> tFgdcFile = contentStr; + case "iso19115File" -> tIso19115File = contentStr; + case "sosOfferingPrefix" -> tSosOfferingPrefix = contentStr; + case "defaultDataQuery" -> tDefaultDataQuery = contentStr; + case "defaultGraphQuery" -> tDefaultGraphQuery = contentStr; + case "addVariablesWhere" -> tAddVariablesWhere = contentStr; + case "dataset" -> { + int ndv = tDataVariables.size(); + Object[][] ttDataVariables = new Object[ndv][]; + for (int i = 0; i < tDataVariables.size(); i++) { + ttDataVariables[i] = (Object[]) tDataVariables.get(i); + } + + EDD dataset = + new EDDTableFromDapSequence( + datasetID, + tAccessibleTo, + tGraphsAccessibleTo, + tOnChange, + tFgdcFile, + tIso19115File, + tSosOfferingPrefix, + tDefaultDataQuery, + tDefaultGraphQuery, + tAddVariablesWhere, + tGlobalAttributes, + ttDataVariables, + tReloadEveryNMinutes, + tLocalSourceUrl, + tOuterSequenceName, + tInnerSequenceName, + tSourceNeedsExpandedFP_EQ, + tSourceCanConstrainStringEQNE, + tSourceCanConstrainStringGTLT, + tSourceCanConstrainStringRegex, + tSkipDapperSpacerRows); + + this.completeState.handleDataset(dataset); + saxHandler.setState(this.completeState); + } + default -> String2.log("Unexpected end tag: " + localName); + } + content.setLength(0); + } +} diff --git a/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/HandlerFactory.java b/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/HandlerFactory.java index 21ff2259..8cf66e90 100644 --- a/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/HandlerFactory.java +++ b/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/HandlerFactory.java @@ -71,9 +71,15 @@ public static State getHandlerFor( case "EDDTableAggregateRows" -> { return new EDDTableAggregateRowsHandler(saxHandler, datasetID, completeState, context); } - case "EDDTableCopyHandler" -> { + case "EDDTableCopy" -> { return new EDDTableCopyHandler(saxHandler, datasetID, completeState, context); } + case "EDDTableFromCassandra" -> { + return new EDDTableFromCassandraHandler(saxHandler, datasetID, completeState); + } + case "EDDTableFromDapSequence" -> { + return new EDDTableFromDapSequenceHandler(saxHandler, datasetID, completeState); + } default -> { nTry--; context.getNTryAndDatasets()[0] = nTry; From 6ad3cfd020be34b24984be97ff1f7eaa5b858d7d Mon Sep 17 00:00:00 2001 From: Ayush Singh Date: Wed, 7 Aug 2024 21:28:52 +0530 Subject: [PATCH 6/9] EDDTableFromDatabaseHandler --- .../handlers/EDDTableFromDatabaseHandler.java | 139 ++++++++++++++++++ .../pfel/erddap/handlers/HandlerFactory.java | 3 + 2 files changed, 142 insertions(+) create mode 100644 WEB-INF/classes/gov/noaa/pfel/erddap/handlers/EDDTableFromDatabaseHandler.java diff --git a/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/EDDTableFromDatabaseHandler.java b/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/EDDTableFromDatabaseHandler.java new file mode 100644 index 00000000..54722c65 --- /dev/null +++ b/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/EDDTableFromDatabaseHandler.java @@ -0,0 +1,139 @@ +package gov.noaa.pfel.erddap.handlers; + +import com.cohort.array.StringArray; +import com.cohort.util.String2; +import gov.noaa.pfel.erddap.dataset.EDD; +import gov.noaa.pfel.erddap.dataset.EDDTableFromDatabase; +import java.util.ArrayList; +import org.xml.sax.Attributes; +import org.xml.sax.SAXException; + +public class EDDTableFromDatabaseHandler extends State { + private StringBuilder content = new StringBuilder(); + private String datasetID; + private State completeState; + + public EDDTableFromDatabaseHandler(SaxHandler saxHandler, String datasetID, State completeState) { + super(saxHandler); + this.datasetID = datasetID; + this.completeState = completeState; + } + + private com.cohort.array.Attributes tGlobalAttributes = null; + private ArrayList tDataVariables = new ArrayList(); + private int tReloadEveryNMinutes = Integer.MAX_VALUE; + private String tAccessibleTo = null; + private String tGraphsAccessibleTo = null; + private StringArray tOnChange = new StringArray(); + private String tFgdcFile = null; + private String tIso19115File = null; + private String tSosOfferingPrefix = null; + private String tDataSourceName = null; + private String tLocalSourceUrl = null; + private String tDriverName = null; + private String tCatalogName = ""; + private String tSchemaName = ""; + private String tTableName = null; + private String tColumnNameQuotes = "\""; + private String[] tOrderBy = new String[0]; + private StringArray tConnectionProperties = new StringArray(); + private boolean tSourceNeedsExpandedFP_EQ = true; + private String tSourceCanOrderBy = "no"; + private String tSourceCanDoDistinct = "no"; + private String tDefaultDataQuery = null; + private String tDefaultGraphQuery = null; + private String tAddVariablesWhere = null; + + @Override + public void startElement(String uri, String localName, String qName, Attributes attributes) + throws SAXException { + switch (localName) { + case "addAttributes" -> { + State state = new AddAttributesHandler(saxHandler, tGlobalAttributes, this); + saxHandler.setState(state); + } + case "dataVariable" -> { + State state = new DataVariableHandler(saxHandler, tDataVariables, this); + saxHandler.setState(state); + } + } + } + + @Override + public void characters(char[] ch, int start, int length) throws SAXException { + content.append(ch, start, length); + } + + @Override + public void endElement(String uri, String localName, String qName) throws Throwable { + String contentStr = content.toString().trim(); + + switch (localName) { + case "accessibleTo" -> tAccessibleTo = contentStr; + case "graphsAccessibleTo" -> tGraphsAccessibleTo = contentStr; + case "reloadEveryNMinutes" -> tReloadEveryNMinutes = String2.parseInt(contentStr); + case "sourceUrl" -> tLocalSourceUrl = contentStr; + case "dataSourceName" -> tDataSourceName = contentStr; + case "driverName" -> tDriverName = contentStr; + case "connectionProperty" -> tConnectionProperties.add(contentStr); + case "catalogName" -> tCatalogName = contentStr; + case "schemaName" -> tSchemaName = contentStr; + case "tableName" -> tTableName = contentStr; + case "columnNameQuotes" -> tColumnNameQuotes = contentStr; + case "orderBy" -> { + if (!contentStr.isEmpty()) tOrderBy = String2.split(contentStr, ','); + } + case "sourceNeedsExpandedFP_EQ" -> + tSourceNeedsExpandedFP_EQ = String2.parseBoolean(contentStr); + case "sourceCanOrderBy" -> tSourceCanOrderBy = contentStr; + case "sourceCanDoDistinct" -> tSourceCanDoDistinct = contentStr; + case "onChange" -> tOnChange.add(contentStr); + case "fgdcFile" -> tFgdcFile = contentStr; + case "iso19115File" -> tIso19115File = contentStr; + case "sosOfferingPrefix" -> tSosOfferingPrefix = contentStr; + case "defaultDataQuery" -> tDefaultDataQuery = contentStr; + case "defaultGraphQuery" -> tDefaultGraphQuery = contentStr; + case "addVariablesWhere" -> tAddVariablesWhere = contentStr; + case "dataset" -> { + int ndv = tDataVariables.size(); + Object[][] ttDataVariables = new Object[ndv][]; + for (int i = 0; i < tDataVariables.size(); i++) { + ttDataVariables[i] = (Object[]) tDataVariables.get(i); + } + + EDD dataset = + new EDDTableFromDatabase( + datasetID, + tAccessibleTo, + tGraphsAccessibleTo, + tOnChange, + tFgdcFile, + tIso19115File, + tSosOfferingPrefix, + tDefaultDataQuery, + tDefaultGraphQuery, + tAddVariablesWhere, + tGlobalAttributes, + ttDataVariables, + tReloadEveryNMinutes, + tDataSourceName, + tLocalSourceUrl, + tDriverName, + tConnectionProperties.toArray(), + tCatalogName, + tSchemaName, + tTableName, + tColumnNameQuotes, + tOrderBy, + tSourceNeedsExpandedFP_EQ, + tSourceCanOrderBy, + tSourceCanDoDistinct); + + this.completeState.handleDataset(dataset); + saxHandler.setState(this.completeState); + } + default -> String2.log("Unexpected end tag: " + localName); + } + content.setLength(0); + } +} diff --git a/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/HandlerFactory.java b/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/HandlerFactory.java index 8cf66e90..75b35e75 100644 --- a/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/HandlerFactory.java +++ b/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/HandlerFactory.java @@ -80,6 +80,9 @@ public static State getHandlerFor( case "EDDTableFromDapSequence" -> { return new EDDTableFromDapSequenceHandler(saxHandler, datasetID, completeState); } + case "EDDTableFromDatabase" -> { + return new EDDTableFromDatabaseHandler(saxHandler, datasetID, completeState); + } default -> { nTry--; context.getNTryAndDatasets()[0] = nTry; From 184a019b91840d081e2f5395e1075513ec3ca7b4 Mon Sep 17 00:00:00 2001 From: Ayush Singh Date: Wed, 7 Aug 2024 21:58:20 +0530 Subject: [PATCH 7/9] EDDTableFromAsciiServiceHandler --- .../EDDTableFromAsciiServiceHandler.java | 139 ++++++++++++++++++ .../handlers/EDDTableFromDatabaseHandler.java | 2 +- .../pfel/erddap/handlers/HandlerFactory.java | 4 + 3 files changed, 144 insertions(+), 1 deletion(-) create mode 100644 WEB-INF/classes/gov/noaa/pfel/erddap/handlers/EDDTableFromAsciiServiceHandler.java diff --git a/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/EDDTableFromAsciiServiceHandler.java b/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/EDDTableFromAsciiServiceHandler.java new file mode 100644 index 00000000..3f7fed3f --- /dev/null +++ b/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/EDDTableFromAsciiServiceHandler.java @@ -0,0 +1,139 @@ +package gov.noaa.pfel.erddap.handlers; + +import com.cohort.array.StringArray; +import com.cohort.util.String2; +import gov.noaa.pfel.erddap.dataset.EDD; +import gov.noaa.pfel.erddap.dataset.EDDTableFromAsciiServiceNOS; +import java.util.ArrayList; +import org.xml.sax.Attributes; +import org.xml.sax.SAXException; + +public class EDDTableFromAsciiServiceHandler extends State { + private StringBuilder content = new StringBuilder(); + private String datasetID; + private State completeState; + private String datasetType; + + public EDDTableFromAsciiServiceHandler( + SaxHandler saxHandler, String datasetID, State completeState, String datasetType) { + super(saxHandler); + this.datasetID = datasetID; + this.completeState = completeState; + this.datasetType = datasetType; + } + + private com.cohort.array.Attributes tGlobalAttributes = new com.cohort.array.Attributes(); + private ArrayList tDataVariables = new ArrayList(); + private int tReloadEveryNMinutes = Integer.MAX_VALUE; + private String tAccessibleTo = null; + private String tGraphsAccessibleTo = null; + private StringArray tOnChange = new StringArray(); + private String tFgdcFile = null; + private String tIso19115File = null; + private String tSosOfferingPrefix = null; + private String tLocalSourceUrl = null; + private String tBeforeData[] = new String[11]; + private String tAfterData = null; + private String tNoData = null; + private String tDefaultDataQuery = null; + private String tDefaultGraphQuery = null; + private String tAddVariablesWhere = null; + + @Override + public void startElement(String uri, String localName, String qName, Attributes attributes) + throws SAXException { + switch (localName) { + case "addAttributes" -> { + State state = new AddAttributesHandler(saxHandler, tGlobalAttributes, this); + saxHandler.setState(state); + } + case "dataVariable" -> { + State state = new DataVariableHandler(saxHandler, tDataVariables, this); + saxHandler.setState(state); + } + } + } + + @Override + public void characters(char[] ch, int start, int length) throws SAXException { + content.append(ch, start, length); + } + + @Override + public void endElement(String uri, String localName, String qName) throws Throwable { + String contentStr = content.toString().trim(); + + switch (localName) { + case "accessibleTo" -> tAccessibleTo = contentStr; + case "graphsAccessibleTo" -> tGraphsAccessibleTo = contentStr; + case "reloadEveryNMinutes" -> tReloadEveryNMinutes = String2.parseInt(contentStr); + case "sourceUrl" -> tLocalSourceUrl = contentStr; + case "beforeData1", + "beforeData2", + "beforeData3", + "beforeData4", + "beforeData5", + "beforeData6", + "beforeData7", + "beforeData8", + "beforeData9", + "beforeData10" -> + tBeforeData[String2.parseInt(localName.substring(10, localName.length() - 1))] = + contentStr; + case "afterData" -> tAfterData = contentStr; + case "noData" -> tNoData = contentStr; + case "onChange" -> tOnChange.add(contentStr); + case "fgdcFile" -> tFgdcFile = contentStr; + case "iso19115File" -> tIso19115File = contentStr; + case "sosOfferingPrefix" -> tSosOfferingPrefix = contentStr; + case "defaultDataQuery" -> tDefaultDataQuery = contentStr; + case "defaultGraphQuery" -> tDefaultGraphQuery = contentStr; + case "addVariablesWhere" -> tAddVariablesWhere = contentStr; + case "dataset" -> { + int ndv = tDataVariables.size(); + Object[][] ttDataVariables = new Object[ndv][]; + for (int i = 0; i < tDataVariables.size(); i++) { + ttDataVariables[i] = (Object[]) tDataVariables.get(i); + } + + EDD dataset = getDataset(ttDataVariables); + + this.completeState.handleDataset(dataset); + saxHandler.setState(this.completeState); + } + default -> String2.log("Unexpected end tag: " + localName); + } + } + + private EDD getDataset(Object[][] ttDataVariables) throws Throwable { + EDD dataset; + + if (datasetType.equals("\"EDDTableFromAsciiServiceNOS\"")) { + dataset = + new EDDTableFromAsciiServiceNOS( + datasetID, + tAccessibleTo, + tGraphsAccessibleTo, + tOnChange, + tFgdcFile, + tIso19115File, + tSosOfferingPrefix, + tDefaultDataQuery, + tDefaultGraphQuery, + tAddVariablesWhere, + tGlobalAttributes, + ttDataVariables, + tReloadEveryNMinutes, + tLocalSourceUrl, + tBeforeData, + tAfterData, + tNoData); + } else { + throw new Exception( + "type=\"" + + datasetType + + "\" needs to be added to EDDTableFromAsciiService.fromXml at end."); + } + return dataset; + } +} diff --git a/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/EDDTableFromDatabaseHandler.java b/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/EDDTableFromDatabaseHandler.java index 54722c65..6a60196e 100644 --- a/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/EDDTableFromDatabaseHandler.java +++ b/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/EDDTableFromDatabaseHandler.java @@ -19,7 +19,7 @@ public EDDTableFromDatabaseHandler(SaxHandler saxHandler, String datasetID, Stat this.completeState = completeState; } - private com.cohort.array.Attributes tGlobalAttributes = null; + private com.cohort.array.Attributes tGlobalAttributes = new com.cohort.array.Attributes(); private ArrayList tDataVariables = new ArrayList(); private int tReloadEveryNMinutes = Integer.MAX_VALUE; private String tAccessibleTo = null; diff --git a/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/HandlerFactory.java b/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/HandlerFactory.java index 75b35e75..340294b4 100644 --- a/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/HandlerFactory.java +++ b/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/HandlerFactory.java @@ -83,6 +83,10 @@ public static State getHandlerFor( case "EDDTableFromDatabase" -> { return new EDDTableFromDatabaseHandler(saxHandler, datasetID, completeState); } + case "EDDTableFromAsciiService" -> { + return new EDDTableFromAsciiServiceHandler( + saxHandler, datasetID, completeState, datasetType); + } default -> { nTry--; context.getNTryAndDatasets()[0] = nTry; From 95e7c67e97cfb980096ebbc40bcc3aa79b1d8b4f Mon Sep 17 00:00:00 2001 From: Ayush Singh Date: Wed, 7 Aug 2024 22:39:22 +0530 Subject: [PATCH 8/9] Private Handler variables --- .../handlers/EDDGridFromDapHandler.java | 32 ++-- .../handlers/EDDGridFromErddapHandler.java | 159 +++++++++--------- .../handlers/EDDGridLonPM180Handler.java | 28 +-- .../handlers/EDDTableFromEDDGridHandler.java | 26 +-- .../handlers/EDDTableFromErddapHandler.java | 31 ++-- .../handlers/EDDTableFromFilesHandler.java | 74 ++++---- 6 files changed, 175 insertions(+), 175 deletions(-) diff --git a/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/EDDGridFromDapHandler.java b/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/EDDGridFromDapHandler.java index fee3610a..ea34d2f6 100644 --- a/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/EDDGridFromDapHandler.java +++ b/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/EDDGridFromDapHandler.java @@ -23,22 +23,22 @@ public EDDGridFromDapHandler(SaxHandler saxHandler, String datasetID, State comp this.completeState = completeState; } - public com.cohort.array.Attributes tGlobalAttributes = new com.cohort.array.Attributes(); - public String tAccessibleTo = null; - public String tGraphsAccessibleTo = null; - public boolean tAccessibleViaWMS = true; - public StringArray tOnChange = new StringArray(); - public String tFgdcFile = null; - public String tIso19115File = null; - public ArrayList tAxisVariables = new ArrayList(); - public ArrayList tDataVariables = new ArrayList(); - public int tReloadEveryNMinutes = DEFAULT_RELOAD_EVERY_N_MINUTES; - public int tUpdateEveryNMillis = 0; - public String tLocalSourceUrl = null; - public String tDefaultDataQuery = null; - public String tDefaultGraphQuery = null; - public int tnThreads = -1; - public boolean tDimensionValuesInMemory = true; + private com.cohort.array.Attributes tGlobalAttributes = new com.cohort.array.Attributes(); + private String tAccessibleTo = null; + private String tGraphsAccessibleTo = null; + private boolean tAccessibleViaWMS = true; + private StringArray tOnChange = new StringArray(); + private String tFgdcFile = null; + private String tIso19115File = null; + private ArrayList tAxisVariables = new ArrayList(); + private ArrayList tDataVariables = new ArrayList(); + private int tReloadEveryNMinutes = DEFAULT_RELOAD_EVERY_N_MINUTES; + private int tUpdateEveryNMillis = 0; + private String tLocalSourceUrl = null; + private String tDefaultDataQuery = null; + private String tDefaultGraphQuery = null; + private int tnThreads = -1; + private boolean tDimensionValuesInMemory = true; @Override public void startElement(String uri, String localName, String qName, Attributes attributes) { diff --git a/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/EDDGridFromErddapHandler.java b/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/EDDGridFromErddapHandler.java index 20c5c845..34968d2e 100644 --- a/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/EDDGridFromErddapHandler.java +++ b/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/EDDGridFromErddapHandler.java @@ -1,5 +1,7 @@ package gov.noaa.pfel.erddap.handlers; +import static gov.noaa.pfel.erddap.dataset.EDD.DEFAULT_RELOAD_EVERY_N_MINUTES; + import com.cohort.array.StringArray; import com.cohort.util.String2; import gov.noaa.pfel.erddap.dataset.EDD; @@ -8,91 +10,90 @@ import org.xml.sax.Attributes; import org.xml.sax.SAXException; -import static gov.noaa.pfel.erddap.dataset.EDD.DEFAULT_RELOAD_EVERY_N_MINUTES; - public class EDDGridFromErddapHandler extends State { - private StringBuilder content = new StringBuilder(); - private String datasetID; - private State completeState; + private StringBuilder content = new StringBuilder(); + private String datasetID; + private State completeState; - public EDDGridFromErddapHandler(SaxHandler saxHandler, String datasetID, State completeState) { - super(saxHandler); - this.datasetID = datasetID; - this.completeState = completeState; - } + public EDDGridFromErddapHandler(SaxHandler saxHandler, String datasetID, State completeState) { + super(saxHandler); + this.datasetID = datasetID; + this.completeState = completeState; + } - public int tReloadEveryNMinutes = DEFAULT_RELOAD_EVERY_N_MINUTES; - public int tUpdateEveryNMillis = 0; - public String tAccessibleTo = null; - public String tGraphsAccessibleTo = null; - public boolean tAccessibleViaWMS = true; - public boolean tAccessibleViaFiles = EDStatic.defaultAccessibleViaFiles; - public boolean tSubscribeToRemoteErddapDataset = EDStatic.subscribeToRemoteErddapDataset; - public boolean tRedirect = true; - public StringArray tOnChange = new StringArray(); - public String tFgdcFile = null; - public String tIso19115File = null; - public String tLocalSourceUrl = null; - public String tDefaultDataQuery = null; - public String tDefaultGraphQuery = null; - public int tnThreads = -1; // interpret invalid values (like -1) as EDStatic.nGridThreads - public boolean tDimensionValuesInMemory = true; + private int tReloadEveryNMinutes = DEFAULT_RELOAD_EVERY_N_MINUTES; + private int tUpdateEveryNMillis = 0; + private String tAccessibleTo = null; + private String tGraphsAccessibleTo = null; + private boolean tAccessibleViaWMS = true; + private boolean tAccessibleViaFiles = EDStatic.defaultAccessibleViaFiles; + private boolean tSubscribeToRemoteErddapDataset = EDStatic.subscribeToRemoteErddapDataset; + private boolean tRedirect = true; + private StringArray tOnChange = new StringArray(); + private String tFgdcFile = null; + private String tIso19115File = null; + private String tLocalSourceUrl = null; + private String tDefaultDataQuery = null; + private String tDefaultGraphQuery = null; + private int tnThreads = -1; // interpret invalid values (like -1) as EDStatic.nGridThreads + private boolean tDimensionValuesInMemory = true; - @Override - public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {} + @Override + public void startElement(String uri, String localName, String qName, Attributes attributes) + throws SAXException {} - @Override - public void characters(char[] ch, int start, int length) throws SAXException { - content.append(ch, start, length); - } + @Override + public void characters(char[] ch, int start, int length) throws SAXException { + content.append(ch, start, length); + } - @Override - public void endElement(String uri, String localName, String qName) throws Throwable { - String contentStr = content.toString().trim(); + @Override + public void endElement(String uri, String localName, String qName) throws Throwable { + String contentStr = content.toString().trim(); - switch (localName) { - case "reloadEveryNMinutes" -> tReloadEveryNMinutes = String2.parseInt(contentStr); - case "updateEveryNMillis" -> tUpdateEveryNMillis = String2.parseInt(contentStr); - case "accessibleTo" -> tAccessibleTo = contentStr; - case "graphsAccessibleTo" -> tGraphsAccessibleTo = contentStr; - case "accessibleViaWMS" -> tAccessibleViaWMS = String2.parseBoolean(contentStr); - case "accessibleViaFiles" -> tAccessibleViaFiles = String2.parseBoolean(contentStr); - case "subscribeToRemoteErddapDataset" -> tSubscribeToRemoteErddapDataset = String2.parseBoolean(contentStr); - case "sourceUrl" -> tLocalSourceUrl = contentStr; - case "onChange" -> tOnChange.add(contentStr); - case "fgdcFile" -> tFgdcFile = contentStr; - case "iso19115File" -> tIso19115File = contentStr; - case "defaultDataQuery" -> tDefaultDataQuery = contentStr; - case "defaultGraphQuery" -> tDefaultGraphQuery = contentStr; - case "nThreads" -> tnThreads = String2.parseInt(contentStr); - case "dimensionValuesInMemory" -> tDimensionValuesInMemory = String2.parseBoolean(contentStr); - case "redirect" -> tRedirect = String2.parseBoolean(contentStr); - case "dataset" -> { - EDD dataset = new EDDGridFromErddap( - datasetID, - tAccessibleTo, - tGraphsAccessibleTo, - tAccessibleViaWMS, - tAccessibleViaFiles, - tOnChange, - tFgdcFile, - tIso19115File, - tDefaultDataQuery, - tDefaultGraphQuery, - tReloadEveryNMinutes, - tUpdateEveryNMillis, - tLocalSourceUrl, - tSubscribeToRemoteErddapDataset, - tRedirect, - tnThreads, - tDimensionValuesInMemory - ); - this.completeState.handleDataset(dataset); - saxHandler.setState(this.completeState); - } - default -> String2.log("Unexpected end tag: " + localName); - } - content.setLength(0); + switch (localName) { + case "reloadEveryNMinutes" -> tReloadEveryNMinutes = String2.parseInt(contentStr); + case "updateEveryNMillis" -> tUpdateEveryNMillis = String2.parseInt(contentStr); + case "accessibleTo" -> tAccessibleTo = contentStr; + case "graphsAccessibleTo" -> tGraphsAccessibleTo = contentStr; + case "accessibleViaWMS" -> tAccessibleViaWMS = String2.parseBoolean(contentStr); + case "accessibleViaFiles" -> tAccessibleViaFiles = String2.parseBoolean(contentStr); + case "subscribeToRemoteErddapDataset" -> + tSubscribeToRemoteErddapDataset = String2.parseBoolean(contentStr); + case "sourceUrl" -> tLocalSourceUrl = contentStr; + case "onChange" -> tOnChange.add(contentStr); + case "fgdcFile" -> tFgdcFile = contentStr; + case "iso19115File" -> tIso19115File = contentStr; + case "defaultDataQuery" -> tDefaultDataQuery = contentStr; + case "defaultGraphQuery" -> tDefaultGraphQuery = contentStr; + case "nThreads" -> tnThreads = String2.parseInt(contentStr); + case "dimensionValuesInMemory" -> tDimensionValuesInMemory = String2.parseBoolean(contentStr); + case "redirect" -> tRedirect = String2.parseBoolean(contentStr); + case "dataset" -> { + EDD dataset = + new EDDGridFromErddap( + datasetID, + tAccessibleTo, + tGraphsAccessibleTo, + tAccessibleViaWMS, + tAccessibleViaFiles, + tOnChange, + tFgdcFile, + tIso19115File, + tDefaultDataQuery, + tDefaultGraphQuery, + tReloadEveryNMinutes, + tUpdateEveryNMillis, + tLocalSourceUrl, + tSubscribeToRemoteErddapDataset, + tRedirect, + tnThreads, + tDimensionValuesInMemory); + this.completeState.handleDataset(dataset); + saxHandler.setState(this.completeState); + } + default -> String2.log("Unexpected end tag: " + localName); } - + content.setLength(0); + } } diff --git a/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/EDDGridLonPM180Handler.java b/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/EDDGridLonPM180Handler.java index 9dc2208f..d1d56b2a 100644 --- a/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/EDDGridLonPM180Handler.java +++ b/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/EDDGridLonPM180Handler.java @@ -23,20 +23,20 @@ public EDDGridLonPM180Handler( this.context = context; } - public EDDGrid tChildDataset = null; - public String tAccessibleTo = null; - public String tGraphsAccessibleTo = null; - public boolean tAccessibleViaWMS = true; - public boolean tAccessibleViaFiles = EDStatic.defaultAccessibleViaFiles; - public StringArray tOnChange = new StringArray(); - public String tFgdcFile = null; - public String tIso19115File = null; - public String tDefaultDataQuery = null; - public String tDefaultGraphQuery = null; - public int tReloadEveryNMinutes = Integer.MAX_VALUE; - public int tUpdateEveryNMillis = Integer.MAX_VALUE; - public int tnThreads = -1; - public boolean tDimensionValuesInMemory = true; + private EDDGrid tChildDataset = null; + private String tAccessibleTo = null; + private String tGraphsAccessibleTo = null; + private boolean tAccessibleViaWMS = true; + private boolean tAccessibleViaFiles = EDStatic.defaultAccessibleViaFiles; + private StringArray tOnChange = new StringArray(); + private String tFgdcFile = null; + private String tIso19115File = null; + private String tDefaultDataQuery = null; + private String tDefaultGraphQuery = null; + private int tReloadEveryNMinutes = Integer.MAX_VALUE; + private int tUpdateEveryNMillis = Integer.MAX_VALUE; + private int tnThreads = -1; + private boolean tDimensionValuesInMemory = true; @Override public void startElement(String uri, String localName, String qName, Attributes attributes) diff --git a/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/EDDTableFromEDDGridHandler.java b/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/EDDTableFromEDDGridHandler.java index f10f2e44..d234df92 100644 --- a/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/EDDTableFromEDDGridHandler.java +++ b/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/EDDTableFromEDDGridHandler.java @@ -24,19 +24,19 @@ public EDDTableFromEDDGridHandler( this.context = context; } - public EDDGrid tChildDataset = null; - public com.cohort.array.Attributes tAddGlobalAttributes = new com.cohort.array.Attributes(); - public String tAccessibleTo = null; - public String tGraphsAccessibleTo = null; - public boolean tAccessibleViaFiles = EDStatic.defaultAccessibleViaFiles; - public StringArray tOnChange = new StringArray(); - public String tFgdcFile = null; - public String tIso19115File = null; - public String tSosOfferingPrefix = null; - public int tReloadEveryNMinutes = Integer.MAX_VALUE; - public String tDefaultDataQuery = null; - public String tDefaultGraphQuery = null; - public String tAddVariablesWhere = null; + private EDDGrid tChildDataset = null; + private com.cohort.array.Attributes tAddGlobalAttributes = new com.cohort.array.Attributes(); + private String tAccessibleTo = null; + private String tGraphsAccessibleTo = null; + private boolean tAccessibleViaFiles = EDStatic.defaultAccessibleViaFiles; + private StringArray tOnChange = new StringArray(); + private String tFgdcFile = null; + private String tIso19115File = null; + private String tSosOfferingPrefix = null; + private int tReloadEveryNMinutes = Integer.MAX_VALUE; + private String tDefaultDataQuery = null; + private String tDefaultGraphQuery = null; + private String tAddVariablesWhere = null; @Override public void startElement(String uri, String localName, String qName, Attributes attributes) { diff --git a/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/EDDTableFromErddapHandler.java b/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/EDDTableFromErddapHandler.java index 065c177b..0bee73ae 100644 --- a/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/EDDTableFromErddapHandler.java +++ b/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/EDDTableFromErddapHandler.java @@ -13,27 +13,26 @@ public class EDDTableFromErddapHandler extends State { private String datasetID; private State completeState; - public EDDTableFromErddapHandler( - SaxHandler saxHandler, String datasetID, State completeState) { + public EDDTableFromErddapHandler(SaxHandler saxHandler, String datasetID, State completeState) { super(saxHandler); this.datasetID = datasetID; this.completeState = completeState; } - public int tReloadEveryNMinutes = Integer.MAX_VALUE; - public String tAccessibleTo = null; - public String tGraphsAccessibleTo = null; - public boolean tAccessibleViaFiles = EDStatic.defaultAccessibleViaFiles; - public StringArray tOnChange = new StringArray(); - public boolean tSubscribeToRemoteErddapDataset = EDStatic.subscribeToRemoteErddapDataset; - public boolean tRedirect = true; - public String tFgdcFile = null; - public String tIso19115File = null; - public String tSosOfferingPrefix = null; - public String tLocalSourceUrl = null; - public String tDefaultDataQuery = null; - public String tDefaultGraphQuery = null; - public String tAddVariablesWhere = null; + private int tReloadEveryNMinutes = Integer.MAX_VALUE; + private String tAccessibleTo = null; + private String tGraphsAccessibleTo = null; + private boolean tAccessibleViaFiles = EDStatic.defaultAccessibleViaFiles; + private StringArray tOnChange = new StringArray(); + private boolean tSubscribeToRemoteErddapDataset = EDStatic.subscribeToRemoteErddapDataset; + private boolean tRedirect = true; + private String tFgdcFile = null; + private String tIso19115File = null; + private String tSosOfferingPrefix = null; + private String tLocalSourceUrl = null; + private String tDefaultDataQuery = null; + private String tDefaultGraphQuery = null; + private String tAddVariablesWhere = null; @Override public void startElement(String uri, String localName, String qName, Attributes attributes) {} diff --git a/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/EDDTableFromFilesHandler.java b/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/EDDTableFromFilesHandler.java index b12992a2..900a63f6 100644 --- a/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/EDDTableFromFilesHandler.java +++ b/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/EDDTableFromFilesHandler.java @@ -28,43 +28,43 @@ public EDDTableFromFilesHandler( this.datasetType = datasetType; } - com.cohort.array.Attributes tGlobalAttributes = new com.cohort.array.Attributes(); - ArrayList tDataVariables = new ArrayList(); - int tReloadEveryNMinutes = Integer.MAX_VALUE; - int tUpdateEveryNMillis = 0; - String tAccessibleTo = null; - String tGraphsAccessibleTo = null; - StringArray tOnChange = new StringArray(); - boolean tFileTableInMemory = false; - String tFgdcFile = null; - String tIso19115File = null; - String tSosOfferingPrefix = null; - String tFileDir = null; - String tFileNameRegex = ".*"; - boolean tRecursive = false; - String tPathRegex = ".*"; - boolean tAccessibleViaFiles = EDStatic.defaultAccessibleViaFiles; - String tMetadataFrom = MF_LAST; - String tPreExtractRegex = "", tPostExtractRegex = "", tExtractRegex = ""; - String tColumnNameForExtract = ""; - String tSortedColumnSourceName = ""; - String tSortFilesBySourceNames = ""; - boolean tRemoveMVRows = true; - int tStandardizeWhat = Integer.MAX_VALUE; - String tSpecialMode = ""; - String tCharset = null; - String tSkipHeaderToRegex = ""; - String tSkipLinesRegex = ""; - int tColumnNamesRow = 1, tFirstDataRow = 2; - String tColumnSeparator = ""; - boolean tSourceNeedsExpandedFP_EQ = true; - String tDefaultDataQuery = null; - String tDefaultGraphQuery = null; - String tAddVariablesWhere = null; - int tNThreads = -1; - String tCacheFromUrl = null; - int tCacheSizeGB = -1; - String tCachePartialPathRegex = null; + private com.cohort.array.Attributes tGlobalAttributes = new com.cohort.array.Attributes(); + private ArrayList tDataVariables = new ArrayList(); + private int tReloadEveryNMinutes = Integer.MAX_VALUE; + private int tUpdateEveryNMillis = 0; + private String tAccessibleTo = null; + private String tGraphsAccessibleTo = null; + private StringArray tOnChange = new StringArray(); + private boolean tFileTableInMemory = false; + private String tFgdcFile = null; + private String tIso19115File = null; + private String tSosOfferingPrefix = null; + private String tFileDir = null; + private String tFileNameRegex = ".*"; + private boolean tRecursive = false; + private String tPathRegex = ".*"; + private boolean tAccessibleViaFiles = EDStatic.defaultAccessibleViaFiles; + private String tMetadataFrom = MF_LAST; + private String tPreExtractRegex = "", tPostExtractRegex = "", tExtractRegex = ""; + private String tColumnNameForExtract = ""; + private String tSortedColumnSourceName = ""; + private String tSortFilesBySourceNames = ""; + private boolean tRemoveMVRows = true; + private int tStandardizeWhat = Integer.MAX_VALUE; + private String tSpecialMode = ""; + private String tCharset = null; + private String tSkipHeaderToRegex = ""; + private String tSkipLinesRegex = ""; + private int tColumnNamesRow = 1, tFirstDataRow = 2; + private String tColumnSeparator = ""; + private boolean tSourceNeedsExpandedFP_EQ = true; + private String tDefaultDataQuery = null; + private String tDefaultGraphQuery = null; + private String tAddVariablesWhere = null; + private int tNThreads = -1; + private String tCacheFromUrl = null; + private int tCacheSizeGB = -1; + private String tCachePartialPathRegex = null; @Override public void startElement(String uri, String localName, String qName, Attributes attributes) From e63db5511b320f0266ee59d21bde6312d7e3e96e Mon Sep 17 00:00:00 2001 From: Ayush Singh Date: Thu, 8 Aug 2024 11:58:58 +0530 Subject: [PATCH 9/9] ArrayLists to Arrays --- .../erddap/handlers/EDDGridFromDapHandler.java | 15 +++++---------- .../handlers/EDDGridFromEDDTableHandler.java | 12 ++++-------- .../erddap/handlers/EDDGridSideBySideHandler.java | 9 ++++----- .../handlers/EDDTableAggregateRowsHandler.java | 7 ++----- .../handlers/EDDTableFromAsciiServiceHandler.java | 6 ++---- .../handlers/EDDTableFromCassandraHandler.java | 9 +++------ .../handlers/EDDTableFromDapSequenceHandler.java | 9 +++------ .../handlers/EDDTableFromDatabaseHandler.java | 9 +++------ .../erddap/handlers/EDDTableFromFilesHandler.java | 6 ++---- 9 files changed, 28 insertions(+), 54 deletions(-) diff --git a/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/EDDGridFromDapHandler.java b/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/EDDGridFromDapHandler.java index ea34d2f6..d6f0a2e0 100644 --- a/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/EDDGridFromDapHandler.java +++ b/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/EDDGridFromDapHandler.java @@ -30,8 +30,8 @@ public EDDGridFromDapHandler(SaxHandler saxHandler, String datasetID, State comp private StringArray tOnChange = new StringArray(); private String tFgdcFile = null; private String tIso19115File = null; - private ArrayList tAxisVariables = new ArrayList(); - private ArrayList tDataVariables = new ArrayList(); + private ArrayList tAxisVariables = new ArrayList(); + private ArrayList tDataVariables = new ArrayList(); private int tReloadEveryNMinutes = DEFAULT_RELOAD_EVERY_N_MINUTES; private int tUpdateEveryNMillis = 0; private String tLocalSourceUrl = null; @@ -85,14 +85,9 @@ public void endElement(String uri, String localName, String qName) throws Throwa case "dataset" -> { int nav = tAxisVariables.size(); Object[][] ttAxisVariables = nav == 0 ? null : new Object[nav][]; - for (int i = 0; i < tAxisVariables.size(); i++) { - ttAxisVariables[i] = (Object[]) tAxisVariables.get(i); - } - int ndv = tDataVariables.size(); - Object[][] ttDataVariables = new Object[ndv][]; - for (int i = 0; i < tDataVariables.size(); i++) { - ttDataVariables[i] = (Object[]) tDataVariables.get(i); - } + ttAxisVariables = tAxisVariables.toArray(ttAxisVariables); + Object[][] ttDataVariables = new Object[tDataVariables.size()][]; + ttDataVariables = tDataVariables.toArray(ttDataVariables); EDD dataset = new EDDGridFromDap( diff --git a/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/EDDGridFromEDDTableHandler.java b/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/EDDGridFromEDDTableHandler.java index cf2abb31..190120be 100644 --- a/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/EDDGridFromEDDTableHandler.java +++ b/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/EDDGridFromEDDTableHandler.java @@ -36,8 +36,8 @@ public EDDGridFromEDDTableHandler( private StringArray tOnChange = new StringArray(); private String tFgdcFile = null; private String tIso19115File = null; - private ArrayList tAxisVariables = new ArrayList(); - private ArrayList tDataVariables = new ArrayList(); + private ArrayList tAxisVariables = new ArrayList(); + private ArrayList tDataVariables = new ArrayList(); private int tReloadEveryNMinutes = DEFAULT_RELOAD_EVERY_N_MINUTES; private int tUpdateEveryNMillis = 0; private String tLocalSourceUrl = null; @@ -119,14 +119,10 @@ public void endElement(String uri, String localName, String qName) throws Throwa case "dataset" -> { int nav = tAxisVariables.size(); Object[][] ttAxisVariables = nav == 0 ? null : new Object[nav][]; - for (int i = 0; i < tAxisVariables.size(); i++) { - ttAxisVariables[i] = (Object[]) tAxisVariables.get(i); - } + ttAxisVariables = tAxisVariables.toArray(ttAxisVariables); int ndv = tDataVariables.size(); Object[][] ttDataVariables = new Object[ndv][]; - for (int i = 0; i < tDataVariables.size(); i++) { - ttDataVariables[i] = (Object[]) tDataVariables.get(i); - } + ttDataVariables = tDataVariables.toArray(ttDataVariables); EDD dataset = new EDDGridFromEDDTable( diff --git a/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/EDDGridSideBySideHandler.java b/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/EDDGridSideBySideHandler.java index 219f05c8..324b4b34 100644 --- a/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/EDDGridSideBySideHandler.java +++ b/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/EDDGridSideBySideHandler.java @@ -26,7 +26,7 @@ public EDDGridSideBySideHandler( this.context = context; } - private ArrayList tChildDatasets = new ArrayList(); + private ArrayList tChildDatasets = new ArrayList(); private StringBuilder messages = new StringBuilder(); private String tAccessibleTo = null; private String tGraphsAccessibleTo = null; @@ -85,9 +85,8 @@ public void endElement(String uri, String localName, String qName) throws Throwa case "dimensionValuesInMemory" -> tDimensionValuesInMemory = String2.parseBoolean(contentStr); case "dataset" -> { EDDGrid[] tcds = new EDDGrid[tChildDatasets.size()]; - for (int c = 0; c < tChildDatasets.size(); c++) { - tcds[c] = (EDDGrid) tChildDatasets.get(c); - } + tcds = tChildDatasets.toArray(tcds); + EDD dataset = new EDDGridSideBySide( datasetID, @@ -114,6 +113,6 @@ public void endElement(String uri, String localName, String qName) throws Throwa @Override public void handleDataset(EDD dataset) { - tChildDatasets.add(dataset); + tChildDatasets.add((EDDGrid) dataset); } } diff --git a/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/EDDTableAggregateRowsHandler.java b/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/EDDTableAggregateRowsHandler.java index e857b34b..2833c067 100644 --- a/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/EDDTableAggregateRowsHandler.java +++ b/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/EDDTableAggregateRowsHandler.java @@ -88,11 +88,8 @@ public void endElement(String uri, String localName, String qName) throws Throwa case "defaultGraphQuery" -> tDefaultGraphQuery = contentStr; case "addVariablesWhere" -> tAddVariablesWhere = contentStr; case "dataset" -> { - int nChildren = tChildren.size(); - EDDTable[] ttChildren = new EDDTable[nChildren]; - for (int i = 0; i < nChildren; i++) { - ttChildren[i] = tChildren.get(i); - } + EDDTable[] ttChildren = new EDDTable[tChildren.size()]; + ttChildren = tChildren.toArray(ttChildren); EDD dataset = new EDDTableAggregateRows( diff --git a/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/EDDTableFromAsciiServiceHandler.java b/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/EDDTableFromAsciiServiceHandler.java index 3f7fed3f..82ef2528 100644 --- a/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/EDDTableFromAsciiServiceHandler.java +++ b/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/EDDTableFromAsciiServiceHandler.java @@ -23,7 +23,7 @@ public EDDTableFromAsciiServiceHandler( } private com.cohort.array.Attributes tGlobalAttributes = new com.cohort.array.Attributes(); - private ArrayList tDataVariables = new ArrayList(); + private ArrayList tDataVariables = new ArrayList(); private int tReloadEveryNMinutes = Integer.MAX_VALUE; private String tAccessibleTo = null; private String tGraphsAccessibleTo = null; @@ -92,9 +92,7 @@ public void endElement(String uri, String localName, String qName) throws Throwa case "dataset" -> { int ndv = tDataVariables.size(); Object[][] ttDataVariables = new Object[ndv][]; - for (int i = 0; i < tDataVariables.size(); i++) { - ttDataVariables[i] = (Object[]) tDataVariables.get(i); - } + ttDataVariables = tDataVariables.toArray(ttDataVariables); EDD dataset = getDataset(ttDataVariables); diff --git a/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/EDDTableFromCassandraHandler.java b/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/EDDTableFromCassandraHandler.java index 6d37753b..21b830cc 100644 --- a/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/EDDTableFromCassandraHandler.java +++ b/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/EDDTableFromCassandraHandler.java @@ -21,7 +21,7 @@ public EDDTableFromCassandraHandler( } private com.cohort.array.Attributes tGlobalAttributes = new com.cohort.array.Attributes(); - private ArrayList tDataVariables = new ArrayList(); + private ArrayList tDataVariables = new ArrayList(); private int tReloadEveryNMinutes = Integer.MAX_VALUE; private String tAccessibleTo = null; private String tGraphsAccessibleTo = null; @@ -92,11 +92,8 @@ public void endElement(String uri, String localName, String qName) throws Throwa case "defaultGraphQuery" -> tDefaultGraphQuery = contentStr; case "addVariablesWhere" -> tAddVariablesWhere = contentStr; case "dataset" -> { - int ndv = tDataVariables.size(); - Object[][] ttDataVariables = new Object[ndv][]; - for (int i = 0; i < tDataVariables.size(); i++) { - ttDataVariables[i] = (Object[]) tDataVariables.get(i); - } + Object[][] ttDataVariables = new Object[tDataVariables.size()][]; + ttDataVariables = tDataVariables.toArray(ttDataVariables); EDD dataset = new EDDTableFromCassandra( diff --git a/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/EDDTableFromDapSequenceHandler.java b/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/EDDTableFromDapSequenceHandler.java index 7872ae5b..a093139a 100644 --- a/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/EDDTableFromDapSequenceHandler.java +++ b/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/EDDTableFromDapSequenceHandler.java @@ -21,7 +21,7 @@ public EDDTableFromDapSequenceHandler( } private com.cohort.array.Attributes tGlobalAttributes = new com.cohort.array.Attributes(); - private ArrayList tDataVariables = new ArrayList(); + private ArrayList tDataVariables = new ArrayList(); private int tReloadEveryNMinutes = Integer.MAX_VALUE; private String tAccessibleTo = null; private String tGraphsAccessibleTo = null; @@ -88,11 +88,8 @@ public void endElement(String uri, String localName, String qName) throws Throwa case "defaultGraphQuery" -> tDefaultGraphQuery = contentStr; case "addVariablesWhere" -> tAddVariablesWhere = contentStr; case "dataset" -> { - int ndv = tDataVariables.size(); - Object[][] ttDataVariables = new Object[ndv][]; - for (int i = 0; i < tDataVariables.size(); i++) { - ttDataVariables[i] = (Object[]) tDataVariables.get(i); - } + Object[][] ttDataVariables = new Object[tDataVariables.size()][]; + ttDataVariables = tDataVariables.toArray(ttDataVariables); EDD dataset = new EDDTableFromDapSequence( diff --git a/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/EDDTableFromDatabaseHandler.java b/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/EDDTableFromDatabaseHandler.java index 6a60196e..5184747b 100644 --- a/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/EDDTableFromDatabaseHandler.java +++ b/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/EDDTableFromDatabaseHandler.java @@ -20,7 +20,7 @@ public EDDTableFromDatabaseHandler(SaxHandler saxHandler, String datasetID, Stat } private com.cohort.array.Attributes tGlobalAttributes = new com.cohort.array.Attributes(); - private ArrayList tDataVariables = new ArrayList(); + private ArrayList tDataVariables = new ArrayList(); private int tReloadEveryNMinutes = Integer.MAX_VALUE; private String tAccessibleTo = null; private String tGraphsAccessibleTo = null; @@ -95,11 +95,8 @@ public void endElement(String uri, String localName, String qName) throws Throwa case "defaultGraphQuery" -> tDefaultGraphQuery = contentStr; case "addVariablesWhere" -> tAddVariablesWhere = contentStr; case "dataset" -> { - int ndv = tDataVariables.size(); - Object[][] ttDataVariables = new Object[ndv][]; - for (int i = 0; i < tDataVariables.size(); i++) { - ttDataVariables[i] = (Object[]) tDataVariables.get(i); - } + Object[][] ttDataVariables = new Object[tDataVariables.size()][]; + ttDataVariables = tDataVariables.toArray(ttDataVariables); EDD dataset = new EDDTableFromDatabase( diff --git a/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/EDDTableFromFilesHandler.java b/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/EDDTableFromFilesHandler.java index 900a63f6..0d9d773d 100644 --- a/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/EDDTableFromFilesHandler.java +++ b/WEB-INF/classes/gov/noaa/pfel/erddap/handlers/EDDTableFromFilesHandler.java @@ -29,7 +29,7 @@ public EDDTableFromFilesHandler( } private com.cohort.array.Attributes tGlobalAttributes = new com.cohort.array.Attributes(); - private ArrayList tDataVariables = new ArrayList(); + private ArrayList tDataVariables = new ArrayList(); private int tReloadEveryNMinutes = Integer.MAX_VALUE; private int tUpdateEveryNMillis = 0; private String tAccessibleTo = null; @@ -135,9 +135,7 @@ public void endElement(String uri, String localName, String qName) throws Throwa case "dataset" -> { int ndv = tDataVariables.size(); Object[][] ttDataVariables = new Object[ndv][]; - for (int i = 0; i < tDataVariables.size(); i++) { - ttDataVariables[i] = (Object[]) tDataVariables.get(i); - } + ttDataVariables = tDataVariables.toArray(ttDataVariables); EDD dataset = getDataset(ttDataVariables);