Ya creado el plug-in de operaciones, el último paso que se tiene que llevar a cabo es la creación del índice xml que indexará las operaciones en el menú de tratamiento de imágenes o en el menú de caracterización de imágenes, así como en la barra de menú.
Antes de comenzar con la implementación del índice en sí, vamos a comentar la estructura de menús que se utiliza en la aplicación, para pasar a explicar como se debe crear un índice.
Si accede a la carpeta index del directorio de la aplicación, podrá observar que dentro de ella existen tres carpetas: dtd, imageProcessing y imageCharacterizing.
La estructura de los ficheros de índices de los menús de caracterización y tratamiento de imágenes son similares, con
la diferencia que si se introduce alguna operación de caracterización en los índices de tratamiento, o alguna
operación de tratamiento en los índices de caracterización, las operaciones no se cargarán en la aplicación y se mostrará un
mensaje de error al arrancar la aplicación.
En caso que el usuario implemente un mismo
plug-in con operaciones de tratamiento y caracterización, éste deberá crear al menos dos ficheros de índices.
Tras esta pequeña introducción, nos encontramos en disposición de pasar a explicar la estructura interna de un índice.
Para facilitar su comprensión lo explicaremos a través de un posible índice que se deberá crear para el plug-in de operaciones de
color generado en el apartado Crear un plug-in.
com.coolimagingproject.colorOperations.xml
|
<?xml version="1.0" encoding="ISO-8859-1"?> |
La primera línea se refiere a la versión xml y el tipo de codificación utilizada. Esta línea dependerá de la versión y la codificación utilizada.
<?xml version="1.0" encoding="ISO-8859-1"?>
Así, como la segunda línea hace referencia al dtd que debe cumplir el archivo de índice para comprobar su validez antes de cargarse en la aplicación. Esta línea debe copiarse tal cuál en su fichero de índices.
<!DOCTYPE image_processing_index SYSTEM "index/dtd/definitionImageProcessing.dtd">
En caso de ser un índice de caracterización, la línea que deberá insertar será esta otra:
<!DOCTYPE image_characterizing_index SYSTEM "index/dtd/definitionImageCharacterizing.dtd">
La siguiente etiqueta que aparece es <image_processing_index>
. Esta etiqueta también depende del tipo de índice. Si el índice
que estamos creando es de caracterización, la etiqueta que debe aparecer es <image_characterizing_index>
en vez de
<image_processing_index>
. Es importante que solamente haya una etiqueta de este tipo dentro de cada fichero de índices, así como considerar
que la etiqueta de cierre se debe corresponder con ésta etiqueta (</image_processing_index>
o </image_characterizing_index>
).
Seguidamente, nos encontramos con la etiqueta <category>
, etiqueta que representa una categoría dentro del menú, pero ¿qué nombre
recibe ésta categoría? el nombre se expresa mediante la etiqueta <name>
, en este caso, recibe el nombre "Color".
Esta etiqueta debe de aparecer siempre a continuación de <category>
y al menos una vez. ¿Por qué debe aparecer al menos una vez?
Esto es debido a que la aplicación permite la internacionalización de los índices. Si se fija en las siguientes
etiquetas <name>
vienen acompañadas de un atributo lang
. Esto se debe a que dependiendo del idioma en el que se ejecute la aplicación
se utilizará la etiqueta <name>
más adecuada. Por ejemplo, en caso que la aplicación se ejecute
en español (es) se utilizará el nombre que contenga la etiqueta <name lang="es">
en vez de las otras que existan; en caso que la aplicación
se ejecutase en francés (fr), se utilizaría la etiqueta <name>
por ser la más genérica y no existir la etiqueta <name lang="fr">
.
No sólo se puede hacer uso del atributo lang, sino que también se pueden hacer uso de los atributos country y variant, pero estos deben aparecer siempre
junto con la etiqueta lang. Las siguientes combinaciones son las consideradas como válidas:
<name>
<name lang="es">
<name lang="es" country="ES">
<name lang="es" country="ES" variant="linux">
La etiqueta que se utilizará para el índice será que mejor se adapte a las utilizadas por la aplicación, es decir, fijándonos en la lista de arriba, se empezaría de abajo a arriba buscando la que mejor se adapte.
Después de leer los párrafos superiores, le puede haber surgido la siguiente pregunta: si lo quiero traducir a Holandés de Holanda, ¿qué codigo utilizo? Existen dos estándares que definen los códigos de idioma (ISO 639:1988) y país (ISO 3166)) utilizados por Java, estos se encuentran en la bibliografía->Internacionalización.
Otra posibilidad que ofrece la etiqueta <category>
es la de anidar tantas categorías como queramos. En el índice de ejemplo anidamos la
categoría "IHS-HSI" dentro de la categoría "Color". La única restricción que debemos considerar es que esta nueva etiqueta <category>
debe de
aparecer tras terminar de definir todas las etiquetas <name>
para una categoría.
Hasta el momento hemos hablado de las categorías, ahora vamos a hablar de las operaciones, ¿dónde las situamos en el índice? Estas pueden situarse en diferentes lugares dentro del índice:
<name>
que defina a una categoría.<image_processing_index>
o <image_characterizing_index>
, dependiendo del
índice.</category>
A diferencia de las categorías, las operaciones tienen una estructura rígida que siempre se debe cumplir, y es la siguiente:
<operation>
|
Falta por comentar de las operaciones la cadena de caracteres que aparece entre las etiquetas <class_location>
, quizás se haya fijado que
esta cadena coincide con la extensión de la clase OperadorRGB2IHSAplicacion
que se implementó y se encuentra definida en el archivo
"plugin.xml".
Deberemos tener en el índice tantas operaciones como extensiones hayamos definido en el plug-in
Con estas explicaciones debería poder generar sus propios índices personalizados, sin embargo debe tener en cuenta que las categorías no pueden ser vacías, es decir, estas deben contener alguna operación o el resultado puede ser inesperado; y los archivos de las categorías deben ser .xml. Aunque en caso que cometa algún error la aplicación le avisará con un mensaje de error.