Package org.apache.felix.upnp.sample.tv

Source Code of org.apache.felix.upnp.sample.tv.TvDevice

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

import java.awt.Component;
import java.util.ArrayList;
import java.util.Date;
import java.util.Dictionary;
import java.util.HashSet;
import java.util.Properties;
import java.util.Random;

import org.osgi.framework.BundleContext;
import org.osgi.framework.Constants;
import org.osgi.framework.InvalidSyntaxException;
import org.osgi.framework.ServiceEvent;
import org.osgi.framework.ServiceListener;
import org.osgi.framework.ServiceReference;
import org.osgi.service.upnp.UPnPDevice;
import org.osgi.service.upnp.UPnPEventListener;
import org.osgi.service.upnp.UPnPIcon;
import org.osgi.service.upnp.UPnPService;

import org.apache.felix.upnp.extra.util.UPnPEventNotifier;
import org.apache.felix.upnp.extra.util.UPnPSubscriber;

public class TvDevice implements UPnPDevice,UPnPEventListener,ServiceListener  {
 
  final private String DEVICE_ID = "uuid:Felix-TV+" +Integer.toHexString(new Random(System.currentTimeMillis()).nextInt());
  private final static String CLOCK_DEVICE_TYPE = "urn:schemas-upnp-org:device:clock:1";
  private final static String TIME_SERVICE_TYPE = "urn:schemas-upnp-org:service:timer:1";
 
  private final static String LIGHT_DEVICE_TYPE = "urn:schemas-upnp-org:device:light:1";
  private final static String POWER_SERVICE_TYPE = "urn:schemas-upnp-org:service:power:1";

  private final static String AIRCON_DEVICE_TYPE = "urn:schemas-upnp-org:device:aircon:1";
  private final static String TEMP_SERVICE_TYPE = "urn:schemas-upnp-org:service:temp:1";
 
  private final static String WASHER_DEVICE_TYPE = "urn:schemas-upnp-org:device:washer:1";
  private final static String STATUS_SERVICE_TYPE = "urn:schemas-upnp-org:service:state:1";

  private final String devicesFilter =
    "(&"+
      "("+Constants.OBJECTCLASS+"="+UPnPDevice.class.getName()+"))";
      /*"(|("+UPnPDevice.TYPE+"="+ CLOCK_SERVICE_TYPE+")"+
        "("+UPnPDevice.TYPE+"="+ LIGHT_SERVICE_TYPE+")"+
        "("+UPnPDevice.TYPE+"="+ AIRCON_SERVICE_TYPE+")"+
        "("+UPnPDevice.TYPE+"="+ WASHER_SERVICE_TYPE+")))";*/

  private BundleContext context;
  private PowerService powerService;
  private UPnPService[] services;
  private Dictionary dictionary;
  private UPnPEventNotifier notifier;
  private PowerStateVariable powerState;

  public TvDevice() {
    powerService = new PowerService();
    services = new UPnPService[]{powerService};
    powerState = (PowerStateVariable) powerService.getStateVariable("Power");
    setupDeviceProperties();
    buildEventNotifyer();
    try {
      Activator.context.addServiceListener(this,devicesFilter);
    } catch (InvalidSyntaxException e) {
      System.out.println(e);   
    }
  }

  /**
   *
   */
  private void buildEventNotifyer() {
    notifier = new UPnPEventNotifier(Activator.context,this,powerService);
    powerState.setNotifier(notifier);
  }

  private void setupDeviceProperties(){
    dictionary = new Properties();
    dictionary.put(UPnPDevice.UPNP_EXPORT,"");
    dictionary.put(
          org.osgi.service.device.Constants.DEVICE_CATEGORY,
          new String[]{UPnPDevice.DEVICE_CATEGORY}
        );
    dictionary.put(UPnPDevice.FRIENDLY_NAME,"Felix Sample Tv");
    dictionary.put(UPnPDevice.MANUFACTURER,"Apache Software Foundation");
    dictionary.put(UPnPDevice.MANUFACTURER_URL,"http://felix.apache.org");
    dictionary.put(UPnPDevice.MODEL_DESCRIPTION,"A CyberLink Tv device clone to test OSGi to UPnP service import");
    dictionary.put(UPnPDevice.MODEL_NAME,"BimbiTv");
    dictionary.put(UPnPDevice.MODEL_NUMBER,"1.0");
    dictionary.put(UPnPDevice.MODEL_URL,"http://felix.apache.org/site/upnp-examples.html");
    dictionary.put(UPnPDevice.SERIAL_NUMBER,"123456789");
    dictionary.put(UPnPDevice.TYPE,"urn:schemas-upnp-org:device:tv:1");
    dictionary.put(UPnPDevice.UDN,DEVICE_ID);
    dictionary.put(UPnPDevice.UPC,"1213456789");

    HashSet types = new HashSet(services.length+5);
    String[] ids = new String[services.length];
    for (int i = 0; i < services.length; i++) {
      ids[i]=services[i].getId();
      types.add(services[i].getType());
    }
   
    dictionary.put(UPnPService.TYPE, types.toArray(new String[]{}));
    dictionary.put(UPnPService.ID, ids);   
  }
 
 
  /* (non-Javadoc)
   * @see org.osgi.service.upnp.UPnPDevice#getService(java.lang.String)
   */
  public UPnPService getService(String serviceId) {
    if  (serviceId.equals(powerService.getId())) return powerService;
    return null;
  }

  /* (non-Javadoc)
   * @see org.osgi.service.upnp.UPnPDevice#getServices()
   */
  public UPnPService[] getServices() {
    return services;
  }

  /* (non-Javadoc)
   * @see org.osgi.service.upnp.UPnPDevice#getIcons(java.lang.String)
   */
  public UPnPIcon[] getIcons(String locale) {
    UPnPIcon icon = new TvIcon();
    return new UPnPIcon[]{icon} ;
  }

  /* (non-Javadoc)
   * @see org.osgi.service.upnp.UPnPDevice#getDescriptions(java.lang.String)
   */
  public Dictionary getDescriptions(String locale) {
    return dictionary;
  }



  ////////////////////////////////////////////////
  //  Component
  ////////////////////////////////////////////////

  private Component comp;
 
  public void setComponent(Component comp)
  {
    this.comp = comp; 
  }
 
  public Component getComponent()
  {
    return comp;
  }
 
  ////////////////////////////////////////////////
  //  on/off
  ////////////////////////////////////////////////

  private boolean onFlag = false;
 
  public void on()
  {
    powerState.setPower(Boolean.TRUE);
    doSubscribe();
  }

  public boolean isOn()
  {
    return powerState.getCurrentPower().booleanValue();
  }
  public void off()
  {
    powerState.setPower(Boolean.FALSE);
    undoSubscribe();
  }


  ////////////////////////////////////////////////
  //  Clock
  ////////////////////////////////////////////////

  private String clockTime = "";
 
  public String getClockTime()
  {
    return clockTime; 
  }
 
  ////////////////////////////////////////////////
  //  Aircon
  ////////////////////////////////////////////////

  private String airconTemp = "";
 
  public String getAirconTempture()
  {
    return airconTemp; 
  }

  ////////////////////////////////////////////////
  //  Message
  ////////////////////////////////////////////////

  private String message = "";
 
  public void setMessage(String msg)
  {
    message = msg;
  }
 
  public String getMessage()
  {
    return message;
  }
 

  ////////////////////////////////////////////////
  //  Subscribe
  ////////////////////////////////////////////////
 
  private UPnPSubscriber subscriber;
 
  public void doSubscribe()
  {
    subscriber = new UPnPSubscriber(Activator.context,this);
    subscriber.subscribeEveryServiceType(CLOCK_DEVICE_TYPE, TIME_SERVICE_TYPE);
    subscriber.subscribeEveryServiceType(AIRCON_DEVICE_TYPE, TEMP_SERVICE_TYPE);
    subscriber.subscribeEveryServiceType(LIGHT_DEVICE_TYPE, POWER_SERVICE_TYPE);
    subscriber.subscribeEveryServiceType(WASHER_DEVICE_TYPE, STATUS_SERVICE_TYPE);
  }
 
  public void undoSubscribe(){
    subscriber.unsubscribeAll();
  }
 
  ArrayList LinkedDevices = new ArrayList();
  /* (non-Javadoc)
   * @see org.osgi.service.upnp.UPnPEventListener#notifyUPnPEvent(java.lang.String, java.lang.String, java.util.Dictionary)
   */
  public void notifyUPnPEvent(String deviceId, String serviceId, Dictionary events) {
    if( !LinkedDevices.contains(deviceId))
      LinkedDevices.add(deviceId);
    if (deviceId.indexOf("Clock") != -1){
        Date date = (Date) events.get("Time");
        clockTime = date.toString();       
    }
    else if (deviceId.indexOf("AirCon") != -1)
        airconTemp = (String) events.get("Temp");
    else if (deviceId.indexOf("Washer") != -1)
        message = (String) events.get("State");
    else if (deviceId.indexOf("Light") != -1)
        message = (String) events.get("Power");
    comp.repaint();
  }


  ////////////////////////////////////////////////
  //  start/stop
  ////////////////////////////////////////////////
 
  public void start()
  {
    on();
  }

  public void stop()
  {
    ((PowerStateVariable) powerService.getStateVariable("Power")).setNotifier(null);
    notifier.destroy();
    off();
  }

  /* (non-Javadoc)
   * @see org.osgi.framework.ServiceListener#serviceChanged(org.osgi.framework.ServiceEvent)
   */
  public void serviceChanged(ServiceEvent event) {
    switch(event.getType()){
      case ServiceEvent.REGISTERED:{
      };break;
     
      case ServiceEvent.MODIFIED:{       
      };break;
     
      case ServiceEvent.UNREGISTERING:
        ServiceReference sr = event.getServiceReference();
        String UDN = (String)sr.getProperty(UPnPDevice.ID);
        if (UDN != null){
          if (LinkedDevices.contains(UDN)) {
            if (UDN.indexOf("Clock") != -1)
                clockTime = "";
            else if (UDN.indexOf("AirCon") != -1)
                airconTemp = "";
            else if (UDN.indexOf("Washer") != -1)
                message = "";
            else if (UDN.indexOf("Light") != -1)
                message = "";
          }
        }
        comp.repaint();
       };break;
    }
  }

}
TOP

Related Classes of org.apache.felix.upnp.sample.tv.TvDevice

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.