Releases: fmidev/fmi-avi-messageconverter
Fixes to partial time handling
- Fix
TAF.areAllTimeReferencesComplete()
to correctly check all existing (but not absent) time references contain complete times. - Fix completion of
TAFReferenceImpl
time references. - Adjust partial/complete time within setter instead of just checking consistency upon build to avoid client errors.
Conversion chain support, bulletin handling improvements, bug fixes
- Chaining two or more message conversions using ConversionChainBuilder
- New utility classes for decoding and encoding bulletin headings (BulletinHeading <-> String)
- TAFReference builders can now be created from TAF objects
- TafReference.getValidityTime is now Optional
- New method BulletinHeading.getExpectedContainedMessageType
- Fixes for building PartialOrCompleteTimeInstant instances
- Surface data kind now supported as BulletinHeading data type designator in addition to warnings, forecasts, XML and upper-air data
- Deprecated the use of ConversionHints message type hints, AviationCodeListUser.MessageType enum values should be used instead
- New method AviMessageConverter.getConverter for returning a message specific converter for a specification, if available
IssueTime made optional, preparations for more message types
- Moved the issueTime property from AerodromeWeatherMessage into AviationWeatherMessage interface, and made it optional (getIssueTime() now returns Optional). GenericAviationWeatherMessage no longer needs it's own issueTime
- Added LOW_WIND, WX_WARNING, ARS, AIREP, SPACE_WEATHER_ADVISORY enum values to MessageTypes in AviationCodeListUser.
- Upper-air data now supported in bulletin headings
- FCT_SPACE_WEATHER value added to enum ForecastsDataTypeDesignatorT2 in BulletinHeading
Support for generic meteorological bulletins
- Added new model classes for GenericMeteorologicalBulletin and GenericAviationWeatherMessage. These enable handling non-specific aviation messages and bulletins, with the raw message content (TAC or IWXXM) and some metadata, such as issue time, valid time and target aerodrome.
- TAFBulletinHeading and SIGMETBulletinHeading have been replaced with a generic BulletinHeading interface and the corresponding FreeBuilder implementation classes.
- fi.fmi.avi.model.GTSExchangeFileNameBuilder class is now renamed and refactored to fi.fmi.avi.util.GTSExchangeFileInfo.Builder. The new GTSExchangeFileInfo class now supports also parsing the BulletinHeading, timestamp etc. from the GTS exchange file name (or bulletinID).
- Issue time information moved from the MeteorologicalBulletin into BulletinHeading.
- It is now mandatory to give either a partial or complete time info for PartialOrCompleteTimeInstant instances.
- FreeBuilder version upgraded from 1.14.8 to 2.3.0
SPECI & METAR FreeBuilder consistency
SPECI implementations now built the same way as METARs, both now have their own Impl-classes with a common FreeBuilder builder interface MeteorologicalTerminalAirReportBuilder
. This makes it possible to create (build) new instances of MeteorologicalTerminalAirReport
regardless of whether they are METARs or SPECIs. Under the hood, the SPECI POJOs no longer rely on using proxy classes and reflection, which should make them more efficient.
Reason for a major version change are the breaking API changes in building a new SPECI implementation POJO: previously it was done using METARImpl.Builder.buildAsSPECI()
, now SPECIImpl.Builder.build()
.
Fix JSON (de)serialization on NumericMeasureImpl
Enforcing 0.0
values to be serialized and not omitted in NumericMeasureImpl, preventing deserialization of a null
value.
Serialisability fixes in data models, bulletin heading code isolation
This release fixes a couple of issues in the data model classes. The changes are not big, but some code adoption is required:
- GeoPosition.getCoordinates() now returns List<Double> instead of a Double array.
- BulletinHeading has new methods for accessing the data type designator fields (T1 and T2) and the entire data designators abbreviated heading part (T1T2A1A2ii). This also affect the TAFBulletinHeading and SIGMETBulletinHeading classes and their JSON serialisations. GTSExchangeFileNameBuilder now leverages these methods to construct GTS exchange file naming pattern compliant strings.
- OptionalInt has been replaced by Optional as the return type of BulletinHeading.getBulletinAugmentationNumber() to work better with FreeBuilder class serialisation.
SIGMETBulleting support, pass-through TAC SIGMET
- Added a temporary SIGMET message type capable in including only the TAC string SIGMET content. This was required for producing text-based SIGMET bulletins. The SIGMET class will probably be replaced with the actual SIGMET message type class in the next release.
- Added the SIGMETBulletin container message type.
- Added JSON <-> POJO conversion support for TAFBulletin, SIGMETBulletin and SIGMET
- Code style and bug fixes
TAFBulletin support and surface wind harmonisation
- Added support for meteorological bulletins, concrete implementation available for TAFBulletins in this release.
- Refactored surface wind model classes: TrendForecastSurfaceWind and TAFSurfaceWind interfaces have been removed and replaced with a common SurfaceWind interface. METAR observations use ObservedSurfaceWind interface which now extends SurfaceWind.
- Added a convenience method for calculating the Duration of the PartialOfCompleteTimePeriod (if the period is complete)
- Added computable criticality to ConversionResult.Status
fmi-avi-messageconve
Refactored surface wind model classes: TrendForecastSurfaceWind and …