Class CardServiceFactory
- java.lang.Object
-
- opencard.core.service.CardServiceFactory
-
- Direct Known Subclasses:
GlobalPlatformCardServiceFactory
,IsoCardServiceFactory
,OCF11CardServiceFactory
,RemoteClientCardServiceFactory
,SmartCardHSMCardServiceFactory
public abstract class CardServiceFactory extends java.lang.Object
A CardServiceFactory can instantiate CardServices for a specific smart card. Typically, the CardServiceRegistry will instantiate a CardServiceFactory once a smart card has been inserted for which a waitForCard() method was invoked.Note: Subclasses should implement the getCardType() and getClasses() methods which can communicate with the card to classify the card. OCF 1.1 style card service factories should instead derive from opencard.opt.service.OCF11CardServiceFactory which still offers the deprecated knows() and cardServiceClasses() methods.
- Author:
- Dirk Husemann (hud@zurich.ibm.com), Reto Hermann (rhe@zurich.ibm.com)
- See Also:
OCF11CardServiceFactory
,CardService
,PrimaryCardServiceFactory
,CardID
-
-
Constructor Summary
Constructors Constructor Description CardServiceFactory()
Instantiate a CardServiceFactory.
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description protected CardService
getCardServiceInstance(java.lang.Class clazz, CardType type, CardServiceScheduler scheduler, SmartCard card, boolean block)
Instantiate a CardService implementing the class clazz.protected abstract CardType
getCardType(CardID cid, CardServiceScheduler scheduler)
Indicate whether this CardServiceFactory "knows" the smart card OS and/or installed card applications and might be able to instantiate CardServices for it.protected abstract java.util.Enumeration
getClasses(CardType type)
Return an enumeration of known CardService classes.protected java.lang.Class
getClassFor(java.lang.Class clazz, CardType type)
Locate the CardService class that implements clazz.protected CardService
newCardServiceInstance(java.lang.Class clazz, CardType type, CardServiceScheduler scheduler, SmartCard card, boolean blocking)
Utility method to instantiate a CardService.
-
-
-
Method Detail
-
getCardServiceInstance
protected CardService getCardServiceInstance(java.lang.Class clazz, CardType type, CardServiceScheduler scheduler, SmartCard card, boolean block) throws CardServiceException
Instantiate a CardService implementing the class clazz.- Parameters:
clazz
- The Class object for which an implementing CardService is requested.cid
- A CardID object representing the smart card for which the CardService is requested.scheduler
- The controlling CardServiceSchedulercard
- The SmarCard object requesting the CardServiceblock
- Specifies the waiting behavior of the newly created CardService; if true it will wait for CardChannel (i.e., block).- Returns:
- An instance of the requested CardService, or null if the requested CardService cannot be instantiated.
- Throws:
CardServiceException
-
getClassFor
protected java.lang.Class getClassFor(java.lang.Class clazz, CardType type)
Locate the CardService class that implements clazz.- Parameters:
clazz
- The Class object for which an implementing CardService is requested.type
- A CardType object representing the smart card for which the CardService is requested.- Returns:
- The class object of the CardService class that implements clazz if there is one; null otherwise.
-
newCardServiceInstance
protected CardService newCardServiceInstance(java.lang.Class clazz, CardType type, CardServiceScheduler scheduler, SmartCard card, boolean blocking) throws CardServiceException
Utility method to instantiate a CardService.- Parameters:
clazz
- The class of the CardService to instantiate.scheduler
- The controlling scheduler.card
- The owning SmartCard object.blocking
- Whether to run the new CardService in blocking mode.- Returns:
- The instantiated CardService object or null if the requested class could not be instantiated.
- Throws:
CardServiceException
- if the service could be instantiated using the default constructor, but encountered an error when initialize was invoked- See Also:
CardService()
,CardService.initialize(opencard.core.service.CardServiceScheduler, opencard.core.service.SmartCard, boolean)
-
getCardType
protected abstract CardType getCardType(CardID cid, CardServiceScheduler scheduler) throws CardTerminalException
Indicate whether this CardServiceFactory "knows" the smart card OS and/or installed card applications and might be able to instantiate CardServices for it.This method replaces the former knows() method. Note: OCF 1.1 style card service factories should instead derive from opencard.opt.service.OCF11CardServiceFactory which still offers the knows() and cardServiceClasses() methods.
Should return a CardType that contains enough information to answer the getClassFor() method.
The factory can inspect the card (communicate with the card) using the provided CardServiceScheduler if the CardID information is insufficient to classify the card.
- Parameters:
cid
- A CardID received from a Slot.scheduler
- A CardServiceScheduler that can be used to communicate with the card to determine its type.- Returns:
- A valid CardType if the factory can instantiate services for this card. CardType.UNSUPPORTED if the factory does not know the card.
- Throws:
CardTerminalException
-
getClasses
protected abstract java.util.Enumeration getClasses(CardType type)
Return an enumeration of known CardService classes.Replaces the former cardServiceClasses() method. Note: OCF 1.1 style card service factories should instead derive from opencard.opt.service.OCF11CardServiceFactory which still offers the knows() and cardServiceClasses() methods.
- Parameters:
type
- The CardType of the smart card for which the enumeration is requested.- Returns:
- An Enumeration of class objects.
-
-