Skip to content

Releases: HydrologicEngineeringCenter/Vortex

v0.14.0

03 Jun 18:08
5faa139

Choose a tag to compare

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 (extends java.io.IOException) thrown when a DataReader fails 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 KindMISSING_RECORD, UNSUPPORTED, or IO_ERROR — for control-flow decisions,
    • the raw native status code,
    • the data-source path, and
    • the record-level pathname, when applicable.
  • DataReadExceptions — utility class whose reportTo(Logger, PropertyChangeSupport, DataReadException) performs the standard batch-boundary handling: log at SEVERE and fire a VortexProperty.ERROR event.

API changes

  • These DataReader methods now declare throws DataReadException: getDtos(), getDto(int), getDataIntervals(), DataReaderBuilder.build(), and DataReader.copy(DataReader). Previously they silently returned null (or an empty/partial result) on failure.
  • getDto(int) now throws IndexOutOfBoundsException for an out-of-range index (a programmer error), distinct from DataReadException for a real read failure.
  • Bulk reads: getDtos() still skips MISSING_RECORD / UNSUPPORTED records (now logged at FINE), preserving the prior "absence is legitimate" behavior — but a genuine IO_ERROR now aborts the read instead of being silently dropped. Readers do not return a partial result on failure.

Migration

  • DataReadException extends IOException, so callers that already declare throws IOException or catch (IOException ...) compile unchanged.
  • Callers that previously checked for null from getDto(int), or filtered nulls out of getDtos(), should instead let the exception propagate, or catch DataReadException and branch on getKind() (e.g. skip MISSING_RECORD, abort on IO_ERROR).
  • Switches on Kind should include a default case — 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 as ERROR property-change events instead of failing silently.

Bug Fixes

None in this release.

v0.13.3

02 May 00:09

Choose a tag to compare

Feature: Revert to Java 17 to support HEC-HMS v4.13 compilation.

v0.13.2

29 Apr 20:21

Choose a tag to compare

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

01 Apr 21:36

Choose a tag to compare

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

30 Mar 21:50

Choose a tag to compare

Feature: Add Time-Step Resampler utility.
Feature: Improve performance of grid cell re-indexing.
Bugfix: Fix cell-size-only resample failing when no target projection is specified.

0.12.3

26 Feb 12:44

Choose a tag to compare

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

20 Feb 20:39

Choose a tag to compare

v0.12.3-rc.3 Pre-release
Pre-release

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

23 Dec 00:09

Choose a tag to compare

v0.12.3-rc.2 Pre-release
Pre-release

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

25 Nov 16:51

Choose a tag to compare

v0.12.3-rc.1 Pre-release
Pre-release

Feature: Add support for TransverseMercator Projection

v0.12.2

23 Sep 21:02

Choose a tag to compare

Bugfix: In wizards, manually set progress to 100 when main task is done.