View Javadoc

1   package com.bluecove.emu.gui.model;
2   
3   import static com.bluecove.emu.gui.model.DatumNotification.Type.ADDED;
4   import static com.bluecove.emu.gui.model.DatumNotification.Type.REMOVED;
5   
6   import java.util.ArrayList;
7   import java.util.HashMap;
8   import java.util.Iterator;
9   import java.util.List;
10  import java.util.Map;
11  import java.util.Observable;
12  import java.util.Map.Entry;
13  
14  import com.intel.bluetooth.emu.MonitorDevice;
15  import com.intel.bluetooth.emu.MonitoringService;
16  import com.intel.bluetooth.rmi.Client;
17  
18  public class Model extends Observable implements Runnable {
19  
20  	private static Model instance;
21  
22  	private boolean stop = false;
23  
24  	private MonitoringService service;
25  
26  	protected List<Device> devices = new ArrayList<Device>();
27  
28  	static {
29  		instance = new Model();
30  		new Thread(instance).start();
31  	}
32  
33  	private Model() {
34  	}
35  
36  	public static Model instance() {
37  		return instance;
38  	}
39  
40  	public void stop() {
41  		this.stop = true;
42  	}
43  
44  	public void run() {
45  		String host = null;
46  		String port = null;
47  		try {
48  			service = (MonitoringService) Client.getService(MonitoringService.class, false, host, port);
49  		} catch (Exception e) {
50  			e.printStackTrace();
51  		}
52  		while (!stop) {
53  			try {
54  				List<MonitorDevice> devices = service.getDevices();
55  				updateDeviceList(devices);
56  				Thread.sleep(1000);
57  			} catch (InterruptedException e) {
58  				e.printStackTrace();
59  			}
60  		}
61  	}
62  
63  	synchronized void updateDeviceList(List<MonitorDevice> newDevices) {
64  		Map<Long, MonitorDevice> newDevicesMap = new HashMap<Long, MonitorDevice>();
65  		for (Iterator<MonitorDevice> iterator = newDevices.iterator(); iterator.hasNext();) {
66  			MonitorDevice monitorDevice = iterator.next();
67  			newDevicesMap.put(monitorDevice.getDeviceDescriptor().getAddress(), monitorDevice);
68  		}
69  		for (Iterator<Device> iterator = devices.iterator(); iterator.hasNext();) {
70  			Device device = iterator.next();
71  			if (newDevicesMap.containsKey(device.getId())) {
72  				device.setMonitorDevice(newDevicesMap.get(device.getId()));
73  				newDevicesMap.remove(device.getId());
74  			} else {
75  				iterator.remove();
76  				setChanged();
77  				notifyObservers(new DatumNotification(REMOVED, device));
78  			}
79  		}
80  		for (Iterator<Entry<Long, MonitorDevice>> iterator = newDevicesMap.entrySet().iterator(); iterator.hasNext();) {
81  			Entry<Long, MonitorDevice> newEntry = iterator.next();
82  			Device device = new Device(newEntry.getKey(), newEntry.getValue());
83  			devices.add(device);
84  			setChanged();
85  			notifyObservers(new DatumNotification(ADDED, device));
86  		}
87  
88  	}
89  }