Releases: HydrologicEngineeringCenter/Vortex
v0.14.0
Release Notes
Features
Checked DataReadException for I/O read failures
DataReader now surfaces read failures through a checked DataReadException instead of silently returning null. Callers can finally tell a missing record apart from a genuine I/O error, and Vortex's batch tools report read failures as ERROR events rather than dropping them.
What's new
mil.army.usace.hec.vortex.io.DataReadException— a checked exception (extendsjava.io.IOException) thrown when aDataReaderfails to read a record from its underlying source: non-zero DSS status, JNI/native failure, an undecodable record, or an unopenable dataset. It carries diagnostic context without leaking the underlying provider's API:- a coarse
Kind—MISSING_RECORD,UNSUPPORTED, orIO_ERROR— for control-flow decisions, - the raw native status code,
- the data-source path, and
- the record-level pathname, when applicable.
- a coarse
DataReadExceptions— utility class whosereportTo(Logger, PropertyChangeSupport, DataReadException)performs the standard batch-boundary handling: log atSEVEREand fire aVortexProperty.ERRORevent.
API changes
- These
DataReadermethods now declarethrows DataReadException:getDtos(),getDto(int),getDataIntervals(),DataReaderBuilder.build(), andDataReader.copy(DataReader). Previously they silently returnednull(or an empty/partial result) on failure. getDto(int)now throwsIndexOutOfBoundsExceptionfor an out-of-range index (a programmer error), distinct fromDataReadExceptionfor a real read failure.- Bulk reads:
getDtos()still skipsMISSING_RECORD/UNSUPPORTEDrecords (now logged atFINE), preserving the prior "absence is legitimate" behavior — but a genuineIO_ERRORnow aborts the read instead of being silently dropped. Readers do not return a partial result on failure.
Migration
DataReadExceptionextendsIOException, so callers that already declarethrows IOExceptionorcatch (IOException ...)compile unchanged.- Callers that previously checked for
nullfromgetDto(int), or filtered nulls out ofgetDtos(), should instead let the exception propagate, or catchDataReadExceptionand branch ongetKind()(e.g. skipMISSING_RECORD, abort onIO_ERROR). - Switches on
Kindshould include adefaultcase — new values may be added in future releases. - Vortex's own batch tools (importers, exporter, subsetter, transposer, sanitizer, calculators, normalizer, grid-to-point converter) already route failures through
DataReadExceptions.reportTo, surfacing them asERRORproperty-change events instead of failing silently.
Bug Fixes
None in this release.
v0.13.3
v0.13.2
Feature: Upgraded build tooling to Gradle 8.6 and Java 21 source/target compatibility.
Feature: Bundled JRE upgraded from Temurin 17.0.7 to Temurin 21.0.9 across all distributions (Windows x64, Linux x64, macOS x64).
Bugfix: Grid-to-point converter: Time series produced from instantaneous variables (temperature, humidity, shortwave radiation, longwave radiation, pressure, wind speed, snow water equivalent) were written with the wrong DSS data type (PER-AVER instead of INST-VAL) and the first time stamp was shifted forward by one interval. The DSS data type is now derived from each grid's own duration rather than the spacing between consecutive grids.
Bugfix: Grid units: Grids with undefined units now use UNDEF (per HEC-HMS user's manual conventions) instead of UNSPECIF. Time series with undefined units are unchanged and continue to use UNSPECIF.
Full Changelog: v0.13.1...v0.13.2
v0.13.1
Feature: Gap Filler performance and reliability improvements. Optimized memory usage by eliminating unnecessary array allocations and data copies. Fixed a bug where gap filling could process the wrong grid index.
Bugfix: Added ShifterWizard back to API to maintain backwards compatibility. ShifterWizard is deprecated as of v0.13.0.
v0.13.0
0.12.3
Feature: Add support for TransverseMercator Projection
Feature: Add support for new PRISM file naming convention. See doc here: https://prism.oregonstate.edu/documents/PRISM_downloads_web_service.pdf
Feature: Assign INST-VAL or PER-AVER data types for temperature, humidity, shortwave radiation, longwave radiation, pressure, and wind speed based on grid duration.
Feature: Add support additional short names for meteorologic variables.
Feature: Detect and message when an unrecognized archive format is encountered.
Bugfix: Variables with latitude and longitude dimensions are now selectable regardless of type.
Bugfix: In the Importer, skip files that do not contain the target variable when validating files and variables.
v0.12.3-rc.3
Feature: Assign INST-VAL or PER-AVER data types for temperature, humidity, shortwave radiation, longwave radiation, pressure, and wind speed based on grid duration.
Feature: Add support additional short names for meteorologic variables.
Bugfix: Variables with latitude and longitude dimensions are now selectable regardless of type.
Bugfix: In the Importer, skip files that do not contain the target variable when validating files and variables.
v0.12.3-rc.2
Feature: Add support for new PRISM file naming convention. See doc here: https://prism.oregonstate.edu/documents/PRISM_downloads_web_service.pdf
v0.12.3-rc.1
Feature: Add support for TransverseMercator Projection