View Javadoc

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  //                return plugin.isConnectedTo(info)?new ImageIcon(ChainsawIcons.ANIM_NET_CONNECT):new ImageIcon();
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 }