package grith.jgrith.view.swing;
import grith.jgrith.Environment;
import grith.jgrith.myProxy.MyProxy_light;
import grith.jgrith.utils.CredentialHelpers;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Enumeration;
import java.util.Vector;
import javax.swing.JButton;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.border.TitledBorder;
import org.globus.gsi.GlobusCredential;
import org.globus.gsi.GlobusCredentialException;
import org.globus.myproxy.InitParams;
import org.globus.myproxy.MyProxy;
import org.globus.myproxy.MyProxyException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.jgoodies.forms.layout.CellConstraints;
import com.jgoodies.forms.layout.ColumnSpec;
import com.jgoodies.forms.layout.FormLayout;
import com.jgoodies.forms.layout.FormSpecs;
import com.jgoodies.forms.layout.RowSpec;
public class MyProxyUpAndDownloadPanelWithDialogs extends JPanel implements
ProxyInitListener {
static final Logger myLogger = LoggerFactory.getLogger(MyProxy_light.class
.getName());
private JButton uploadButton;
private JButton downloadButton;
private GlobusCredential currentCredential = null;
private MyProxy myproxy = null;
// -------------------------------------------------------------------
// EventStuff
private Vector<ProxyInitListener> proxyListeners;
/**
* Create the panel
*/
public MyProxyUpAndDownloadPanelWithDialogs() {
super();
setBorder(new TitledBorder(null, "MyProxy",
TitledBorder.DEFAULT_JUSTIFICATION,
TitledBorder.DEFAULT_POSITION, null, null));
setLayout(new FormLayout(new ColumnSpec[] {
FormSpecs.RELATED_GAP_COLSPEC,
ColumnSpec.decode("default:grow(1.0)"),
FormSpecs.RELATED_GAP_COLSPEC,
ColumnSpec.decode("default:grow(1.0)"),
FormSpecs.RELATED_GAP_COLSPEC }, new RowSpec[] {
FormSpecs.RELATED_GAP_ROWSPEC, FormSpecs.DEFAULT_ROWSPEC,
FormSpecs.RELATED_GAP_ROWSPEC }));
add(getDownloadButton(), new CellConstraints(2, 2,
CellConstraints.LEFT, CellConstraints.DEFAULT));
add(getUploadButton(), new CellConstraints(4, 2, CellConstraints.RIGHT,
CellConstraints.DEFAULT));
//
}
// register a listener
synchronized public void addProxyListener(ProxyInitListener l) {
if (proxyListeners == null) {
proxyListeners = new Vector();
}
proxyListeners.addElement(l);
}
private void fireNewProxyCreated(GlobusCredential proxy) {
// if we have no mountPointsListeners, do nothing...
if ((proxyListeners != null) && !proxyListeners.isEmpty()) {
// create the event object to send
// make a copy of the listener list in case
// anyone adds/removes mountPointsListeners
Vector targets;
synchronized (this) {
targets = (Vector) proxyListeners.clone();
}
// walk through the listener list and
// call the gridproxychanged method in each
Enumeration e = targets.elements();
while (e.hasMoreElements()) {
ProxyInitListener l = (ProxyInitListener) e.nextElement();
l.proxyCreated(proxy);
}
}
}
/**
* @return
*/
protected JButton getDownloadButton() {
if (downloadButton == null) {
downloadButton = new JButton();
downloadButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(final ActionEvent e) {
MyProxyDownloadDialog mpdd = new MyProxyDownloadDialog();
mpdd.initialize(Environment.getDefaultMyProxy());
mpdd.setVisible(true);
if (mpdd.getCred() != null) {
fireNewProxyCreated(CredentialHelpers
.unwrapGlobusCredential(mpdd.getCred()));
}
}
});
downloadButton.setText("Download");
}
return downloadButton;
}
/**
* @return
*/
protected JButton getUploadButton() {
if (uploadButton == null) {
uploadButton = new JButton();
uploadButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(final ActionEvent e) {
InitParams params;
try {
params = MyProxy_light.prepareProxyParameters(
System.getProperty("user.name"), null, "*",
"*", null, -1);
MyProxyUploadDialog mpud = new MyProxyUploadDialog(
currentCredential, params, Environment
.getDefaultMyProxy());
mpud.setVisible(true);
} catch (MyProxyException e1) {
JOptionPane
.showMessageDialog(
MyProxyUpAndDownloadPanelWithDialogs.this,
"Error preparing myproxy parameters: "
+ e1.getLocalizedMessage()
+ "\n\n. Please contact your administrator.",
"MyProxy error",
JOptionPane.ERROR_MESSAGE);
}
}
});
uploadButton.setText("Upload");
uploadButton.setEnabled(false);
}
return uploadButton;
}
@Override
public void proxyCreated(GlobusCredential newProxy) {
try {
newProxy.verify();
this.currentCredential = newProxy;
getUploadButton().setEnabled(true);
} catch (GlobusCredentialException e) {
// do nothing
myLogger.debug("Credential not valid. Not enabling upload button.");
}
}
@Override
public void proxyDestroyed() {
this.currentCredential = null;
getUploadButton().setEnabled(false);
}
// remove a listener
synchronized public void removeProxyListener(ProxyInitListener l) {
if (proxyListeners == null) {
proxyListeners = new Vector<ProxyInitListener>();
}
proxyListeners.removeElement(l);
}
public void setMyproxy(MyProxy myproxy) {
this.myproxy = myproxy;
}
}