Package org.apache.felix.upnp.tester.gui

Source Code of org.apache.felix.upnp.tester.gui.TreeViewer

/*
* 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.gui;


import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.Dictionary;
import java.util.Enumeration;

import javax.swing.AbstractAction;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.SwingUtilities;
import javax.swing.ToolTipManager;
import javax.swing.event.PopupMenuEvent;
import javax.swing.event.PopupMenuListener;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreePath;

import org.osgi.service.upnp.UPnPAction;
import org.osgi.service.upnp.UPnPDevice;
import org.osgi.service.upnp.UPnPService;
import org.osgi.service.upnp.UPnPStateVariable;

import org.apache.felix.upnp.tester.Activator;
import org.apache.felix.upnp.tester.Mediator;
import org.apache.felix.upnp.tester.discovery.DeviceNode;
import org.apache.felix.upnp.tester.discovery.DeviceNodeListener;

/*
* @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
*/

public class TreeViewer extends JPanel   implements DeviceNodeListener
{
 
  private UPnPDeviceTreeNode root;
  private DefaultTreeModel treeModel;
  private JTree tree;
    final TreePopup popup ;
  public TreeViewer(){
    super(new BorderLayout());
    Mediator.setTreeViewer(this);
    root = new UPnPDeviceTreeNode("UPnP Devices");
    treeModel= new DefaultTreeModel(root);
    tree = new JTree(treeModel);
    Mediator.setUPnPDeviceTree(tree);
    tree.setCellRenderer(new TreeNodeCellRenderer() );
    tree.putClientProperty("JTree.lineStyle", "Angled");
        add(new JScrollPane(tree));
    addTreeSelectionListener();
       
       
        popup = new TreePopup(tree);
        popup.setEnabled(false);
        tree.addMouseListener(new MouseAdapter(){
            public void mouseClicked(MouseEvent e){
                if (SwingUtilities.isRightMouseButton(e)){
                    TreePath path = tree.getClosestPathForLocation(e.getX(), e.getY());
                    tree.setSelectionPath(path);
                    tree.scrollPathToVisible(path);
                    popup.show(tree, e.getX(), e.getY());
                }
            }
        });
        ToolTipManager.sharedInstance().registerComponent(tree);
        

  }
 
    public void setPopupMenuEnabled(boolean driverControllerAvailable){
        popup.getComponent(0).setEnabled(driverControllerAvailable);
    }
  public void deviceDetected(DeviceNode node) {
    root.add(new UPnPDeviceTreeNode(node,Activator.context));
    treeModel.nodeStructureChanged(root);
  }
 
  public void rootDeviceUnplugged(String udn){
    Enumeration list = root.children();
    while (list.hasMoreElements()){
      UPnPDeviceTreeNode node= (UPnPDeviceTreeNode)list.nextElement();
      DeviceNode device = (DeviceNode)node.getUserObject();
      if (udn.equals(device.toString())) {
        node.removeFromParent();
        treeModel.nodeStructureChanged(root);
      }
    }
  }

  private void addTreeSelectionListener(){
    tree.addTreeSelectionListener(new TreeSelectionListener(){
      public void valueChanged(TreeSelectionEvent e){
        UPnPDeviceTreeNode selectedNode = (UPnPDeviceTreeNode)tree.getLastSelectedPathComponent();       
        doNodeAction(selectedNode);     
      }   
    });
  }
 
  private void doNodeAction(UPnPDeviceTreeNode node){
    if (node == null) {
      clearPropertiesViewer();
      return;
    }
    if (node.category.equals(UPnPDeviceTreeNode.ACTION))
      Mediator.getPropertiesViewer().showActionPanel(true);
    else
      Mediator.getPropertiesViewer().showActionPanel(false);

    if (node.category.equals(UPnPDeviceTreeNode.SERVICE))
      Mediator.getPropertiesViewer().showSubscriptionPanel(true);
    else
      Mediator.getPropertiesViewer().showSubscriptionPanel(false);

    if ( node.category.equals(UPnPDeviceTreeNode.DEVICE)
      ||node.category.equals(UPnPDeviceTreeNode.ROOT_DEVICE)){
      DeviceNode device = (DeviceNode) node.getUserObject();
      UPnPDevice upnpDevice = device.getDevice(Activator.context);
      makeProperties(upnpDevice);
    }
    else if (node.category.equals(UPnPDeviceTreeNode.SERVICE)){
      UPnPService service = (UPnPService) node.getUserObject();     
      makeProperties(service);
    }
    else if (node.category.equals(UPnPDeviceTreeNode.ACTION)){
      UPnPAction action = (UPnPAction) node.getUserObject();
      makeProperties(action);
      Mediator.getPropertiesViewer().setAction(action);
    }
    else if (node.category.equals(UPnPDeviceTreeNode.STATE)
            ||node.category.equals(UPnPDeviceTreeNode.EVENTED_STATE)
            ||node.category.equals(UPnPDeviceTreeNode.SUBSCRIBED_STATE)){
      UPnPStateVariable state = (UPnPStateVariable) node.getUserObject();
      makeProperties(state);
    }
   
  }
 
  private void clearPropertiesViewer(){
    String[] names = new String[]{};
    String[] values = new String[]{};
    PropertiesViewer viewer = Mediator.getPropertiesViewer();
    viewer.setProperties(names,values);
    viewer.showActionPanel(false);
    viewer.showSubscriptionPanel(false);
  }
 
  private void makeProperties(UPnPDevice upnpDevice){
    Dictionary dict = upnpDevice.getDescriptions(null);
    int size = dict.size();
    String[] names = new String[size];
    String[] values = new String[size];
    Enumeration keys = dict.keys();
    for (int i=0;i<size;i++){
      names[i]= (String) keys.nextElement();
      values[i]= Util.justString(dict.get(names[i]));
    }
    Mediator.getPropertiesViewer().setProperties(names,values);
  }
 
  private void makeProperties(UPnPService service){
    String[] names = new String[]{"Id","Type","Version"};
    String[] values = new String[]{service.getId(),service.getType(),service.getType()};
    Mediator.getPropertiesViewer().setProperties(names,values);
  }
 
  private void makeProperties(UPnPAction action){
    ArrayList names = new ArrayList();
    ArrayList values = new ArrayList();
    names.add("Name");
    values.add(action.getName());
   
    String returnName = action.getReturnArgumentName();
    if (returnName != null){
      names.add("Return value name");
      values.add(returnName);
    }
    String[] inArg = action.getInputArgumentNames();
    if (inArg != null){
      for (int i = 0; i<inArg.length;i++){
        names.add("Input arg["+ (i+1)+"]");
        values.add(inArg[i]);     
      }
    }
    String[] outArg = action.getOutputArgumentNames();
    if (outArg != null){
      for (int i = 0; i<outArg.length;i++){
        names.add("Output arg["+ (i+1)+"]");
        values.add(outArg[i]);     
      }
    }
   
    Mediator.getPropertiesViewer().setProperties(
        (String[])names.toArray(new String[]{}),
        (String[])values.toArray(new String[]{})
    );
   
  }
 
  private void makeProperties(UPnPStateVariable state){
    ArrayList names = new ArrayList();
    ArrayList values = new ArrayList();
    names.add("Name");
    values.add(state.getName());
    names.add("Evented");
    values.add(state.sendsEvents()? "yes":"no");
    names.add("Default Value");
    values.add(Util.justString(state.getDefaultValue()));
    names.add("Java Data Type");
    values.add(state.getJavaDataType().getName());
    names.add("Java UPnP Type");
    values.add(state.getUPnPDataType());
    names.add("Minimum");
    values.add(Util.justString(state.getMinimum()));
    names.add("Maximum");
    values.add(Util.justString(state.getMaximum()));
    names.add("Step");
    values.add(Util.justString(state.getStep()));   
    String[] allowed = state.getAllowedValues();
    if (allowed!=null){
      for (int i=0;i<allowed.length;i++){
        names.add("Allowed value["+i+1+"]");
        values.add(allowed[i]);   
      }     
    }
    Mediator.getPropertiesViewer().setProperties(
        (String[])names.toArray(new String[]{}),
        (String[])values.toArray(new String[]{})
    );
  }
 
 
}

class TreePopup extends JPopupMenu implements PopupMenuListener {
    JTree tree;
    JMenuItem item;

    public TreePopup(final JTree tree){
        super();
        this.tree = tree;
        (item = add(new AbstractAction(){
            public void actionPerformed(ActionEvent e){
                UPnPDeviceTreeNode selectedNode = (UPnPDeviceTreeNode)tree.getLastSelectedPathComponent();  
                String url = "";
                if (selectedNode.category.equals(UPnPDeviceTreeNode.DEVICE)){
                    UPnPDeviceTreeNode parent =  (UPnPDeviceTreeNode)selectedNode.getParent();
                    while (parent.category!=UPnPDeviceTreeNode.ROOT_DEVICE)
                         parent =  (UPnPDeviceTreeNode)parent.getParent();
                    DeviceNode device =  (DeviceNode) parent.getUserObject();
                    String udn = (String)device.getReference().getProperty(UPnPDevice.UDN);
                    url = Mediator.getDriverProxy().getDeviceDescriptionURI(udn);
                }
                       
                else if (selectedNode.category.equals(UPnPDeviceTreeNode.ROOT_DEVICE))
                {
                    DeviceNode node =  (DeviceNode) selectedNode.getUserObject();
                    String udn = (String)node.getReference().getProperty(UPnPDevice.UDN);
                    url = Mediator.getDriverProxy().getDeviceDescriptionURI(udn);
                }
                else if (selectedNode.category.equals(UPnPDeviceTreeNode.SERVICE))
                {
                    UPnPDeviceTreeNode parent =  (UPnPDeviceTreeNode)selectedNode.getParent();
                    while (parent.category!=UPnPDeviceTreeNode.ROOT_DEVICE)
                         parent =  (UPnPDeviceTreeNode)parent.getParent();
                    DeviceNode device =  (DeviceNode) parent.getUserObject();
                    String udn = (String)device.getReference().getProperty(UPnPDevice.UDN);
                    UPnPService service =  (UPnPService) selectedNode.getUserObject();
                    url = Mediator.getDriverProxy().getServiceDescriptionURI(udn,service.getId());
                }                   
                Util.openUrl(url);  
            }
        })).setText("Show Description");
        addPopupMenuListener(this);

    }
   
    public void popupMenuCanceled(PopupMenuEvent e){}
    public void popupMenuWillBecomeInvisible(PopupMenuEvent e){}
    public void popupMenuWillBecomeVisible(PopupMenuEvent e){
        if (Mediator.getDriverProxy().isDriverAvailable()){
        UPnPDeviceTreeNode selectedNode = (UPnPDeviceTreeNode)tree.getLastSelectedPathComponent();             
            if (selectedNode.category.equals(UPnPDeviceTreeNode.DEVICE)
                ||selectedNode.category.equals(UPnPDeviceTreeNode.ROOT_DEVICE)
                ||selectedNode.category.equals(UPnPDeviceTreeNode.SERVICE))
            {
                item.setEnabled(true);
            }
            else
                item.setEnabled(false);
        }
        else
            item.setEnabled(false);
          
    }
}
TOP

Related Classes of org.apache.felix.upnp.tester.gui.TreeViewer

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.