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