1 package org.lcsim.geometry.compact;
2
3 import java.util.Map;
4 import java.util.HashMap;
5 import java.util.Set;
6 import org.jdom.Element;
7
8
9
10
11
12
13
14
15
16
17
18 public class ParameterSet
19 {
20
21 Map<String, Object> _parameters = new HashMap<String, Object>();
22
23
24 protected ParameterSet(Element node)
25 {
26 convertFromXML(node);
27 }
28
29
30 protected ParameterSet()
31 {}
32
33
34 private void convertFromXML(Element node)
35 {
36 assert (node != null);
37 assert (node.getName().compareTo("detector") == 0);
38
39
40 for (Object object : node.getChildren("parameter"))
41 {
42 Element element = (Element) object;
43
44
45 String name = element.getAttributeValue("name");
46 assert (name != null);
47
48
49 String type = element.getAttributeValue("type");
50
51
52 String value = element.getAttributeValue("value");
53
54
55
56 if ( value == null )
57 {
58 value = element.getTextNormalize();
59 }
60
61 Object convert = null;
62
63
64 if ( type != null )
65 {
66
67 if ( type.compareToIgnoreCase("double") == 0 ||
68 type.compareToIgnoreCase("dbl") == 0 )
69 {
70 convert = Double.parseDouble(value);
71 }
72
73 else if ( type.compareToIgnoreCase("integer") == 0
74 || type.compareToIgnoreCase("int") == 0 )
75 {
76 convert = Integer.parseInt(value);
77 }
78
79 else if ( type.compareToIgnoreCase("string") == 0 ||
80 type.compareToIgnoreCase("str") == 0)
81 {
82 convert = value;
83 }
84
85 else
86 {
87 throw new RuntimeException("Unknown type " + type + " for parameter " + name);
88 }
89 }
90
91 else
92 {
93 try
94 {
95
96 convert = Double.parseDouble(value);
97 }
98 catch (Exception e)
99 {
100
101 try
102 {
103
104 convert = Integer.parseInt(value);
105 }
106 catch (Exception ee)
107 {
108
109 convert = value;
110 }
111 }
112 }
113
114
115
116 addParameter(name, convert);
117 }
118 }
119
120
121 public void addParameter(String name, Object object)
122 {
123 if ( object instanceof Double || object instanceof Integer
124 || object instanceof String )
125 {
126 if ( _parameters.get(name) == null )
127 {
128 _parameters.put(name, object);
129 } else
130 {
131 throw new RuntimeException("Parameter " + name
132 + " already exists in this ParameterSet.");
133 }
134 } else
135 {
136 throw new RuntimeException("Parameter " + name
137 + " is not of type Double, Integer or String.");
138 }
139 }
140
141
142 public Object getParameter(String name, Class klass)
143 {
144 Object object = _parameters.get(name);
145 if ( object.getClass() == klass )
146 {
147 return object;
148 } else
149 {
150 System.err.println("Found object but type does not match.");
151 return null;
152 }
153 }
154
155
156 public boolean exists(String name)
157 {
158 return _parameters.containsKey(name);
159 }
160
161
162 public Set<String> getParameterNames()
163 {
164 return _parameters.keySet();
165 }
166
167
168 public Double getDouble(String name)
169 {
170 return (Double) getParameter(name, Double.class);
171 }
172
173
174 public Integer getInteger(String name)
175 {
176 return (Integer) getParameter(name, Integer.class);
177 }
178
179
180 public String getString(String name)
181 {
182 return (String) getParameter(name, String.class);
183 }
184 }