From fbadcee50d68aea4aefe4ab495ca5857c98b0ae1 Mon Sep 17 00:00:00 2001 From: Mike Neilson Date: Tue, 19 Aug 2025 16:55:49 +0000 Subject: [PATCH] WIP setup additional units and require sucessful test of all units to move on. Also fail on duplicates. --- .../java/db/data/R__0002_units_and_parameters.java | 13 ++++++++++--- .../db/custom/units_and_parameters/conversions.json | 6 +----- .../test/resources/units/conversions_to_test.csv | 11 ++++++++++- 3 files changed, 21 insertions(+), 9 deletions(-) diff --git a/schema/src/main/java/db/data/R__0002_units_and_parameters.java b/schema/src/main/java/db/data/R__0002_units_and_parameters.java index 7d4ba70d..7dc24605 100644 --- a/schema/src/main/java/db/data/R__0002_units_and_parameters.java +++ b/schema/src/main/java/db/data/R__0002_units_and_parameters.java @@ -216,12 +216,18 @@ private void loadData() throws Exception { JsonNode tmpConversions = mapper.readTree( getData("db/custom/units_and_parameters/conversions.json")); - + HashSet existing = new HashSet<>(); tmpConversions.forEach( (conversion) -> { - //Conversion c = new Conversion(from, to, method) Unit from = unitDefinitions.get(conversion.get(0).asText()); Unit to = unitDefinitions.get(conversion.get(1).asText()); - if( from !=null && to != null ) { + if( from != null && to != null ) { + final String tracker = from.getAbbreviation() + "_" + to.getAbbreviation(); + if (existing.contains(tracker)) { + throw new CwmsMigrationError( + "Found duplication conversion from " + from.getAbbreviation() + " to " + to.getAbbreviation() + + ". To reduce confusion remove one of the entries." + ); + } String parts[] = conversion.get(2).asText().split(":"); String type = parts[0]; String function = parts[1].trim(); @@ -237,6 +243,7 @@ private void loadData() throws Exception { Conversion c = new Conversion(from,to, method); crc.update(c.toString().getBytes()); conversions.add(c); + existing.add(tracker); } }); diff --git a/schema/src/main/resources/db/custom/units_and_parameters/conversions.json b/schema/src/main/resources/db/custom/units_and_parameters/conversions.json index f2528043..c91a04d1 100644 --- a/schema/src/main/resources/db/custom/units_and_parameters/conversions.json +++ b/schema/src/main/resources/db/custom/units_and_parameters/conversions.json @@ -12,11 +12,10 @@ [ "acre", "ft2", "function: i*ft2_per_acre"], [ "1000 acre", "acre", "linear: 1000 0"], [ "ft2", "m2", "function: i*(m_per_ft^2)"], - [ "1000 m2", "m2", "linear: 1000 0"], ["1000 m2", "m2", "linear: unit_per_kilo 0"], //["m3", "ac-ft", "function: (i/(m_per_ft^3))/ft2_per_acre"], //["ac-ft", "m3", "linear: 1233.48183754752 0"], - ["m3", "gal", "linear: m3_per_gal 0"], + ["m3", "gal", "function: i / m3_per_gal"], // ["1000 m3", "dsf", "*_per_k*[m3]/[1000 m3] | [ft3]/m_per_ft^3[m3] | [dsf]/ft3_per_dsf[ft3]"], // ["1000 m3", "ft3", "*_per_k*[m3]/[1000 m3] | [ft3]/m_per_ft^3[m3]"], // ["1000 m3", "gal", "*_per_k*[m3]/[1000 m3] | [gal]/m3_per_gal[m3]"], @@ -113,7 +112,6 @@ // ["ac-ft", "dsf", "ft2_per_acre[ft3]/[ac-ft] | [dsf]/ft3_per_dsf[ft3]"], ["ac-ft", "ft3", "function: i * ft2_per_acre"], ["ft3", "m3", "function: i * m_per_ft^3"], - ["m3", "1000 m3", "linear: 1000 0"], // ["ac-ft", "gal", "ft2_per_acre[ft3]/[ac-ft] | m_per_ft^3[m3]/[ft3] | [gal]/m3_per_gal[m3]"], // ["ac-ft", "kaf", "[kaf]/*_per_k*[ac-ft]"], // ["ac-ft", "kdsf", "ft2_per_acre[ft3]/[ac-ft] | [dsf]/ft3_per_dsf[ft3] | [kdsf]/*_per_k*[dsf]"], @@ -390,7 +388,6 @@ // ["kaf", "mgal", "*_per_k*[ac-ft]/[kaf] | ft2_per_acre[ft3]/[ac-ft] | m_per_ft^3[m3]/[ft3] | [gal]/m3_per_gal[m3] | [mgal]/*_per_M*[gal]"], // ["kaf", "mile3", "*_per_k*[ac-ft]/[kaf] | ft2_per_acre[ft3]/[ac-ft] | [mile3]/ft_per_mile^3[ft3]"], // ["kcfs", "KAF/mon", "*_per_k*[cfs]/[kcfs] | [ft3/s]/[cfs] | s_per_mon[s]/[mon] | [ac-ft]/ft2_per_acre[ft3] | [kaf]/*_per_k*[ac-ft] | [KAF]/[kaf]"], - ["kcfs", "cfs", "linear: 1000 0"], // ["kcfs", "cms", "*_per_k*[ft3/s]/[kcfs] | m_per_ft^3[m3]/[ft3] | [cms]/[m3/s]"], // ["kcfs", "gpm", "*_per_k*[ft3/s]/[kcfs] | m_per_ft^3[m3]/[ft3] | [gal]/m3_per_gal[m3] | s_per_min[s]/[min] | [gpm]/[gal/min]"], // ["kcfs", "kcms", "*_per_k*[ft3/s]/[kcfs] | m_per_ft^3[m3]/[ft3] | [cms]/[m3/s] | [kcms]/*_per_k*[cms]"], @@ -536,7 +533,6 @@ // ["m3", "ac-ft", "[ft3]/m_per_ft^3[m3] | [ac-ft]/ft2_per_acre[ft3]"], // ["m3", "dsf", "[ft3]/m_per_ft^3[m3] | [dsf]/ft3_per_dsf[ft3]"], // ["m3", "ft3", "[ft3]/m_per_ft^3[m3]"], - ["m3", "gal", "linear: m3_per_gal 0"], // ["m3", "kaf", "[ft3]/m_per_ft^3[m3] | [ac-ft]/ft2_per_acre[ft3] | [kaf]/*_per_k*[ac-ft]"], // ["m3", "kdsf", "[ft3]/m_per_ft^3[m3] | [dsf]/ft3_per_dsf[ft3] | [kdsf]/*_per_k*[dsf]"], // ["m3", "kgal", "[gal]/m3_per_gal[m3] | [kgal]/*_per_k*[gal]"], diff --git a/schema/src/test/resources/units/conversions_to_test.csv b/schema/src/test/resources/units/conversions_to_test.csv index a551b829..28ad34dc 100644 --- a/schema/src/test/resources/units/conversions_to_test.csv +++ b/schema/src/test/resources/units/conversions_to_test.csv @@ -8,4 +8,13 @@ g/l,kg/l,1.0,0.001,0.0001,0.0001 kg/l,lbm/l,1.0,2.20462,0.0001,0.0001 ug/l,kg/l,1.0,1e-9,1e-9,1e-5 ug/l,lbm/l,1.0,2.20462e-9,0.00001,0.00001 -m3,ac-ft,1.0,.000810714,.0000001,.00001 \ No newline at end of file +m3,ac-ft,1.0,.000810714,.0000001,.00001 +$,k$,20,20000,.01,.01 +1/ft,1/m,5,16.40419947506562,.0000001,.00001 +acre,ft2,4.5,196020, .0001, .0001 +1000 acre,acre,5.65, 5650, .1, .001 +ft2,m2,5034.56,467.7259291,.000001,.000001 +m3,gal,6.343, 1675.6432688, .000001, .00001 +kW,W, 5.633, 5633, .01,.0001 +MW,W, .0005, 500, .00001, .000001 +MW,kW, 5.25, 5250, .1, .1 \ No newline at end of file