Francesco Furfari | ec7e175 | 2006-10-02 13:37:04 +0000 | [diff] [blame] | 1 | /*
|
| 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 Furfari | 91af5da | 2006-04-04 23:44:23 +0000 | [diff] [blame] | 9 | *
|
Francesco Furfari | ec7e175 | 2006-10-02 13:37:04 +0000 | [diff] [blame] | 10 | * http://www.apache.org/licenses/LICENSE-2.0
|
Francesco Furfari | 91af5da | 2006-04-04 23:44:23 +0000 | [diff] [blame] | 11 | *
|
Francesco Furfari | ec7e175 | 2006-10-02 13:37:04 +0000 | [diff] [blame] | 12 | * 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 Furfari | 91af5da | 2006-04-04 23:44:23 +0000 | [diff] [blame] | 18 | */
|
| 19 |
|
| 20 | package org.apache.felix.upnp.tester;
|
| 21 |
|
| 22 |
|
| 23 | import java.awt.BorderLayout;
|
| 24 | import java.awt.Component;
|
| 25 | import java.awt.Dimension;
|
| 26 | import java.awt.event.ActionEvent;
|
| 27 | import java.awt.event.ActionListener;
|
| 28 | import java.awt.event.KeyEvent;
|
| 29 | import java.awt.event.WindowAdapter;
|
| 30 | import java.awt.event.WindowEvent;
|
| 31 | import java.net.URL;
|
| 32 |
|
| 33 | import javax.swing.AbstractAction;
|
| 34 | import javax.swing.ButtonGroup;
|
| 35 | import javax.swing.ImageIcon;
|
| 36 | import javax.swing.JFrame;
|
| 37 | import javax.swing.JMenu;
|
| 38 | import javax.swing.JMenuBar;
|
| 39 | import javax.swing.JMenuItem;
|
| 40 | import javax.swing.JPanel;
|
| 41 | import javax.swing.JPopupMenu;
|
| 42 | import javax.swing.JRadioButtonMenuItem;
|
| 43 | import javax.swing.JSplitPane;
|
| 44 | import javax.swing.event.PopupMenuEvent;
|
| 45 | import javax.swing.event.PopupMenuListener;
|
| 46 |
|
| 47 | import org.apache.felix.upnp.tester.discovery.DriverProxy;
|
| 48 | import org.apache.felix.upnp.tester.discovery.RootDeviceListener;
|
| 49 | import org.apache.felix.upnp.tester.gui.LogPanel;
|
| 50 | import org.apache.felix.upnp.tester.gui.PropertiesViewer;
|
| 51 | import org.apache.felix.upnp.tester.gui.TreeViewer;
|
| 52 | import org.apache.felix.upnp.tester.gui.Util;
|
| 53 | import org.osgi.framework.BundleException;
|
| 54 |
|
Francesco Furfari | f2a6791 | 2006-07-17 17:08:02 +0000 | [diff] [blame] | 55 | /*
|
Karl Pauls | d312acc | 2007-06-18 20:38:33 +0000 | [diff] [blame^] | 56 | * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
|
Francesco Furfari | f2a6791 | 2006-07-17 17:08:02 +0000 | [diff] [blame] | 57 | */
|
Francesco Furfari | 91af5da | 2006-04-04 23:44:23 +0000 | [diff] [blame] | 58 | public class ControlPoint implements PopupMenuListener {
|
Francesco Furfari | 91af5da | 2006-04-04 23:44:23 +0000 | [diff] [blame] | 59 | RootDeviceListener listener;
|
| 60 | TreeViewer viewer;
|
| 61 | PropertiesViewer properties;
|
| 62 | JFrame frame;
|
| 63 |
|
| 64 |
|
| 65 | public ControlPoint() {
|
Francesco Furfari | 9969134 | 2006-05-03 07:51:49 +0000 | [diff] [blame] | 66 | frame = new JFrame("Felix UPnPDevice Tester");
|
Francesco Furfari | 91af5da | 2006-04-04 23:44:23 +0000 | [diff] [blame] | 67 | 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 Furfari | 91af5da | 2006-04-04 23:44:23 +0000 | [diff] [blame] | 94 | 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 Furfari | 9969134 | 2006-05-03 07:51:49 +0000 | [diff] [blame] | 184 | loggerMenu = new JMenu("Felix Logger");
|
Francesco Furfari | 91af5da | 2006-04-04 23:44:23 +0000 | [diff] [blame] | 185 | 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 | }
|