View Javadoc

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   * @author Bjorn Puype, bpuype@gmail.com
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  	 * @param key
43  	 * @param controller
44  	 * @param treePath
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  		//read constraints from file
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  	/* (non-Javadoc)
81  	 * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
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 }