Merge commit '42b2e5ca519766e37ce6941ba4faecc9691cc403' into upstream
[debian/openrocket] / core / src / net / sf / openrocket / preset / loader / DoubleUnitColumnParser.java
diff --git a/core/src/net/sf/openrocket/preset/loader/DoubleUnitColumnParser.java b/core/src/net/sf/openrocket/preset/loader/DoubleUnitColumnParser.java
new file mode 100644 (file)
index 0000000..bd9a5c1
--- /dev/null
@@ -0,0 +1,57 @@
+package net.sf.openrocket.preset.loader;
+
+import net.sf.openrocket.preset.TypedKey;
+import net.sf.openrocket.preset.TypedPropertyMap;
+import net.sf.openrocket.unit.Unit;
+import net.sf.openrocket.unit.UnitGroup;
+
+public class DoubleUnitColumnParser extends BaseUnitColumnParser {
+
+       private TypedKey<Double> propKey;
+
+       public DoubleUnitColumnParser(String columnHeader, String unitHeader,
+                       TypedKey<Double> propKey) {
+               super(columnHeader, unitHeader);
+               this.propKey = propKey;
+       }
+
+       @Override
+       protected void doParse(String columnData, String[] data, TypedPropertyMap props) {
+               try {
+                       if (columnData == null || "".equals(columnData) ) {
+                               return;
+                       }
+                       double value = Double.valueOf(columnData);
+
+                       if ( unitConfigured ) {
+                               String unitName = data[unitIndex];
+
+                               Unit unit = rocksimUnits.get(unitName);
+                               if ( unit == null ) {
+                                       if ( unitName == null || "" .equals(unitName) || "?".equals(unitName)) {
+                                               // Hmm no data...  Lets assume SI
+                                               if ( propKey.getUnitGroup() == UnitGroup.UNITS_LENGTH ) {
+                                                       unit = UnitGroup.UNITS_LENGTH.getUnit("in");
+                                               } else {
+                                                       unit= UnitGroup.UNITS_MASS.getUnit("oz");
+                                               }
+                                       } else {
+                                               unitName = super.mungeUnitNameString(unitName);
+                                               UnitGroup group = propKey.getUnitGroup();
+                                               unit = group.getUnit(unitName);
+                                       }
+                               }
+
+                               value = unit.fromUnit(value);
+                       }
+
+                       props.put(propKey, value);
+               }
+               catch ( NumberFormatException nex) {
+               }
+        catch ( IllegalArgumentException iae) {
+        }
+       }
+
+
+}