//* Licensed Materials - Property of IBM, Miracle A/S, and * //* Alexandra Instituttet A/S * //* eu.abc4trust.pabce.1.0 * //* (C) Copyright IBM Corp. 2012. All Rights Reserved. * //* (C) Copyright Miracle A/S, Denmark. 2012. All Rights Reserved. * //* (C) Copyright Alexandra Instituttet A/S, Denmark. 2012. All * //* Rights Reserved. * //* US Government Users Restricted Rights - Use, duplication or * //* disclosure restricted by GSA ADP Schedule Contract with IBM Corp. * //*/**/**************************************************************** package eu.abc4trust.ui.idselectservice; import java.net.URI; import java.util.logging.Level; import java.util.logging.Logger; import eu.abc4trust.abce.external.user.UserAbcEngine; import eu.abc4trust.abce.internal.user.credentialManager.CredentialManagerException; import eu.abc4trust.cryptoEngine.CryptoEngineException; import eu.abc4trust.smartcard.AbcSmartcardDetector; public class RevokedCredentialDeleter implements Runnable { private final long sleepTime; private final Logger logger; private final UserAbcEngine engine; private volatile boolean alive; private volatile Exception exception; public RevokedCredentialDeleter(UserAbcEngine engine, long sleepTime) { super(); this.engine = engine; this.sleepTime = sleepTime; this.logger = Logger.getLogger(AbcSmartcardDetector.class .getCanonicalName()); } @Override public void run() { this.alive = true; boolean done = Thread.currentThread().isInterrupted(); while (!done) { try { this.logger.log(Level.INFO, "Checking for revoked credentials"); try { for (URI credUri : this.engine.listCredentials(UserService.USER_NAME)) { if (this.engine.isRevoked(UserService.USER_NAME, credUri)) { this.logger.log(Level.INFO, "Deleting revoked credential: " + credUri); this.engine.deleteCredential(UserService.USER_NAME, credUri); this.logger.log(Level.INFO, "Deleted revoked credential: " + credUri); } } Thread.sleep(this.sleepTime); done = Thread.currentThread().isInterrupted(); } catch (CredentialManagerException ex) { done = true; this.exception = ex; } catch (CryptoEngineException ex) { done = true; this.exception = ex; } } catch (InterruptedException ex) { done = true; } } this.alive = false; } public synchronized boolean isAlive() { return this.alive; } public synchronized Exception getException() { return this.exception; } public void stop() { Thread.currentThread().interrupt(); } }