1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.log4j.chainsaw.zeroconf;
18
19 import java.util.ArrayList;
20 import java.util.Iterator;
21 import java.util.List;
22
23 import javax.jmdns.ServiceEvent;
24 import javax.jmdns.ServiceInfo;
25 import javax.jmdns.ServiceListener;
26 import javax.swing.table.AbstractTableModel;
27
28 public class ZeroConfDeviceModel extends AbstractTableModel implements ServiceListener {
29
30 private List deviceList = new ArrayList();
31 private ZeroConfPreferenceModel zeroConfPreferenceModel;
32 private transient ZeroConfPlugin plugin;
33
34 public ZeroConfDeviceModel() {
35 }
36
37 public int getRowCount() {
38 return deviceList.size();
39 }
40
41 public int getColumnCount() {
42 return 4;
43 }
44
45 public ServiceInfo getServiceInfoAtRow(int row) {
46 return (ServiceInfo) deviceList.get(row);
47 }
48 public Object getValueAt(int rowIndex, int columnIndex) {
49 ServiceInfo info = (ServiceInfo) deviceList.get(rowIndex);
50 if(info == null) {
51 return "";
52 }
53 switch(columnIndex) {
54 case 0:
55 return getAutoConnectHandle(info);
56 case 1:
57 return info.getAddress().getHostName() + ":" + info.getPort();
58 case 2:
59 return zeroConfPreferenceModel.getAutoConnectDevices().contains(getAutoConnectHandle(info))?Boolean.TRUE:Boolean.FALSE;
60 case 3:
61 return plugin.isConnectedTo(info)?"Connected":"Not Connected";
62
63 default:
64 return "";
65 }
66 }
67
68 private String getAutoConnectHandle(ServiceInfo info) {
69 return info.getName();
70 }
71
72 public void serviceAdded(ServiceEvent event) {
73 }
74
75 public void serviceRemoved(ServiceEvent event) {
76 for (Iterator iter = deviceList.iterator(); iter.hasNext();) {
77 ServiceInfo info = (ServiceInfo) iter.next();
78 if(info.getName().equals(event.getName())) {
79 iter.remove();
80 }
81 }
82 fireTableDataChanged();
83 }
84
85 public void serviceResolved(ServiceEvent event) {
86 deviceList.add(event.getInfo());
87 fireTableDataChanged();
88 }
89
90 public void setZeroConfPreferenceModel(
91 ZeroConfPreferenceModel zeroConfPreferenceModel) {
92 this.zeroConfPreferenceModel = zeroConfPreferenceModel;
93 }
94
95 public String getColumnName(int column) {
96 switch(column) {
97 case 0:
98 return "ZeroConf name";
99 case 1:
100 return "Address:Port";
101 case 2:
102 return "Auto-connect";
103 case 3:
104 return "Connection Status";
105 default:
106 return "";
107 }
108 }
109
110 public boolean isCellEditable(int rowIndex, int columnIndex) {
111 return columnIndex == 2;
112 }
113
114 public Class getColumnClass(int columnIndex) {
115 switch(columnIndex) {
116 case 2:
117 return Boolean.class;
118 default:
119 return super.getColumnClass(columnIndex);
120 }
121 }
122
123 public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
124 if(columnIndex!=2 || !(aValue instanceof Boolean)) {
125 return;
126 }
127 boolean autoConnect = ((Boolean)aValue).booleanValue();
128 Object device = this.deviceList.get(rowIndex);
129 String autoConnectHandle = getAutoConnectHandle((ServiceInfo) device);
130 if(autoConnect) {
131 zeroConfPreferenceModel.getAutoConnectDevices().add(autoConnectHandle);
132 }else {
133 zeroConfPreferenceModel.getAutoConnectDevices().remove(autoConnectHandle);
134 }
135 fireTableDataChanged();
136 }
137
138 void setZeroConfPluginParent(ZeroConfPlugin parent) {
139 this.plugin = parent;
140 }
141
142
143 }