From 3f90685834fa78e2aad1daeca1c54949f01a869e Mon Sep 17 00:00:00 2001
From: "p.vanderwilt"
Date: Tue, 23 Sep 2025 14:17:42 +0200
Subject: [PATCH] Enhance position handling by adding utility methods for
conversion
---
src/measurements/MeasurementContainer.js | 38 +++++++++++++++++++++---
1 file changed, 34 insertions(+), 4 deletions(-)
diff --git a/src/measurements/MeasurementContainer.js b/src/measurements/MeasurementContainer.js
index 4a6d107..f48110a 100644
--- a/src/measurements/MeasurementContainer.js
+++ b/src/measurements/MeasurementContainer.js
@@ -95,9 +95,7 @@ class MeasurementContainer {
// Turn string positions into numeric values
if (typeof positionValue == "string") {
- positionValue = positionValue == "upstream" ? Number.NEGATIVE_INFINITY : positionValue;
- positionValue = positionValue == "atEquipment" ? 0.0 : positionValue;
- positionValue = positionValue == "downstream" ? Number.POSITIVE_INFINITY : positionValue;
+ positionValue = this._convertPositionStr2Num(positionValue);
}
this._currentPosition = positionValue;
@@ -330,7 +328,7 @@ class MeasurementContainer {
Object.keys(this.measurements[this._currentType]) : [];
}
- getPositions() {
+ getPositions(asNumber = false) {
if (!this._currentType || !this._currentVariant) {
throw new Error('Type and variant must be specified before listing positions');
}
@@ -339,6 +337,10 @@ class MeasurementContainer {
!this.measurements[this._currentType][this._currentVariant]) {
return [];
}
+
+ if (asNumber) {
+ return Object.keys(this.measurements[this._currentType][this._currentVariant]).map(this._convertPositionNum2Str);
+ }
return Object.keys(this.measurements[this._currentType][this._currentVariant]);
}
@@ -415,6 +417,34 @@ class MeasurementContainer {
}
}
+ _convertPositionStr2Num(positionString) {
+ switch(positionString) {
+ case "atEquipment":
+ return 0;
+ case "upstream":
+ return Number.POSITIVE_INFINITY;
+ case "downstream":
+ return Number.NEGATIVE_INFINITY;
+
+ default:
+ this.logger.error(`Invalid positionVsParent provided: ${positionString}`);
+ return;
+ }
+ }
+
+ _convertPositionNum2Str(positionValue) {
+ if (positionValue == 0) {
+ return "atEquipment";
+ }
+ if (positionValue < 0) {
+ return "upstream";
+ }
+ if (positionValue > 0) {
+ return "downstream";
+ }
+ this.logger.error(`Invalid position provided: ${positionValue}`);
+ }
+
}
module.exports = MeasurementContainer;