/* * 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.event.ActionEvent; import java.util.Dictionary; import java.util.Enumeration; import javax.swing.AbstractAction; import javax.swing.JButton; import javax.swing.JPanel; import javax.swing.JTree; import javax.swing.SwingUtilities; import org.osgi.service.upnp.UPnPDevice; import org.osgi.service.upnp.UPnPEventListener; import org.osgi.service.upnp.UPnPService; import org.apache.felix.upnp.tester.Activator; import org.apache.felix.upnp.tester.Mediator; import org.apache.felix.upnp.tester.UPnPSubscriber; import org.apache.felix.upnp.tester.discovery.DeviceNode; /* * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a> */ public class SubscriptionPanel extends JPanel implements UPnPEventListener{ public SubscriptionPanel() { super(); buildButtonPanel(); } private void buildButtonPanel(){ JButton subscribeBtn = new JButton("Subscribe"); subscribeBtn.addActionListener(new AbstractAction(){ public void actionPerformed(ActionEvent e) { //System.out.println("subscribing ..."); doSubscribe(); } }); JButton unsubscribeBtn = new JButton("Unsubscribe"); unsubscribeBtn.addActionListener(new AbstractAction(){ public void actionPerformed(ActionEvent e) { //System.out.println("unsubscribing ..."); doUnsubscribe(); } }); add(subscribeBtn); add(unsubscribeBtn); } UPnPSubscriber subscriber; public void doSubscribe() { if (subscriber == null) subscriber = new UPnPSubscriber(Activator.context,this); UPnPDeviceTreeNode selectedNode = getSelectedNode(); String serviceId = getServiceId(selectedNode); String parentId = getDeviceId(selectedNode); LogPanel.log("subscribing ... "+ "ServiceId ["+serviceId+"] of DeviceId ["+parentId +"]"); subscriber.subscribe(parentId,serviceId); setSubscribedVariableOf(selectedNode); } public void doUnsubscribe(){ UPnPDeviceTreeNode selectedNode = getSelectedNode(); String serviceId = getServiceId(selectedNode); String parentId = getDeviceId(selectedNode); LogPanel.log("unsubscribing ... "+ "ServiceId ["+serviceId+"] of DeviceId ["+parentId +"]"); subscriber.unsubscribe(parentId,serviceId); setUnubscribedVariableOf(selectedNode); } public void notifyUPnPEvent(final String deviceId, final String serviceId, final Dictionary events) { // UPnP base driver notify are synchronous !! Runnable doShowMsg = new Runnable() { public void run() { LogPanel.log("notifyUPnPEvent::[DeviceID "+deviceId+"][ServiceId "+serviceId+"]"); Enumeration elements = events.keys(); while (elements.hasMoreElements()){ Object key = elements.nextElement(); Object value = events.get(key); LogPanel.log("["+key+"][value "+value+"]"); } } }; SwingUtilities.invokeLater(doShowMsg); } private void setSubscribedVariableOf(UPnPDeviceTreeNode selectedNode){ Enumeration list = selectedNode.children(); while (list.hasMoreElements()){ UPnPDeviceTreeNode node = (UPnPDeviceTreeNode) list.nextElement(); if (node.category == UPnPDeviceTreeNode.EVENTED_STATE) node.category = UPnPDeviceTreeNode.SUBSCRIBED_STATE; } JTree tree = Mediator.getUPnPDeviceTree(); tree.validate(); tree.repaint(); } private void setUnubscribedVariableOf(UPnPDeviceTreeNode selectedNode){ Enumeration list = selectedNode.children(); while (list.hasMoreElements()){ UPnPDeviceTreeNode node = (UPnPDeviceTreeNode) list.nextElement(); if (node.category == UPnPDeviceTreeNode.SUBSCRIBED_STATE) node.category = UPnPDeviceTreeNode.EVENTED_STATE; } JTree tree = Mediator.getUPnPDeviceTree(); tree.validate(); tree.repaint(); } private UPnPDeviceTreeNode getSelectedNode(){ JTree tree = Mediator.getUPnPDeviceTree(); UPnPDeviceTreeNode selectedNode = (UPnPDeviceTreeNode)tree.getLastSelectedPathComponent(); return selectedNode; } private String getServiceId (UPnPDeviceTreeNode selectedNode){ Object userObj = selectedNode.getUserObject(); String serviceId = ((UPnPService) userObj).getId(); return serviceId; } private String getDeviceId (UPnPDeviceTreeNode selectedNode){ UPnPDeviceTreeNode parent = (UPnPDeviceTreeNode)selectedNode.getParent(); DeviceNode node =(DeviceNode)parent.getUserObject(); String parentId = (String) node.getReference().getProperty(UPnPDevice.ID); return parentId; } }