Search in sources :

Example 1 with JposEventQueueImpl

use of de.javapos.example.queue.JposEventQueueImpl in project JavaForFun by gumartinm.

the class MyPOSKeyboard method open.

@Override
public void open(String paramString, EventCallbacks paramEventCallbacks) throws JposException {
    this.logicalname = paramString;
    // La clase EventCallbacks se crea en la clase POSKeyboard, y contiene
    // los objectos listeners generados en nuestro wrapper
    // Esos objectos lo que contienen son punteros a funciones (en Java
    // realmente todo son punteros) conocidas como callbacks
    // 
    // this.dataListener = new DataListener() {
    // @Override
    // public void dataOccurred(final DataEvent dataEvent) {
    // JPosScaleWrapper.this.processDataOccurredOccurred(dataEvent);  <--- Esto es el "puntero" a funcion que será lo que se almacene en la clase EventCallbacs (se almacena el objecto DataListener que implementa la callback o puntero a funcion) ya a nivel Jpos (se introduce en el nivel Jpos algo creado en un nivel superior, es decir, en nuestro Wrapper)
    // }
    // }
    // this.scale.addDataListener(this.dataListener); <-- addDataListener es un método definido en POSKeyboard que introduce el objeto DataListener en un Vector (al introducir ese objecto lo que está haciendo es pasar el callback, en Java lo han hecho así, en C,C++ por ejemplo podría haberse pasado directamente el puntero a función
    // <---- En este objeto dentro del Vector está el objecto DataListener creado en el Wrapper
    this.callbacks = paramEventCallbacks;
    // Podemos extraer los valores de configuracion del jpos.xml o jpos.properties tal como sigue:
    // (Wincord usa la clase OSServiceConfiguration para hacer lo mismo)
    JposServiceManager localJposServiceManager = JposServiceLoader.getManager();
    // Esto contiene todo el jpos.xml o el jpos.properties correctamente ordenado y parseado
    this.jposEntryRegistry = localJposServiceManager.getEntryRegistry();
    // Así podemos obtener toda la configuracion localizada en el jpos.xml o .properties
    // para un determinado dispostivo
    // cuyo nombre pasamos aqui como parametro de entrada.
    // NOTA: Roberto lo que hacia era en la Factoria hacer esto mismo (recuperar
    // el jposEntryRegistry y el jposEntry
    // y pasarselo directamente al constructor. Mi constructor no hace nada
    // (no lo he implementado, al menos todavia)
    // En mi caso el constructor no hace eso y tengo que recuperarlo aquí
    // (keine Ahnung was ist besser)
    this.jposEntry = this.jposEntryRegistry.getJposEntry(paramString);
    // Aqui comienzo a leer toda la posible configuracion para cumplir con un Keyboard POS.
    // Finalmente de este modo podemos ir obteniendo la configuracion de ese
    // dispositivo pasado los campos
    String str = readJposConfiguration(this.jposEntry, this.jposEntryRegistry);
    if (str != null) {
        // En caso de devolver un string, este string es el mensaje de error.
        throw new JposException(JPOS_E_ILLEGAL, str);
    }
    // Recuperamos el codigo Java que lee eventos HW del teclado y los almacena en el
    // DataEvent. Si hubiera que modificar el driver podria hacerse creando un nuevo
    // interfaz que extiende de BaseKeyBoardDriver y aqui deberiamos aniadir algo
    // que hiciera cast al nuevo interfaz que extiende de BaseKeyBoardDriver. De esta forma
    // si hay que aniadir algo al driver no hay que modificar casi nada del codigo.
    // Ademas si queremos cambiar el driver lo unico que hay que hacer es crear una nueva
    // clase que implemente el interfaz BaseKeyBoardDriver y poner el nombre de la clase
    // en el jpos.xml o en el jpos.properties en el campo driverClass que es donde he definido
    // que se ponga el nombre de la clase que implementa el driver. En Wincord era en dcalClass.
    // Por ejemplo yo ahora tendria que aniadir un campos driverClass al jpos.xml de la N2A
    // con la clase de.javapos.example.hardware.KeyBoardDeviceLinux
    // Lo que no me gusta es que la factoria si se cambiara debe hacerse aquí en el codigo :S
    // TODO: poner la factoria tambien como un campo en el jpos.xml y extraerla por reflexión.
    this.jposDriverFactory = new JposDriverInstanceFactoryImpl();
    this.deviceDriver = this.jposDriverFactory.createInstance(paramString, this.jposEntry, BaseKeyBoardDriver.class);
    if (this.deviceDriver == null) {
        throw new JposException(JPOS_E_NOEXIST, "Class: " + this.jposEntry.getPropertyValue("driverClass") + " not found in current class loader.");
    }
    // Crear la cola donde almacenamos eventos estilo FIFO.
    // Esto tambien puede hacerser en jpos.xml y queda todo como un puzle LOL
    // TODO: poner la cola de eventos en el jpos.xml
    this.jposEventQueue = new JposEventQueueImpl();
    // estaria genial poner esto en el jpos.xml y asi puede tambien cambiar el eventlistener
    this.eventListener = new MyPOSKeyBoardEventListener(this.jposEventQueue, this.callbacks);
    this.deviceDriver.addEventListener(eventListener);
// estaria genial poner esto en el jpos.xml y asi puede tambien cambiar el firethread
// Lo malo es que no tengo interfaz para ello :(  Luego nada :/
}
Also used : JposException(jpos.JposException) BaseKeyBoardDriver(de.javapos.example.hardware.BaseKeyBoardDriver) JposServiceManager(jpos.loader.JposServiceManager) JposEventQueueImpl(de.javapos.example.queue.JposEventQueueImpl)

Aggregations

BaseKeyBoardDriver (de.javapos.example.hardware.BaseKeyBoardDriver)1 JposEventQueueImpl (de.javapos.example.queue.JposEventQueueImpl)1 JposException (jpos.JposException)1 JposServiceManager (jpos.loader.JposServiceManager)1