From b1c8641a63a67e3c64d948f9e8dce5c01e11e2dd Mon Sep 17 00:00:00 2001 From: mcentner Date: Wed, 5 May 2010 15:29:01 +0000 Subject: Merged feature branch mocca-1.2.13-id@r724 back to trunk. git-svn-id: https://joinup.ec.europa.eu/svn/mocca/trunk@725 8a26b1a7-26f0-462f-b9ef-d0e30c41f5a4 --- .../java/at/gv/egiz/smcc/util/SmartCardIO.java | 358 ++++++++++----------- 1 file changed, 179 insertions(+), 179 deletions(-) (limited to 'smcc/src/main/java/at/gv/egiz/smcc/util/SmartCardIO.java') diff --git a/smcc/src/main/java/at/gv/egiz/smcc/util/SmartCardIO.java b/smcc/src/main/java/at/gv/egiz/smcc/util/SmartCardIO.java index b1866894..14ee7549 100644 --- a/smcc/src/main/java/at/gv/egiz/smcc/util/SmartCardIO.java +++ b/smcc/src/main/java/at/gv/egiz/smcc/util/SmartCardIO.java @@ -14,191 +14,191 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package at.gv.egiz.smcc.util; - +package at.gv.egiz.smcc.util; + import java.security.NoSuchAlgorithmException; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import javax.smartcardio.Card; -import javax.smartcardio.CardException; -import javax.smartcardio.CardTerminal; -import javax.smartcardio.CardTerminals; -import javax.smartcardio.TerminalFactory; -import javax.smartcardio.CardTerminals.State; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -/** - * - * @author mcentner - */ -public class SmartCardIO { - - private static final int STATE_INITIALIZED = 1; - - private static final int STATE_TERMINAL_FACTORY = 2; - - private static final int STATE_TERMINALS = 3; - - private static Log log = LogFactory.getLog(SmartCardIO.class); - - final Map terminalCard_ = new HashMap(); - - int state_ = STATE_INITIALIZED; - - TerminalFactory terminalFactory_ = null; - - CardTerminals cardTerminals_; - - private void updateTerminalFactory() { +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.smartcardio.Card; +import javax.smartcardio.CardException; +import javax.smartcardio.CardTerminal; +import javax.smartcardio.CardTerminals; +import javax.smartcardio.TerminalFactory; +import javax.smartcardio.CardTerminals.State; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * + * @author mcentner + */ +public class SmartCardIO { + + private static final int STATE_INITIALIZED = 1; + + private static final int STATE_TERMINAL_FACTORY = 2; + + private static final int STATE_TERMINALS = 3; + + private final Logger log = LoggerFactory.getLogger(SmartCardIO.class); + + final Map terminalCard_ = new HashMap(); + + int state_ = STATE_INITIALIZED; + + TerminalFactory terminalFactory_ = null; + + CardTerminals cardTerminals_; + + private void updateTerminalFactory() { TerminalFactory terminalFactory; try { terminalFactory = TerminalFactory.getInstance("PC/SC", null); } catch (NoSuchAlgorithmException e) { log.info("Failed to get TerminalFactory of type 'PC/SC'.", e); terminalFactory = TerminalFactory.getDefault(); - } - log.debug("TerminalFactory : " + terminalFactory); - if ("PC/SC".equals(terminalFactory.getType())) { - terminalFactory_ = terminalFactory; - } - if(state_ < STATE_TERMINAL_FACTORY) { - state_ = STATE_TERMINAL_FACTORY; - } - } - - public boolean isPCSCSupported() { - if(state_ < STATE_TERMINAL_FACTORY) { - updateTerminalFactory(); - } - return terminalFactory_ != null; - } - - private void updateCardTerminals() { - if(terminalFactory_ != null) { - cardTerminals_ = terminalFactory_.terminals(); - } - log.debug("CardTerminals : " + cardTerminals_); - if (state_ < STATE_TERMINALS) { - state_ = STATE_TERMINALS; - } - } - - public CardTerminals getCardTerminals() { - if(state_ < STATE_TERMINAL_FACTORY) { - updateTerminalFactory(); - } - if(state_ < STATE_TERMINALS) { - updateCardTerminals(); - } - return cardTerminals_; - } - - public boolean isTerminalPresent() { - CardTerminals cardTerminals = getCardTerminals(); - if (cardTerminals != null) { - List terminals = null; - try { - terminals = cardTerminals.list(State.ALL); - - // logging - if(log.isInfoEnabled()) { - if (terminals == null || terminals.isEmpty()) { - log.info("No card terminal found."); - } else { - StringBuffer msg = new StringBuffer(); - msg.append("Found " + terminals.size() + " card terminal(s):"); - for (CardTerminal terminal : terminals) { - msg.append("\n " + terminal.getName()); - } - log.info(msg.toString()); - } - } - - return terminals != null && !terminals.isEmpty(); - } catch (CardException e) { - log.info("Failed to list card terminals.", e); - return false; - } - } else { - return false; - } - } - - private Map updateCards() { - - // clear card references if removed - try { - log.trace("terminals.list(State.CARD_REMOVAL)"); - for (CardTerminal terminal : cardTerminals_.list(CardTerminals.State.CARD_REMOVAL)) { - Card card = terminalCard_.remove(terminal); - log.trace("card removed : " + card); - } - } catch (CardException e) { - log.debug(e); - } - - // check inserted cards - Map newCards = new HashMap(); - try { - log.trace("terminals.list(State.CARD_INSERTION)"); - for (CardTerminal terminal : cardTerminals_.list(CardTerminals.State.CARD_INSERTION)) { - - Card card = null; + } + log.debug("TerminalFactory : {}.", terminalFactory); + if ("PC/SC".equals(terminalFactory.getType())) { + terminalFactory_ = terminalFactory; + } + if(state_ < STATE_TERMINAL_FACTORY) { + state_ = STATE_TERMINAL_FACTORY; + } + } + + public boolean isPCSCSupported() { + if(state_ < STATE_TERMINAL_FACTORY) { + updateTerminalFactory(); + } + return terminalFactory_ != null; + } + + private void updateCardTerminals() { + if(terminalFactory_ != null) { + cardTerminals_ = terminalFactory_.terminals(); + } + log.debug("CardTerminals : {}.", cardTerminals_); + if (state_ < STATE_TERMINALS) { + state_ = STATE_TERMINALS; + } + } + + public CardTerminals getCardTerminals() { + if(state_ < STATE_TERMINAL_FACTORY) { + updateTerminalFactory(); + } + if(state_ < STATE_TERMINALS) { + updateCardTerminals(); + } + return cardTerminals_; + } + + public boolean isTerminalPresent() { + CardTerminals cardTerminals = getCardTerminals(); + if (cardTerminals != null) { + List terminals = null; + try { + terminals = cardTerminals.list(State.ALL); + + // logging + if(log.isInfoEnabled()) { + if (terminals == null || terminals.isEmpty()) { + log.info("No card terminal found."); + } else { + StringBuffer msg = new StringBuffer(); + msg.append("Found " + terminals.size() + " card terminal(s):"); + for (CardTerminal terminal : terminals) { + msg.append("\n " + terminal.getName()); + } + log.info(msg.toString()); + } + } + + return terminals != null && !terminals.isEmpty(); + } catch (CardException e) { + log.info("Failed to list card terminals.", e); + return false; + } + } else { + return false; + } + } + + private Map updateCards() { + + // clear card references if removed + try { + log.trace("terminals.list(State.CARD_REMOVAL)"); + for (CardTerminal terminal : cardTerminals_.list(CardTerminals.State.CARD_REMOVAL)) { + Card card = terminalCard_.remove(terminal); + log.trace("card removed : {}", card); + } + } catch (CardException e) { + log.debug("Failed to list terminals.", e); + } + + // check inserted cards + Map newCards = new HashMap(); + try { + log.trace("terminals.list(State.CARD_INSERTION)"); + for (CardTerminal terminal : cardTerminals_.list(CardTerminals.State.CARD_INSERTION)) { + + Card card = null; try { log.trace("Trying to connect to card."); - // try to connect to card - card = terminal.connect("*"); - } catch (CardException e) { - log.trace("Failed to connect to card.", e); - } - - // have we seen this card before? - if (terminalCard_.put(terminal, card) == null) { - terminalCard_.put(terminal, card); - newCards.put(terminal, card); - log.trace("terminal '" + terminal + "' card inserted : " + card); - } - } - } catch (CardException e) { - log.debug(e); - } - return newCards; - - } - - public Map getCards() { - if(state_ < STATE_TERMINAL_FACTORY) { - updateTerminalFactory(); - } - if(state_ < STATE_TERMINALS) { - updateCardTerminals(); - } - updateCards(); - Map terminalCard = new HashMap(); - terminalCard.putAll(terminalCard_); - return Collections.unmodifiableMap(terminalCard); - } - - public Map waitForInserted(int timeout) { - if(state_ < STATE_TERMINAL_FACTORY) { - updateTerminalFactory(); - } - if(state_ < STATE_TERMINALS) { - updateCardTerminals(); - } - try { - // just waiting for a short period of time to allow for abort - cardTerminals_.waitForChange(timeout); - } catch (CardException e) { - log.debug("CardTerminals.waitForChange(" + timeout + ") failed.", e); - } - Map newCards = new HashMap(); - newCards.putAll(updateCards()); - return Collections.unmodifiableMap(newCards); - } -} \ No newline at end of file + // try to connect to card + card = terminal.connect("*"); + } catch (CardException e) { + log.trace("Failed to connect to card.", e); + } + + // have we seen this card before? + if (terminalCard_.put(terminal, card) == null) { + terminalCard_.put(terminal, card); + newCards.put(terminal, card); + log.trace("terminal '{}' card inserted : {}", terminal, card); + } + } + } catch (CardException e) { + log.debug("Failed to list cards.", e); + } + return newCards; + + } + + public Map getCards() { + if(state_ < STATE_TERMINAL_FACTORY) { + updateTerminalFactory(); + } + if(state_ < STATE_TERMINALS) { + updateCardTerminals(); + } + updateCards(); + Map terminalCard = new HashMap(); + terminalCard.putAll(terminalCard_); + return Collections.unmodifiableMap(terminalCard); + } + + public Map waitForInserted(int timeout) { + if(state_ < STATE_TERMINAL_FACTORY) { + updateTerminalFactory(); + } + if(state_ < STATE_TERMINALS) { + updateCardTerminals(); + } + try { + // just waiting for a short period of time to allow for abort + cardTerminals_.waitForChange(timeout); + } catch (CardException e) { + log.debug("CardTerminals.waitForChange({}) failed.", timeout, e); + } + Map newCards = new HashMap(); + newCards.putAll(updateCards()); + return Collections.unmodifiableMap(newCards); + } +} -- cgit v1.2.3