View Javadoc

1   package org.eparapher.rcp.statusline;
2   
3   import java.util.Timer;
4   import java.util.TimerTask;
5   
6   import org.apache.log4j.Logger;
7   import org.eclipse.jface.action.IStatusLineManager;
8   import org.eclipse.jface.action.StatusLineManager;
9   import org.eclipse.swt.widgets.Display;
10  import org.eparapher.core.crypto.EPKeystoreManager;
11  import org.eparapher.core.crypto.keystore.HardwareKeyStore;
12  import org.eparapher.core.crypto.keystore.IUserKeystore;
13  import org.eparapher.rcp.tools.GUIIcons;
14  import org.eparapher.rcp.tools.StatusLineContributionItem;
15  
16  
17  public class TokenStatus {
18  	
19  	private static Logger log = Logger.getLogger(TokenStatus.class);
20  	
21  	private final static String ITEM_ID = "TokenStatus";
22  	
23  	final StatusLineContributionItem tokenStatus;
24  
25  	boolean tokenstatus;
26  	
27  	long delay = 6;  //Wait for 6 sec
28  	long period = 1; // and execute every 1 sec
29  	
30  	public TokenStatus(IStatusLineManager statusLine) {
31  		
32  		super();
33  		
34  		tokenStatus = new StatusLineContributionItem( ITEM_ID, true, 21);
35  		displayTokenStatus(tokenStatus);
36  		tokenStatus.setText("PKCS#11 Token");
37  		tokenStatus.setVisible(true);
38  		statusLine.appendToGroup(StatusLineManager.END_GROUP, tokenStatus);
39  		tokenStatus.setImage(GUIIcons.WARN_ICON_IMAGE);
40  		
41  		tokenstatus = false;
42  		
43  		// Wait delay seconds, and refresh status every period Seconds
44  		Timer timer = new Timer(true);
45  		TokenTimerTask tokentimer= new TokenTimerTask();
46  		timer.scheduleAtFixedRate(tokentimer, delay * 1000, period * 1000);
47  	}
48  
49  	private void displayTokenStatus(StatusLineContributionItem mtokenStatus) {
50  		if (EPKeystoreManager.isPKCS11Used()) {
51  
52  			IUserKeystore myuserkeystore = EPKeystoreManager.getInstance().getUserkeystore();
53  			if (myuserkeystore instanceof HardwareKeyStore) {
54  				HardwareKeyStore usertoken = (HardwareKeyStore) myuserkeystore;
55  				mtokenStatus.setVisible(true);
56  				if (usertoken.isKeystoreLoaded() && !tokenstatus) {
57  					mtokenStatus.setToolTipText("Token loaded");
58  					mtokenStatus.setImage(GUIIcons.OK_ICON_IMAGE);
59  					tokenstatus = true;
60  				}
61  				if (!usertoken.isKeystoreLoaded() && tokenstatus) {
62  					mtokenStatus.setToolTipText("Token is removed");
63  					mtokenStatus.setImage(GUIIcons.KO_ICON_IMAGE);
64  					tokenstatus = false;
65  				}
66  			} else
67  				log.error("Problem : PKCS11 configured but HardwareKeyStore not loaded");
68  		} else {
69  			if (tokenstatus) {
70  				mtokenStatus.setVisible(false);
71  				mtokenStatus.setToolTipText("Token not used");
72  				mtokenStatus.setImage(GUIIcons.WARN_ICON_IMAGE);
73  				tokenstatus = false;
74  			}
75  		}
76  	}
77  		
78  	class TokenTimerTask extends TimerTask {
79  
80  		public void run() {
81  		    Display.getDefault().asyncExec(
82  		   		new Runnable() {
83  		   			public void run() {
84  		   				displayTokenStatus(tokenStatus);
85  		   			}
86  		   		}
87  		   	);
88  		}
89  		
90  	}
91  
92  }