blob: b4593866fed2a9f31eb064c145f4d20e542ecc74 [file] [log] [blame]
/*
* 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);
}
}
}