1 package net.sf.openrocket.preset.loader;
3 import net.sf.openrocket.material.Material;
4 import net.sf.openrocket.preset.ComponentPreset;
5 import net.sf.openrocket.preset.ComponentPreset.Type;
6 import net.sf.openrocket.preset.TypedPropertyMap;
10 public class StreamerLoader extends BaseComponentLoader {
12 private final MaterialHolder materials;
14 public StreamerLoader(MaterialHolder theMaterials, File theBasePath) {
15 super(theMaterials, theBasePath);
16 materials = theMaterials;
18 //The base component loader adds a bulk material loader, which is incompatible with the surface loader
19 //for a streamer. Remove the file column parser here so we can set your own in the code that follows.
20 for (int i = 0; i < fileColumns.size(); i++) {
21 RocksimComponentFileColumnParser rocksimComponentFileColumnParser = fileColumns.get(i);
22 if (rocksimComponentFileColumnParser instanceof MaterialColumnParser) {
23 fileColumns.remove(rocksimComponentFileColumnParser);
27 fileColumns.add(new SurfaceMaterialColumnParser(materials,"Material",ComponentPreset.MATERIAL));
28 fileColumns.add(new DoubleUnitColumnParser("Length","Units",ComponentPreset.LENGTH));
29 fileColumns.add(new DoubleUnitColumnParser("Width","Units",ComponentPreset.WIDTH));
30 fileColumns.add(new DoubleUnitColumnParser("Thickness","Units",ComponentPreset.THICKNESS));
35 protected Type getComponentPresetType() {
36 return ComponentPreset.Type.STREAMER;
41 protected RocksimComponentFileType getFileType() {
42 return RocksimComponentFileType.STREAMER;
47 protected void postProcess(TypedPropertyMap props) {
48 super.postProcess(props);
50 // Fix the material since some files use bulk materials for streamers.
51 Double thickness = props.get( ComponentPreset.THICKNESS );
52 Material.Surface myMaterial = (Material.Surface) props.get( ComponentPreset.MATERIAL );
54 Material.Surface m = materials.getSurfaceMaterial(myMaterial, thickness);
56 props.put(ComponentPreset.MATERIAL, m!=null? m : myMaterial);