/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.felix.upnp.tester; import java.awt.BorderLayout; import java.awt.Component; import java.awt.Dimension; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.net.URL; import javax.swing.AbstractAction; import javax.swing.ButtonGroup; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JPanel; import javax.swing.JPopupMenu; import javax.swing.JRadioButtonMenuItem; import javax.swing.JSplitPane; import javax.swing.event.PopupMenuEvent; import javax.swing.event.PopupMenuListener; import org.osgi.framework.BundleException; import org.apache.felix.upnp.tester.discovery.DriverProxy; import org.apache.felix.upnp.tester.discovery.RootDeviceListener; import org.apache.felix.upnp.tester.gui.LogPanel; import org.apache.felix.upnp.tester.gui.PropertiesViewer; import org.apache.felix.upnp.tester.gui.TreeViewer; import org.apache.felix.upnp.tester.gui.Util; /* * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a> */ public class ControlPoint implements PopupMenuListener { RootDeviceListener listener; TreeViewer viewer; PropertiesViewer properties; JFrame frame; public ControlPoint() { frame = new JFrame("Felix UPnPDevice Tester"); try { URL eventIconUrl = Util.class.getResource("IMAGES/logo.gif"); ImageIcon icon= new ImageIcon(eventIconUrl,"logo"); frame.setIconImage(icon.getImage()); } catch (Exception ex){ System.out.println("Resource: IMAGES/logo.gif not found : " + ex.toString()); } //frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ try { Activator.context.getBundle().stop(); } catch (BundleException ex) { ex.printStackTrace(); } } }); frame.setBounds(0,0,300,200); doMenuBar(frame); doControlPanel(); Mediator.setControlPoint(this); Mediator.setMainFrame(frame); listener = new RootDeviceListener(); Mediator.setRootDeviceListener(listener); listener.setDeviceNodeListener(viewer); frame.pack(); frame.setVisible(true); DriverProxy driverProxy = new DriverProxy(); Mediator.setDriverProxy(driverProxy); listener.activate(); } public void close(){ listener.deactive(); frame.dispose(); Mediator.getDriverProxy().close(); } private void doControlPanel(){ JPanel panel = new JPanel(new BorderLayout()); viewer = new TreeViewer(); viewer.setPreferredSize(new Dimension(180,450)); properties = new PropertiesViewer(); Mediator.setPropertiesViewer(properties); JSplitPane treeSplitter = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,viewer,properties); JPanel logPanel = new LogPanel(); logPanel.setPreferredSize(new Dimension(180,100)); JSplitPane logSplitter = new JSplitPane(JSplitPane.VERTICAL_SPLIT,treeSplitter,logPanel); panel.add(logSplitter); frame.getContentPane().add(panel); } /////////////////////////// MENU ///////////////////////////// JMenu searchMenu,loggerMenu,cyberMenu; public void doMenuBar(JFrame frame) { JMenuBar menuBar = new JMenuBar(); //////////////// FILE JMenu file_menu = new JMenu("File"); file_menu.setMnemonic(KeyEvent.VK_F); searchMenu = new JMenu("Search"); final String ALL_DEVICE = "ssdp:all"; final String ROOT_DEVICE = "upnp:rootdevice"; searchMenu.setMnemonic(KeyEvent.VK_L); searchMenu.setEnabled(false); AbstractAction searchAction = new AbstractAction(){ public void actionPerformed(ActionEvent e) { DriverProxy controller = Mediator.getDriverProxy(); if (e.getActionCommand().equals(ALL_DEVICE)) controller.doSearch(ALL_DEVICE); else if (e.getActionCommand().equals(ROOT_DEVICE)) controller.doSearch(ROOT_DEVICE); } }; JMenuItem rootDeviceItem = new JMenuItem("Root Devices"); rootDeviceItem.setMnemonic(KeyEvent.VK_R); rootDeviceItem.addActionListener(searchAction); rootDeviceItem.setActionCommand(ROOT_DEVICE); searchMenu.add(rootDeviceItem); JMenuItem allDeviceItem = new JMenuItem("All Devices"); allDeviceItem .setMnemonic(KeyEvent.VK_A); allDeviceItem .addActionListener(searchAction); allDeviceItem .setActionCommand(ALL_DEVICE); searchMenu.add(allDeviceItem); JMenuItem checkIncompleteItem = new JMenuItem("Print Pending Devices"); checkIncompleteItem.setMnemonic(KeyEvent.VK_I); checkIncompleteItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { Mediator.getRootDeviceListener().checkIncompleteDevice(); } }); JMenuItem checkErrataItem = new JMenuItem("Check Errata UPnPDevices"); checkErrataItem.setMnemonic(KeyEvent.VK_E); checkErrataItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { RootDeviceListener.checkErrataDevice();} }); loggerMenu = new JMenu("Felix Logger"); final String NO_LOGGING ="No Logging"; final String ERROR ="Error"; final String WARNING ="Warning"; final String INFO ="Info"; final String DEBUG ="Debug"; loggerMenu.getPopupMenu().addPopupMenuListener(this); loggerMenu.setMnemonic(KeyEvent.VK_L); loggerMenu.setEnabled(false); AbstractAction loggerAction = new AbstractAction(){ public void actionPerformed(ActionEvent e) { DriverProxy controller = Mediator.getDriverProxy(); if (e.getActionCommand().equals(NO_LOGGING)) controller.setLogLevel(0); else if (e.getActionCommand().equals(ERROR)) controller.setLogLevel(1); else if (e.getActionCommand().equals(WARNING)) controller.setLogLevel(2); else if (e.getActionCommand().equals(INFO)) controller.setLogLevel(3); else if (e.getActionCommand().equals(DEBUG)) controller.setLogLevel(4); } }; ButtonGroup group = new ButtonGroup(); JRadioButtonMenuItem rbMenuItem = new JRadioButtonMenuItem(NO_LOGGING); rbMenuItem.setSelected(true); rbMenuItem.setMnemonic(KeyEvent.VK_N); rbMenuItem.setActionCommand(NO_LOGGING); rbMenuItem.addActionListener(loggerAction); group.add(rbMenuItem); loggerMenu.add(rbMenuItem); loggerMenu.addSeparator(); rbMenuItem = new JRadioButtonMenuItem(ERROR); rbMenuItem.setMnemonic(KeyEvent.VK_E); rbMenuItem.setActionCommand(ERROR); rbMenuItem.addActionListener(loggerAction); group.add(rbMenuItem); loggerMenu.add(rbMenuItem); rbMenuItem = new JRadioButtonMenuItem(WARNING); rbMenuItem.setMnemonic(KeyEvent.VK_W); rbMenuItem.setActionCommand(WARNING); rbMenuItem.addActionListener(loggerAction); group.add(rbMenuItem); loggerMenu.add(rbMenuItem); rbMenuItem = new JRadioButtonMenuItem(INFO); rbMenuItem.setMnemonic(KeyEvent.VK_I); rbMenuItem.setActionCommand(INFO); rbMenuItem.addActionListener(loggerAction); group.add(rbMenuItem); loggerMenu.add(rbMenuItem); rbMenuItem = new JRadioButtonMenuItem(DEBUG); rbMenuItem.setMnemonic(KeyEvent.VK_D); rbMenuItem.setActionCommand(DEBUG); rbMenuItem.addActionListener(loggerAction); group.add(rbMenuItem); loggerMenu.add(rbMenuItem); final String ON ="On"; final String OFF ="Off"; cyberMenu = new JMenu("Cyber Debugger"); cyberMenu.getPopupMenu().addPopupMenuListener(this); cyberMenu.setMnemonic(KeyEvent.VK_C); cyberMenu.setEnabled(false); AbstractAction cyberAction = new AbstractAction(){ public void actionPerformed(ActionEvent e) { DriverProxy controller = Mediator.getDriverProxy(); if (e.getActionCommand().equals(ON)) controller.setCyberDebug(true); else if (e.getActionCommand().equals(OFF)) controller.setCyberDebug(false); } }; ButtonGroup cyberGroup = new ButtonGroup(); rbMenuItem = new JRadioButtonMenuItem(ON); rbMenuItem.setSelected(true); rbMenuItem.setMnemonic(KeyEvent.VK_O); rbMenuItem.setActionCommand(ON); rbMenuItem.addActionListener(cyberAction); cyberGroup.add(rbMenuItem); cyberMenu.add(rbMenuItem); rbMenuItem = new JRadioButtonMenuItem(OFF); rbMenuItem.setMnemonic(KeyEvent.VK_F); rbMenuItem.setActionCommand(OFF); rbMenuItem.addActionListener(cyberAction); cyberGroup.add(rbMenuItem); cyberMenu.add(rbMenuItem); /* JMenuItem clearSubscriptionItem = new JMenuItem("Clear Subscriptions"); clearSubscriptionItem.setMnemonic(KeyEvent.VK_S); clearSubscriptionItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { // to do } }); */ JMenuItem exitItem = new JMenuItem("Exit"); exitItem.setMnemonic(KeyEvent.VK_X); exitItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { try { Activator.context.getBundle().stop(); }catch (Exception ex){ ex.printStackTrace(); } } }); file_menu.add(searchMenu); file_menu.addSeparator(); file_menu.add(loggerMenu); file_menu.add(cyberMenu); file_menu.addSeparator(); file_menu.add(checkIncompleteItem); file_menu.add(checkErrataItem); //file_menu.addSeparator(); //file_menu.add(clearSubscriptionItem); file_menu.addSeparator(); file_menu.add(exitItem); menuBar.add(file_menu); frame.setJMenuBar(menuBar); } public void enableMenus(boolean driverAvailable,int logLevel,boolean cyberDebug) { searchMenu.setEnabled(driverAvailable); Component[] items = searchMenu.getPopupMenu().getComponents(); for (int i=0;i < items.length;i++) items[i].setEnabled(driverAvailable); loggerMenu.setEnabled(driverAvailable); items = loggerMenu.getPopupMenu().getComponents(); for (int i=0;i < items.length;i++) items[i].setEnabled(driverAvailable); if (driverAvailable){ ((JRadioButtonMenuItem)items[logLevel>0?logLevel+1:0]).setSelected(true); } cyberMenu.setEnabled(driverAvailable); items = cyberMenu.getPopupMenu().getComponents(); for (int i=0;i < items.length;i++) items[i].setEnabled(driverAvailable); if (driverAvailable){ if (cyberDebug) ((JRadioButtonMenuItem)items[0]).setSelected(true); else ((JRadioButtonMenuItem)items[1]).setSelected(true); } } public void popupMenuCanceled(PopupMenuEvent e) { } public void popupMenuWillBecomeInvisible(PopupMenuEvent e) { } public void popupMenuWillBecomeVisible(PopupMenuEvent e) { JPopupMenu loggerPopup = loggerMenu.getPopupMenu(); JPopupMenu cyberPopup = cyberMenu.getPopupMenu(); if (e.getSource()==loggerPopup){ int logLevel = Mediator.getDriverProxy().getLogLevel(); Component[] items = loggerPopup.getComponents(); ((JRadioButtonMenuItem)items[logLevel>0?logLevel+1:0]).setSelected(true); } else if (e.getSource()==cyberPopup){ boolean cyberDebug = Mediator.getDriverProxy().getCyberDebug(); Component[] items = cyberPopup.getComponents(); if (cyberDebug) ((JRadioButtonMenuItem)items[0]).setSelected(true); else ((JRadioButtonMenuItem)items[1]).setSelected(true); } } }