blob: c4e1dc7c0bc592c89668fa9d737519e273e65ad4 [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.basedriver.importer.core.upnp;
import java.util.Dictionary;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.Vector;
import org.cybergarage.upnp.Device;
import org.osgi.framework.BundleContext;
import org.osgi.service.upnp.UPnPDevice;
import org.osgi.service.upnp.UPnPIcon;
import org.osgi.service.upnp.UPnPService;
import org.apache.felix.upnp.basedriver.importer.util.DeviceSetup;
/*
* @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
*/
public class UPnPDeviceImpl implements UPnPDevice {
/**
* <code>properties</code> Dictionary that contains Device properties
*/
private Dictionary properties;
private Vector icons;
private Hashtable services;
/**
* @param dev
* Device the cyberLink Device used to rappresent the real UPnP
* Device
*/
public UPnPDeviceImpl(Device dev, BundleContext context) {
properties = new Hashtable();
this.services=new Hashtable();
this.icons=new Vector();
DeviceSetup.deviceSetup(properties,dev,icons,services);
}
/*
* (non-Javadoc)
*
* @see org.osgi.service.upnp.UPnPDevice#getService(java.lang.String)
*/
public UPnPService getService(String serviceId) {
return (UPnPServiceImpl) services.get(serviceId);
}
/*
* (non-Javadoc)
*
* @see org.osgi.service.upnp.UPnPDevice#getServices()
*/
public UPnPService[] getServices() {
Enumeration e = services.elements();
if (e == null) {
//TODO should I return null or an empty array? The specification seems to said to return null
return null;
}
UPnPService[] uPnPser = new UPnPService[services.size()];
int i = 0;
while (e.hasMoreElements()) {
uPnPser[i] = (UPnPServiceImpl) e.nextElement();
i++;
}
return uPnPser;
}
/*
* (non-Javadoc)
*
* @see org.osgi.service.upnp.UPnPDevice#getIcons(java.lang.String)
*/
public UPnPIcon[] getIcons(String locale) {
if (locale != null) {
return null;
}
if(icons.size()==0){
return null;
}
return (UPnPIcon[]) icons.toArray(new UPnPIcon[]{});
}
/*
* (non-Javadoc)
*
* @see org.osgi.service.upnp.UPnPDevice#getDescriptions(java.lang.String)
*/
public Dictionary getDescriptions(String locale) {
//TODO Sent the right localized version of Description if are available
if (locale != null) {
return null;
}
return properties;
}
/**
* @param serviceType
* @return true if device contains the serviceType
*/
public boolean existServiceType(String serviceType) {
String[] services = (String[]) properties.get(UPnPService.TYPE);
if (services != null) {
for (int i = 0; i < services.length; i++) {
if (services[i].equals(serviceType)) {
return true;
}
}
}
return false;
}
/**
* @param property
* @param obj
*/
public void setProperty(String property, Object obj) {
properties.remove(property);
properties.put(property, obj);
}
}