1 package net.sf.openrocket.preset.loader;
3 import java.util.Collection;
4 import java.util.HashMap;
5 import java.util.HashSet;
9 import net.sf.openrocket.database.Database;
10 import net.sf.openrocket.material.Material;
11 import net.sf.openrocket.unit.UnitGroup;
13 public class MaterialHolder {
15 private final Map<String,Material.Bulk> bulkMaterials = new HashMap<String,Material.Bulk>();
17 private final Map<String,Material.Surface> surfaceMaterials = new HashMap<String,Material.Surface>();
19 private final Map<String, Material.Line> lineMaterials = new HashMap<String,Material.Line>();
21 public MaterialHolder() {}
23 public MaterialHolder( List<Material> materials ) {
24 if (materials == null) {
27 for (Material material : materials) {
32 public void put( Material material ) {
33 switch ( material.getType() ) {
35 bulkMaterials.put(material.getName(), (Material.Bulk) material);
38 surfaceMaterials.put(material.getName(), (Material.Surface) material);
41 lineMaterials.put(material.getName(), (Material.Line) material);
46 public Material getMaterial ( Material material ) {
47 switch ( material.getType() ) {
49 return getBulkMaterial( (Material.Bulk)material );
51 return getSurfaceMaterial( (Material.Surface) material, null );
53 return getLineMaterial( (Material.Line) material );
59 public Material.Bulk getBulkMaterial( Material.Bulk material ) {
60 Material.Bulk m = bulkMaterials.get( material.getName() );
64 public Material.Surface getSurfaceMaterial( Material.Surface material, Double thickness ) {
65 Material.Surface m = surfaceMaterials.get(material.getName() );
69 // Try to see if we can convert a bulk material.
70 if ( thickness == null ) {
71 // if we have no thickness, there is nothing we can do
74 String thicknessName = UnitGroup.UNITS_LENGTH.getUnit("mm").toString(thickness);
75 String convertedMaterialName = material.getName() + "(" + thicknessName + ")";
76 m = surfaceMaterials.get(convertedMaterialName);
80 Material.Bulk bulk = bulkMaterials.get(material.getName() );
86 // Ok, now we have a thickness and a bulk material of the correct name,
87 // we can make our own surface material.
89 Material.Surface surface = (Material.Surface) Material.newUserMaterial(Material.Type.SURFACE, convertedMaterialName, bulk.getDensity() * thickness);
97 public Material.Line getLineMaterial( Material.Line material ) {
98 Material.Line m = lineMaterials.get( material.getName() );
103 return bulkMaterials.size() + surfaceMaterials.size() + lineMaterials.size();
106 public Collection<Material> values() {
108 HashSet<Material> allMats = new HashSet<Material>();
109 allMats.addAll( bulkMaterials.values() );
110 allMats.addAll( surfaceMaterials.values() );
111 allMats.addAll( lineMaterials.values() );
117 public Database<Material> asDatabase(Material.Type theType) {
118 Database<Material> result = new Database<Material>();
121 result.addAll(lineMaterials.values());
124 result.addAll(surfaceMaterials.values());
128 result.addAll(bulkMaterials.values());