View Javadoc

1   /*
2    * @(#)$Id: JdomGestureSet.java 736 2009-08-14 09:20:17Z kurmannu $
3    *
4    * Author       :   Ueli Kurmann, igesture@uelikurmann.ch
5    *
6    * Purpose      :   XML support for the GestureSet 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.core.jdom;
28  
29  import java.util.List;
30  import java.util.logging.Level;
31  import java.util.logging.Logger;
32  
33  import org.jdom.Element;
34  import org.jdom.JDOMException;
35  import org.jdom.xpath.XPath;
36  import org.sigtec.util.Constant;
37  import org.ximtec.igesture.core.GestureClass;
38  import org.ximtec.igesture.core.GestureSet;
39  
40  
41  /**
42   * XML support for the GestureSet class.
43   * 
44   * @version 1.0, Dec 2006
45   * @author Ueli Kurmann, igesture@uelikurmann.ch
46   * @author Beat Signer, signer@inf.ethz.ch
47   */
48  public class JdomGestureSet extends Element {
49  
50     private static final Logger LOGGER = Logger.getLogger(JdomGestureSet.class
51           .getName());
52  
53     public static final String ROOT_TAG = "set";
54  
55     public static final String NAME_ATTRIBUTE = "name";
56  
57     public static final String UUID_ATTRIBUTE = "id";
58  
59     public static final String REFID_ATTRIBUTE = "idref";
60  
61  
62     public JdomGestureSet(GestureSet gestureSet) {
63        super(ROOT_TAG);
64        setAttribute(NAME_ATTRIBUTE, gestureSet.getName());
65        setAttribute(UUID_ATTRIBUTE, gestureSet.getId());
66  
67        for (final GestureClass gestureClass : gestureSet.getGestureClasses()) {
68           // addContent(new JdomGestureClass(gestureClass));
69           final Element classElement = new Element(JdomGestureClass.ROOT_TAG);
70           classElement.setAttribute(REFID_ATTRIBUTE, gestureClass.getId());
71           addContent(classElement);
72        }
73  
74     }
75  
76  
77     @SuppressWarnings("unchecked")
78     public static GestureSet unmarshal(Element setElement) {
79        final String name = setElement.getAttributeValue(NAME_ATTRIBUTE);
80        final String uuid = setElement.getAttributeValue(UUID_ATTRIBUTE);
81        final GestureSet gestureSet = new GestureSet(name);
82        gestureSet.setId(uuid);
83  
84        for (final Element classElement : (List<Element>)setElement
85              .getChildren(JdomGestureClass.ROOT_TAG)) {
86           final String classID = classElement.getAttributeValue(REFID_ATTRIBUTE);
87           GestureClass gestureClass = null;
88  
89           if (classID != null) {
90              Element classInstance = null;
91  
92              try {
93                 classInstance = (Element)XPath.selectSingleNode(setElement
94                       .getParent(), "./" + JdomGestureClass.ROOT_TAG + "[@"
95                       + UUID_ATTRIBUTE + "='" + classID + "']");
96                 gestureClass = JdomGestureClass
97                       .unmarshal(classInstance);
98  
99              }
100             catch (final JDOMException e) {
101                LOGGER.log(Level.SEVERE, Constant.EMPTY_STRING, e);
102             }
103 
104          }
105          else {
106             gestureClass = JdomGestureClass.unmarshal(classElement);
107          }
108 
109          gestureSet.addGestureClass(gestureClass);
110       }
111 
112       return gestureSet;
113    } // unmarshal
114 
115 }