1 | package nu.fw.jeti.ui; |
---|
2 | |
---|
3 | import java.awt.BorderLayout; |
---|
4 | import java.awt.Cursor; |
---|
5 | import java.awt.event.ActionEvent; |
---|
6 | import java.awt.event.WindowEvent; |
---|
7 | import java.util.HashMap; |
---|
8 | import java.util.Iterator; |
---|
9 | import java.util.Map; |
---|
10 | |
---|
11 | import javax.swing.*; |
---|
12 | import javax.swing.event.ListSelectionEvent; |
---|
13 | |
---|
14 | import nu.fw.jeti.events.DiscoveryListener; |
---|
15 | import nu.fw.jeti.events.RegisterListener; |
---|
16 | import nu.fw.jeti.jabber.Backend; |
---|
17 | import nu.fw.jeti.jabber.JID; |
---|
18 | import nu.fw.jeti.jabber.elements.DiscoveryInfo; |
---|
19 | import nu.fw.jeti.jabber.elements.DiscoveryItem; |
---|
20 | import nu.fw.jeti.jabber.elements.IQRegister; |
---|
21 | import nu.fw.jeti.jabber.elements.InfoQuery; |
---|
22 | import nu.fw.jeti.util.I18N; |
---|
23 | import nu.fw.jeti.util.Utils; |
---|
24 | |
---|
25 | /** |
---|
26 | * <p>Title: im</p> |
---|
27 | * <p>Description: </p> |
---|
28 | * <p>Copyright: Copyright (c) 2001</p> |
---|
29 | * <p>Company: </p> |
---|
30 | * @author E.S. de Boer |
---|
31 | * @version 1.0 |
---|
32 | */ |
---|
33 | |
---|
34 | public class RegisterServices extends JFrame implements DiscoveryListener, RegisterListener |
---|
35 | { |
---|
36 | private JList jList1; |
---|
37 | private JPanel jPanel1 = new JPanel(); |
---|
38 | private JButton btnRegister = new JButton(); |
---|
39 | private JButton btnCancel = new JButton(); |
---|
40 | private Map services = new HashMap(); |
---|
41 | private Backend backend; |
---|
42 | private JTextField txtServer = new JTextField(); |
---|
43 | private JButton btnChangeServer = new JButton(); |
---|
44 | private JID server; |
---|
45 | private JID registerJID; |
---|
46 | private int numberOfServices; |
---|
47 | |
---|
48 | public RegisterServices(Backend backend) |
---|
49 | { |
---|
50 | this.backend = backend; |
---|
51 | server = new JID(backend.getMyJID().getDomain()); |
---|
52 | //Collections.sort(services); //object[] not sortable |
---|
53 | try |
---|
54 | { |
---|
55 | jbInit(); |
---|
56 | } |
---|
57 | catch(Exception e) |
---|
58 | { |
---|
59 | e.printStackTrace(); |
---|
60 | } |
---|
61 | backend.addListener(RegisterListener.class,this); |
---|
62 | //setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); |
---|
63 | backend.getItems(server,this); |
---|
64 | } |
---|
65 | |
---|
66 | private void jbInit() throws Exception |
---|
67 | { |
---|
68 | //setIconImage(nu.fw.jeti.images.StatusIcons.getImageIcon("jeti").getImage()); |
---|
69 | //btnRegister.setMnemonic('R'); |
---|
70 | //btnRegister.setText(I18N.gettext("main.manageservices.Register")); |
---|
71 | I18N.setTextAndMnemonic("main.manageservices.Register",btnRegister); |
---|
72 | btnRegister.addActionListener(new java.awt.event.ActionListener() |
---|
73 | { |
---|
74 | public void actionPerformed(ActionEvent e) |
---|
75 | { |
---|
76 | btnRegister_actionPerformed(e); |
---|
77 | } |
---|
78 | }); |
---|
79 | btnCancel.setAlignmentX(0.5f); |
---|
80 | Action cancelAction = new AbstractAction(I18N.gettext("Cancel")) |
---|
81 | { |
---|
82 | public void actionPerformed(ActionEvent e) |
---|
83 | { |
---|
84 | btnCancel_actionPerformed(e); |
---|
85 | } |
---|
86 | }; |
---|
87 | Utils.addCancelButton(this, btnCancel, cancelAction); |
---|
88 | |
---|
89 | addWindowListener(new java.awt.event.WindowAdapter() |
---|
90 | { |
---|
91 | public void windowClosing(WindowEvent e) |
---|
92 | { |
---|
93 | backend.removeListener(RegisterListener.class,RegisterServices.this); |
---|
94 | dispose(); |
---|
95 | } |
---|
96 | }); |
---|
97 | this.setTitle(I18N.gettext("main.manageservices.Manage_Services")); |
---|
98 | //DefaultListModel listModel = new DefaultListModel(); |
---|
99 | /* |
---|
100 | for(Iterator i = services.listIterator();i.hasNext();) |
---|
101 | { |
---|
102 | listModel.addElement((String)((Object[])i.next())[0]); |
---|
103 | } |
---|
104 | */ |
---|
105 | jList1 = new JList(new DefaultListModel()); |
---|
106 | jList1.addListSelectionListener(new javax.swing.event.ListSelectionListener() |
---|
107 | { |
---|
108 | public void valueChanged(ListSelectionEvent e) |
---|
109 | { |
---|
110 | jList1_valueChanged(e); |
---|
111 | } |
---|
112 | }); |
---|
113 | jList1.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); |
---|
114 | btnChangeServer.setAlignmentX(0.5f); |
---|
115 | //btnChangeServer.setMnemonic('S'); |
---|
116 | //btnChangeServer.setText(I18N.gettext("main.manageservices.Change_Server")); |
---|
117 | I18N.setTextAndMnemonic("main.manageservices.Change_Server",btnChangeServer); |
---|
118 | btnChangeServer.addActionListener(new java.awt.event.ActionListener() |
---|
119 | { |
---|
120 | public void actionPerformed(ActionEvent e) |
---|
121 | { |
---|
122 | btnChangeServer_actionPerformed(e); |
---|
123 | } |
---|
124 | }); |
---|
125 | JLabel label = new JLabel(); |
---|
126 | label.setAlignmentX(0.5f); |
---|
127 | //jLabel1.setText(I18N.gettext("main.manageservices.Server")); |
---|
128 | I18N.setTextAndMnemonic("main.manageservices.Server",label); |
---|
129 | label.setLabelFor(txtServer); |
---|
130 | this.getContentPane().add(jList1, BorderLayout.CENTER); |
---|
131 | this.getContentPane().add(jPanel1, BorderLayout.SOUTH); |
---|
132 | //jPanel1.add(btnRegister, null); |
---|
133 | jPanel1.setLayout(new BoxLayout(jPanel1,BoxLayout.Y_AXIS)); |
---|
134 | jPanel1.add(label); |
---|
135 | jPanel1.add(txtServer); |
---|
136 | jPanel1.add(btnChangeServer); |
---|
137 | jPanel1.add(btnCancel); |
---|
138 | pack(); |
---|
139 | } |
---|
140 | |
---|
141 | void btnCancel_actionPerformed(ActionEvent e) |
---|
142 | { |
---|
143 | backend.removeListener(RegisterListener.class,this); |
---|
144 | this.dispose(); |
---|
145 | } |
---|
146 | |
---|
147 | void btnRegister_actionPerformed(ActionEvent e) |
---|
148 | { |
---|
149 | backend.removeListener(RegisterListener.class,this); |
---|
150 | this.dispose(); |
---|
151 | } |
---|
152 | |
---|
153 | void jList1_valueChanged(ListSelectionEvent e) |
---|
154 | { |
---|
155 | if (e.getValueIsAdjusting()) |
---|
156 | return; |
---|
157 | |
---|
158 | JList theList = (JList)e.getSource(); |
---|
159 | if (!theList.isSelectionEmpty()) |
---|
160 | { |
---|
161 | registerJID = (JID)services.get(theList.getSelectedValue()); |
---|
162 | if(registerJID!=null) backend.send(new InfoQuery(registerJID,"get",backend.getIdentifier(),new IQRegister())); |
---|
163 | } |
---|
164 | theList.clearSelection(); |
---|
165 | } |
---|
166 | |
---|
167 | void btnChangeServer_actionPerformed(ActionEvent e) |
---|
168 | { |
---|
169 | setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); |
---|
170 | JID temp = null; |
---|
171 | try |
---|
172 | { |
---|
173 | temp = JID.checkedJIDFromString(txtServer.getText()); |
---|
174 | } |
---|
175 | catch (InstantiationException ex) |
---|
176 | { |
---|
177 | nu.fw.jeti.util.Popups.errorPopup(ex.getMessage(), I18N.gettext("main.error.invalid_server")); |
---|
178 | } |
---|
179 | if(temp == null) return; |
---|
180 | server = temp; |
---|
181 | backend.getItems(server,this); |
---|
182 | } |
---|
183 | |
---|
184 | public void discoveryItemResult(JID jid,DiscoveryItem item) |
---|
185 | { |
---|
186 | //System.out.println(browse); |
---|
187 | if (!item.hasItems()) nu.fw.jeti.util.Popups.errorPopup(I18N.gettext("main.error.No_services"), I18N.gettext("main.error.Register_Services")); |
---|
188 | else |
---|
189 | { |
---|
190 | numberOfServices=item.getSize(); |
---|
191 | DefaultListModel model = (DefaultListModel) jList1.getModel(); |
---|
192 | services.clear(); |
---|
193 | model.clear(); |
---|
194 | for(Iterator i = item.getItems();i.hasNext();) |
---|
195 | { |
---|
196 | DiscoveryItem di = (DiscoveryItem)i.next(); |
---|
197 | String name = di.getName(); |
---|
198 | if(name==null) name= di.getJID().toStringNoResource(); |
---|
199 | //put in services so errors do not prevent register |
---|
200 | services.put(name,di.getJID()); |
---|
201 | model.addElement(name); |
---|
202 | //numberOfServices++; |
---|
203 | backend.getInfo(di.getJID(),this); |
---|
204 | } |
---|
205 | } |
---|
206 | pack(); |
---|
207 | setLocationRelativeTo(null); |
---|
208 | } |
---|
209 | |
---|
210 | public void discoveryInfoResult(JID jid, DiscoveryInfo item) |
---|
211 | { |
---|
212 | //DefaultListModel model = (DefaultListModel) jList1.getModel(); |
---|
213 | numberOfServices--; |
---|
214 | //System.out.println(numberOfServices); |
---|
215 | if (numberOfServices <= 0) setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); |
---|
216 | DefaultListModel model = (DefaultListModel) jList1.getModel(); |
---|
217 | String name = item.getName(); |
---|
218 | if(name!=null && model.removeElement(jid.toStringNoResource())) |
---|
219 | { |
---|
220 | model.addElement(name); |
---|
221 | } |
---|
222 | if (item.getFeatures().contains("jabber:iq:register")) |
---|
223 | { |
---|
224 | if(name!=null) services.put(item.getName(),jid); |
---|
225 | else services.put(jid.toStringNoResource(),jid); |
---|
226 | } |
---|
227 | //else{} remove from services |
---|
228 | |
---|
229 | } |
---|
230 | |
---|
231 | /* |
---|
232 | public void browseResult(IQBrowse browse) |
---|
233 | { |
---|
234 | //System.out.println(browse); |
---|
235 | if(browse.getJID() == null) nu.fw.jeti.util.Popups.errorPopup(I18N.gettext("main.error.Server_doesn't_support_browse"),I18N.gettext("main.error.Service_error")); |
---|
236 | else if(browse.getJID().equals(server)) |
---|
237 | {//current server browse |
---|
238 | services.clear(); |
---|
239 | DefaultListModel model =(DefaultListModel)jList1.getModel(); |
---|
240 | model.clear(); |
---|
241 | if(!browse.hasChildItems()) |
---|
242 | { |
---|
243 | nu.fw.jeti.util.Popups.errorPopup(I18N.gettext("main.error.No_services"),I18N.gettext("main.error.Register_Services")); |
---|
244 | backend.removeListener(RegisterListener.class,this); |
---|
245 | this.dispose(); |
---|
246 | return; |
---|
247 | } |
---|
248 | else { |
---|
249 | for(Iterator i = browse.getItems();i.hasNext();) |
---|
250 | { |
---|
251 | IQBrowse item = (IQBrowse)i.next(); |
---|
252 | if(item.hasFeatures()) |
---|
253 | { |
---|
254 | for(Iterator j = item.getFeatures();j.hasNext();) |
---|
255 | { |
---|
256 | String namespace = (String)j.next(); |
---|
257 | if(namespace.equals("jabber:iq:register")) |
---|
258 | {//object 0 could be removed |
---|
259 | Object temp[] = new Object[2]; |
---|
260 | temp[0] = item.getName(); |
---|
261 | temp[1] = item.getJID(); |
---|
262 | services.add(temp); |
---|
263 | model.addElement(item.getName()); |
---|
264 | } |
---|
265 | } |
---|
266 | } |
---|
267 | } |
---|
268 | } |
---|
269 | } |
---|
270 | setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); |
---|
271 | pack(); |
---|
272 | setLocationRelativeTo(null); |
---|
273 | } |
---|
274 | */ |
---|
275 | |
---|
276 | public void register(IQRegister register,String id) |
---|
277 | { |
---|
278 | |
---|
279 | new RegisterWindow(backend,register,registerJID,id); |
---|
280 | /* |
---|
281 | Map map = new HashMap(20); |
---|
282 | String key = null; |
---|
283 | //for(Iterator i = register.getFields() |
---|
284 | for( Enumeration keys = register.getNames();keys.hasMoreElements();) |
---|
285 | { |
---|
286 | key = (String)keys.nextElement(); |
---|
287 | map.put(key ,register.getValue(key)); |
---|
288 | //System.out.println(key + " " + register.getValue(key)); |
---|
289 | } |
---|
290 | RegisterWindow registerWindow = new RegisterWindow(this,map,newAccount,cp.getFromAddress()); |
---|
291 | registerWindow.show(); |
---|
292 | */ |
---|
293 | } |
---|
294 | } |
---|
295 | /* |
---|
296 | * Overrides for emacs |
---|
297 | * Local variables: |
---|
298 | * tab-width: 4 |
---|
299 | * End: |
---|
300 | */ |
---|