X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=core%2Fsrc%2Fnet%2Fsf%2Fopenrocket%2Fpreset%2Floader%2FMaterialHolder.java;fp=core%2Fsrc%2Fnet%2Fsf%2Fopenrocket%2Fpreset%2Floader%2FMaterialHolder.java;h=7ab176b8494d2ca536d90a5b9b9793dc6a2bf059;hb=9349577cdfdff682b2aabd6daa24fdc3a7449b58;hp=0000000000000000000000000000000000000000;hpb=30ba0a882f0c061176ba14dbf86d3d6fad096c02;p=debian%2Fopenrocket diff --git a/core/src/net/sf/openrocket/preset/loader/MaterialHolder.java b/core/src/net/sf/openrocket/preset/loader/MaterialHolder.java new file mode 100644 index 00000000..7ab176b8 --- /dev/null +++ b/core/src/net/sf/openrocket/preset/loader/MaterialHolder.java @@ -0,0 +1,134 @@ +package net.sf.openrocket.preset.loader; + +import java.util.Collection; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; + +import net.sf.openrocket.database.Database; +import net.sf.openrocket.database.Databases; +import net.sf.openrocket.material.Material; +import net.sf.openrocket.unit.UnitGroup; + +public class MaterialHolder { + + private final Map bulkMaterials = new HashMap(); + + private final Map surfaceMaterials = new HashMap(); + + private final Map lineMaterials = new HashMap(); + + public MaterialHolder() { + } + + public MaterialHolder(List materials) { + if (materials == null) { + return; + } + for (Material material : materials) { + this.put(material); + } + } + + public void put(Material material) { + switch (material.getType()) { + case BULK: + bulkMaterials.put(material.getName(), (Material.Bulk) material); + break; + case SURFACE: + surfaceMaterials.put(material.getName(), (Material.Surface) material); + break; + case LINE: + lineMaterials.put(material.getName(), (Material.Line) material); + break; + } + } + + public Material getMaterial(Material material) { + switch (material.getType()) { + case BULK: + return getBulkMaterial((Material.Bulk) material); + case SURFACE: + return getSurfaceMaterial((Material.Surface) material, null); + case LINE: + return getLineMaterial((Material.Line) material); + default: + return null; + } + } + + public Material.Bulk getBulkMaterial(Material.Bulk material) { + Material.Bulk m = bulkMaterials.get(material.getName()); + return m; + } + + public Material.Surface getSurfaceMaterial(Material.Surface material, Double thickness) { + Material.Surface m = surfaceMaterials.get(material.getName()); + if (m != null) { + return m; + } + // Try to see if we can convert a bulk material. + if (thickness == null) { + // if we have no thickness, there is nothing we can do + return null; + } + String thicknessName = UnitGroup.UNITS_LENGTH.getUnit("mm").toString(thickness); + String convertedMaterialName = material.getName() + "(" + thicknessName + ")"; + m = surfaceMaterials.get(convertedMaterialName); + if (m != null) { + return m; + } + Material.Bulk bulk = bulkMaterials.get(material.getName()); + + if (bulk == null) { + return null; + } + + // Ok, now we have a thickness and a bulk material of the correct name, + // we can make our own surface material. + + Material.Surface surface = (Material.Surface) Databases.findMaterial(Material.Type.SURFACE, convertedMaterialName, bulk.getDensity() * thickness); + + this.put(surface); + + return surface; + + } + + public Material.Line getLineMaterial(Material.Line material) { + Material.Line m = lineMaterials.get(material.getName()); + return m; + } + + public int size() { + return bulkMaterials.size() + surfaceMaterials.size() + lineMaterials.size(); + } + + public Collection values() { + + HashSet allMats = new HashSet(); + allMats.addAll(bulkMaterials.values()); + allMats.addAll(surfaceMaterials.values()); + allMats.addAll(lineMaterials.values()); + + return allMats; + + } + + public Database asDatabase(Material.Type theType) { + Database result = new Database(); + switch (theType) { + case LINE: + result.addAll(lineMaterials.values()); + break; + case SURFACE: + result.addAll(surfaceMaterials.values()); + break; + case BULK: + default: + result.addAll(bulkMaterials.values()); + } + return result; + } +}