00001 /* 00002 * DiscovererObserver.java 00003 * 00004 * Created on 9 giugno 2005, 13.26 00005 * 00006 * To change this template, choose Tools | Options and locate the template under 00007 * the Source Creation and Management node. Right-click the template and choose 00008 * Open. You can then make changes to the template in the Source Editor. 00009 */ 00010 00011 package org.jaebi.midlet.bt; 00012 00013 import java.util.Enumeration; 00014 import java.util.Vector; 00015 import javax.bluetooth.RemoteDevice; 00016 import org.jaebi.midlet.util.Observable; 00017 import org.jaebi.midlet.util.Observer; 00018 import org.jaebi.midlet.bt.discoveryHandling.DiscoveryEventHandler; 00019 import org.jaebi.midlet.bt.discoveryHandling.ServiceSearchError; 00020 import org.jaebi.midlet.bt.discoveryHandling.DiscoveryError; 00021 00026 public class DiscovererObserver implements Observer { 00027 00028 private DiscoveryEventHandler eventHandler; 00029 00030 00031 00032 public DiscovererObserver(DiscoveryEventHandler eventHandler) { 00033 this.eventHandler = eventHandler; 00034 } 00035 00036 00037 public void update(Observable o, Object arg){ 00038 Discoverer discoverer = (Discoverer)o; 00039 DiscoveryError discoveryError = null ; 00040 Enumeration devices = null; 00041 int discovererState = discoverer.getState(); 00042 00043 switch (discovererState){ 00044 case DiscovererState.DEVICE_SEARCH: 00045 eventHandler.discoveryStarted(); 00046 break; 00047 00048 case DiscovererState.DISCOVERY_ERROR: 00049 discoveryError = (DiscoveryError)arg; 00050 eventHandler.discoveryError((DiscoveryError)arg); 00051 break; 00052 00053 case DiscovererState.SERVICE_SEARCH: 00054 00055 devices = discoverer.getDiscoveryReport().getDevices(); 00056 00057 eventHandler.serviceSearchStarted(devices); 00058 break; 00059 00060 case DiscovererState.NEW_SERVICE_SEARCH_ERROR: 00061 discoveryError = (DiscoveryError)arg; 00062 eventHandler.serviceSearchError((ServiceSearchError)arg); 00063 break; 00064 00065 case DiscovererState.NEW_SERVICE_SEARCH_COMPLETE: 00066 RemoteDevice rd = (RemoteDevice)arg; 00067 Vector services = discoverer.getDiscoveryReport().getServices(rd); 00068 /* 00069 * Recupero la device a cui sono associati i servizi. Tutti i 00070 * servizi si riferiscono alla medesima device, sono sicuro che 00071 * il vector contiene almeno un servizio (perchè diversamente ci 00072 * si troverebbe nel case relativo a NEW_SERVICE_SEARCH_ERROR) quindi 00073 * recupero la device dal primo elemento del record 00074 */ 00075 00076 eventHandler.servicesFound(services, rd); 00077 break; 00078 00079 case DiscovererState.READY: 00080 eventHandler.discoveryCompleted(discoverer.getDiscoveryReport()); 00081 break; 00082 } 00083 00084 00085 } 00086 00087 }