Merge commit '42b2e5ca519766e37ce6941ba4faecc9691cc403' into upstream
[debian/openrocket] / core / src / net / sf / openrocket / preset / loader / StreamerLoader.java
diff --git a/core/src/net/sf/openrocket/preset/loader/StreamerLoader.java b/core/src/net/sf/openrocket/preset/loader/StreamerLoader.java
new file mode 100644 (file)
index 0000000..403ea0f
--- /dev/null
@@ -0,0 +1,59 @@
+package net.sf.openrocket.preset.loader;
+
+import net.sf.openrocket.material.Material;
+import net.sf.openrocket.preset.ComponentPreset;
+import net.sf.openrocket.preset.ComponentPreset.Type;
+import net.sf.openrocket.preset.TypedPropertyMap;
+
+import java.io.File;
+
+public class StreamerLoader extends BaseComponentLoader {
+
+       private final MaterialHolder materials;
+
+       public StreamerLoader(MaterialHolder theMaterials, File theBasePath) {
+               super(theMaterials, theBasePath);
+               materials = theMaterials;
+
+        //The base component loader adds a bulk material loader, which is incompatible with the surface loader
+        //for a streamer.  Remove the file column parser here so we can set your own in the code that follows.
+        for (int i = 0; i < fileColumns.size(); i++) {
+            RocksimComponentFileColumnParser rocksimComponentFileColumnParser = fileColumns.get(i);
+            if (rocksimComponentFileColumnParser instanceof MaterialColumnParser) {
+                fileColumns.remove(rocksimComponentFileColumnParser);
+            }
+        }
+
+               fileColumns.add(new SurfaceMaterialColumnParser(materials,"Material",ComponentPreset.MATERIAL));
+               fileColumns.add(new DoubleUnitColumnParser("Length","Units",ComponentPreset.LENGTH));
+               fileColumns.add(new DoubleUnitColumnParser("Width","Units",ComponentPreset.WIDTH));
+               fileColumns.add(new DoubleUnitColumnParser("Thickness","Units",ComponentPreset.THICKNESS));
+       }
+
+
+       @Override
+       protected Type getComponentPresetType() {
+               return ComponentPreset.Type.STREAMER;
+       }
+
+
+       @Override
+       protected RocksimComponentFileType getFileType() {
+               return RocksimComponentFileType.STREAMER;
+       }
+
+
+       @Override
+       protected void postProcess(TypedPropertyMap props) {
+               super.postProcess(props);
+
+               // Fix the material since some files use bulk materials for streamers.
+               Double thickness = props.get( ComponentPreset.THICKNESS );
+               Material.Surface myMaterial = (Material.Surface) props.get( ComponentPreset.MATERIAL );
+
+               Material.Surface m = materials.getSurfaceMaterial(myMaterial, thickness);
+
+               props.put(ComponentPreset.MATERIAL, m!=null? m : myMaterial);
+       }
+
+}