Package org.infotechservice.smartcard.service

Source Code of org.infotechservice.smartcard.service.Terminals

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package org.infotechservice.smartcard.service;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import javax.smartcardio.CardException;
import javax.smartcardio.CardTerminal;
import javax.smartcardio.CardTerminals;
import javax.smartcardio.TerminalFactory;

/**
* Инкапсулирует терминалы считывателей карт
* @author Axe
*/
class Terminals {

    private CardTerminals terminals = attach();

    private synchronized CardTerminals attach() {
        if (terminals != null) {
            return terminals;
        }
        TerminalFactory factory = TerminalFactory.getDefault();
        terminals = factory.terminals();
        return terminals;
    }

    /**
     * Отключается от списка терминалов
     */
    public synchronized void detach() {
        terminals = null;
    }

    public synchronized List<CardTerminal> getTerminals() throws CardException {
        CardTerminals term = attach();
        if(term != null) {
            return term.list();
        }
        return new LinkedList<CardTerminal>();
    }

    /**
     * Возвращает терминалы со вставленной картой
     * @return
     * @throws CardException
     */
    public synchronized List<CardTerminal> getTerminalsWithCard() throws CardException {
        CardTerminals term = attach();
        if(term != null) {
            return term.list(CardTerminals.State.CARD_PRESENT);
        }
        return new LinkedList<CardTerminal>();
    }


    /**
     * Ожидаение события на одном из доступных терминалов
     * Блокирующийся метод.
     * @param timeout время в миллисекундах
     * @return список терминалов со вставленной картой
     * @throws CardException
     */
    public List<CardTerminal> waitForEvent(long timeout) throws CardException {
        CardTerminals term = attach();
        if (term != null && term.waitForChange(timeout)) {
            try {
                List<CardTerminal> all = new ArrayList<CardTerminal>();
                List<CardTerminal> inserted = term.list(CardTerminals.State.CARD_INSERTION);
                List<CardTerminal> removed = term.list(CardTerminals.State.CARD_REMOVAL);
                if(inserted != null) {
                    for (CardTerminal cardTerminal : inserted) {
                        System.out.println("insert card in: " + cardTerminal.getName());
                    }
                    all.addAll(inserted);
                }
                if(removed != null) {
                    for (CardTerminal cardTerminal : removed) {
                        System.out.println("remove card from: " + cardTerminal.getName());
                    }
                    all.addAll(removed);
                }
                return all;
            } catch (CardException ex) {
                // nothing to do
            }
        }
        return new LinkedList<CardTerminal>();
    }

}
TOP

Related Classes of org.infotechservice.smartcard.service.Terminals

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.