public abstract class

CardTerminals

extends Object
java.lang.Object
   ↳ javax.smartcardio.CardTerminals

Class Overview

The set of terminals supported by a TerminalFactory. This class allows applications to enumerate the available CardTerminals, obtain a specific CardTerminal, or wait for the insertion or removal of cards.

This class is multi-threading safe and can be used by multiple threads concurrently. However, this object keeps track of the card presence state of each of its terminals. Multiple objects should be used if independent calls to waitForChange() are required.

Applications can obtain instances of this class by calling terminals().

Summary

Nested Classes
enum CardTerminals.State Enumeration of attributes of a CardTerminal. 
Protected Constructors
CardTerminals()
Constructs a new CardTerminals object.
Public Methods
CardTerminal getTerminal(String name)
Returns the terminal with the specified name or null if no such terminal exists.
abstract List<CardTerminal> list(CardTerminals.State state)
Returns an unmodifiable list of all terminals matching the specified state.
List<CardTerminal> list()
Returns an unmodifiable list of all available terminals.
void waitForChange()
Waits for card insertion or removal in any of the terminals of this object.
abstract boolean waitForChange(long timeout)
Waits for card insertion or removal in any of the terminals of this object or until the timeout expires.
[Expand]
Inherited Methods
From class java.lang.Object

Protected Constructors

protected CardTerminals ()

Constructs a new CardTerminals object.

This constructor is called by subclasses only. Application should call terminals() to obtain a CardTerminals object.

Public Methods

public CardTerminal getTerminal (String name)

Returns the terminal with the specified name or null if no such terminal exists.

Returns
  • the terminal with the specified name or null if no such terminal exists.
Throws
NullPointerException if name is null

public abstract List<CardTerminal> list (CardTerminals.State state)

Returns an unmodifiable list of all terminals matching the specified state.

If state is State.ALL, this method returns all CardTerminals encapsulated by this object. If state is State.CARD_PRESENT or State.CARD_ABSENT, it returns all CardTerminals where a card is currently present or absent, respectively.

If state is State.CARD_INSERTION or State.CARD_REMOVAL, it returns all CardTerminals for which an insertion (or removal, respectively) was detected during the last call to waitForChange(). If waitForChange() has not been called on this object, CARD_INSERTION is equivalent to CARD_PRESENT and CARD_REMOVAL is equivalent to CARD_ABSENT. For an example of the use of CARD_INSERTION, see waitForChange().

Parameters
state the State
Returns
  • an unmodifiable list of all terminals matching the specified attribute.
Throws
NullPointerException if attr is null
CardException if the card operation failed

public List<CardTerminal> list ()

Returns an unmodifiable list of all available terminals.

Returns
  • an unmodifiable list of all available terminals.
Throws
CardException if the card operation failed

public void waitForChange ()

Waits for card insertion or removal in any of the terminals of this object.

This call is equivalent to calling waitForChange(0).

Throws
IllegalStateException if this CardTerminals object does not contain any terminals
CardException if the card operation failed

public abstract boolean waitForChange (long timeout)

Waits for card insertion or removal in any of the terminals of this object or until the timeout expires.

This method examines each CardTerminal of this object. If a card was inserted into or removed from a CardTerminal since the previous call to waitForChange(), it returns immediately. Otherwise, or if this is the first call to waitForChange() on this object, it blocks until a card is inserted into or removed from a CardTerminal.

If timeout is greater than 0, the method returns after timeout milliseconds even if there is no change in state. In that case, this method returns false; otherwise it returns true.

This method is often used in a loop in combination with list(State.CARD_INSERTION), for example:

  TerminalFactory factory = ...;
  CardTerminals terminals = factory.terminals();
  while (true) {
      for (CardTerminal terminal : terminals.list(CARD_INSERTION)) {
          // examine Card in terminal, return if it matches
      }
      terminals.waitForChange();
  }

Parameters
timeout if positive, block for up to timeout milliseconds; if zero, block indefinitely; must not be negative
Returns
  • false if the method returns due to an expired timeout, true otherwise.
Throws
IllegalStateException if this CardTerminals object does not contain any terminals
IllegalArgumentException if timeout is negative
CardException if the card operation failed