| /* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| */ |
| package org.apache.vysper.demo.pubsub.client; |
| |
| import java.awt.BorderLayout; |
| import java.awt.GridLayout; |
| |
| import javax.swing.JButton; |
| import javax.swing.JFrame; |
| import javax.swing.JLabel; |
| import javax.swing.JOptionPane; |
| import javax.swing.JPanel; |
| import javax.swing.JPasswordField; |
| import javax.swing.JScrollPane; |
| import javax.swing.JTable; |
| import javax.swing.JTextField; |
| import javax.swing.ListSelectionModel; |
| import javax.swing.SwingUtilities; |
| import javax.swing.UIManager; |
| import javax.swing.event.ListSelectionEvent; |
| import javax.swing.event.ListSelectionListener; |
| |
| /** |
| * A simple demo application for the pubsub module of Vysper. It allows to lookup |
| * the nodes, subscribe, unsubscribe, create new nodes and finally to publish and |
| * receive published items. |
| * |
| * @author The Apache MINA Project (http://mina.apache.org) |
| */ |
| public class PubsubClientGUI implements Runnable, ListSelectionListener { |
| private JFrame frame; |
| |
| private JButton delete; |
| |
| private JButton open; |
| |
| private PubsubClientModel pcm = new PubsubClientModel(); |
| |
| private void createAndShowGUI() { |
| setUpLookAndFeel(); |
| |
| PubsubTableModel tableModel = pcm.getTableModel(); |
| |
| frame = new JFrame("Vysper Publish/Subscribe Client"); |
| frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); |
| |
| JPanel panel = new JPanel(); |
| panel.setLayout(new BorderLayout()); |
| |
| JTable nodeTable = new JTable(tableModel); |
| JScrollPane scrollPane = new JScrollPane(nodeTable); |
| //nodeTable.setFillsViewportHeight(true); |
| nodeTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); |
| ListSelectionModel lsm = nodeTable.getSelectionModel(); |
| lsm.addListSelectionListener(this); |
| tableModel.addTableModelListener(new PubsubTableModelListener(pcm)); |
| |
| JButton create = new JButton("Create node"); |
| create.setActionCommand("create"); |
| create.addActionListener(new PubsubCreateButtonListener(frame, pcm)); |
| |
| open = new JButton("Open node"); |
| open.setActionCommand("open"); |
| open.addActionListener(new PubsubOpenButtonListener(pcm)); |
| disableOpenButton(); |
| |
| delete = new JButton("Delete node"); |
| delete.setActionCommand("delete"); |
| delete.addActionListener(new PubsubDeleteButtonListener(frame, pcm)); |
| delete.setEnabled(false); |
| |
| JButton refresh = new JButton("Refresh"); |
| refresh.setActionCommand("refresh"); |
| refresh.addActionListener(new PubsubRefreshButtonListener(pcm)); |
| |
| JPanel buttons = new JPanel(); |
| buttons.add(create); |
| buttons.add(open); |
| buttons.add(delete); |
| buttons.add(refresh); |
| |
| frame.add(panel); |
| |
| panel.add(scrollPane, BorderLayout.NORTH); |
| panel.add(buttons, BorderLayout.SOUTH); |
| |
| frame.pack(); |
| frame.setVisible(true); |
| } |
| |
| private void setUpLookAndFeel() { |
| try { |
| UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel"); |
| } catch (Exception e) { |
| // well then... no change |
| } |
| } |
| |
| public static void main(String[] args) { |
| PubsubClientGUI ex1 = new PubsubClientGUI(); |
| SwingUtilities.invokeLater(ex1); |
| } |
| |
| public void run() { |
| createAndShowGUI(); |
| registerShutDownHook(); |
| |
| login(); |
| pcm.refresh(); |
| } |
| |
| public void login() { |
| do { |
| askForCredentials(); |
| } while (pcm.login() == false); |
| } |
| |
| private void registerShutDownHook() { |
| Runtime.getRuntime().addShutdownHook(new Thread() { |
| @Override |
| public void run() { |
| pcm.logout(); |
| } |
| }); |
| } |
| |
| private void askForCredentials() { |
| JLabel jidLab = new JLabel("JID"); |
| JTextField jidTxt = new JTextField("user1@vysper.org"); |
| jidLab.setLabelFor(jidTxt); |
| |
| JLabel usernameLab = new JLabel("Username"); |
| JTextField usernameTxt = new JTextField("user1"); |
| usernameLab.setLabelFor(usernameTxt); |
| |
| JLabel hostLab = new JLabel("Host"); |
| JTextField hostTxt = new JTextField("localhost"); |
| hostLab.setLabelFor(hostTxt); |
| |
| JLabel passwordLab = new JLabel("Password"); |
| JTextField passwordTxt = new JPasswordField("password1"); |
| passwordLab.setLabelFor(passwordTxt); |
| |
| JPanel panel = new JPanel(); |
| panel.setLayout(new GridLayout(4, 2)); |
| panel.add(jidLab); |
| panel.add(jidTxt); |
| panel.add(usernameLab); |
| panel.add(usernameTxt); |
| panel.add(hostLab); |
| panel.add(hostTxt); |
| panel.add(passwordLab); |
| panel.add(passwordTxt); |
| |
| int answer = JOptionPane.showOptionDialog(frame, panel, "Login", JOptionPane.OK_CANCEL_OPTION, |
| JOptionPane.QUESTION_MESSAGE, null, new String[] { "Login", "Exit" }, "Login"); |
| |
| if (answer != 0) { |
| System.exit(0); |
| } |
| |
| pcm.setUsername(usernameTxt.getText()); |
| pcm.setHostname(hostTxt.getText()); |
| pcm.setPassword(passwordTxt.getText()); |
| pcm.setJID(jidTxt.getText()); |
| } |
| |
| public void valueChanged(ListSelectionEvent e) { |
| ListSelectionModel lsm = (ListSelectionModel) e.getSource(); |
| if (e.getValueIsAdjusting()) { |
| if (lsm.isSelectionEmpty()) { |
| disableOpenButton(); |
| disableDeleteButton(); |
| } else { |
| changeOpenButton(); |
| changeDeleteButton(e); |
| } |
| } |
| } |
| |
| private void disableOpenButton() { |
| // disable open button |
| open.setEnabled(false); |
| } |
| |
| private void disableDeleteButton() { |
| // disable delete button |
| delete.setEnabled(false); |
| pcm.deselectNode(); |
| } |
| |
| private void changeOpenButton() { |
| open.setEnabled(true); |
| } |
| |
| private void changeDeleteButton(ListSelectionEvent e) { |
| // store the node and enable delete button |
| PubsubTableModel tableModel = pcm.getTableModel(); |
| |
| int idx = getNewSelectionIndex(e, tableModel); |
| |
| String selectedNode = (String) tableModel.getValueAt(idx, 0); |
| pcm.selectNode(selectedNode); |
| Boolean owner = (Boolean) tableModel.getValueAt(idx, 2); |
| if (owner != null && owner == Boolean.TRUE) { //owner |
| delete.setEnabled(true); |
| } else { |
| delete.setEnabled(false); |
| } |
| } |
| |
| private int getNewSelectionIndex(ListSelectionEvent e, PubsubTableModel tableModel) { |
| int idx = e.getFirstIndex(); // check which one is the right index (the new one) |
| String selectedNode = (String) tableModel.getValueAt(idx, 0); |
| if (pcm.getSelectedNode() != null && pcm.getSelectedNode().equals(selectedNode)) { |
| idx = e.getLastIndex(); |
| |
| } |
| return idx; |
| } |
| |
| } |