package org.eparapher.rcp.statusline; import java.util.Timer; import java.util.TimerTask; import org.apache.log4j.Logger; import org.eclipse.jface.action.IStatusLineManager; import org.eclipse.jface.action.StatusLineManager; import org.eclipse.swt.widgets.Display; import org.eparapher.core.crypto.EPKeystoreManager; import org.eparapher.core.crypto.keystore.HardwareKeyStore; import org.eparapher.core.interfaces.IUserKeystore; import org.eparapher.rcp.tools.GUIIcons; import org.eparapher.rcp.tools.StatusLineContributionItem; public class TokenStatus { private static Logger log = Logger.getLogger(TokenStatus.class); private final static String ITEM_ID = "TokenStatus"; final StatusLineContributionItem tokenStatus; boolean tokenstatus; long delay = 6; //Wait for 6 sec long period = 1; // and execute every 1 sec public TokenStatus(IStatusLineManager statusLine) { super(); tokenStatus = new StatusLineContributionItem( ITEM_ID, true, 21); displayTokenStatus(tokenStatus); tokenStatus.setText("PKCS#11 Token"); tokenStatus.setVisible(true); statusLine.appendToGroup(StatusLineManager.END_GROUP, tokenStatus); tokenStatus.setImage(GUIIcons.WARN_ICON_IMAGE); tokenstatus = false; // Wait delay seconds, and refresh status every period Seconds Timer timer = new Timer(true); TokenTimerTask tokentimer= new TokenTimerTask(); timer.scheduleAtFixedRate(tokentimer, delay * 1000, period * 1000); } private void displayTokenStatus(StatusLineContributionItem mtokenStatus) { if (EPKeystoreManager.isPKCS11Used()) { IUserKeystore myuserkeystore = EPKeystoreManager.getInstance().getUserkeystore(); if (myuserkeystore instanceof HardwareKeyStore) { HardwareKeyStore usertoken = (HardwareKeyStore) myuserkeystore; mtokenStatus.setVisible(true); if (usertoken.isKeystoreLoaded() && !tokenstatus) { mtokenStatus.setToolTipText("Token loaded"); mtokenStatus.setImage(GUIIcons.OK_ICON_IMAGE); tokenstatus = true; } if (!usertoken.isKeystoreLoaded() && tokenstatus) { mtokenStatus.setToolTipText("Token is removed"); mtokenStatus.setImage(GUIIcons.KO_ICON_IMAGE); tokenstatus = false; } } else log.error("Problem : PKCS11 configured but HardwareKeyStore not loaded"); } else { if (tokenstatus) { mtokenStatus.setVisible(false); mtokenStatus.setToolTipText("Token not used"); mtokenStatus.setImage(GUIIcons.WARN_ICON_IMAGE); tokenstatus = false; } } } class TokenTimerTask extends TimerTask { public void run() { Display.getDefault().asyncExec( new Runnable() { public void run() { displayTokenStatus(tokenStatus); } } ); } } }