package grith.jgrith.control;
import java.util.Enumeration;
import java.util.TimerTask;
import java.util.Vector;
import org.globus.gsi.GlobusCredential;
import org.globus.gsi.GlobusCredentialException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class CredentialStatusTimerTask extends TimerTask {
static final Logger myLogger = LoggerFactory
.getLogger(CredentialStatusTimerTask.class);
private GlobusCredential proxy = null;
// ---------------------------------------------------------------------------------------
// Event stuff (MountPoints)
private Vector<CredentialStatusListener> mountPointsListeners;
public CredentialStatusTimerTask(GlobusCredential proxy) {
this.proxy = proxy;
}
// register a listener
synchronized public void addCredentialStatusListener(
CredentialStatusListener l) {
if (mountPointsListeners == null) {
mountPointsListeners = new Vector<CredentialStatusListener>();
}
mountPointsListeners.addElement(l);
}
private void fireCredentialStatusEvent(GlobusCredential credential, int type) {
// if we have no credentialListeners, do nothing...
if ((mountPointsListeners != null) && !mountPointsListeners.isEmpty()) {
// create the event object to send
CredentialStatusEvent event = null;
event = new CredentialStatusEvent(credential, type);
Vector<CredentialStatusListener> targets;
synchronized (this) {
targets = (Vector<CredentialStatusListener>) mountPointsListeners
.clone();
}
Enumeration<CredentialStatusListener> e = targets.elements();
while (e.hasMoreElements()) {
CredentialStatusListener l = e.nextElement();
try {
l.credentialStatusChanged(event);
} catch (Exception e1) {
myLogger.error(e1.getLocalizedMessage());
}
}
}
}
// remove a listener
synchronized public void removeCredentialStatusListener(
CredentialStatusListener l) {
if (mountPointsListeners == null) {
mountPointsListeners = new Vector<CredentialStatusListener>();
}
mountPointsListeners.removeElement(l);
}
@Override
public void run() {
try {
proxy.verify();
} catch (GlobusCredentialException e) {
fireCredentialStatusEvent(proxy,
CredentialStatusEvent.CREDENTIAL_EXPIRED);
mountPointsListeners.removeAllElements();
this.cancel();
}
fireCredentialStatusEvent(proxy,
CredentialStatusEvent.CREDENTIAL_TIME_REMAINING_CHANGED);
}
}