1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 package org.ximtec.igesture.configuration.jdom;
28
29 import java.util.List;
30 import java.util.Map;
31
32 import org.jdom.Element;
33 import org.ximtec.igesture.configuration.Configuration;
34 import org.ximtec.igesture.core.GestureSet;
35 import org.ximtec.igesture.core.jdom.JdomGestureSet;
36
37
38
39
40
41
42
43
44
45 public class JdomConfiguration extends Element {
46
47 public static final String ROOT_TAG = "configuration";
48
49 public static final String ALGORITHM_TAG = "algorithm";
50
51 public static final String PARAMETER_TAG = "parameter";
52
53 public static final String SETS_TAG = "sets";
54
55 public static final String NAME_ATTRIBUTE = "name";
56
57 public static final String PARAMETER_ACCURACY = "accuracy";
58
59 public static final String PARAMETER_RESULT_SET_SIZE = "resultSetSize";
60 public static final String UUID_ATTRIBUTE = "id";
61
62
63 public JdomConfiguration(Configuration configuration) {
64 super(ROOT_TAG);
65 setAttribute(NAME_ATTRIBUTE, configuration.getName());
66 setAttribute(UUID_ATTRIBUTE, configuration.getId());
67
68 for (String algorithmName : configuration.getAlgorithms()) {
69 Element element = new Element(ALGORITHM_TAG);
70 element.setAttribute(NAME_ATTRIBUTE, algorithmName);
71 Map<String, String> parameters = configuration
72 .getParameters(algorithmName);
73
74 for (String parameterName : parameters.keySet()) {
75 element.addContent(new JdomConfigurationParameter(parameterName,
76 parameters.get(parameterName)));
77 }
78
79 this.addContent(element);
80 }
81
82 this.addContent(new JdomConfigurationParameter(PARAMETER_ACCURACY, String
83 .valueOf(configuration.getMinAccuracy())));
84 this.addContent(new JdomConfigurationParameter(PARAMETER_RESULT_SET_SIZE,
85 String.valueOf(configuration.getMaxResultSetSize())));
86
87
88 if (!configuration.getGestureSets().isEmpty()) {
89 final Element sets = new Element(SETS_TAG);
90
91 for (final GestureSet set : configuration.getGestureSets()) {
92 sets.addContent(new JdomGestureSet(set));
93 }
94
95 this.addContent(sets);
96 }
97
98 }
99
100
101 @SuppressWarnings("unchecked")
102 public static Object unmarshal(Element configurationElement) {
103 final Configuration configuration = new Configuration();
104 final String name = configurationElement.getAttributeValue(NAME_ATTRIBUTE);
105 final String uuid = configurationElement.getAttributeValue(UUID_ATTRIBUTE);
106 configuration.setName(name);
107 configuration.setId(uuid);
108
109 for (final Element algorithmElem : (List<Element>)configurationElement
110 .getChildren(ALGORITHM_TAG)) {
111
112
113 final String algorithmName = algorithmElem
114 .getAttributeValue(NAME_ATTRIBUTE);
115 configuration.addAlgorithm(algorithmName);
116
117
118 for (final Element parameter : (List<Element>)algorithmElem
119 .getChildren(JdomConfigurationParameter.ROOT_TAG)) {
120 final String[] parameterList = JdomConfigurationParameter
121 .unmarshal(parameter);
122 configuration.addParameter(algorithmName, parameterList[0],
123 parameterList[1]);
124 }
125
126 }
127
128 for (final Element parameter : (List<Element>)configurationElement
129 .getChildren(JdomConfigurationParameter.ROOT_TAG)) {
130 final String[] tuple = JdomConfigurationParameter.unmarshal(parameter);
131
132 if (tuple[0].equals(PARAMETER_ACCURACY)) {
133 configuration.setMinAccuracy(Double.parseDouble(tuple[1]));
134 }
135 else if (tuple[0].equals(PARAMETER_RESULT_SET_SIZE)) {
136 configuration.setMaxResultSetSize(Integer.parseInt(tuple[1]));
137 }
138
139 }
140
141 for (final Element set : (List<Element>)configurationElement
142 .getChildren(JdomGestureSet.ROOT_TAG)) {
143 configuration.addGestureSet(JdomGestureSet.unmarshal(set));
144 }
145
146 return configuration;
147 }
148
149 }