blob: fe77ace27224a44c2765c58a98c52a6609562066 [file] [log] [blame]
Francesco Furfariec7e1752006-10-02 13:37:04 +00001/*
2 * Licensed to the Apache Software Foundation (ASF) under one
3 * or more contributor license agreements. See the NOTICE file
4 * distributed with this work for additional information
5 * regarding copyright ownership. The ASF licenses this file
6 * to you under the Apache License, Version 2.0 (the
7 * "License"); you may not use this file except in compliance
8 * with the License. You may obtain a copy of the License at
Francesco Furfari91af5da2006-04-04 23:44:23 +00009 *
Francesco Furfariec7e1752006-10-02 13:37:04 +000010 * http://www.apache.org/licenses/LICENSE-2.0
Francesco Furfari91af5da2006-04-04 23:44:23 +000011 *
Francesco Furfariec7e1752006-10-02 13:37:04 +000012 * Unless required by applicable law or agreed to in writing,
13 * software distributed under the License is distributed on an
14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15 * KIND, either express or implied. See the License for the
16 * specific language governing permissions and limitations
17 * under the License.
Francesco Furfari91af5da2006-04-04 23:44:23 +000018 */
19
20package org.apache.felix.upnp.tester;
21
22
23import java.awt.BorderLayout;
24import java.awt.Component;
25import java.awt.Dimension;
26import java.awt.event.ActionEvent;
27import java.awt.event.ActionListener;
28import java.awt.event.KeyEvent;
29import java.awt.event.WindowAdapter;
30import java.awt.event.WindowEvent;
31import java.net.URL;
32
33import javax.swing.AbstractAction;
34import javax.swing.ButtonGroup;
35import javax.swing.ImageIcon;
36import javax.swing.JFrame;
37import javax.swing.JMenu;
38import javax.swing.JMenuBar;
39import javax.swing.JMenuItem;
40import javax.swing.JPanel;
41import javax.swing.JPopupMenu;
42import javax.swing.JRadioButtonMenuItem;
43import javax.swing.JSplitPane;
44import javax.swing.event.PopupMenuEvent;
45import javax.swing.event.PopupMenuListener;
46
47import org.apache.felix.upnp.tester.discovery.DriverProxy;
48import org.apache.felix.upnp.tester.discovery.RootDeviceListener;
49import org.apache.felix.upnp.tester.gui.LogPanel;
50import org.apache.felix.upnp.tester.gui.PropertiesViewer;
51import org.apache.felix.upnp.tester.gui.TreeViewer;
52import org.apache.felix.upnp.tester.gui.Util;
53import org.osgi.framework.BundleException;
54
Francesco Furfarif2a67912006-07-17 17:08:02 +000055/*
Karl Paulsd312acc2007-06-18 20:38:33 +000056* @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
Francesco Furfarif2a67912006-07-17 17:08:02 +000057*/
Francesco Furfari91af5da2006-04-04 23:44:23 +000058public class ControlPoint implements PopupMenuListener {
Francesco Furfari91af5da2006-04-04 23:44:23 +000059 RootDeviceListener listener;
60 TreeViewer viewer;
61 PropertiesViewer properties;
62 JFrame frame;
63
64
65 public ControlPoint() {
Francesco Furfari99691342006-05-03 07:51:49 +000066 frame = new JFrame("Felix UPnPDevice Tester");
Francesco Furfari91af5da2006-04-04 23:44:23 +000067 try {
68 URL eventIconUrl = Util.class.getResource("IMAGES/logo.gif");
69 ImageIcon icon= new ImageIcon(eventIconUrl,"logo");
70 frame.setIconImage(icon.getImage());
71 }
72 catch (Exception ex){
73 System.out.println("Resource: IMAGES/logo.gif not found : " + ex.toString());
74 }
75 //frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
76
77 frame.addWindowListener(new WindowAdapter(){
78 public void windowClosing(WindowEvent e){
79 try {
80 Activator.context.getBundle().stop();
81 } catch (BundleException ex) {
82 ex.printStackTrace();
83 }
84 }
85
86 });
87 frame.setBounds(0,0,300,200);
88
89
90 doMenuBar(frame);
91 doControlPanel();
92 Mediator.setControlPoint(this);
93 Mediator.setMainFrame(frame);
Francesco Furfari91af5da2006-04-04 23:44:23 +000094 listener = new RootDeviceListener();
95 Mediator.setRootDeviceListener(listener);
96 listener.setDeviceNodeListener(viewer);
97
98 frame.pack();
99 frame.setVisible(true);
100
101 DriverProxy driverProxy = new DriverProxy();
102 Mediator.setDriverProxy(driverProxy);
103
104 listener.activate();
105 }
106
107 public void close(){
108 listener.deactive();
109 frame.dispose();
110 Mediator.getDriverProxy().close();
111 }
112
113 private void doControlPanel(){
114 JPanel panel = new JPanel(new BorderLayout());
115 viewer = new TreeViewer();
116 viewer.setPreferredSize(new Dimension(180,450));
117 properties = new PropertiesViewer();
118 Mediator.setPropertiesViewer(properties);
119
120 JSplitPane treeSplitter = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,viewer,properties);
121 JPanel logPanel = new LogPanel();
122 logPanel.setPreferredSize(new Dimension(180,100));
123 JSplitPane logSplitter = new JSplitPane(JSplitPane.VERTICAL_SPLIT,treeSplitter,logPanel);
124 panel.add(logSplitter);
125 frame.getContentPane().add(panel);
126
127
128 }
129
130 /////////////////////////// MENU /////////////////////////////
131 JMenu searchMenu,loggerMenu,cyberMenu;
132 public void doMenuBar(JFrame frame) {
133
134 JMenuBar menuBar = new JMenuBar();
135
136 //////////////// FILE
137 JMenu file_menu = new JMenu("File");
138 file_menu.setMnemonic(KeyEvent.VK_F);
139
140 searchMenu = new JMenu("Search");
141 final String ALL_DEVICE = "ssdp:all";
142 final String ROOT_DEVICE = "upnp:rootdevice";
143 searchMenu.setMnemonic(KeyEvent.VK_L);
144 searchMenu.setEnabled(false);
145 AbstractAction searchAction = new AbstractAction(){
146 public void actionPerformed(ActionEvent e) {
147 DriverProxy controller = Mediator.getDriverProxy();
148 if (e.getActionCommand().equals(ALL_DEVICE))
149 controller.doSearch(ALL_DEVICE);
150 else if (e.getActionCommand().equals(ROOT_DEVICE))
151 controller.doSearch(ROOT_DEVICE);
152 }
153 };
154
155 JMenuItem rootDeviceItem = new JMenuItem("Root Devices");
156 rootDeviceItem.setMnemonic(KeyEvent.VK_R);
157 rootDeviceItem.addActionListener(searchAction);
158 rootDeviceItem.setActionCommand(ROOT_DEVICE);
159 searchMenu.add(rootDeviceItem);
160
161 JMenuItem allDeviceItem = new JMenuItem("All Devices");
162 allDeviceItem .setMnemonic(KeyEvent.VK_A);
163 allDeviceItem .addActionListener(searchAction);
164 allDeviceItem .setActionCommand(ALL_DEVICE);
165 searchMenu.add(allDeviceItem);
166
167
168 JMenuItem checkIncompleteItem = new JMenuItem("Print Pending Devices");
169 checkIncompleteItem.setMnemonic(KeyEvent.VK_I);
170 checkIncompleteItem.addActionListener(new ActionListener() {
171 public void actionPerformed(ActionEvent e) {
172 Mediator.getRootDeviceListener().checkIncompleteDevice();
173 }
174 });
175
176 JMenuItem checkErrataItem = new JMenuItem("Check Errata UPnPDevices");
177 checkErrataItem.setMnemonic(KeyEvent.VK_E);
178 checkErrataItem.addActionListener(new ActionListener() {
179 public void actionPerformed(ActionEvent e) {
180 RootDeviceListener.checkErrataDevice();}
181 });
182
183
Francesco Furfari99691342006-05-03 07:51:49 +0000184 loggerMenu = new JMenu("Felix Logger");
Francesco Furfari91af5da2006-04-04 23:44:23 +0000185 final String NO_LOGGING ="No Logging";
186 final String ERROR ="Error";
187 final String WARNING ="Warning";
188 final String INFO ="Info";
189 final String DEBUG ="Debug";
190
191 loggerMenu.getPopupMenu().addPopupMenuListener(this);
192 loggerMenu.setMnemonic(KeyEvent.VK_L);
193 loggerMenu.setEnabled(false);
194 AbstractAction loggerAction = new AbstractAction(){
195 public void actionPerformed(ActionEvent e) {
196 DriverProxy controller = Mediator.getDriverProxy();
197 if (e.getActionCommand().equals(NO_LOGGING))
198 controller.setLogLevel(0);
199 else if (e.getActionCommand().equals(ERROR))
200 controller.setLogLevel(1);
201 else if (e.getActionCommand().equals(WARNING))
202 controller.setLogLevel(2);
203 else if (e.getActionCommand().equals(INFO))
204 controller.setLogLevel(3);
205 else if (e.getActionCommand().equals(DEBUG))
206 controller.setLogLevel(4);
207 }
208 };
209
210 ButtonGroup group = new ButtonGroup();
211
212 JRadioButtonMenuItem rbMenuItem = new JRadioButtonMenuItem(NO_LOGGING);
213 rbMenuItem.setSelected(true);
214 rbMenuItem.setMnemonic(KeyEvent.VK_N);
215 rbMenuItem.setActionCommand(NO_LOGGING);
216 rbMenuItem.addActionListener(loggerAction);
217 group.add(rbMenuItem);
218 loggerMenu.add(rbMenuItem);
219 loggerMenu.addSeparator();
220
221 rbMenuItem = new JRadioButtonMenuItem(ERROR);
222 rbMenuItem.setMnemonic(KeyEvent.VK_E);
223 rbMenuItem.setActionCommand(ERROR);
224 rbMenuItem.addActionListener(loggerAction);
225 group.add(rbMenuItem);
226 loggerMenu.add(rbMenuItem);
227
228 rbMenuItem = new JRadioButtonMenuItem(WARNING);
229 rbMenuItem.setMnemonic(KeyEvent.VK_W);
230 rbMenuItem.setActionCommand(WARNING);
231 rbMenuItem.addActionListener(loggerAction);
232 group.add(rbMenuItem);
233 loggerMenu.add(rbMenuItem);
234
235 rbMenuItem = new JRadioButtonMenuItem(INFO);
236 rbMenuItem.setMnemonic(KeyEvent.VK_I);
237 rbMenuItem.setActionCommand(INFO);
238 rbMenuItem.addActionListener(loggerAction);
239 group.add(rbMenuItem);
240 loggerMenu.add(rbMenuItem);
241
242 rbMenuItem = new JRadioButtonMenuItem(DEBUG);
243 rbMenuItem.setMnemonic(KeyEvent.VK_D);
244 rbMenuItem.setActionCommand(DEBUG);
245 rbMenuItem.addActionListener(loggerAction);
246 group.add(rbMenuItem);
247 loggerMenu.add(rbMenuItem);
248
249 final String ON ="On";
250 final String OFF ="Off";
251 cyberMenu = new JMenu("Cyber Debugger");
252 cyberMenu.getPopupMenu().addPopupMenuListener(this);
253 cyberMenu.setMnemonic(KeyEvent.VK_C);
254 cyberMenu.setEnabled(false);
255 AbstractAction cyberAction = new AbstractAction(){
256 public void actionPerformed(ActionEvent e) {
257 DriverProxy controller = Mediator.getDriverProxy();
258 if (e.getActionCommand().equals(ON))
259 controller.setCyberDebug(true);
260 else if (e.getActionCommand().equals(OFF))
261 controller.setCyberDebug(false);
262 }
263 };
264
265
266 ButtonGroup cyberGroup = new ButtonGroup();
267 rbMenuItem = new JRadioButtonMenuItem(ON);
268 rbMenuItem.setSelected(true);
269 rbMenuItem.setMnemonic(KeyEvent.VK_O);
270 rbMenuItem.setActionCommand(ON);
271 rbMenuItem.addActionListener(cyberAction);
272 cyberGroup.add(rbMenuItem);
273 cyberMenu.add(rbMenuItem);
274
275 rbMenuItem = new JRadioButtonMenuItem(OFF);
276 rbMenuItem.setMnemonic(KeyEvent.VK_F);
277 rbMenuItem.setActionCommand(OFF);
278 rbMenuItem.addActionListener(cyberAction);
279 cyberGroup.add(rbMenuItem);
280 cyberMenu.add(rbMenuItem);
281
282 /*
283 JMenuItem clearSubscriptionItem = new JMenuItem("Clear Subscriptions");
284 clearSubscriptionItem.setMnemonic(KeyEvent.VK_S);
285 clearSubscriptionItem.addActionListener(new ActionListener() {
286 public void actionPerformed(ActionEvent e) {
287// to do
288 }
289 });
290 */
291
292 JMenuItem exitItem = new JMenuItem("Exit");
293 exitItem.setMnemonic(KeyEvent.VK_X);
294 exitItem.addActionListener(new ActionListener() {
295 public void actionPerformed(ActionEvent e) {
296 try {
297 Activator.context.getBundle().stop();
298 }catch (Exception ex){
299 ex.printStackTrace();
300 }
301 }
302 });
303
304
305 file_menu.add(searchMenu);
306 file_menu.addSeparator();
307 file_menu.add(loggerMenu);
308 file_menu.add(cyberMenu);
309 file_menu.addSeparator();
310 file_menu.add(checkIncompleteItem);
311 file_menu.add(checkErrataItem);
312 //file_menu.addSeparator();
313 //file_menu.add(clearSubscriptionItem);
314 file_menu.addSeparator();
315 file_menu.add(exitItem);
316
317 menuBar.add(file_menu);
318 frame.setJMenuBar(menuBar);
319
320 }
321
322
323 public void enableMenus(boolean driverAvailable,int logLevel,boolean cyberDebug) {
324 searchMenu.setEnabled(driverAvailable);
325 Component[] items = searchMenu.getPopupMenu().getComponents();
326 for (int i=0;i < items.length;i++)
327 items[i].setEnabled(driverAvailable);
328
329 loggerMenu.setEnabled(driverAvailable);
330 items = loggerMenu.getPopupMenu().getComponents();
331 for (int i=0;i < items.length;i++)
332 items[i].setEnabled(driverAvailable);
333 if (driverAvailable){
334 ((JRadioButtonMenuItem)items[logLevel>0?logLevel+1:0]).setSelected(true);
335 }
336 cyberMenu.setEnabled(driverAvailable);
337 items = cyberMenu.getPopupMenu().getComponents();
338 for (int i=0;i < items.length;i++)
339 items[i].setEnabled(driverAvailable);
340 if (driverAvailable){
341 if (cyberDebug)
342 ((JRadioButtonMenuItem)items[0]).setSelected(true);
343 else
344 ((JRadioButtonMenuItem)items[1]).setSelected(true);
345 }
346 }
347
348 public void popupMenuCanceled(PopupMenuEvent e) { }
349 public void popupMenuWillBecomeInvisible(PopupMenuEvent e) { }
350
351 public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
352 JPopupMenu loggerPopup = loggerMenu.getPopupMenu();
353 JPopupMenu cyberPopup = cyberMenu.getPopupMenu();
354 if (e.getSource()==loggerPopup){
355 int logLevel = Mediator.getDriverProxy().getLogLevel();
356 Component[] items = loggerPopup.getComponents();
357 ((JRadioButtonMenuItem)items[logLevel>0?logLevel+1:0]).setSelected(true);
358 }
359 else if (e.getSource()==cyberPopup){
360 boolean cyberDebug = Mediator.getDriverProxy().getCyberDebug();
361 Component[] items = cyberPopup.getComponents();
362 if (cyberDebug)
363 ((JRadioButtonMenuItem)items[0]).setSelected(true);
364 else
365 ((JRadioButtonMenuItem)items[1]).setSelected(true);
366 }
367
368
369 }
370
371
372
373
374}