Funcionalidad de librería
Orden y tipo de datos en la lista de filtros
El orden en la lista es mantenido por el usuario. Cuando se añade un filtro siempre se coloca al final de la lista. Por ello el uso más común es regenerar la lista entera antes de realizar una operación de dibujado o exportación de un grid.
Existe un parámetro al añadir un filtro llamada insertionMode. Este parámetro es un entero representado por una constante en RasterListManager. Si este parámetro es ADD_END se añade al final de la lista y se mantienen los que hay a de este tipo. Si vale ADD_END_AND_DELETE se añadirá al final de la lista y se borran todos los que existan previamente de este tipo. Si vale MODIFY_LAST modificará los parámetros del último que haya insertado en la lista.
El tipo de dato al insertar un filtro es controlado automáticamente:
- Si se añade al final de la lista comprobará el tipo de dato del último filtro añadido. El tipo de dato de salida del último de la lista será el tipo de dato de entrada del que añadimos.
- Si modificamos uno existente no es necesario comprobar el tipo ya que se hizo en su momento.
- Si eliminamos todos los filtros existentes del mismo tipo entonces tendremos que volver a construir la lista ya que han podido cambiar los tipos de salida de uno de la lista haciendo variar la entrada del siguiente.
Registro de filtros en el gestor
Un gestor individual es le que se hace cargo de un número pequeño de filtros. Sabe como añadir estos y se hace mediante la llamada a una función. Todos los gestores individuales deben ser registrados en el gestor general de filtros. Esto suele hacerse al levantarse la librería en la llamada RasterLibrary.wakeUp(). En este momento se nombrarán las clases de los gestores individuales de la forma:
BrightnessContrastListManager.class.getClass();
Esto hace que se ejecute el código static definido en cada gestor individual. En este código debe estar el código necesario para registrarse en el punto de extensión. La forma de hacerlo es la siguiente:
ExtensionPoints extensionPoints=ExtensionPointsSingleton.getInstance();
extensionPoints.add("RasterFilter","BrightnessContrast",BrightnessContrastListManager.class);
Gestión de la lista de filtros
Para la gestión de la lista de filtros se usa una clase llamada RasterFilterListManager. Cuando alguien quiere realizar un filtro o conjunto de filtros debe realizar un gestor específico que será registrado en el RasterFilterListManager. De esta forma, para añadir un filtro de ese tipo puede pedirse el gestor especifico al gestor general y así añadir un filtro de ese tipo. Por ejemplo para añadir un filtro de brillo podría hacerse de la siguiente forma:
- Se crea un gestor de filtros al cual se le pasa la lista, la cual podemos obtener del grid.
RasterFilterListManager filterManager = new RasterFilterListManager(grid.getFilterList());
- Se obtiene el gestor especifico que deberemos pedir al gestor general.
BrightnessContrastListManager bManager = (BrightnessContrastListManager)filterManager.getManagerByClass(BrightnessContrastListManager.class);
- Se añade el filtro.
bManager.addBrightnessFilter(80, RasterFilterList.ADD_END);
Para aplicar la lista de filtros sobre el grid deberemos decirlo explicitamente de la forma.
grid.applyFilters().