1
2
3
4 package org.ximtec.igesture.tool.view.admin.action;
5
6 import java.awt.event.ActionEvent;
7 import java.lang.reflect.Constructor;
8 import java.lang.reflect.InvocationTargetException;
9 import java.net.URL;
10 import java.util.ArrayList;
11 import java.util.HashMap;
12 import java.util.Map;
13 import java.util.concurrent.ConcurrentSkipListSet;
14 import java.util.logging.Level;
15 import java.util.logging.Logger;
16
17 import javax.swing.JOptionPane;
18 import javax.swing.tree.TreePath;
19
20 import org.w3c.dom.Node;
21 import org.w3c.dom.NodeList;
22 import org.ximtec.igesture.core.GestureClass;
23 import org.ximtec.igesture.core.composite.CompositeDescriptor;
24 import org.ximtec.igesture.core.composite.Constraint;
25 import org.ximtec.igesture.tool.GestureConstants;
26 import org.ximtec.igesture.tool.core.Controller;
27 import org.ximtec.igesture.tool.core.TreePathAction;
28 import org.ximtec.igesture.util.XMLParser;
29
30
31
32
33
34 public class AddCompositeDescriptorAction extends TreePathAction {
35
36 private static final Logger LOGGER = Logger.getLogger(AddCompositeDescriptorAction.class.getName());
37
38 private Map<String, String> constraintsMapping;
39 private Controller controller;
40
41
42
43
44
45
46 public AddCompositeDescriptorAction(Controller controller, TreePath treePath) {
47 super(GestureConstants.COMPOSITE_DESCRIPTOR_ADD, controller, treePath);
48 this.controller = controller;
49
50 initConstraintsMapping();
51 }
52
53 private void initConstraintsMapping() {
54 constraintsMapping = new HashMap<String, String>();
55
56
57 URL path = getClass().getClassLoader().getResource("config.xml");
58 XMLParser parser = new XMLParser(){
59
60 @Override
61 public void execute(ArrayList<NodeList> nodeLists) {
62 String name = ((Node)nodeLists.get(0).item(0)).getNodeValue();
63 String clazz = ((Node)nodeLists.get(1).item(0)).getNodeValue();
64 constraintsMapping.put(name, clazz);
65 }
66
67 };
68 ArrayList<String> nodes = new ArrayList<String>();
69 nodes.add("name");
70 nodes.add("class");
71 try {
72 parser.parse(path.getFile(), "constraint", nodes);
73 } catch (Exception e) {
74 LOGGER.log(Level.SEVERE,"Could not parse configuration file (config.xml - constraints).",e);
75 }
76 }
77
78
79
80
81
82
83 @Override
84 public void actionPerformed(ActionEvent event) {
85 GestureClass gestureClass = (GestureClass) getTreePath().getLastPathComponent();
86
87 ConcurrentSkipListSet<String> map = new ConcurrentSkipListSet<String>();
88 map.addAll(constraintsMapping.keySet());
89
90 Constraint constraint = null;
91 String choice = (String)JOptionPane.showInputDialog(
92 null,
93 "Choose a Constraint Type",
94 "Constraint Chooser",
95 JOptionPane.PLAIN_MESSAGE,
96 null,
97 map.toArray(),
98 "Concurrency");
99
100 if ((choice != null) && (choice.length() > 0)) {
101 String clazz = constraintsMapping.get(choice.toString());
102 Class<?> cl;
103 try {
104 cl = Class.forName(clazz);
105 Constructor[] ctors = cl.getDeclaredConstructors();
106 constraint = (Constraint)ctors[0].newInstance();
107 CompositeDescriptor descriptor = new CompositeDescriptor();
108 descriptor.setConstraint(constraint);
109 gestureClass.addDescriptor(descriptor);
110 } catch (ClassNotFoundException e) {
111 e.printStackTrace();
112 } catch (IllegalArgumentException e) {
113 e.printStackTrace();
114 } catch (InstantiationException e) {
115 e.printStackTrace();
116 } catch (IllegalAccessException e) {
117 e.printStackTrace();
118 } catch (InvocationTargetException e) {
119 e.printStackTrace();
120 }
121 }
122 }
123
124 }