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.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
43
44
45
46
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
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 }
114
115 }