1 package org.lcsim.material;
2
3 import java.io.PrintStream;
4 import java.util.ArrayList;
5 import java.util.HashMap;
6 import java.util.List;
7 import java.util.Map;
8
9
10
11
12
13
14
15
16 public class MaterialManager
17 {
18
19 private static MaterialManager _instance = null;
20
21
22 private static Map<String, Material> _materials = new HashMap<String, Material>();
23 private static Map<String, MaterialElement> _elements = new HashMap<String, MaterialElement>();
24
25
26
27
28 private MaterialManager()
29 {}
30
31
32
33
34
35 public static MaterialManager instance()
36 {
37 if (_instance == null)
38 {
39 _instance = new MaterialManager();
40 }
41
42 return _instance;
43 }
44
45 public List<String> getMaterialNames()
46 {
47
48 return new ArrayList<String>(_materials.keySet());
49 }
50
51 public List<String> getElementNames()
52 {
53
54 return new ArrayList<String>(_elements.keySet());
55 }
56
57
58 public Map<String, Material> materials()
59 {
60 return _materials;
61 }
62
63
64 public static Map<String, MaterialElement> elements()
65 {
66 return _elements;
67 }
68
69 protected void addMaterial(Material material)
70 {
71 if (material == null)
72 {
73 throw new IllegalArgumentException("Argument points to null.");
74 }
75
76 if (getMaterial(material.getName()) != null)
77 {
78 throw new RuntimeException("Material with name " + material.getName() + " already exists.");
79 }
80
81 _materials.put(material.getName(), material);
82 }
83
84
85
86
87
88
89 public Material getMaterial(String materialName)
90 {
91 return _materials.get(materialName);
92 }
93
94 public MaterialElement getElement(String elementName)
95 {
96 return _elements.get(elementName);
97 }
98
99 protected void addElement(MaterialElement me)
100 {
101 if (MaterialManager.instance().getElement(me.getName()) == null)
102 {
103 _elements.put(me.getName(), me);
104 }
105 else
106 {
107 throw new RuntimeException("MaterialElement already exists: " + me.getName());
108 }
109 }
110
111 public String toString()
112 {
113 StringBuffer buff = new StringBuffer();
114 for (MaterialElement me : _elements.values())
115 {
116 buff.append(me.toString());
117 }
118 for (Material m : _materials.values())
119 {
120 buff.append(m.toString());
121 }
122 return buff.toString();
123 }
124
125 public void printMaterials(PrintStream ps)
126 {
127 for (Material m : materials().values())
128 {
129 ps.println(m.toString());
130 }
131 }
132
133 public void printElements(PrintStream ps)
134 {
135 for (MaterialElement me : elements().values())
136 {
137 ps.println(me.toString());
138 }
139 }
140
141
142
143
144
145 void clear()
146 {
147
148 _materials = new HashMap<String, Material>();
149 _elements = new HashMap<String, MaterialElement>();
150
151
152 _instance = null;
153 }
154 }