You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
yacy_search_server/source/net/yacy/upnp/devices/UPNPDevice.java

300 lines
9.5 KiB

/*
* ============================================================================
* The Apache Software License, Version 1.1
* ============================================================================
*
* Copyright (C) 2002 The Apache Software Foundation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modifica-
* tion, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* 3. The end-user documentation included with the redistribution, if any, must
* include the following acknowledgment: "This product includes software
* developed by SuperBonBon Industries (http://www.sbbi.net/)."
* Alternately, this acknowledgment may appear in the software itself, if
* and wherever such third-party acknowledgments normally appear.
*
* 4. The names "UPNPLib" and "SuperBonBon Industries" must not be
* used to endorse or promote products derived from this software without
* prior written permission. For written permission, please contact
* info@sbbi.net.
*
* 5. Products derived from this software may not be called
* "SuperBonBon Industries", nor may "SBBI" appear in their name,
* without prior written permission of SuperBonBon Industries.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
* INDIRECT,INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU-
* DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* This software consists of voluntary contributions made by many individuals
* on behalf of SuperBonBon Industries. For more information on
* SuperBonBon Industries, please see <http://www.sbbi.net/>.
*/
package net.yacy.upnp.devices;
import net.yacy.upnp.services.*;
import java.util.*;
import java.net.*;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
* This class represents an UPNP device, this device contains a set of services
* that will be needed to access the device functionalities.
* @author <a href="mailto:superbonbon@sbbi.net">SuperBonBon</a>
* @version 1.0
*/
public class UPNPDevice {
private final static Log log = LogFactory.getLog( UPNPDevice.class );
protected String deviceType;
protected String friendlyName;
protected String manufacturer;
protected URL manufacturerURL;
protected URL presentationURL;
protected String modelDescription;
protected String modelName;
protected String modelNumber;
protected String modelURL;
protected String serialNumber;
protected String UDN;
protected String USN;
protected long UPC;
protected ArrayList<DeviceIcon> deviceIcons;
protected ArrayList<UPNPService> services;
protected ArrayList<UPNPDevice> childDevices;
protected UPNPDevice parent;
public URL getManufacturerURL() {
return manufacturerURL;
}
/**
* Presentation URL
* @return URL the presenation URL, or null if the device does not provide
* such information
*/
public URL getPresentationURL() {
return presentationURL;
}
public String getModelDescription() {
return modelDescription;
}
public String getModelName() {
return modelName;
}
public String getModelNumber() {
return modelNumber;
}
public String getModelURL() {
return modelURL;
}
public String getSerialNumber() {
return serialNumber;
}
public String getUDN() {
return UDN;
}
public String getUSN(){
return USN;
}
public long getUPC() {
return UPC;
}
public String getDeviceType() {
return deviceType;
}
public String getFriendlyName() {
return friendlyName;
}
public String getManufacturer() {
return manufacturer;
}
public boolean isRootDevice() {
return this instanceof UPNPRootDevice;
}
/**
* Access to the device icons definitions
* @return a list containing DeviceIcon objects or null if no icons defined
*/
public List<DeviceIcon> getDeviceIcons() {
return deviceIcons;
}
/**
* Generates a list of all the child ( not only top level, full childrens hierarchy included )
* UPNPDevice objects for this device.
* @return the generated list or null if no child devices bound
*/
public ArrayList<UPNPDevice> getChildDevices() {
if ( childDevices == null ) return null;
ArrayList<UPNPDevice> rtrVal = new ArrayList<UPNPDevice>();
for ( Iterator<UPNPDevice> itr = childDevices.iterator(); itr.hasNext(); ) {
UPNPDevice device = itr.next();
rtrVal.add( device );
ArrayList<UPNPDevice> found = device.getChildDevices();
if ( found != null ) {
rtrVal.addAll( found );
}
}
return rtrVal;
}
/**
* Generates a list of all the child ( only top level )
* UPNPDevice objects for this device.
* @return the generated list or null if no child devices bound
*/
public List<UPNPDevice> getTopLevelChildDevices() {
if ( childDevices == null ) return null;
List<UPNPDevice> rtrVal = new ArrayList<UPNPDevice>();
for ( Iterator<UPNPDevice> itr = childDevices.iterator(); itr.hasNext(); ) {
UPNPDevice device = itr.next();
rtrVal.add( device );
}
return rtrVal;
}
/**
* Return the parent UPNPDevice, null if the device is an UPNPRootDevice
* @return the parent device instance
*/
public UPNPDevice getDirectParent() {
return parent;
}
/**
* Looks for a child UPNP device definition file,
* the whole devices tree will be searched, starting from the current
* device node.
* @param deviceURI the device URI to search
* @return An UPNPDevice if anything matches or null
*/
public UPNPDevice getChildDevice( String deviceURI ) {
if ( log.isDebugEnabled() ) log.debug( "searching for device URI:" + deviceURI );
if ( getDeviceType().equals( deviceURI ) ) return this;
if ( childDevices == null ) return null;
for ( Iterator<UPNPDevice> itr = childDevices.iterator(); itr.hasNext(); ) {
UPNPDevice device = itr.next();
UPNPDevice found = device.getChildDevice( deviceURI );
if ( found != null ) {
return found;
}
}
return null;
}
/**
* Looks for all UPNP device service definitions objects
* @return A list of all device services
*/
public ArrayList<UPNPService> getServices() {
if ( services == null ) return null;
ArrayList<UPNPService> rtrVal = new ArrayList<UPNPService>();
rtrVal.addAll( services );
return rtrVal;
}
/**
* Looks for a UPNP device service definition object for the given service URI (Type)
* @param serviceURI the URI of the service
* @return A matching UPNPService object or null
*/
public UPNPService getService( String serviceURI ) {
if ( services == null ) return null;
if ( log.isDebugEnabled() ) log.debug( "searching for service URI:" + serviceURI );
for ( Iterator<UPNPService> itr = services.iterator(); itr.hasNext(); ) {
UPNPService service = itr.next();
if ( service.getServiceType().equals( serviceURI ) ) {
return service;
}
}
return null;
}
/**
* Looks for a UPNP device service definition object for the given service ID
* @param serviceURI the ID of the service
* @return A matching UPNPService object or null
*/
public UPNPService getServiceByID( String serviceID ) {
if ( services == null ) return null;
if ( log.isDebugEnabled() ) log.debug( "searching for service ID:" + serviceID );
for ( Iterator<UPNPService> itr = services.iterator(); itr.hasNext(); ) {
UPNPService service = itr.next();
if ( service.getServiceId().equals( serviceID ) ) {
return service;
}
}
return null;
}
/**
* Looks for the all the UPNP device service definition object for the current
* UPNP device object. This method can be used to retreive multiple same kind
* ( same service type ) of services with different services id on a device
* @param serviceURI the URI of the service
* @return A matching List of UPNPService objects or null
*/
public List<UPNPService> getServices( String serviceURI ) {
if ( services == null ) return null;
List<UPNPService> rtrVal = new ArrayList<UPNPService>();
if ( log.isDebugEnabled() ) log.debug( "searching for services URI:" + serviceURI );
for ( Iterator<UPNPService> itr = services.iterator(); itr.hasNext(); ) {
UPNPService service = itr.next();
if ( service.getServiceType().equals( serviceURI ) ) {
rtrVal.add( service );
}
}
if ( rtrVal.isEmpty() ) {
return null;
}
return rtrVal;
}
/**
* The toString return the device type
* @return the device type
*/
@Override
public String toString() {
return getDeviceType();
}
}