View Javadoc

1   /**
2    * 
3    */
4   package org.ximtec.igesture.tool.view.devicemanager.wizard;
5   
6   import java.awt.BorderLayout;
7   import java.awt.Color;
8   import java.util.ArrayList;
9   import java.util.Map;
10  
11  import javax.swing.BorderFactory;
12  import javax.swing.DefaultListModel;
13  import javax.swing.JCheckBox;
14  import javax.swing.JComponent;
15  import javax.swing.JList;
16  import javax.swing.JPanel;
17  import javax.swing.JScrollPane;
18  import javax.swing.ListSelectionModel;
19  import javax.swing.event.ListSelectionEvent;
20  import javax.swing.event.ListSelectionListener;
21  
22  import org.netbeans.spi.wizard.Summary;
23  import org.netbeans.spi.wizard.WizardBranchController;
24  import org.netbeans.spi.wizard.WizardController;
25  import org.netbeans.spi.wizard.WizardException;
26  import org.netbeans.spi.wizard.WizardPanelProvider;
27  import org.ximtec.igesture.algorithm.Algorithm;
28  import org.ximtec.igesture.algorithm.AlgorithmException;
29  import org.ximtec.igesture.configuration.Configuration;
30  import org.ximtec.igesture.core.GestureSet;
31  import org.ximtec.igesture.tool.view.devicemanager.DeviceManagerController;
32  import org.ximtec.igesture.Recogniser;
33  
34  /**
35   * @author Bjorn Puype, bpuype@gmail.com
36   *
37   */
38  public class AddDeviceWizardBranchController extends WizardBranchController {
39  	
40  	public AddDeviceWizardBranchController(DeviceManagerController manager) {
41  		super(new AddDeviceWizardProvider(manager));
42  	}
43  
44  	protected WizardPanelProvider getPanelProviderForStep (String step, Map settings) {
45          String which = (String) settings.get ("recogniser");
46          if (which == null) {
47              return null;
48          } else if ("Existing Recogniser".equals(which)) {
49              return getExistingPanel();
50          } else if ("New Recogniser".equals(which)) {
51              return getNewPanel();
52          } else {
53              throw new IllegalArgumentException (which);
54          }
55      }
56  
57  	private WizardPanelProvider getNewPanel() {
58  		return new NewRecogniserWizardProvider();
59  	}
60  
61  	/**
62  	 * @return
63  	 */
64  	private WizardPanelProvider getExistingPanel() {
65  		return new ExistingRecogniserWizardProvider();
66  	}
67  	
68  	private class ExistingRecogniserWizardProvider extends WizardPanelProvider
69  	{
70  		public ExistingRecogniserWizardProvider()
71  		{
72  			super("Add Device ...", new String[]{"existing"}, new String[]{"Choose a Recogniser"});
73  		}
74  
75  		/* (non-Javadoc)
76  		 * @see org.netbeans.spi.wizard.WizardPanelProvider#createPanel(org.netbeans.spi.wizard.WizardController, java.lang.String, java.util.Map)
77  		 */
78  		@Override
79  		protected JComponent createPanel(final WizardController controller, String id, final Map settings)
80  		{
81  			controller.setProblem("You must select a Recogniser");
82  			
83  			JPanel panel = new JPanel();
84  			panel.setLayout(new BorderLayout());
85  			final JList recogniserList = new JList();
86  			final DefaultListModel model = new DefaultListModel();
87  			recogniserList.setModel(model);
88  			recogniserList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
89  			
90  			//TODO fill model
91  			model.addElement("Recogniser 1");
92  			model.addElement("Recogniser 2");
93  			
94  			recogniserList.addListSelectionListener(new ListSelectionListener(){
95  
96  				@Override
97  				public void valueChanged(ListSelectionEvent e) {
98  					if(!e.getValueIsAdjusting())
99  					{
100 						controller.setProblem(null);						
101 						settings.put("recogniser", model.getElementAt(recogniserList.getSelectedIndex()));
102 						System.out.println(model.getElementAt(recogniserList.getSelectedIndex()));
103 					}
104 				}
105 			});
106 			
107 			JScrollPane scrollList = new JScrollPane(recogniserList);
108 			scrollList.setBorder(BorderFactory.createTitledBorder(BorderFactory.createLineBorder(Color.GRAY), "Recognisers"));
109 			panel.add(scrollList,BorderLayout.CENTER);
110 			return panel;
111 		}
112 		
113 		@Override
114 		public Object finish(Map wizardData) throws WizardException {
115 			
116 			//summary
117 			String[] items = new String[wizardData.size()];
118 			items[0] = "Connection:\t" + wizardData.get("connection");
119 			items[1] = "Device:\t" + wizardData.get("device");
120 			items[2] = "User:\t" + wizardData.get("user");
121 			items[3] = "Recogniser:\t" + wizardData.get("recogniser");
122 			
123 			//result
124 			ArrayList<Object> result = new ArrayList<Object>();
125 			result.add(wizardData.get("device"));
126 			result.add(wizardData.get("user"));
127 			result.add(wizardData.get("recogniser"));
128 			
129 			return Summary.create(items,result);
130 		}
131 		
132 	}
133 	
134 	private class NewRecogniserWizardProvider extends WizardPanelProvider
135 	{
136 		
137 		public NewRecogniserWizardProvider()
138 		{
139 			super("Add device...", new String[]{"new"}, new String[]{"Create a new Recogniser"});
140 		}
141 
142 		/* (non-Javadoc)
143 		 * @see org.netbeans.spi.wizard.WizardPanelProvider#createPanel(org.netbeans.spi.wizard.WizardController, java.lang.String, java.util.Map)
144 		 */
145 		@Override
146 		protected JComponent createPanel(final WizardController controller, String id, final Map settings) {
147 			
148 			controller.setProblem("Select at least one gesture set and one algorithm");
149 			JPanel panel = new JPanel();
150 			panel.setLayout(new BorderLayout());
151 			
152 			final JList algList = new JList();
153 			final DefaultListModel algModel = new DefaultListModel();
154 			algList.setModel(algModel);
155 			algModel.addElement("Rubine");
156 			
157 			JScrollPane algScroll = new JScrollPane(algList);
158 			algScroll.setBorder(BorderFactory.createTitledBorder(BorderFactory.createLineBorder(Color.GRAY), "Algorithms"));
159 			
160 			final JList setList = new JList();
161 			final DefaultListModel setModel = new DefaultListModel();
162 			setList.setModel(setModel);
163 			setModel.addElement("2D");
164 			setModel.addElement("3D");
165 			
166 			JScrollPane setScroll = new JScrollPane(setList);
167 			setScroll.setBorder(BorderFactory.createTitledBorder(BorderFactory.createLineBorder(Color.GRAY), "Gesture Sets"));
168 			
169 			ListSelectionListener l = new ListSelectionListener(){
170 
171 				@Override
172 				public void valueChanged(ListSelectionEvent e) {
173 					if(!e.getValueIsAdjusting())
174 					{
175 						if(algList.getSelectedIndex() > -1 && setList.getSelectedIndex() > -1)
176 						{
177 							Algorithm a = (Algorithm) algModel.getElementAt(algList.getSelectedIndex());
178 							GestureSet gs = (GestureSet) setModel.getElementAt(setList.getSelectedIndex());
179 							Configuration config = new Configuration();
180 							config.addAlgorithm(a.getClass().getName());
181 							config.addGestureSet(gs);
182 							try {
183 								Recogniser recogniser = new Recogniser(config);
184 								settings.put("recogniser", recogniser);
185 							} catch (AlgorithmException e1) {
186 								e1.printStackTrace();
187 							}
188 							//TODO chkbox multimodal
189 							controller.setProblem(null);
190 						}
191 					}
192 					
193 				}
194 				
195 			};
196 			
197 			algList.addListSelectionListener(l);
198 			setList.addListSelectionListener(l);
199 			
200 			JPanel listPanel = new JPanel();
201 			listPanel.add(algScroll);
202 			listPanel.add(setScroll);
203 			
204 			JPanel optionsPanel = new JPanel();
205 			JCheckBox chkMultimodal = new JCheckBox("Multi-modal Support");
206 			optionsPanel.add(chkMultimodal);
207 			
208 			panel.add(listPanel,BorderLayout.CENTER);
209 			panel.add(optionsPanel, BorderLayout.SOUTH);
210 			return panel;
211 		}
212 		
213 		@Override
214 		public Object finish(Map wizardData) throws WizardException {
215 			
216 			//summary
217 			String[] items = new String[wizardData.size()];
218 			items[0] = "Connection:\t" + wizardData.get("connection");
219 			items[1] = "Device:\t" + wizardData.get("device");
220 			items[2] = "User:\t" + wizardData.get("user");
221 			items[3] = "Recogniser:\t" + wizardData.get("recogniser");
222 			
223 			//result
224 			ArrayList<Object> result = new ArrayList<Object>();
225 			result.add(wizardData.get("device"));
226 			result.add(wizardData.get("user"));
227 			result.add(wizardData.get("recogniser"));
228 			
229 			return Summary.create(items,result);
230 		}
231 		
232 	}
233 
234 }