package thaw.plugins.peerMonitor;
import javax.swing.JDialog;
import javax.swing.JPanel;
import javax.swing.JLabel;
import java.awt.BorderLayout;
import java.awt.GridLayout;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.JButton;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.AbstractButton;
import thaw.fcp.*; /* I'm lazy */
import thaw.core.MainWindow;
import thaw.core.I18n;
public class PeerHelper {
public interface PeerAction extends ActionListener {
public void setTarget(Peer peer);
}
public static class PeerAdder implements PeerAction {
private FCPQueueManager queueManager;
private AbstractButton src;
private MainWindow mainWindow;
private JDialog dialog;
private JButton okButton;
private JButton cancelButton;
private JTextArea refArea;
private JTextField urlField;
public PeerAdder(FCPQueueManager queueManager, MainWindow mainWindow, AbstractButton actionSource) {
this.queueManager = queueManager;
this.src = actionSource;
this.mainWindow = mainWindow;
if (actionSource != null)
actionSource.addActionListener(this);
}
public void setTarget(Peer peer) {
/* we ignore */
}
public void actionPerformed(ActionEvent e) {
if (e.getSource() == src) {
dialog = new JDialog(mainWindow.getMainFrame(),
I18n.getMessage("thaw.plugin.peerMonitor.addPeer"));
dialog.getContentPane().setLayout(new BorderLayout(5, 5));
JPanel centerPanel = new JPanel(new BorderLayout());
JPanel buttonPanel = new JPanel(new GridLayout(1, 2));
okButton = new JButton(I18n.getMessage("thaw.common.ok"));
okButton.addActionListener(this);
buttonPanel.add(okButton);
cancelButton = new JButton(I18n.getMessage("thaw.common.cancel"));
cancelButton.addActionListener(this);
buttonPanel.add(cancelButton);
refArea = new JTextArea("");
JLabel label = new JLabel(I18n.getMessage("thaw.plugin.peerMonitor.enterRef"));
centerPanel.add(label, BorderLayout.NORTH);
centerPanel.add(new JScrollPane(refArea), BorderLayout.CENTER);
JPanel southPanel = new JPanel(new GridLayout(2, 1));
JPanel urlPanel = new JPanel(new BorderLayout());
JLabel urlLabel = new JLabel("URL : ");
urlField = new JTextField("http://");
urlPanel.add(urlLabel, BorderLayout.WEST);
urlPanel.add(urlField, BorderLayout.CENTER);
southPanel.add(urlPanel);
southPanel.add(buttonPanel);
dialog.getContentPane().add(centerPanel, BorderLayout.CENTER);
dialog.getContentPane().add(southPanel, BorderLayout.SOUTH);
dialog.setSize(700, 300);
dialog.setVisible(true);
return;
}
if (e.getSource() == okButton) {
String ref;
ref = refArea.getText();
if (urlField.getText() != null
&& !"http://".equals(urlField.getText())) {
ref = "URL="+urlField.getText();
}
ref = ref.trim();
if (looksValid(ref)) {
addPeer(queueManager, ref);
dialog.setVisible(false);
} else {
new thaw.gui.WarningWindow(dialog,
I18n.getMessage("thaw.plugin.peerMonitor.invalidRef"));
}
}
if (e.getSource() == cancelButton) {
dialog.setVisible(false);
}
}
}
public static boolean looksValid(String ref) {
if (ref.startsWith("URL=") || ref.endsWith("End"))
return true;
return false;
}
public static void addPeer(FCPQueueManager queueManager, String ref) {
FCPAddPeer addPeer = new FCPAddPeer(ref);
addPeer.start(queueManager);
/* see you later :) */
/* (ie when the next ListPeers will be done) */
}
public static class PeerRemover implements PeerAction {
private FCPQueueManager queueManager;
private AbstractButton src;
private Peer target;
public PeerRemover(FCPQueueManager queueManager, AbstractButton actionSource) {
this.queueManager = queueManager;
this.src = actionSource;
if (actionSource != null) {
actionSource.addActionListener(this);
actionSource.setEnabled(false);
}
}
public void setTarget(Peer peer) {
if (src != null) {
src.setEnabled(peer != null);
}
target = peer;
}
public void actionPerformed(ActionEvent e) {
if (target == null)
return;
int ret = JOptionPane.showConfirmDialog(null,
I18n.getMessage("thaw.plugin.peerMonitor.confirmationForRemove"),
I18n.getMessage("thaw.warning.title"),
JOptionPane.YES_NO_OPTION,
JOptionPane.WARNING_MESSAGE);
if (ret != JOptionPane.YES_OPTION) {
return;
}
removePeer(queueManager, target.getIdentity());
}
}
public static void removePeer(FCPQueueManager queueManager, String peer) {
FCPRemovePeer addPeer = new FCPRemovePeer(peer);
addPeer.start(queueManager);
}
}