View Javadoc

1   /*
2    * @(#)$Id: JdomConfiguration.java 736 2009-08-14 09:20:17Z kurmannu $
3    *
4    * Author       :   Ueli Kurmann, igesture@uelikurmann.ch
5    *
6    * Purpose      : 	XML support for the Configuration class.
7    *
8    * -----------------------------------------------------------------------
9    *
10   * Revision Information:
11   *
12   * Date             Who         Reason
13   *
14   * Dec 26, 2006     ukurmann    Initial Release
15   * Mar 22, 2007     bsigner     Cleanup
16   *
17   * -----------------------------------------------------------------------
18   *
19   * Copyright 1999-2009 ETH Zurich. All Rights Reserved.
20   *
21   * This software is the proprietary information of ETH Zurich.
22   * Use is subject to license terms.
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   * XML support for the Configuration class.
40   * 
41   * @version 1.0 Dec 2006
42   * @author Ueli Kurmann, igesture@uelikurmann.ch
43   * @author Beat Signer, signer@inf.ethz.ch
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        // sets
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          // set the algorithm name
113          final String algorithmName = algorithmElem
114                .getAttributeValue(NAME_ATTRIBUTE);
115          configuration.addAlgorithm(algorithmName);
116 
117          // add parameters
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    } // unmarshal
148 
149 }