use of org.openecard.common.sal.util.InsertCardDialog in project open-ecard by ecsec.
the class AbstractPINAction method waitForCardType.
/**
* Wait until a card of the specified card type was inserted.
*
* @param cardType The type of the card that should be inserted.
* @return The ConnectionHandle of the inserted card or null if no card was inserted.
*/
protected ConnectionHandleType waitForCardType(String cardType) {
String cardName = recognition.getTranslatedCardName(cardType);
Map<String, String> nameAndType = new HashMap<>();
nameAndType.put(cardName, cardType);
InsertCardDialog uc = new InsertCardDialog(gui, cardStates, nameAndType, evDispatcher);
// get(0) should be sufficient we a looking just for one card. i think the possibility to find 2 is very low.
return uc.show().get(0);
}
use of org.openecard.common.sal.util.InsertCardDialog in project open-ecard by ecsec.
the class TCTokenRequest method findCard.
/**
* Finds a card which matches one of the give types.
*
* @param types String array containing valid card types.
* @param disp Dispatcher used to query cards and terminals.
* @param gui User consent to display messages to the user.
* @return ConnectionHandleType object of the chosen card.
*/
private static ConnectionHandleType findCard(@Nonnull String[] types, @Nonnull Context ctx) throws MissingActivationParameterException, UserCancellationException {
CardRecognition rec = ctx.getRecognition();
Map<String, String> namesAndType = new HashMap<>();
for (String type : types) {
namesAndType.put(rec.getTranslatedCardName(type), type);
}
InsertCardDialog insCardDiag = new InsertCardDialog(ctx.getUserConsent(), ctx.getCardStates(), namesAndType, ctx.getEventDispatcher());
List<ConnectionHandleType> usableCards = insCardDiag.show();
if (usableCards == null) {
// user aborted the card insertion dialog
throw new UserCancellationException(null, LANG.translationForKey(CARD_INSERTION_ABORT));
}
ConnectionHandleType handle;
if (usableCards.size() > 1) {
UserConsentDescription ucd = new UserConsentDescription(LANG.translationForKey("card.selection.heading.uc", AppVersion.getName()));
String stepTitle = LANG.translationForKey("card.selection.heading.step");
CardSelectionStep step = new CardSelectionStep(stepTitle, usableCards, ctx.getRecognition());
ArrayList<String> types2 = new ArrayList<>();
types2.addAll(namesAndType.values());
CardMonitorTask task = new CardMonitorTask(types2, step);
ctx.getEventDispatcher().add(task, EventType.CARD_REMOVED, EventType.CARD_RECOGNIZED);
step.setBackgroundTask(task);
CardSelectionAction action = new CardSelectionAction(step, usableCards, types2, ctx);
step.setAction(action);
ucd.getSteps().add(step);
UserConsent uc = ctx.getUserConsent();
UserConsentNavigator ucNav = uc.obtainNavigator(ucd);
ExecutionEngine exec = new ExecutionEngine(ucNav);
ResultStatus resStatus = exec.process();
if (resStatus != ResultStatus.OK) {
throw new MissingActivationParameterException(CARD_SELECTION_ABORT);
}
handle = action.getResult();
ctx.getEventDispatcher().del(task);
} else {
handle = usableCards.get(0);
}
return handle;
}
Aggregations