[3102] | 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 | */ |
---|