Download Trabajo Fin de Carrera

Document related concepts
no text concepts found
Transcript
Generador
de Beans
para
Inventory
bulider
Documentación
Ángel Castellanos González
71450146-W
01/02/2010
PROYECTO HP
2
PROYECTO HP
3
Indice
1.
Resumen ..................................................................................................... 9
2.
Objetivos ................................................................................................... 10
3.
Introducción............................................................................................... 11
3.1. Lenguaje de Marcas .................................................................................. 11
3.1.1.
¿Qué es un lenguaje de marcas? .................................................... 11
3.1.2.
Clases de Lenguaje de Marcas ........................................................ 11
3.2. XML ........................................................................................................... 12
3.2.1.
¿Qué es XML? ................................................................................. 12
3.2.2.
Historia de XML ............................................................................... 12
3.2.3.
Estructura de un documento XML .................................................... 13
3.3. HP Service Activator ................................................................................. 18
3.4. Inventory Builder ....................................................................................... 19
3.4.1.
Beans ............................................................................................... 19
4.
Análisis y Planificación .............................................................................. 21
5.
Desarrollo de la Aplicación ........................................................................ 23
5.1. Tecnologías y Herramientas utilizadas...................................................... 24
5.1.1.
Java ................................................................................................. 24
5.1.2.
Eclipse ............................................................................................. 26
5.1.3.
PDE ................................................................................................. 27
5.1.4.
CASTOR .......................................................................................... 28
5.2. Implementación ......................................................................................... 29
5.2.1.
Preparación del entorno ................................................................... 29
5.2.2.
Desarrollo del Plug-in. ...................................................................... 36
5.2.3.
Desarrollo de la aplicación ............................................................... 41
5.3. Exportación de la aplicación...................................................................... 48
6.
Resultados ................................................................................................ 52
6.1. Creación de un nuevo bean o apertura de uno ya existente. .................... 52
6.2. Modificación de los bean ........................................................................... 55
Anexo A ............................................................................................................ 62
A.1: XML Schema ............................................................................................ 63
PROYECTO HP
4
A.2: Ejemplo de Bean ....................................................................................... 67
Anexo B: Instalación de Componentes ............................................................ 71
B.1: Eclipse y PDE ........................................................................................... 71
B.2: Castor ....................................................................................................... 74
Anexo C: Codigo Fuente ..................................................................................... 76
C.1: Bean ......................................................................................................... 77
C.2: Marshal ..................................................................................................... 85
C.3: Unmarshal ................................................................................................ 98
PROYECTO HP
5
PROYECTO HP
6
Índice de Ilustraciones
Ejemplo 1: Marcas.......................................................................................... 133
Ejemplo 2: Documento XML simple ............................................................... 144
Ejemplo 3: DTD para el Ejemplo 2 ................................................................. 155
Ejemplo 3.a: DTD para el Ejemplo 2 .............................................................. 155
Ejemplo 4: XML Schema para el Ejemplo 2 ................................................... 166
Ejemplo 4.a: XML Schema para el Ejemplo 2 ................................................ 177
Ejemplo 5: Hola Mundo en Java..................................................................... 255
Ilustración 1: Integración HPSA...................................................................... 188
Ilustración 2: Grafico Gantt del Proyecto ........................................................ 222
Ilustración 3: Entorno de desarrollo Eclipse. .................................................... 29
Ilustración 4.a: Creación de un nuevo proyecto PDE. .................................... 310
Ilustración 4.b: Creación de un nuevo proyecto PDE. .................................... 310
Ilustración 4.c: Creación de un nuevo proyecto PDE. .................................... 321
Ilustración 4.d: Creación de un nuevo proyecto PDE. .................................... 332
Ilustración 4.e: Creación de un nuevo proyecto PDE. .................................... 343
Ilustración 5: Vista principal del proyecto PDE ............................................... 354
Ilustración 6: Vista de la creación de un nuevo menú .................................... 365
Ilustración 7: Ejemplo de clase para la creación de un nuevo menú .............. 376
Ilustración 8: Ventana 0 para abrir o crear un nuevo bean ............................. 387
Ilustración 9: Ventana 1 para crear un nuevo bean ........................................ 387
Ilustración 10: Ventana 1 para abrir un nuevo bean ....................................... 398
Ilustración 11: HP IB Bean Editor (editor XML) ................................................ 39
Ilustración 12: HP IB Bean Editor (árbol) .......................................................... 39
Ilustración 13: HP IB Bean Editor (vistas) ...................................................... 421
Ilustración 14: Modelo de datos de XML Schema .......................................... 443
Ilustración 15: Funcionamiento de la vista Árbol ............................................ 454
Ilustración 16: Ejemplo de formulario asociado a un nodo ............................. 465
Ilustración 17: Ejemplo de funcionamiento del formulario .............................. 476
PROYECTO HP
7
Ilustración 18: Zona para la exportación del plug-in ....................................... 498
Ilustración 19: Asistente para la exportación. ................................................... 49
Ilustración 20: Carpeta para la instalación del plug-in. ................................... 510
Ilustración 21: Nuevo Bean ............................................................................ 531
Ilustración 22: Nuevo Bean (II) ....................................................................... 532
Ilustración 23: Nuevo Bean (III.a) ................................................................... 543
Ilustración 24: Nuevo Bean (III.b) ................................................................... 543
Ilustración 25: Crear nuevo nodo del árbol ..................................................... 554
Ilustración 26: Borrar un nodo del árbol ......................................................... 565
Ilustración 27: Modificar información de un nodo ............................................. 55
Ilustración 28: Vista del Codigo XML ................................................................ 56
Ilustración 29: Descarga de Eclipse ................................................................. 69
Ilustración 30: Descarga de Eclipse (II) .......................................................... 720
Ilustración 31: Ejecución de Eclipse ............................................................... 731
Ilustración 32: Descarga de Castor. ............................................................... 742
Ilustración 33: Instalación de Castor. ............................................................. 753
Ilustración 34: Instalación de Castor (II) ......................................................... 763
PROYECTO HP
8
PROYECTO HP
9
1. Resumen
Este proyecto se enmarca dentro del Observatorio Tecnológico en su
edición de 2008/2009 impulsado por HP y la Universidad de León.
El proyecto forma parte de la aplicación propietaria de HP Inventory
Builder, la cual a su vez es parte del software HP Service Activator (HPSA).
HPSA está dirigido a operadores de telecomunicaciones para la automatización
de los procesos de gestión y configuración de sus servicios.
El proyecto pretende desarrollar una aplicación para la creación o
modificación de archivos en lenguaje XML, a partir de su estructura definida en
un XML Schema. Para ello el proyecto utiliza las características ofrecidas por
los lenguajes de marcas y en concreto las de XML.
La aplicación se integrará en Eclipse, un entorno de desarrollo de
aplicaciones en lenguaje Java, mediante la creación de un plug-in. Gracias a su
implementación como plug-in se facilitara su distribución, implantación y uso.
PROYECTO HP
10
2. Objetivos
-
Desarrollar una aplicación para la creación de archivos en lenguaje XML
(Beans) de acuerdo a una definición, en un XML Schema. Esto archivos
estarán sujetos a su posterior uso por parte de HP Inventory Builder.
-
Facilitar su uso y distribución a través de la integración en el IDE Eclipse,
de código libre, mediante la realización de un Plug-in.
-
Facilitar la creación de Beans ofreciendo al desarrollador una nueva
interfaz basada en una vista de árbol que represente la estructura del
documento.
PROYECTO HP
11
3. Introducción
3.1.
3.1.1.
Lenguaje de Marcas
¿Qué es un lenguaje de marcas?
Es un lenguaje que combina junto con el texto base una serie de marcas
o etiquetas con información extra acerca de su contenido.
A diferencia de los lenguajes de programación los lenguajes de marcas
no contienen funciones o variables, simplemente información sobre la
estructura del texto o su presentación.
3.1.2.
Clases de Lenguaje de Marcas
Existen 3 clases de lenguajes de marcas:
-
Marcas de presentación:
Es el que indica el formato del texto. Es útil para estructurar el
documento para su presentación y lectura aunque resulta complejo de
mantener o modificar. Su uso es cada vez menos extendido ya que es
muy poco flexible, especialmente en grandes proyectos.
-
Marcas de procedimientos:
Está enfocado a la presentación, pero también es visible para quien
edita el texto. Se utilizan marcas que son evaluadas por orden de
aparición.
Por ejemplo, se agrega una marca antes de un texto para representar
que estará en negrita (debe tener otra marca también para indicar el fin
del texto en negrita).
Algunos ejemplos de esto son: trof, TeX, HTML
-
Marcas descriptivas:
Utiliza etiquetas para describir fragmentos de texto sin especificar cómo
debe ser representado o en qué orden. Simplifica la tarea de reformatear
un texto ya que la descripción del formato está separada del propio
texto.
Dentro de estos tipos de lenguaje de marcas se enmarca el lenguaje
XML.
PROYECTO HP
3.2.
12
XML
3.2.1.
¿Qué es XML?
XML (Extensible Markup Language) es un lenguaje extensible de
marcas desarrollado y supervisado por el World Wide Web Consortium (W3C).
Pretende ser una adaptación y simplificación de SGML que permite
definir la gramática de lenguajes. Por tanto no es un lenguaje en si mismo, si
no un metalenguaje para definir lenguajes asociados a determinadas
aplicaciones.
XML se ha convertido en un estándar ya que con él se pueden
intercambiar datos estructurados entre diferentes aplicaciones, aún cuando
estas aplicaciones no guarden relación alguna. Es la forma más fácil y segura
permitir la compatibilidad entre plataformas. Se pude usar en bases de datos,
hojas de cálculo, Internet y en general para cualquier aplicación.
3.2.2.
Historia de XML
El germen de XML y en general de todos los lenguajes de marcas es el
lenguaje GML (Generalized Markup Language) desarrollado en los años
sesenta por IBM, bajo el mando de Charles F. Goldfarb, Edward Mosher y
Raymond Lorie, ante la necesidad de almacenar grandes cantidades de
información de muy diversos temas.
En 1986 la ISO (Organización Internacional para la Estandarización)
normalizo el GML creando el SGML (Standard GML). SGML es un lenguaje
mucho más general que GML capaz de adaptarse a un gran abanico de
problemas.
El siguiente paso se dio en 1989. Tim Berners Lee creo, basándose en
SGML, el lenguaje HTML para el nuevo servicio de Internet, la Web. HTML fue
adaptado rápidamente por la comunidad; sin embargo, varias organizaciones
crearon sus propios navegadores HTML que competían entre ellos, para ser el
más avanzado, incluyendo sus propias etiquetas que extendían el lenguaje.
Aunque desde 1996 la W3C ha intentado normalizar HTML y hacer de él
un estándar, HTML creció de una manera descontrolada. Muchas páginas Web
son caóticas y no cumplen la sintaxis y son dependientes de la manera de
tratar los errores de cada navegador.
PROYECTO HP
13
Para solucionar las carencias de HTML se busco definir un nuevo
subconjunto de SGML que permita:
-
Mezclar elementos de diferentes lenguajes: lenguajes extensibles
Creación de analizadores simples sin lógica especial para cada lenguaje
(como la lógica ad hoc incrustada en el HTML)
Impedir que se acepte un documento con errores de sintaxis
En respuesta a esto desde 1998 la W3C desarrolla y supervisa el lenguaje
XML. XML es un lenguaje mucho menos general que SGML, renunciando a
muchas de sus características, a cambio de facilitar la interpretación
automática de documentos.
3.2.3.
Estructura de un documento XML
XML busca la mejor manera de expresar de una manera abstracta y
reutilizable información estructurada, entendiendo por estructurada que esté
compuesta de partes bien definidas que a su vez pueden estar compuestas por
otras partes. Estas partes son llamadas elementos, estando delimitados por
marcas.
Una marca es una señalización en el documento para indicar el
comienzo y el fin de un elemento. Dentro de las marcas irán incluidos los
atributos que afectaran a ese elemento. Las marcas son de la forma:
<nombre atributo1=“valor”, atributo2 =“valor”> : marca de inicio
Contenido del Elemento
</nombre> : marca de final
Ejemplo 1: Marcas
Donde nombre es el nombre del elemento y valor el valor que toma cada uno
de los atributos
Un documento XML estará formado por una cabecera, donde se podrá
establecer la versión, la codificación entre otros, y por un único elemento raíz
del cual cuelgan el resto de elementos que forman el documento anidados
jerárquicamente.
PROYECTO HP
14
Un ejemplo de documento XML sería:
<?xml version="1.0" encoding="ISO-8859-1"?>
<matricula>
<personal>
<dni>52945813C</dni>
<nombre>Ángel Castellanos</nombre>
<titulación>Ingeniería Informática (Pla 2001)</titulación>
<curso_academico>2002/2003</curso_academico>
<domicilios>
<domicilio tipo="familiar">
<nombre>C/ Principal nº1</nombre>
</domicilio>
<domicilio tipo="habitual">
<nombre>C/ Secundaria nº2</nombre>
</domicilio>
</domicilios>
</personal>
<pago>
<tipo_matricula>Matrícula ordinaria</tipo_matricula>
</pago>
</matricula>
Ejemplo 2: Documento XML simple
Documentos bien formados
Si los documentos cumplen todas las restricciones de estructura se dice
que el documento está “bien formado” y pueden, por tanto, ser analizados por
cualquier analizador sintáctico (parser). Las restricciones que debe cumplir son:
-
Elemento raíz único.
Organización jerárquica de elementos, deben estar correctamente
anidados.
Los valores de los atributos, correspondientes a cada elementos, deben
estar entre comillas simples o dobles
Es sensible a mayúsculas y minúsculas
Es necesario asignar nombres a las estructuras, tipos de elementos,
entidades, elementos particulares, etc.
PROYECTO HP
15
Validez
Que un documento este “bien formado” solo hace referencia a que su
estructura sintáctica esta conforme a como XML especifica; sin embargo, cada
documento XML tiene que indicar cuáles son las relaciones entre los distintos
elementos del documento.
Estas relaciones se establecen en archivos de definición externos, lo
cual equivale a crear un nuevo lenguaje de marcado, especifico para estos
archivos XML. Si un documento XML se ajusta a su archivo de definición
decimos que es un “documento válido”.
Los principales tipos de archivos de definición son:
-
DTD (Document Type Definition): Define los elementos, atributos y
entidades que se podrán utilizar, así como posibles restricciones entre
ellos.
Ejemplo:
<!ENTITY matricula (personal, pago)>
<!ENTITY personal (dni, nombre, titulación, curso_academico, domicilios)>
<!ENTITY dni (#PCDATA)>
<!ENTITY nombre (#PCDATA)>
<!ENTITY titulación (#PCDATA)>
<!ENTITY curso_academico (#PCDATA)>
<!ENTITY domicilios (domicilio+)>
<!ENTITY domicilio (nombre)>
<!ATTLIST domicilio
tipo (familiar|habitual) #REQUIRED>
<!ENTITY nombre (#PCDATA)>
<!ENTITY pago (tipo_matricula)>
<!ENTITY tipo_matricula (#PCDATA)>
Ejemplo 3: DTD para el Ejemplo 2
Para usar este DTD se añade a la cabecera del XML que lo emplee:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE nombre del DTD SYSTEM "ruta del DTD">
<matricula>
...
</matricula>
Ejemplo 3.a: DTD para el Ejemplo 2
PROYECTO HP
-
16
XML Schema: Similar al DTD. Define los elementos, con sus atributos y
tipos de estos, así como su organización. Tiene como ventajas frente al
DTD:
Al contrario que el DTD usa sintaxis XML
Son extensibles
Permite especificar tipos de datos
Ejemplo:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XML Schema" xml:lang="ES">
<xs:element name="matricula" type="tMatricula"/>
<xs:complexType name="tMatricula">
<xs:sequence>
<xs:element name="personal" type="tPersonal"/>
<xs:element name="pago" type="tPago"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="tPersonal">
<xs:all>
<xs:element name="dni" type="xs:string"/>
<xs:element name="nombre" type="xs:string"/>
<xs:element name="titulacion" type="xs:string"/>
<xs:element name="curso_academico" type="xs:string"/>
<xs:element name="domicilios" type="tDomicilio"/>
</xs:all>
</xs:complexType>
<xs:complexType name="tPago">
<xs:all>
<xs:element name="tipo_matricula" type="xs:string"/>
</xs:all>
</xs:complexType>
<xs:complexType name="tDomicilio">
<xs:sequence>
<xs:element name="domiclio" maxOccurs="unbounded">
<xs:complexType>
<xs:all>
<xs:element name="nombre" type="xs:string"/>
</xs:all>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:schema>
Ejemplo 4: XML Schema para el Ejemplo 2
PROYECTO HP
Para usar este XML Schema se añade a la cabecera del XML que lo emplee:
<?xml version="1.0" encoding="ISO-8859-1"?>
<matricula xmlns:xsi="http://www.w3.org/2001/XML Schema-instance"
xsi:schemaLocation="ruta del XML Schema">
...
</matricula>
Ejemplo 4.a: XML Schema para el Ejemplo 2
17
PROYECTO HP
18
3.3. HP Service Activator
El proyecto se va a desarrollar como una aplicación interna de HP dentro
del Software HP Service Activator (HPSA).
HP Service Activator se ha desarrollado como componente de la
solución HP Next Generation Operations Support Systems (NG OSS) para
ofrecer entornos de Sistemas de Soporte de las Operaciones (Operations
Support Systems, OSS) más avanzados.
Este Software está dirigido a las principales operadoras de
telecomunicaciones. Con él se automatizan, simplifican y aceleran las
principales tareas de provisión y configuración de servicios, buscando una
mayor rapidez y eficiencia cuando un cliente solicita un servicio (activación de
línea, solicitud de reparación, etc…). Con la automatización de todas estas
tareas las operadoras persiguen otorgar un mejor servicio a sus clientes para
lograr la fidelización de estos.
HPSA no está dirigido a una red o tipo de servicio especifico, se puede
aplicar a entornos de Internet, móviles…, lo que permite que se adapte al
funcionamiento requerido por cada operadora, ampliando su campo de
aplicación. Al ser una aplicación basada en estándares abiertos permite
también la posibilidad de ampliación de los servicios ya provistos o la inclusión
de nuevos servicios de una manera sencilla.
Ilustración 1: Integración HPSA
PROYECTO HP
3.4.
19
Inventory Builder
El Inventory Builder es una herramienta interna, propiedad de HP,
desarrollada dentro del Software HPSA.
Provee un entorno para el almacenamiento de la información de cada
uno de los elementos físicos y lógicos asociados al proceso de alta y
configuración de un nuevo servicio.
El código necesario para acceder, crear y modificar cada uno de los
elementos será generado automáticamente desde la definición XML de los
diferentes elementos.
A partir del documento XML se genera automáticamente:
-
Sentencias SQL necesarias para almacenar al información en una BBDD
como creación de tablas, índices, restricciones… de acuerdo al estándar
SQL92
-
Interfaces gráficas de usuario, de acuerdo al modelo vista-controlador
usando Struts, generando JSPs y los forms y actions de Struts
necesarios
-
Componentes de JavaBeans que permiten crear, borrar, actualizar y
buscar operaciones
3.4.1.
Beans
Inventory Builder utiliza unos archivos XML específicos llamados beans.
Estos archivos poseen una estructura determinada que se especifica en un
archivo XML Schema. Este archivo define los campos que el bean puede tener,
los valores que dichos campos pueden tomar, posibles restricciones, uniones
entre ellos, etc…
El archivo XML Schema completo de definición de los beans se puede
ver en el anexo A.1.
Un bean de ejemplo completo se puede ver en el anexo A.2.
El Inventory como se ha dicho automatiza todo el proceso de creación;
sin embargo, se ha crear los beans para cada uno de los elementos con la
definición detallada de cada uno de ellos. Esto no se puede realizar de manera
arbitraria, cada documento debe respetar la estructura que define su XML
Schema para que el bean sea válido.
PROYECTO HP
20
Estos beans se han de generar de manera manual, con la dificultad que
esto conlleva y los posibles errores en su creación. En este proyecto se
estudia y se implementa una solución para automatizar este paso y lograr que
todo el proceso de creación y configuración que provee el Inventory Builder sea
automático.
PROYECTO HP
21
4. Análisis y Planificación
La realización del proyecto ha entrañado la realización de varias fases:
-
Aprendizaje y Documentación:
Esta fase abarcó los dos primeros meses del proyecto. Fue la
primera fase en la creación del proyecto, correspondiente a la
adquisición de los conocimientos previos necesarios.
La primera parte se corresponde con el aprendizaje del
funcionamiento del Inventory, así como la estructura (definida en los
DTD) de los archivos XML usados por este.
La segunda parte se corresponde con el aprendizaje del
funcionamiento de la herramienta de creación de Plug-ins para Eclipse
(Plug-in Development Environment).
- Desarrollo de la Aplicación
Es la principal fase del proyecto que abarca los 4 siguientes
meses.
Esta fase corresponde con la creación del código Java de la
aplicación. Una parte genérica, para la creación del Plug-in (con el PDE
estudiado antes) y otra especifica con la generación del código propio de
la aplicación.
Durante la creación del código específico de la aplicación se han
empleado varias herramientas, las cuales han conllevado un proceso de
documentación previo a su uso:
 Librería XSOM (de libre distribución) para la representación del
XSD como un árbol
 Castor (SourceGenerator) para el modelado de la estructura del
XML Schema en clases de Java
 Castor (Marshal) para la creación de archivos XML desde la
información recogida
 Castor (Unmarshal) para la recogida de información de los
archivos XML
- Creación de la documentación
Se lleva a cabo durante el tiempo de desarrollo de la aplicación y
el mes siguiente a la finalización de este.
Durante esta fase se desarrolla la documentación correspondiente
a la aplicación, necesaria para el análisis y el uso de esta.
PROYECTO HP
22
Este proceso de documentación consta de varias partes:
 Introducción de los principales aspectos del proyecto.
 Estudio de sus objetivos.
 Estudio de posibles ampliaciones.
-
Desarrollo de posibles Ampliaciones
Esta hipotética fase incluiría el desarrollo de las posibles
ampliaciones estudiadas con anterioridad.
Conllevaría un proceso de actualización del código cerrado de la
aplicación conforme a las nuevas especificaciones, así como la
evaluación del uso de nuevas herramientas que fuesen necesarias para
esta actualización y el proceso de documentación de estas si fuese
necesario.
Ilustración 2: Grafico Gantt del Proyecto
PROYECTO HP
23
5. Desarrollo de la Aplicación
La principal característica de la aplicación es que está desarrollada como
un plug-in para el entorno de desarrollo Eclipse. Se eligió esta solución frente a
desarrollarlo como una aplicación independiente por las ventajas que aporta:
-
Al desarrollarlo como un plug-in su distribución es mucho más sencilla,
pudiendo incluirse con la distribución del propio Eclipse o a través de
una conexión a Internet. Se elimina la necesidad de instalar una
aplicación a mayores de Eclipse con la mayor complejidad que esto
requiere.
-
Al estar los proyectos de Inventory Builder desarrollados con Eclipse,
incluir la aplicación dentro del entorno facilita la creación de los beans
dentro del propio proyecto en el cual son necesarios. Se favorece así la
integración de los proyectos, con una sola herramienta, Eclipse, se
pueden desarrollar todos los elementos que sean necesarios.
-
La interfaz de desarrollo es la del propio Eclipse. De esta manera se
facilita la labor del desarrollador ya que no es necesario que se
familiarice con una nueva interfaz y con nuevos controles para el
desarrollo. El periodo de aprendizaje de uso de la herramienta es por
tanto mínimo y se realiza de manera muy intuitiva para alguien
familiarizado con el desarrollo de aplicaciones con Eclipse.
-
Gran parte de las librerías y archivos necesarios para el funcionamiento
de la aplicación esta incluidos ya en Eclipse. Con esto se consigue
reducir considerablemente el tamaño de la aplicación al no tener que
incluir archivos a mayores. El tener un tamaño más reducido facilita su
distribución, especialmente si esta se realiza a través de Internet.
PROYECTO HP
5.1.
24
Tecnologías y Herramientas utilizadas
5.1.1.
Java
Java es un lenguaje de programación orientado a objetos desarrollado
por Sun Microsystems a principios de los 90. En la actualidad es uno de los
lenguajes de programación de mayor difusión tanto en aplicaciones de
escritorio como en aplicaciones Web.
Tiene una sintaxis muy semejante a la de C pero presenta un modelo de
objetos más simple y elimina los aspectos de mayor complejidad de C como el
manejo directo de punteros o memoria. Se evitan también errores en la gestión
del ciclo de vida de los objetos. Java realiza esta tarea automáticamente
mediante el Recolector de Basura que determina cuando se crean y destruyen
los objetos. Debido a esta simplificación a menudo se emplea en lugar de C,
sobretodo en aplicaciones de gestión.
Otra de las razones de su gran difusión es que es independiente de
plataforma. Java sigue la filosofía “write once, run everywhere, una aplicación
desarrollada en Java pueden ejecutarse en cualquier tipo de Hardware (PC,
PowerPC, Dispositivos Moviles, Sistemas empotrados) y bajo cualquier sistema
operativo (Windows, Linux, MacOS, ...) así como en navegadores Web. Esto es
posible debido a que durante la compilación no se crea un código maquina al
uso si no un código conocido como Java bytecode (instrucciones simplificadas
especificas de Java), siendo este un paso intermedio entre el código Java y el
lenguaje maquina. El bytecode debe ser ejecutado entonces por la maquina
virtual de Java (JVM), un programa escrito específicamente para la plataforma
de destino que interpreta el bytecode al ejecutarse la aplicación (método Just in
Time o “compilación al vuelo)
A pesar de todas estas ventajas que ofrece Java, que han hecho que su
uso sea cada vez mayor, Java también tiene algunas desventajas. La principal
de ellas sería la merma que produce en el rendimiento el hecho de que el
bytecode tenga que ser convertido al ejecutar la aplicación. Esto hace que su
uso no sea recomendable en aplicaciones en tiempo real frente a otras
opciones como C que ofrecen un mayor rendimiento.
A continuación se presenta un ejemplo del típico programa de Hola
Mundo escrito en lenguaje Java que servirá para comprobar los principales
aspectos de la sintaxis en Java y como introducción al lenguaje:
PROYECTO HP
25
// Hola.java
public class Hola
{
public static void main(String[] args)throws IOException {
System.out.println("¡Hola, mundo!");
}
}
Ejemplo 5: Hola Mundo en Java
Basándose en el código se pueden destacar varios aspectos:
-
Todo en Java está dentro de una clase, incluyendo programas
autónomos.
-
El código fuente se guarda en archivos con el mismo nombre que la
clase que contienen y con extensión “.java”. Una clase (class) declarada
pública (public) debe seguir este convenio. En el ejemplo anterior, la
clase es Hola, por lo que el código fuente debe guardarse en el fichero
“Hola.java”.
-
El compilador genera un archivo de clase (con extensión “.class”) por
cada una de las clases definidas en el archivo fuente.
-
Los programas que se ejecutan de forma independiente y autónoma,
deben contener el método “main()”.
-
La palabra reservada “void” indica que el método main no devuelve
nada.
-
El método main debe aceptar un array de objetos tipo String. Por
acuerdo se referencia como “args”, aunque puede emplearse cualquier
otro identificador.
-
La palabra reservada “static” indica que el método es un método
estático
-
La palabra reservada public significa que un método puede ser
llamado desde otras clases, o que la clase puede ser usada por clases
fuera de la jerarquía de la propia clase. Otros tipos de acceso son
”private” o ”protected”.
-
La utilidad de impresión (en pantalla por ejemplo) forma parte de la
biblioteca estándar de Java: la clase ‘’’System’’’ define un campo público
estático llamado ‘’’out’’’. El objeto out es una instancia de ‘’’PrintStream’’’,
que ofrece el método ‘’’println (String)’’’ para volcar datos en la pantalla
(la salida estándar).
-
La función main arroja una excepción del tipo IOException, es decir,
una excepción de entrada/salida.
PROYECTO HP
26
En resumen se puede decir que Java posee una sintaxis similar a C, que
todo en Java es un objeto y que todo debe estar incluido dentro de una clase.
5.1.2.
Eclipse
Eclipse es un entorno de desarrollo integrado de código libre
multiplataforma para el desarrollo de aplicaciones, principalmente en lenguaje
JAVA. Inicialmente fue desarrollado por IBM, aunque en la actualidad es
desarrollado por la Fundación Eclipse (sin ánimo de lucro).
Eclipse proporciona un entorno que facilita el desarrollo bajo lenguaje
JAVA. Consta de un editor de textos con resaltado de sintaxis, opción de
autocompletado y detección de errores de compilación en tiempo real. Integra
pruebas unitarias con JUnit, control de versiones con CVS, refactorización y
proporciona integración con Ant. Posee una serie de asistentes para
automatizar la creación de proyectos, clases, test… . En resumen Eclipse
integra en una sola aplicación todas las funcionalidades necesarias para el
desarrollo de proyectos en lenguaje Java.
Eclipse emplea módulos para otorgar su funcionalidad, de esta forma
solo son instalados aquellos que el usuario considera oportunos para sus
necesidades consiguiendo así un entorno más liviano. Adicionalmente se
pueden agregar módulos (plug-ins) que añaden funcionalidades extras a las
originales proporcionadas por Eclipse. De esta manera se pueden usar otros
lenguajes de programación con C, Python o LaTex, soporte para gestión de
bases de datos, control de versiones con SubVersion o integración con
Hibernate. También se pueden desarrollar plug-ins propios para ofrecer
cualquier funcionalidad requerida como es el caso de este proyecto.
PROYECTO HP
5.1.3.
27
PDE
PDE (Plug-in Development Environment) es una herramienta para la
creación, desarrollo, testeo, construcción y distribución de plug-ins para
Eclipse. Eclipse ofrece la posibilidad de la instalación de módulos que amplían
su funcionalidad, de esta manera se puede añadir cualquier comportamiento
que pueda resultar de utilidad para el desarrollador. Mediante PDE se pueden
crear estos módulos desde el propio entorno, de esta manera se puede incluir
en este todas las funcionalidades que el propio Eclipse ofrece (asistentes de
creación de objetos, menús emergentes, editor de texto…).
PDE es un plug-in en sí mismo, por tanto la instalación de este en
Eclipse se realiza de manera sencilla y su integración en el entorno es total.
PROYECTO HP
5.1.4.
28
CASTOR
Castor es un framework de código abierto que ofrece la posibilidad de
serializar objetos de Java en un archivo XML y viceversa. Es básicamente el
camino más corto entre Java y XML.
Mediante Castor se puede capturar la información contenida en
cualquier objeto propio de Java y representarla en un archivo respetando el
formato de XML, de esta manera se consigue un puente de conexión entre el
código Java que realiza las operaciones sobre los datos y lo datos propiamente
dicho es formato XML.
Castor también crea una estructura de objetos Java basándose en un
archivo XML Schema que define el formato de los archivos XML que
contendrán los datos. De esta manera se tendrá una estructura de datos en
Java que se asemeje a la estructura del XML facilitando así la transformación.
Proporciona también la posibilidad de abstracción sobre los tipos básicos
de datos del formato XML utilizando los tipos básicos de Java (Integer, String,
Long, …) siendo el propio Castor el que realiza la transformación.
PROYECTO HP
29
5.2. Implementación
A continuación se describen detalladamente los pasos seguidos para el
desarrollo de la aplicación y su posterior compilación y distribución.
5.2.1.
Preparación del entorno
El primer paso es configurar el equipo en el que se va a realizar el
proyecto e instalar las herramientas básicas para poder comenzar con el
desarrollo (La instalación de nuevas herramientas necesarias como Castor se
tratará más adelante, cuando sean necesarias para el desarrollo).
Como se ha comentado anteriormente Eclipse es un entorno de
desarrollo para lenguaje Java. Ha sido elegido Eclipse por ser el entorno usado
para desarrollar los proyectos pertenecientes al Inventory Builder. Se busca así
una integración total con estos proyectos.
Eclipse es un software de código abierto y gratuito, por tanto se puede
descargar su versión completa o cualquiera de las otras versiones desde su
página web. Para este proyecto interesa la versión orientada a la creación de
plug-ins que ya incluye el PDE (Plug-in Development Environment). La
descarga, instalación y configuración de Eclipse se explica en el anexo B.
PROYECTO HP
30
Ilustración 3: Entorno de desarrollo Eclipse.
Con el entorno ya instalado el siguiente paso en el desarrollo es el de
crear un nuevo proyecto de plug-in. Para ello se va a emplear la herramienta
PDE que se encargará de crear y configurar automáticamente todos los
archivos que son necesarios para el desarrollo del plug-in. El proceso de
creación se puede ver a continuación:
PROYECTO HP
31
Ilustración 4.a: Creación de un nuevo proyecto PDE.
lustración 4.b: Creación de un nuevo proyecto PDE.
En la ventana que se muestra a continuación se pide al usuario que
introduzca el nombre del proyecto, su localización y la versión de Eclipse sobre
la que va a funcionar.
PROYECTO HP
32
Ilustración 4.c: Creación de un nuevo proyecto PDE.
En la siguiente ventana se establecen los datos requeridos para generar
el plug-in tales como el entorno de ejecución de java (para el proyecto se
PROYECTO HP
33
empleará la versión 1.4 por ser la empleada por Inventory Builder), su
identificador y si queremos generar un activador.
El activador es una clase java que se encarga de controlar el ciclo de
vida del plug-in, tanto de lanzarlo como detenerlo.
Ilustración 4.d: Creación de un nuevo proyecto PDE.
En la última ventana se muestran una serie de plantillas de proyectos.
Estas plantillas definen una serie de proyectos prediseñados que sirven de
PROYECTO HP
34
punto de partida para basar el desarrollo. Para el proyecto se empleará la
plantilla de Plug-in con un editor multipágina.
Esta plantilla creará un nuevo editor de texto que constará de varias
pestañas. Este editor será la base sobre la que se construya el editor que usará
el plug-in para crear los beans (HP IB Bean Editor). La plantilla también creará
un asistente para la creación y apertura de archivos que se ajusten al editor
creado.
Ilustración 4.e: Creación de un nuevo proyecto PDE.
Tras cumplir con todas las ventanas del asistente de creación PDE
habrá creado un nuevo proyecto con todas las clases necesarias para el
funcionamiento del plug-in con las dos aportaciones que hará a Eclipse: el
editor y el asistente.
PDE también ofrece una interfaz mediante la cual se pueden encarar
todos los aspectos básicos en el desarrollo del plug-in (resolver las
PROYECTO HP
35
dependencias, definir las nuevas funcionalidades que añadirá a Eclipse, editar
sus archivos de configuración…). Desde esta interfaz también se dispone de la
posibilidad de probar el plug-in. Para ello PDE lanza una nueva instancia de
Eclipse, independiente de la que se esté usando, con el plug-in ya añadido.
Este aspecto facilita la prueba de los proyectos PDE evitando que sea
necesario compilar exportar y añadir a Eclipse el proyecto cada vez que se
desee realizar una nueva prueba.
Ilustración 5: Vista principal del proyecto PDE
PROYECTO HP
5.2.2.
36
Desarrollo del Plug-in.
Una vez creado el nuevo proyecto plug-in, los archivos y la estructura
básica, se deben implementar todas sus funcionalidades así como los aportes
que este hará a Eclipse una vez incluido en el entorno.
El primero de estos aportes será la adicción de una nueva opción al
menú de creación de archivos de Eclipse. Gracias a este menú se podrán crear
los beans manejados por la aplicación o abrir los que ya existan.
Ilustración 6: Vista de la creación de un nuevo menú
PDE, mediante la plantilla seleccionada con anterioridad, generará
automáticamente las clases para el funcionamiento de los menús y de los
asistentes intermedios, los cuales guiarán al usuario final en la creación de los
beans que manejará la aplicación; así como los métodos de estas clases que
son necesarios. Será labor del desarrollador otorgar la funcionalidad que desee
a cada uno de estos métodos según sus preferencias.
PROYECTO HP
Ilustración 7: Ejemplo de clase para la creación de un nuevo menú
37
PROYECTO HP
38
A continuación se pueden ver los nuevos asistentes creados por el plugin
Ilustración 8: Ventana 0 para abrir o crear un nuevo bean
Ilustración 9: Ventana 1 para crear un nuevo bean
PROYECTO HP
Ilustración 10: Ventana 1 para abrir un nuevo bean
39
PROYECTO HP
40
El siguiente aporte del plug-in a Eclipse será la creación de un nuevo
tipo de editor (HP IB Bean Editor) que se asociará automáticamente con la
extensión de los bean. De esta forma cada vez que se cree un nuevo bean o se
abra uno ya existente, se hará automáticamente en el HP IB Bean Editor. Para
crear este editor se modificará el editor multipágina que anteriormente se ha
creado mediante las plantillas de PDE.
Este editor posee 2 partes. La primera de ellas es un editor XML básico
en el cual se puede consultar el código completo del bean. La otra parte es una
representación en forma de árbol de la estructura del bean, en ella se puede
editar cada uno de los nodos de este a través de un formulario adjunto.
Ilustración 11: HP IB Bean Editor (editor XML)
Ilustración 12: HP IB Bean Editor (árbol)
PROYECTO HP
5.2.3.
41
Desarrollo de la aplicación
Una vez desarrollado el plug-in propiamente dicho y las nuevas
funcionalidades que otorga al entorno (los nuevos asistentes de creación y el
HP IB Bean Editor) es necesario implementar la aplicación que hace uso de
este plug-in y que será la que justifique su creación.
La aplicación como se ha comentado anteriormente pretende, a grandes
rasgos, facilitar la creación y modificación de archivos XML. Concretamente
estará enfocada a beans que serán los que maneje para su funcionamiento el
Inventory Builder.
Se podrán tanto crear como editar beans usando el HP IB Bean Editor
creado por el plug-in. Aunque se podrán realizar modificaciones mediante el
editor de texto del HP IB Bean Editor, la aplicación está pensada para realizar
estas modificaciones mediante la interfaz de árbol, más sencilla e intuitiva,
dejando el editor de texto únicamente para comprobar el aspecto final y la
sintaxis del bean.
El editor de texto es un editor estándar proporcionado por el propio plugin similar al editor que por defecto que incluye Eclipse, por tanto no será
necesario ningún desarrollo a mayores sobre este editor. El esfuerzo principal
de implementación se centrará en la creación de la representación de árbol.
PROYECTO HP
42
Esta representación está dividida en 2 vistas: la del árbol propiamente
dicho y la del formulario. Cada una de ellas será desarrollada por separado
proporcionando diferentes funcionalidades.
Ilustración 13: HP IB Bean Editor (vistas)
PROYECTO HP
43
Vista de Árbol
Esta vista pretende representar la estructura del bean en forma de árbol
para así facilitar su visión general aprovechando que la estructura del
documento está definida en el archivo XML Schema.
Es necesario convertir esta estructura definida en el XML Schema en
una estructura de árbol que sea comprensible por Java. Para ello se empleará
la clase JTree, mediante ella se podrá manejar dicha estructura adaptándola a
las modificaciones que el usuario final desee.
A continuación se puede consultar la documentación sobre la clase
JTree desde la página web oficial de Java:
http://java.sun.com/j2se/1.4.2/docs/api/javax/swing/JTree.html
Para este proceso de convertir el documento XML Schema en un árbol
(“parsear” el documento) será necesaria una librería externa a Java que facilite
la tarea. En el caso del proyecto se utilizará la librería XSOM (XML Schema
Object Model), especialmente diseñada para el parseo de documentos XML
Schema.
XSOM tiene implementados métodos para el recorrido de los elementos
de un XML Schema y para su conversión a objetos de Java.
XSOM también tiene implementados tipos que se adaptan a los
definidos por el XML Schema, de tal forma que la correspondencia entre el
modelo de datos del XML Schema y el modelo de datos de Java sea total.
El modelo de datos del XML Schema se muestra en el siguiente
diagrama:
PROYECTO HP
44
Ilustración 14: Modelo de datos de XML Schema
A continuación se puede consultar la página web del proyecto XSOM
desde donde descargar la librería o consultar la documentación:
https://xsom.dev.java.net/
Tanto el “parseo” del documento mediante XSOM, la generación del
árbol, y sus posteriores modificaciones (tales como añadir nuevos nodos al
árbol, eliminar nodos ya existentes, cambiar el nombre de estos) serán
implementadas en la misma clase.
Para las modificaciones que el usuario quiera introducir en la estructura
se empleará un menú Popup que se desplegará al hacer click derecho
únicamente sobre la vista de árbol si se tiene seleccionado alguno de los
nodos.
El funcionamiento de este menú emergente estará sujeto a las
restricciones definidas en el XML Schema (por ejemplo ciertos nodos solo
pueden tener una aparición), estas restricciones serán recogidas en el proceso
de “parseo” del documento. Para implementar este menú se empleará la clase
JPopupMenu incluida en el API de Java.
PROYECTO HP
45
La documentación de la clase JPopupMenu se puede comprobar desde
la página web oficial de Java:
http://java.sun.com/j2se/1.4.2/docs/api/javax/swing/JPopupMenu.html
A continuación se muestra una captura de pantalla de la vista de árbol y
el menú emergente donde se puede ver la interfaz ofrecida por la aplicación:
Ilustración 15: Funcionamiento de la vista Árbol
Vista de Formulario
Esta vista pretende ofrecer una interfaz sencilla e intuitiva para la
introducción de los datos en cada uno de los nodos del bean. Mediante una
serie de sencillos formularios se podrá introducir la información de cada campo.
Esta vista está fuertemente ligada a la vista del árbol, cuando un nodo
del árbol es seleccionado automáticamente se carga el formulario
correspondiente a dicho nodo. Durante el proceso de “parseo” del XML
Schema, que como se vio antes servía para construir el árbol, se construye
también un formulario asociado a cada nodo que recoge los campos que
posee.
PROYECTO HP
46
Ilustración 16: Ejemplo de formulario asociado a un nodo
Como se puede ver el formulario consiste en un par de elementos
(nombre del campo – cajetín para introducción de la información).
El formulario pretende ir más allá que la simple introducción de los datos,
ofrece una lógica para ayudar en la creación de los bean. Cada campo posee
un indicador para comprobar si la información introducida en él es incorrecta
(nombres de campo inválidos, datos fuera de rango, el campo siendo
obligatorio está vacío, etc…). En determinados campos los valores introducidos
solo pueden tomar un conjunto determinado; en estos casos el cuadro de texto
original se sustituirá por una lista desplegable. Hay algunos campos que son
obligatorios, en este caso se indica con un asterisco junto al nombre del
campo y resaltando el cuadro de texto en color verde.Toda esta información es
recogida durante la creación del formulario al “parsear” el documento.
El formulario también ofrece un indicador de ayuda que ofrece
información del campo a rellenar en caso de que esta esté disponible. Este
indicador es especialmente significativo ya que la información se recoge desde
el propio XML Schema donde viene especificada. De esta manera se pueden
aprovechar las anotaciones, comunes en los XML Schema.
PROYECTO HP
47
Ilustración 17: Ejemplo de funcionamiento del formulario
El formulario se construirá mediante las clases JPanel (panel que
representa al formulario), JTextField (Campos para la introducción de datos),
JLabel (para los nombres y los indicadores de corrección y ayuda) y
JCheckBox (para las listas desplegables) todas ellas incluidas en el API de
Java.
Una vez completado el formulario con la información que se desea
introducir en cada campo es necesario guardarlo y transformarlo para que
pueda ser almacenado en el bean en formato XML. Para poder hacer esto es
necesario un nuevo proceso de “parseo” en esta ocasión para transformar el
modelo de datos de Java al modelo XML.
Para realizar este proceso de una manera sencilla se empleará Castor.
Como se ha comentado antes Castor es un framework especialmente diseñado
para esta tarea. Como Castor no está incluido como tal en Java antes de
poder usarlo es necesario incluir las librerías necesarias.
Una explicación detallada de la instalación de Castor se puede consultar
en el anexo B.2.
Una vez incluidas las librerías es necesario crear el modelo de datos
Java. Para ello Castor lee el XML Schema y basándose en él que define crea el
modelo de datos Java (para cada elemento del XML Schema crea una nueva
clase de Java con un parámetro para cada campo del elemento). Estas clases
siguen una estructura especial para que Castor pueda convertirlas facilmente al
formato XML.
PROYECTO HP
48
Para crear el modelo de datos se empleará la línea de comandos. Se
puede consultar la documentación de Castor para consultar un ejemplo de
creación de modelo de datos Java.
http://www.castor.org/srcgen-cline.html
Un ejemplo de clase generada por Castor que forman parte del modelo
de datos se puede ver en el anexo C.1
El modelo Java es usado para almacenar la información recogida en los
formularios, creando un objeto de la clase requerida. Castor convertirá la
información almacenada en el objeto en un archivo XML valido. De esta
manera la información recogida en los formularios se convertirá en un archivo
XML que sigue la estructura de los beans.
Todo este proceso se realiza automáticamente mediante la función
marshal de Castor, bastará con indicarle cual es el objeto raíz de la estructura
de datos.
Castor también se empleará para el proceso inverso; es decir, cuando se
abra un bean para su modificación tanto la información que este ya tiene como
su estructura debe leerse y representarse en los formularios correspondientes.
Para ello Castor realizará el proceso de unmarshal leyendo el bean y
almacenando su información en los objetos Java definidos por el modelo de
datos creado.
Las clases que realizan estas funciones son las clases Marshal y
Unmarshal que pueden ser consultadas en el anexo C.2 y el anexo C.3
respectivamente
5.3. Exportación de la aplicación.
Una vez finalizada la aplicación se debe exportar de manera que pueda
ser posteriormente añadida como plug-in a Eclipse. Para ello de nuevo se
emplearán las funcionalidades de PDE. PDE proporciona un sistema de
PROYECTO HP
49
exportación para hacer este proceso de manera automática en unos pocos
pasos a través de su interfaz.
Ilustración 18: Zona para la exportación del plug-in
Mediante la interfaz de PDE se completan de manera sencilla los 4
pasos necesarios para completar la exportación:
-
Se organizan los archivos del proyecto evitando que queden
dependencias sin resolver.
-
Se externalizan las cadenas de texto; es decir, se extrae a un archivo
de propiedades los Strings básicos del plug-in tales como nombres de
ventanas, id del plug-in, cuadros de texto. De esta forma si con
posterioridad se desea cambiar alguna de estas cadenas no será
necesario buscar en el código cada una de sus apariciones, bastará
con cambiarlas en el archivo de propiedades.
Se especifican los paquetes que se necesitan incluir para que el plugin funcione. Ciertos paquetes y librerías serán necesarias para el
funcionamiento del plug-in (Castor, XSOM, etc …). Para evitar que el
usuario final tenga que introducirlas, con los fallos que esto puede
acarrear, el propio plug-in ya las tendrá incluidas.
-
PROYECTO HP
-
50
El último paso será exportar el plug-in a un archivo .jar que pueda ser
añadido a Eclipse.
La exportación se realiza mediante un asistente en el que especificar
todas las opciones. Una vez completado el proceso se creara un archivo .jar
que contendrá el plug-in. Este archivo resultante es el que tendrá que ser
añadido a Eclipse
Ilustración 19: Asistente para la exportación.
Una vez generado el plug-in es necesario incluirlo en Eclipse. Para ello
bastará con incluir el archivo generado dentro de la carpeta plugins creada
durante la instalación de eclipse.
PROYECTO HP
51
Ilustración 20: Carpeta para la instalación del plug-in.
Esta carpeta es leída por Eclipse cada vez que se ejecuta, por tanto la
próxima vez que se ejecute inspeccionará la carpeta, reconocerá el nuevo plugin e incluirá todas las nuevas funcionalidades desarrolladas en el entorno.
PROYECTO HP
52
6. Resultados
Una vez concluida la fase de desarrollo se muestran las funcionalidades
de la aplicación ya terminada.
6.1. Creación de un nuevo bean o apertura
de uno ya existente.
La aplicación permite crear bean desde cero o abrir uno ya existente.
Los beans creados tendrán la estructura mínima necesaria, esto es, los
campos definidos como obligatorios en el XML Schema; a partir de esta
estructura básica se podrá ampliar la información guardada en el bean.
Para crear los beans la aplicación aprovechará los nuevos elementos
incluidos (asistentes, menús, editores, etc …) en Eclipse gracias al plug-in. Los
beans se crearán dentro del proyecto que este actualmente abierto y que será
el que haga uso de este.
Como se ha visto con anterioridad la creación del bean se automatiza
con el uso de asistentes. Para ello desde el menú Fichero>Nuevo>Otro…
accederemos a la sección con todos los asistentes de creación de ficheros que
oferta Eclipse entre ellos el del plug-in.
PROYECTO HP
53
Ilustración 21: Nuevo Bean
En la siguiente ventana se puede elegir entre abrir un bean ya existente
o crear uno nuevo desde cero.
Ilustración 22: Nuevo Bean (II)
Según la opción seleccionada se abrirá uno de los dos asistentes para
crear o abrir un bean ya comentados con anterioridad en la sección de
desarrollo. Su cometido será el de especificar el nombre del bean y en caso de
querer abrir uno ya existente la ruta en que este se encuentra (por defecto se
tomara la ruta del worspace de Eclipse)
PROYECTO HP
Ilustración 23: Nuevo Bean (III.a)
Ilustración 24: Nuevo Bean (III.b)
54
PROYECTO HP
55
6.2. Modificación de los bean
Una vez creado el bean, la aplicación empleará el editor (HP IB Bean
Editor) creado por el plug-in para la modificación del archivo.
Como se ha visto con anterioridad el editor está formado por dos vistas
(la de árbol y la de los formularios). La información se introducirá a través de
los campos de los distintos formularios (en algunos casos la información que
puede ser introducida está restringida o estará relacionada con la información
introducida en otros nodos del bean), estos campos dispondrán de un elemento
de ayuda para comprobar que la información introducida es correcta. Estos
formularios se activarán al seleccionar cualquiera de los nodos del árbol. Las
modificaciones introducidas en los formularios serán realizadas cuando se
cambie a otro formulario distinto. Cuando el campo sea el relativo al nombre
este modificará también el nombre del nodo mostrado en el árbol.
El árbol por su parte servirá para modificar la estructura del documento.
Al seleccionar con el botón derecho sobre un elemento del árbol se activará un
menú desplegable con los nuevos nodos que el nodo seleccionado puede
aceptar y con la posibilidad de borrar el nodo si no es un nodo obligatorio.
Ilustración 25: Crear nuevo nodo del árbol
PROYECTO HP
Ilustración 26: Borrar un nodo del árbol
Ilustración 27: Modificar información de un nodo
56
PROYECTO HP
57
Finalmente se podrán comprobar el resultado de las modificaciones
introducidas mediante la pestaña de editor de texto del HP IB Bean Editor
donde se mostrará el código XML del archivo.
Ilustración 28: Vista del Código XML
PROYECTO HP
58
7. Conclusiones
Se ha desarrollado con éxito una primera versión del proyecto. En ella se
han abordado los objetivos planteados al inicio del proyecto; esto es, otorgar al
desarrollador una herramienta integrada en el Entorno de Desarrollo Eclipse
que facilite la creación de Beans, en formato XML, para su uso por parte de
Inventory Builder.
La aplicación aprovecha la herramienta PDE (Plug-in Development
Environmet) para la creación de Plug-in para Eclipse. Mediante esta
herramienta se pueden agregar nuevas funcionalidades a Eclipse o modificar
las que este ya ofrece.
La inclusión de la aplicación en Eclipse es uno de los principales
aspectos del proyecto. De esta manera se favorece la integración con los
proyectos desarrollados para Inventory Builder con esta plataforma, así como
facilitar su uso al no ser necesaria la ejecución de otra aplicación. Se evita al
desarrollador tener que familiarizarse con el funcionamiento de una nueva
aplicación al tener la misma interfaz que cualquier otra funcionalidad de
Eclipse.
El proyecto queda abierto a futuras ampliaciones de la aplicación ya
existente.
El proyecto ha servido como introducción al lenguaje XML,
especialmente a su uso para el almacenamiento y procesado de información
estructurada. También se han adquirido los conocimientos necesarios para el
desarrollo de aplicaciones empresariales al más alto nivel bajo lenguaje Java. A
mayores ha servido como introducción al desarrollo de plug-ins para Eclipse
mediante la herramienta PDE.
PROYECTO HP
59
8. Trabajos futuros
Desde su creación, la importancia de XML se ha incrementado, siendo
este incremento especialmente acusado en la actualidad. Esto es debido a
todas las facilidades que XML otorga, especialmente en el manejo de datos
estructurados y el intercambio de estos a través de Internet. Por tanto el
número de las aplicaciones que en el futuro utilizarán XML para almacenar sus
datos será mucho mayor.
En este contexto futuro, aplicaciones como las tratadas en este proyecto
serán cada vez más demandadas, ya que será necesario manejar gran
cantidad de datos en formato XML pudiendo realizar operaciones sobre ellos
para extraer información válida para tareas de gestión o administración. Estas
aplicaciones se aprovecharán también de las nuevas tecnologías de gestión y
distribución de la información para incrementar su funcionalidad.
Tratando ya sobre la aplicación desarrollada en este proyecto son
posibles varias mejoras a corto plazo.
La primera de ellas trata sobre la distribución del proyecto, actualmente
la aplicación se distribuye mediante un archivo .jar que ha de ser incluido en
Eclipse. Este archivo debe distribuirse ya sea vía Web o físicamente a cada
equipo donde vaya a ser ejecutado, con el consecuente coste de esto. Eclipse
sin embargo ofrece una herramienta de actualización de Software que da la
posibilidad de descargar y actualizar plug-ins de manera automática vía
Internet a través de sus propios servidores. Incluyendo la aplicación en este
sistema proporcionado por el propio Eclipse se facilitaría la distribución y se
automatizarían las futuras actualizaciones haciéndolas transparentes para el
usuario.
Otro punto en el que continuar el desarrollo sería el de la compatibilidad
con las distintas versiones de Inventory Builder. La aplicación está desarrollada
para funcionar con la versión de Inventory que se emplea en la actualidad; sin
embargo, en el futuro es posible que se usen distintas versiones, incluso de
manera simultánea. Para ello se emplearía Spring, un framework de desarrollo
bajo lenguaje Java para el manejo de versiones. De esta forma la aplicación
configuraría automáticamente su funcionamiento según la versión utilizada.
PROYECTO HP
60
Otro aspecto de mejora de la aplicación sería incluir en ella un
“parseador” para convertir archivos DTD a archivos de tipo XML Schema. En la
actualidad Inventory Builder utiliza archivos DTD para la definición de los
beans. La aplicación por el contrario utiliza archivos XML Schema por las
mayores funcionalidades que este ofrece. La conversión entre ambos se realiza
de forma manual y sería interesante que la transformación fuese realizada por
la propia aplicación de forma automática, abstrayendo de este proceso al
desarrollador.
La última mejor que se podría incluir, ya más a largo plazo, seria la
generalización de la aplicación para su uso con cualquier archivo en formato
XML que este definido por un XML Schema y no solo con beans.
PROYECTO HP
9. Bibliografía
61
PROYECTO HP
Anexo A: Ejemplos
62
PROYECTO HP
A.1: XML Schema
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XML Schema">
<xsd:element name="Bean">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Name" type="xsd:string"/>
<xsd:element maxOccurs="1" minOccurs="0" name="Description" type="xsd:string"/>
<xsd:element maxOccurs="1" minOccurs="0" name="Alias" type="xsd:string"/>
<xsd:element maxOccurs="1" minOccurs="0" name="Constraint-Name" type="xsd:string"/>
<xsd:element name="Package" type="xsd:string"/>
<xsd:element maxOccurs="1" minOccurs="0" name="Application" type="xsd:string"/>
<xsd:element maxOccurs="1" minOccurs="0" name="DBTable" type="xsd:string"/>
<xsd:element maxOccurs="1" minOccurs="0" name="Hist-DBTable" type="xsd:string"/>
<xsd:element name="Fields">
<xsd:complexType>
<xsd:sequence>
<xsd:element maxOccurs="unbounded" minOccurs="0" name="Field">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Name" type="xsd:string"/>
<xsd:element maxOccurs="1" minOccurs="0" name="Column" type="xsd:string"/>
<xsd:element maxOccurs="1" minOccurs="0" name="Alias" type="xsd:string"/>
<xsd:element name="Type" type="xsd:string"/>
<xsd:element maxOccurs="1" minOccurs="0" name="Default" type="xsd:string"/>
<xsd:element maxOccurs="1" minOccurs="0" name="Description" type="xsd:string"/>
<xsd:element maxOccurs="1" minOccurs="0" name="ListOfValues">
<xsd:complexType>
<xsd:choice>
<xsd:element maxOccurs="unbounded" name="Value" type="xsd:string"/>
<xsd:sequence>
<xsd:element name="BeanName" type="xsd:string"/>
<xsd:element maxOccurs="1" minOccurs="0" name="BeanClass" type="xsd:string"/>
<xsd:element maxOccurs="1" minOccurs="0" name="Label" type="xsd:string"/>
<xsd:element maxOccurs="1" minOccurs="0" name="Method" type="xsd:string"/>
<xsd:element maxOccurs="unbounded" minOccurs="0" name="Param">
<xsd:complexType>
<xsd:simpleContent>
<xsd:extension base="xsd:string">
<xsd:attribute name="type" type="xsd:string" use="optional"/>
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:choice>
<xsd:attribute name="without-fk" use="optional">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="true"/>
<xsd:enumeration value="false"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
</xsd:complexType>
</xsd:element>
<xsd:element maxOccurs="1" minOccurs="0" name="Loader" type="xsd:string"/>
</xsd:sequence>
<xsd:attribute name="mandatory" type="xsd:string" use="optional"/>
<xsd:attribute name="advancedAudit" type="xsd:string" use="optional"/>
<xsd:attribute name="HiddenUpdate" type="xsd:string" use="optional"/>
<xsd:attribute name="HiddenView" type="xsd:string" use="optional"/>
<xsd:attribute name="searchable" type="xsd:string" use="optional"/>
<xsd:attribute name="dateFormat" type="xsd:string" use="optional"/>
<xsd:attribute name="store" type="xsd:string" use="optional"/>
<xsd:attribute name="readOnly" type="xsd:string" use="optional"/>
<xsd:attribute name="hidden" type="xsd:string" use="optional"/>
<xsd:attribute name="sequence" type="xsd:string" use="optional"/>
<xsd:attribute name="maxCount" type="xsd:string" use="optional"/>
<xsd:attribute name="password" type="xsd:string" use="optional"/>
63
PROYECTO HP
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="Keys">
<xsd:complexType>
<xsd:sequence>
<xsd:element maxOccurs="unbounded" minOccurs="0" name="Key">
<xsd:complexType>
<xsd:sequence>
<xsd:element maxOccurs="1" minOccurs="0" name="Name" type="xsd:string"/>
<xsd:element maxOccurs="unbounded" minOccurs="0" name="KeyField">
<xsd:complexType>
<xsd:simpleContent>
<xsd:extension base="xsd:string">
<xsd:attribute name="foreignField" type="xsd:string" use="optional"/>
<xsd:attribute name="external-bean" type="xsd:string" use="optional"/>
<xsd:attribute name="alias" type="xsd:string" use="optional"/>
<xsd:attribute name="join-field" type="xsd:string" use="optional"/>
<xsd:attribute name="external-join-field" type="xsd:string" use="optional"/>
<xsd:attribute name="ignore-case" type="xsd:string" use="optional"/>
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
</xsd:element>
<xsd:element maxOccurs="unbounded" minOccurs="0" name="JoinBridge">
<xsd:complexType>
<xsd:sequence>
<xsd:element maxOccurs="unbounded" minOccurs="0" name="Jump">
<xsd:complexType>
<xsd:simpleContent>
<xsd:extension base="xsd:string">
<xsd:attribute name="jump-field" type="xsd:string" use="optional"/>
<xsd:attribute name="inverse-jump-field" type="xsd:string" use="optional"/>
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="origin" type="xsd:string" use="optional"/>
<xsd:attribute name="destination" type="xsd:string" use="optional"/>
<xsd:attribute name="jump-field" type="xsd:string" use="optional"/>
<xsd:attribute name="inverse-jump-field" type="xsd:string" use="optional"/>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="foreignBean" type="xsd:string" use="optional"/>
<xsd:attribute name="pk" type="xsd:string" use="optional"/>
<xsd:attribute name="unique" type="xsd:string" use="optional"/>
<xsd:attribute name="makeIndex" type="xsd:string" use="optional"/>
<xsd:attribute name="restrict" type="xsd:string" use="optional"/>
<xsd:attribute name="include-bean" type="xsd:string" use="optional"/>
<xsd:attribute name="findByArray" type="xsd:string" use="optional"/>
<xsd:attribute name="sqlConstraint" type="xsd:string" use="optional"/>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element maxOccurs="1" minOccurs="0" name="Operations">
<xsd:complexType>
<xsd:sequence>
<xsd:element maxOccurs="1" minOccurs="0" name="Store" type="xsd:string"/>
<xsd:element maxOccurs="1" minOccurs="0" name="Update" type="xsd:string"/>
<xsd:element maxOccurs="1" minOccurs="0" name="Remove" type="xsd:string"/>
<xsd:element maxOccurs="1" minOccurs="0" name="QueryForm">
<xsd:complexType>
<xsd:sequence>
<xsd:element maxOccurs="unbounded" minOccurs="0" name="Column" type="xsd:string"/>
</xsd:sequence>
64
PROYECTO HP
</xsd:complexType>
</xsd:element>
<xsd:element maxOccurs="unbounded" minOccurs="0" name="FindBy">
<xsd:complexType>
<xsd:sequence>
<xsd:element maxOccurs="unbounded" minOccurs="0" name="OrderField">
<xsd:complexType>
<xsd:simpleContent>
<xsd:extension base="xsd:string">
<xsd:attribute name="desc" use="optional">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="true"/>
<xsd:enumeration value="false"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
<xsd:attribute name="convert-to" use="optional">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="number"/>
<xsd:enumeration value="string"/>
<xsd:enumeration value="date"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
<xsd:attribute name="format" type="xsd:string" use="optional"/>
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="doReservation" type="xsd:string" use="optional"/>
<xsd:attribute name="key" type="xsd:string" use="optional"/>
</xsd:complexType>
</xsd:element>
<xsd:element maxOccurs="1" minOccurs="0" name="OnCreationJSPInitWF" type="xsd:string"/>
<xsd:element maxOccurs="1" minOccurs="0" name="OnUpdateJSPInitWF" type="xsd:string"/>
<xsd:element maxOccurs="1" minOccurs="0" name="OnDeleteJSPInitWF" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element maxOccurs="1" minOccurs="0" name="Roles">
<xsd:complexType>
<xsd:sequence>
<xsd:element maxOccurs="1" minOccurs="0" name="Store" type="xsd:string"/>
<xsd:element maxOccurs="1" minOccurs="0" name="Update" type="xsd:string"/>
<xsd:element maxOccurs="1" minOccurs="0" name="Remove" type="xsd:string"/>
<xsd:element maxOccurs="1" minOccurs="0" name="Query" type="xsd:string"/>
<xsd:element maxOccurs="unbounded" minOccurs="0" name="Ext-Attributes">
<xsd:complexType>
<xsd:simpleContent>
<xsd:extension base="xsd:string">
<xsd:attribute name="type" use="required">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="class"/>
<xsd:enumeration value="instance"/>
<xsd:enumeration value="both"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element maxOccurs="1" minOccurs="0" name="Construction" type="xsd:string"/>
<xsd:element maxOccurs="1" minOccurs="0" name="Validation" type="xsd:string"/>
<xsd:element maxOccurs="1" minOccurs="0" name="Validations-form">
<xsd:complexType>
<xsd:sequence>
<xsd:element maxOccurs="unbounded" minOccurs="0" name="Validation-form">
65
PROYECTO HP
<xsd:complexType>
<xsd:simpleContent>
<xsd:extension base="xsd:string">
<xsd:attribute name="entry" type="xsd:string" use="optional"/>
<xsd:attribute name="message" type="xsd:string" use="optional"/>
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="inheritsFrom" type="xsd:string" use="optional"/>
<xsd:attribute name="snmp-manage" type="xsd:string" use="optional"/>
<xsd:attribute name="audit" type="xsd:string" use="optional"/>
<xsd:attribute name="maxCount" type="xsd:string" use="optional"/>
<xsd:attribute name="ext-attributes" use="optional">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="class"/>
<xsd:enumeration value="instance"/>
<xsd:enumeration value="both"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
<xsd:attribute name="history" use="optional">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="true"/>
<xsd:enumeration value="false"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
</xsd:complexType>
</xsd:element>
</xsd:schema>
66
PROYECTO HP
A.2: Ejemplo de Bean
<?xml version="1.0" encoding="UTF-8"?>
<Bean xmlns:xsi='http://www.w3.org/2001/XML Schema-instance'
xsi:schemaLocation= "C:\Users\Gelou\workspace\Plugin2\resources\Esquema Antiguo.xsd">
<Name>Pedido</Name>
<Package>com.hp.spain.jazztel.sga.inventory</Package>
<DBTable>SGA_Pedidos</DBTable>
<Fields>
<Field sequence="true" hidden="true">
<Name>IdPedido</Name>
<Type>String</Type>
<Description>Id del Pedido</Description>
</Field>
<Field mandatory="false">
<Name>Albaran</Name>
<Alias>Albarán</Alias>
<Type>String</Type>
<Description>Albarán del pedido</Description>
</Field>
<Field mandatory="false">
<Name>IdPedidoMayorista</Name>
<Alias>Identificador del pedido del mayorista</Alias>
<Type>String</Type>
<Description>Identificador del pedido del mayorista</Description>
</Field>
<Field>
<Name>IdPedidoCrm</Name>
<Alias>Identificador del pedido del CRM</Alias>
<Type>String</Type>
<Description>Identificador del pedido del CRM</Description>
</Field>
<Field mandatory="false" readOnly="true">
<Name>IdSIM</Name>
<Alias>SIM</Alias>
<Type>String</Type>
<Description>ICCID de la SIM</Description>
<ListOfValues>
<BeanName>com.hp.spain.jazztel.sga.inventory.SIM</BeanName>
<Label>$ICCID$</Label>
</ListOfValues>
</Field>
<Field mandatory="false" readOnly="true">
<Name>IdTerminal</Name>
<Alias>Terminal</Alias>
<Type>String</Type>
<Description>IMEI del terminal</Description>
<ListOfValues>
<BeanName>com.hp.spain.jazztel.sga.inventory.Terminal</BeanName>
<Label>$IMEI$</Label>
</ListOfValues>
</Field>
<Field mandatory="false" readOnly="true">
<Name>IdModemUsb</Name>
<Alias>Modem USB</Alias>
<Type>String</Type>
<Description>IMEI del modem USB</Description>
<ListOfValues>
<BeanName>com.hp.spain.jazztel.sga.inventory.Terminal</BeanName>
<Label>$IMEI$</Label>
</ListOfValues>
</Field>
67
PROYECTO HP
<Field mandatory="false" readOnly="true">
<Name>IdNumero</Name>
<Alias>Número de teléfono</Alias>
<Type>String</Type>
<Description>Número de teléfono</Description>
<ListOfValues>
<BeanName>com.hp.spain.jazztel.sga.inventory.Numero</BeanName>
<Label>$Numero$</Label>
</ListOfValues>
</Field>
<Field>
<Name>IdOperadorLogistico</Name>
<Alias>Operador logÃstico</Alias>
<Type>String</Type>
<Description>Nombre del operador logÃstico</Description>
<ListOfValues>
<BeanName>com.hp.spain.jazztel.sga.inventory.OperadorLogistico</BeanName>
<Label>$Nombre$</Label>
</ListOfValues>
</Field>
<Field>
<Name>IdEstado</Name>
<Alias>Estado del pedido</Alias>
<Type>String</Type>
<Description>Estado del pedido</Description>
<ListOfValues>
<BeanName>com.hp.spain.jazztel.sga.inventory.Estado</BeanName>
<Label>$Nombre$</Label>
<Method>findByGrupo</Method>
<Param>constant:PEDIDO</Param>
</ListOfValues>
</Field>
<Field mandatory="false">
<Name>IdPedidoPrecedente</Name>
<Alias>Identificador del pedido relanzado</Alias>
<Type>String</Type>
<Description>Identificador del pedido relanzado</Description>
</Field>
<Field mandatory="false">
<Name>Portabilidad</Name>
<Alias>Portabilidad</Alias>
<Type>boolean</Type>
<Description>Pedido portado o no portado</Description>
</Field>
<Field dateFormat="dd/MM/yyyy hh:mm:ss" mandatory="false">
<Name>VentanaCambio</Name>
<Alias>Fecha</Alias>
<Type>Date</Type>
<Description>Fecha de realizacion real de la portabilidad</Description>
</Field>
<Field mandatory="false">
<Name>Nombre</Name>
<Alias>Nombre</Alias>
<Type>String</Type>
<Description>Nombre del contacto autorizado</Description>
</Field>
<Field mandatory="false">
<Name>Direccion</Name>
<Alias>Direccion</Alias>
<Type>String</Type>
<Description>Direccion del contacto autorizado</Description>
</Field>
<Field mandatory="false">
<Name>Localidad</Name>
<Alias>Localidad</Alias>
<Type>String</Type>
68
PROYECTO HP
<Description>Localidad del contacto autorizado</Description>
</Field>
<Field mandatory="false">
<Name>Provincia</Name>
<Alias>Provincia</Alias>
<Type>String</Type>
<Description>Provincia del contacto autorizado</Description>
</Field>
<Field mandatory="false">
<Name>Complemento</Name>
<Alias>Complemento</Alias>
<Type>String</Type>
<Description>Datos suplementarios a la direccion</Description>
</Field>
<Field mandatory="false">
<Name>FijoPrincipal</Name>
<Alias>Telefono fijo</Alias>
<Type>String</Type>
<Description>Telefono fijo del contacto principal</Description>
</Field>
<Field mandatory="false">
<Name>MovilPrincipal</Name>
<Alias>Telefono movil</Alias>
<Type>String</Type>
<Description>Telefono movil del contacto principal</Description>
</Field>
<Field mandatory="false">
<Name>FijoAutorizado</Name>
<Alias>Telefono fijo</Alias>
<Type>String</Type>
<Description>Telefono fijo del contacto autorizado</Description>
</Field>
<Field mandatory="false">
<Name>MovilAutorizado</Name>
<Alias>Telefono movil</Alias>
<Type>String</Type>
<Description>Telefono movil del contacto autorizado</Description>
</Field>
</Fields>
<Keys>
<Key pk="true">
<KeyField>IdPedido</KeyField>
</Key>
<Key unique="true">
<KeyField>Albaran</KeyField>
</Key>
<Key foreignBean="SIM" restrict="true">
<KeyField foreignField="IdSIM">IdSIM</KeyField>
</Key>
<Key foreignBean="Terminal" restrict="true">
<KeyField foreignField="IdTerminal">IdTerminal</KeyField>
</Key>
<Key foreignBean="Terminal" restrict="true">
<KeyField foreignField="IdTerminal">IdModemUsb</KeyField>
</Key>
<Key foreignBean="Numero" restrict="true">
<KeyField foreignField="IdNumero">IdNumero</KeyField>
</Key>
<Key foreignBean="OperadorLogistico" restrict="true">
69
PROYECTO HP
<KeyField foreignField="IdOperadorLogistico">IdOperadorLogistico</KeyField>
</Key>
<Key foreignBean="Estado" restrict="true">
<KeyField foreignField="IdEstado">IdEstado</KeyField>
</Key>
<Key foreignBean="Pedido" restrict="true">
<KeyField foreignField="IdPedido">IdPedidoPrecedente</KeyField>
</Key>
</Keys>
<Operations>
<Store/>
<Update/>
<Remove/>
<QueryForm/>
<FindBy/>
</Operations>
</Bean>
70
PROYECTO HP
71
Anexo B: Instalación de Componentes
En este anexo se explica con detalle, capturas de pantalla y ejemplos la
instalación y configuración de cada una de las herramientas necesarias para
este proyecto.
B.1: Eclipse y PDE
Como se ha visto con anterioridad Eclipse es un proyecto de software de
código abierto y gratuito. Se puede por tanto descargar la versión completa de
manera gratuita desde la página web del proyecto.
En la sección de descargas se pueden ver todas las diferentes versiones
de Eclipse que se pueden descargar, cada una de ellas orientada a un tipo de
desarrollo software (empresarial, C++, PHP, etc…).
La dirección de la página es: http://www.eclipse.org/downloads/ para
acceder directamente a la sección de descargas. Una vez abierta la página
para el caso del proyecto se debe elegir la versión de Eclipse especialmente
configurada para el desarrollo de plug-ins, que ya incluye PDE, y la versión del
sistema operativo deseada (Windows, Mac, Linux)
Ilustración 29: Descarga de Eclipse
PROYECTO HP
72
Una vez seleccionada la versión deseada se pasará a la ventana de
opciones de la descarga. Bastara con hacer click en el enlace de descarga
desde el servidor ofrecido por la página.
Ilustración 30: Descarga de Eclipse (II)
Una vez finalizada la descarga se deberá únicamente descomprimir el
archivo descargado, no siendo necesaria ninguna instalación, en la ubicación
que se desee para Eclipse. No será necesario crear ninguna carpeta ya que el
propio archivo al descomprimirse creará la suya propia.
Como PDE ya viene incluido en esta versión del entorno no será
necesaria ninguna instalación a mayores.
PROYECTO HP
73
Tras finalizar la descompresión el entorno ya estará listo para usarse,
ejecutando su lanzador
Ilustración 31: Ejecución de Eclipse
PROYECTO HP
74
B.2: Castor
Para descargar Castor bastará con acceder a la sección de descargas
en la página web del proyecto Castor donde se puede obtener la versión
completa de forma gratuita.
La dirección es: http://www.castor.org/download.html. Una vez allí se
elegirá la versión completa en el formato deseado (.zip o .tgz)
Ilustración 32: Descarga de Castor.
PROYECTO HP
75
El archivo descargado contiene tanto lo JAR necesarios como la
documentación. Una vez descargado Castor será necesario incluirlo en Eclipse;
desde el propio Eclipse se añadirán los .jar de Castor necesarios al proyecto.
Para ello se accede a las propiedades del proyecto haciendo click derecho
sobre el proyecto.
Ilustración 33: Instalación de Castor.
Una vez en la ventana de propiedades, en la sección de Java Build Path
se selecciona la pestaña de Libraries y se añadirá un .jar externo (Add External
JARs). Se añadirán las librerías que se pueden ver en a siguiente ilustración.
Una vez añadidas se podrán emplear todas las clases de Castor que serán
necesarias para el proyecto.
PROYECTO HP
76
Ilustración 34: Instalación de Castor (II)
Anexo C: Codigo Fuente
A continuación se presenta el código fuente de las principales clases que
forman parte de la aplicación.
PROYECTO HP
77
C.1: Bean
Esta clase es una de las generadas por Castor en la creación del modelo
de datos. Representa al nodo Bean que será la raíz de los archivos XML
(beans) que manejará la aplicación.
package com.hp.spain.observatorio.Plugin.castor.classes;
/**
* Class Bean.
*
* @version $Revision$ $Date$
*/
public class Bean implements java.io.Serializable {
//--------------------------/
//- Class/Member Variables -/
//--------------------------/
/**
*
*/
private static final long serialVersionUID = 1L;
/**
* Field _inheritsFrom.
*/
private java.lang.String _inheritsFrom;
/**
* Field _snmpManage.
*/
private java.lang.String _snmpManage;
/**
* Field _audit.
*/
private java.lang.String _audit;
/**
* Field _maxCount.
*/
private java.lang.String _maxCount;
/**
* Field _extAttributes.
*/
private com.hp.spain.observatorio.Plugin.castor.classes.types.BeanExtAttributesType _extAttributes;
/**
* Field _history.
*/
private com.hp.spain.observatorio.Plugin.castor.classes.types.BeanHistoryType _history;
/**
* Field _name.
*/
private java.lang.String _name;
/**
* Field _description.
*/
private java.lang.String _description;
/**
* Field _alias.
*/
private java.lang.String _alias;
PROYECTO HP
/**
* Field _constraintName.
*/
private java.lang.String _constraintName;
/**
* Field _package.
*/
private java.lang.String _package;
/**
* Field _application.
*/
private java.lang.String _application;
/**
* Field _DBTable.
*/
private java.lang.String _DBTable;
/**
* Field _histDBTable.
*/
private java.lang.String _histDBTable;
/**
* Field _fields.
*/
private com.hp.spain.observatorio.Plugin.castor.classes.Fields _fields;
/**
* Field _keys.
*/
private com.hp.spain.observatorio.Plugin.castor.classes.Keys _keys;
/**
* Field _operations.
*/
private com.hp.spain.observatorio.Plugin.castor.classes.Operations _operations;
/**
* Field _roles.
*/
private com.hp.spain.observatorio.Plugin.castor.classes.Roles _roles;
/**
* Field _construction.
*/
private java.lang.String _construction;
/**
* Field _validation.
*/
private java.lang.String _validation;
/**
* Field _validationsForm.
*/
private com.hp.spain.observatorio.Plugin.castor.classes.ValidationsForm _validationsForm;
//----------------/
//- Constructors -/
//----------------/
public Bean() {
super();
}
//-----------/
//- Methods -/
//-----------/
/**
* Returns the value of field 'alias'.
*
* @return the value of field 'Alias'.
*/
public java.lang.String getAlias(
){
return this._alias;
}
/**
* Returns the value of field 'application'.
*
* @return the value of field 'Application'.
*/
public java.lang.String getApplication(
){
return this._application;
}
78
PROYECTO HP
/**
* Returns the value of field 'audit'.
*
* @return the value of field 'Audit'.
*/
public java.lang.String getAudit(
){
return this._audit;
}
/**
* Returns the value of field 'constraintName'.
*
* @return the value of field 'ConstraintName'.
*/
public java.lang.String getConstraintName(
){
return this._constraintName;
}
/**
* Returns the value of field 'construction'.
*
* @return the value of field 'Construction'.
*/
public java.lang.String getConstruction(
){
return this._construction;
}
/**
* Returns the value of field 'DBTable'.
*
* @return the value of field 'DBTable'.
*/
public java.lang.String getDBTable(
){
return this._DBTable;
}
/**
* Returns the value of field 'description'.
*
* @return the value of field 'Description'.
*/
public java.lang.String getDescription(
){
return this._description;
}
/**
* Returns the value of field 'extAttributes'.
*
* @return the value of field 'ExtAttributes'.
*/
public com.hp.spain.observatorio.Plugin.castor.classes.types.BeanExtAttributesType getExtAttributes(
){
return this._extAttributes;
}
/**
* Returns the value of field 'fields'.
*
* @return the value of field 'Fields'.
*/
public com.hp.spain.observatorio.Plugin.castor.classes.Fields getFields(
){
return this._fields;
}
/**
* Returns the value of field 'histDBTable'.
*
* @return the value of field 'HistDBTable'.
*/
public java.lang.String getHistDBTable(
){
return this._histDBTable;
}
/**
* Returns the value of field 'history'.
*
* @return the value of field 'History'.
*/
public com.hp.spain.observatorio.Plugin.castor.classes.types.BeanHistoryType getHistory(
){
return this._history;
}
79
PROYECTO HP
/**
* Returns the value of field 'inheritsFrom'.
*
* @return the value of field 'InheritsFrom'.
*/
public java.lang.String getInheritsFrom(
){
return this._inheritsFrom;
}
/**
* Returns the value of field 'keys'.
*
* @return the value of field 'Keys'.
*/
public com.hp.spain.observatorio.Plugin.castor.classes.Keys getKeys(
){
return this._keys;
}
/**
* Returns the value of field 'maxCount'.
*
* @return the value of field 'MaxCount'.
*/
public java.lang.String getMaxCount(
){
return this._maxCount;
}
/**
* Returns the value of field 'name'.
*
* @return the value of field 'Name'.
*/
public java.lang.String getName(
){
return this._name;
}
/**
* Returns the value of field 'operations'.
*
* @return the value of field 'Operations'.
*/
public com.hp.spain.observatorio.Plugin.castor.classes.Operations getOperations(
){
return this._operations;
}
/**
* Returns the value of field 'package'.
*
* @return the value of field 'Package'.
*/
public java.lang.String getPackage(
){
return this._package;
}
/**
* Returns the value of field 'roles'.
*
* @return the value of field 'Roles'.
*/
public com.hp.spain.observatorio.Plugin.castor.classes.Roles getRoles(
){
return this._roles;
}
/**
* Returns the value of field 'snmpManage'.
*
* @return the value of field 'SnmpManage'.
*/
public java.lang.String getSnmpManage(
){
return this._snmpManage;
}
/**
* Returns the value of field 'validation'.
*
* @return the value of field 'Validation'.
*/
public java.lang.String getValidation(
){
return this._validation;
}
80
PROYECTO HP
/**
* Returns the value of field 'validationsForm'.
*
* @return the value of field 'ValidationsForm'.
*/
public com.hp.spain.observatorio.Plugin.castor.classes.ValidationsForm getValidationsForm(
){
return this._validationsForm;
}
/**
* Method isValid.
*
* @return true if this object is valid according to the schema
*/
public boolean isValid(
){
try {
validate();
} catch (org.exolab.castor.xml.ValidationException vex) {
return false;
}
return true;
}
/**
*
*
* @param out
* @throws org.exolab.castor.xml.MarshalException if object is
* null or if any SAXException is thrown during marshaling
* @throws org.exolab.castor.xml.ValidationException if this
* object is an invalid instance according to the schema
*/
public void marshal(
final java.io.Writer out)
throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException {
org.exolab.castor.xml.Marshaller.marshal(this, out);
}
/**
*
* @param handler
* @throws java.io.IOException if an IOException occurs during
* marshaling
* @throws org.exolab.castor.xml.ValidationException if this
* object is an invalid instance according to the schema
* @throws org.exolab.castor.xml.MarshalException if object is
* null or if any SAXException is thrown during marshaling
*/
public void marshal(
final org.xml.sax.ContentHandler handler)
throws java.io.IOException, org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException {
org.exolab.castor.xml.Marshaller.marshal(this, handler);
}
/**
* Sets the value of field 'alias'.
*
* @param alias the value of field 'alias'.
*/
public void setAlias(
final java.lang.String alias) {
this._alias = alias;
}
/**
* Sets the value of field 'application'.
*
* @param application the value of field 'application'.
*/
public void setApplication(
final java.lang.String application) {
this._application = application;
}
/**
* Sets the value of field 'audit'.
*
* @param audit the value of field 'audit'.
*/
public void setAudit(
final java.lang.String audit) {
this._audit = audit;
}
/**
* Sets the value of field 'constraintName'.
*
* @param constraintName the value of field 'constraintName'.
*/
public void setConstraintName(
final java.lang.String constraintName) {
this._constraintName = constraintName;
}
81
PROYECTO HP
/**
* Sets the value of field 'construction'.
*
* @param construction the value of field 'construction'.
*/
public void setConstruction(
final java.lang.String construction) {
this._construction = construction;
}
/**
* Sets the value of field 'DBTable'.
*
* @param DBTable the value of field 'DBTable'.
*/
public void setDBTable(
final java.lang.String DBTable) {
this._DBTable = DBTable;
}
/**
* Sets the value of field 'description'.
*
* @param description the value of field 'description'.
*/
public void setDescription(
final java.lang.String description) {
this._description = description;
}
/**
* Sets the value of field 'extAttributes'.
*
* @param extAttributes the value of field 'extAttributes'.
*/
public void setExtAttributes(
final com.hp.spain.observatorio.Plugin.castor.classes.types.BeanExtAttributesType extAttributes) {
this._extAttributes = extAttributes;
}
/**
* Sets the value of field 'fields'.
*
* @param fields the value of field 'fields'.
*/
public void setFields(
final com.hp.spain.observatorio.Plugin.castor.classes.Fields fields) {
this._fields = fields;
}
/**
* Sets the value of field 'histDBTable'.
*
* @param histDBTable the value of field 'histDBTable'.
*/
public void setHistDBTable(
final java.lang.String histDBTable) {
this._histDBTable = histDBTable;
}
/**
* Sets the value of field 'history'.
*
* @param history the value of field 'history'.
*/
public void setHistory(
final com.hp.spain.observatorio.Plugin.castor.classes.types.BeanHistoryType history) {
this._history = history;
}
/**
* Sets the value of field 'inheritsFrom'.
*
* @param inheritsFrom the value of field 'inheritsFrom'.
*/
public void setInheritsFrom(
final java.lang.String inheritsFrom) {
this._inheritsFrom = inheritsFrom;
}
/**
* Sets the value of field 'keys'.
*
* @param keys the value of field 'keys'.
*/
public void setKeys(
final com.hp.spain.observatorio.Plugin.castor.classes.Keys keys) {
this._keys = keys;
}
82
PROYECTO HP
/**
* Sets the value of field 'maxCount'.
*
* @param maxCount the value of field 'maxCount'.
*/
public void setMaxCount(
final java.lang.String maxCount) {
this._maxCount = maxCount;
}
/**
* Sets the value of field 'name'.
*
* @param name the value of field 'name'.
*/
public void setName(
final java.lang.String name) {
this._name = name;
}
/**
* Sets the value of field 'operations'.
*
* @param operations the value of field 'operations'.
*/
public void setOperations(
final com.hp.spain.observatorio.Plugin.castor.classes.Operations operations) {
this._operations = operations;
}
/**
* Sets the value of field 'package'.
*
* @param _package
* @param package the value of field 'package'.
*/
public void setPackage(
final java.lang.String _package) {
this._package = _package;
}
/**
* Sets the value of field 'roles'.
*
* @param roles the value of field 'roles'.
*/
public void setRoles(
final com.hp.spain.observatorio.Plugin.castor.classes.Roles roles) {
this._roles = roles;
}
/**
* Sets the value of field 'snmpManage'.
*
* @param snmpManage the value of field 'snmpManage'.
*/
public void setSnmpManage(
final java.lang.String snmpManage) {
this._snmpManage = snmpManage;
}
/**
* Sets the value of field 'validation'.
*
* @param validation the value of field 'validation'.
*/
public void setValidation(
final java.lang.String validation) {
this._validation = validation;
}
/**
* Sets the value of field 'validationsForm'.
*
* @param validationsForm the value of field 'validationsForm'.
*/
public void setValidationsForm(
final com.hp.spain.observatorio.Plugin.castor.classes.ValidationsForm validationsForm) {
this._validationsForm = validationsForm;
}
83
PROYECTO HP
/**
* Method unmarshal.
*
* @param reader
* @throws org.exolab.castor.xml.MarshalException if object is
* null or if any SAXException is thrown during marshaling
* @throws org.exolab.castor.xml.ValidationException if this
* object is an invalid instance according to the schema
* @return the unmarshaled com.hp.spain.observatorio.Plugin.castor.classes.Bean
*/
public static com.hp.spain.observatorio.Plugin.castor.classes.Bean unmarshal(
final java.io.Reader reader)
throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException {
return (com.hp.spain.observatorio.Plugin.castor.classes.Bean)
org.exolab.castor.xml.Unmarshaller.unmarshal(com.hp.spain.observatorio.Plugin.castor.classes.Bean.class, reader);
}
/**
*
*
* @throws org.exolab.castor.xml.ValidationException if this
* object is an invalid instance according to the schema
*/
public void validate(
)
throws org.exolab.castor.xml.ValidationException {
org.exolab.castor.xml.Validator validator = new org.exolab.castor.xml.Validator();
validator.validate(this);
}
}
84
PROYECTO HP
85
C.2: Marshal
Esta clase es la encargada de convertir los objetos que almacenan la
información de los formularios en los bean con formato XML mediante el uso de
Castor.
package com.hp.spain.observatorio.Plugin.xml.marshal;
import java.awt.Panel;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.Locale;
import java.util.ResourceBundle;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreeModel;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Result;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.part.FileEditorInput;
import org.exolab.castor.xml.MarshalException;
import org.exolab.castor.xml.Marshaller;
import org.exolab.castor.xml.ValidationException;
import com.hp.spain.observatorio.Plugin.Activator;
import com.hp.spain.observatorio.Plugin.castor.classes.Bean;
import com.hp.spain.observatorio.Plugin.castor.classes.ExtAttributes;
import com.hp.spain.observatorio.Plugin.castor.classes.Field;
import com.hp.spain.observatorio.Plugin.castor.classes.Fields;
import com.hp.spain.observatorio.Plugin.castor.classes.FindBy;
import com.hp.spain.observatorio.Plugin.castor.classes.JoinBridge;
import com.hp.spain.observatorio.Plugin.castor.classes.Jump;
import com.hp.spain.observatorio.Plugin.castor.classes.Key;
import com.hp.spain.observatorio.Plugin.castor.classes.KeyField;
import com.hp.spain.observatorio.Plugin.castor.classes.Keys;
import com.hp.spain.observatorio.Plugin.castor.classes.ListOfValues;
import com.hp.spain.observatorio.Plugin.castor.classes.ListOfValuesSequence;
import com.hp.spain.observatorio.Plugin.castor.classes.Operations;
import com.hp.spain.observatorio.Plugin.castor.classes.OrderField;
import com.hp.spain.observatorio.Plugin.castor.classes.Param;
import com.hp.spain.observatorio.Plugin.castor.classes.QueryForm;
import com.hp.spain.observatorio.Plugin.castor.classes.Roles;
import com.hp.spain.observatorio.Plugin.castor.classes.ValidationForm;
import com.hp.spain.observatorio.Plugin.castor.classes.ValidationsForm;
import com.hp.spain.observatorio.Plugin.castor.classes.types.BeanExtAttributesType;
import com.hp.spain.observatorio.Plugin.castor.classes.types.BeanHistoryType;
import com.hp.spain.observatorio.Plugin.castor.classes.types.ExtAttributesTypeType;
import com.hp.spain.observatorio.Plugin.castor.classes.types.ListOfValuesWithoutFkType;
import com.hp.spain.observatorio.Plugin.castor.classes.types.OrderFieldConvertToType;
import com.hp.spain.observatorio.Plugin.castor.classes.types.OrderFieldDescType;
import com.hp.spain.observatorio.Plugin.editors.MultiPageEditor;
import com.hp.spain.observatorio.Plugin.ext.DefaultMutableTreeNodeExt;
public class Marshal implements IMarshal {
// Variable booleana que indica si todos los valores introducidos en el
// campo son correctos
static boolean isCorrect;
// Panel que almacenara el correspondiente al arbol
static Panel mainPanel;
public Marshal(){
isCorrect = true;
mainPanel = null;
}
PROYECTO HP
/**
* Recoge toda la informacion almacenada en el arbol para crear el archivo XML
*
* @param model modelo del arbol
* @param form <code>Panel</code> que almacena los formularios de cada nodo
*/
public void crearXML(TreeModel model, Panel form) {
isCorrect = true;
mainPanel = form;
// Busca el panel correspondiente al nodo raiz y recoge su informacion
DefaultMutableTreeNode rootNode = (DefaultMutableTreeNode) ((DefaultMutableTreeNodeExt) model.getRoot()).getFirstChild();
JPanel panelauxiliar = (JPanel) rootNode.getUserObject();
//Raiz del arbol
Bean bean = getBeanInfo(panelauxiliar);
// Elementos del arbol
Fields fields = new Fields();
Keys keys = new Keys();
Operations operations = new Operations();
Roles roles = new Roles();
ValidationsForm validationsForm = new ValidationsForm();
//Recorre el arbol
for (int i=0;i<rootNode.getChildCount();i++){
if(((DefaultMutableTreeNodeExt) rootNode.getChildAt(i)).getID().startsWith("Fields")){
fields = getFields((DefaultMutableTreeNodeExt) rootNode.getChildAt(i));
bean.setFields(fields);
}
if(((DefaultMutableTreeNodeExt) rootNode.getChildAt(i)).getID().startsWith("Keys")){
keys = getKeys((DefaultMutableTreeNodeExt) rootNode.getChildAt(i));
bean.setKeys(keys);
}
if(((DefaultMutableTreeNodeExt) rootNode.getChildAt(i)).getID().startsWith("Operations")){
operations = getOperations((DefaultMutableTreeNodeExt) rootNode.getChildAt(i));
bean.setOperations(operations);
}
if(((DefaultMutableTreeNodeExt) rootNode.getChildAt(i)).getID().startsWith("Roles")){
roles = getRoles((DefaultMutableTreeNodeExt) rootNode.getChildAt(i));
bean.setRoles(roles);
}
if(((DefaultMutableTreeNodeExt) rootNode.getChildAt(i)).getID().startsWith("Validations-form")){
validationsForm = getValidationsForm((DefaultMutableTreeNodeExt) rootNode.getChildAt(i));
bean.setValidationsForm(validationsForm);
}
}
// Si todos los formularios estan correctamente rellenados llama a la funcion que creara el XML
if (isCorrect) {
marshal(bean);
}
}
private Bean getBeanInfo(JPanel panel){
Bean bean = new Bean();
// Identificador y texto de cada uno de los campos
String text = "";
// Recoge la informacion del panel
for (int i = 0; i < panel.getComponents().length; i++) {
if (panel.getComponent(i) instanceof JLabel) {
if (((JLabel) panel.getComponent(i)).getToolTipText() != null && ((JLabel) panel.getComponent(i)).getName()!= null) {
if(((JLabel) panel.getComponent(i)).getName().compareTo("Ayuda")!=0 ){
if (((JLabel)
panel.getComponent(i)).getToolTipText().compareTo(ResourceBundle.getBundle("/resources/Mensajes",Locale.getDefault()).getString("Mensaje_Correcto")) != 0){
isCorrect = false;
}
}
} else if(((JLabel) panel.getComponent(i)).getText()!= null){
text = ((JLabel) panel.getComponent(i)).getText();
if(text.compareTo("Name*")==0){
if(((JTextField) panel.getComponent(i+1)).getText().compareTo("")!=0){
bean.setName(((JTextField) panel.getComponent(i+1)).getText());
}
}
if(text.compareTo("Description")==0){
if(((JTextField) panel.getComponent(i+1)).getText().compareTo("")!=0){
bean.setDescription(((JTextField) panel.getComponent(i+1)).getText());
}
}
if(text.compareTo("Alias")==0){
if(((JTextField) panel.getComponent(i+1)).getText().compareTo("")!=0){
bean.setAlias(((JTextField) panel.getComponent(i+1)).getText());
}
}
if(text.compareTo("Constraint-Name")==0){
if(((JTextField) panel.getComponent(i+1)).getText().compareTo("")!=0){
bean.setConstraintName(((JTextField) panel.getComponent(i+1)).getText());
}
}
if(text.compareTo("Package*")==0){
86
PROYECTO HP
if(((JTextField) panel.getComponent(i+1)).getText().compareTo("")!=0){
bean.setPackage(((JTextField) panel.getComponent(i+1)).getText());
}
}
if(text.compareTo("Application")==0){
if(((JTextField) panel.getComponent(i+1)).getText().compareTo("")!=0){
bean.setApplication(((JTextField) panel.getComponent(i+1)).getText());
}
}
if(text.compareTo("DBTable")==0){
if(((JTextField) panel.getComponent(i+1)).getText().compareTo("")!=0){
bean.setDBTable(((JTextField) panel.getComponent(i+1)).getText());
}
}
if(text.compareTo("Hist-DBTable")==0){
if(((JTextField) panel.getComponent(i+1)).getText().compareTo("")!=0){
bean.setHistDBTable(((JTextField) panel.getComponent(i+1)).getText());
}
}
if(text.compareTo("Construction")==0){
if(((JTextField) panel.getComponent(i+1)).getText().compareTo("")!=0){
bean.setConstruction(((JTextField) panel.getComponent(i+1)).getText());
}
}
if(text.compareTo("Validation")==0){
if(((JTextField) panel.getComponent(i+1)).getText().compareTo("")!=0){
bean.setValidation(((JTextField) panel.getComponent(i+1)).getText());
}
}
if(text.compareTo("audit")==0){
if(((JTextField) panel.getComponent(i+1)).getText().compareTo("")!=0){
bean.setAudit(((JTextField) panel.getComponent(i+1)).getText());
}
}
if(text.compareTo("ext-attributes")==0){
if(((JComboBox) panel.getComponent(i+1)).getSelectedItem().toString().compareTo("")!=0){
bean.setExtAttributes(BeanExtAttributesType.valueOf(((JComboBox) panel.getComponent(i+1)).getSelectedItem().toString()));
}
}
if(text.compareTo("history")==0){
if(((JComboBox) panel.getComponent(i+1)).getSelectedItem().toString().compareTo("")!=0){
bean.setHistory(BeanHistoryType.valueOf(((JComboBox) panel.getComponent(i+1)).getSelectedItem().toString()));
}
}
if(text.compareTo("inheritsFrom")==0){
if(((JComboBox) panel.getComponent(i+1)).getSelectedItem().toString().compareTo("")!=0){
bean.setInheritsFrom(((JComboBox) panel.getComponent(i+1)).getSelectedItem().toString());
}
}
if(text.compareTo("maxCount")==0){
if(((JTextField) panel.getComponent(i+1)).getText().compareTo("")!=0){
bean.setMaxCount(((JTextField) panel.getComponent(i+1)).getText());
}
}
if(text.compareTo("snmp-manage")==0){
if(((JTextField) panel.getComponent(i+1)).getText().compareTo("")!=0){
bean.setSnmpManage(((JTextField) panel.getComponent(i+1)).getText());
}
}
}
}
}
return bean;
}
private Field getFieldInfo(JPanel panel){
Field field = new Field();
// Identificador y texto de cada uno de los campos
String text = "";
// Recoge la informacion del panel
for (int i = 0; i < panel.getComponents().length; i++) {
if (panel.getComponent(i) instanceof JLabel) {
if (((JLabel) panel.getComponent(i)).getToolTipText() != null && ((JLabel) panel.getComponent(i)).getName()!= null) {
if(((JLabel) panel.getComponent(i)).getName().compareTo("Ayuda")!=0 ){
if (((JLabel)
panel.getComponent(i)).getToolTipText().compareTo(ResourceBundle.getBundle("/resources/Mensajes",Locale.getDefault()).getString("Mensaje_Correcto")) != 0){
isCorrect = false;
}
}
} else if(((JLabel) panel.getComponent(i)).getText()!= null){
text = ((JLabel) panel.getComponent(i)).getText();
if(text.compareTo("Name*")==0){
if(((JTextField) panel.getComponent(i+1)).getText().compareTo("")!=0){
field.setName(((JTextField) panel.getComponent(i+1)).getText());
}
}
if(text.compareTo("Column")==0){
if(((JTextField) panel.getComponent(i+1)).getText().compareTo("")!=0){
field.setColumn(((JTextField) panel.getComponent(i+1)).getText());
}
}
87
PROYECTO HP
if(text.compareTo("Alias")==0){
if(((JTextField) panel.getComponent(i+1)).getText().compareTo("")!=0){
field.setAlias(((JTextField) panel.getComponent(i+1)).getText());
}
}
if(text.compareTo("Type*")==0){
if(((JTextField) panel.getComponent(i+1)).getText().compareTo("")!=0){
field.setType(((JTextField) panel.getComponent(i+1)).getText());
}
}
if(text.compareTo("Default")==0){
if(((JTextField) panel.getComponent(i+1)).getText().compareTo("")!=0){
field.setDefault(((JTextField) panel.getComponent(i+1)).getText());
}
}
if(text.compareTo("Description")==0){
if(((JTextField) panel.getComponent(i+1)).getText().compareTo("")!=0){
field.setDescription(((JTextField) panel.getComponent(i+1)).getText());
}
}
if(text.compareTo("Loader")==0){
if(((JTextField) panel.getComponent(i+1)).getText().compareTo("")!=0){
field.setLoader(((JTextField) panel.getComponent(i+1)).getText());
}
}
if(text.compareTo("HiddenView")==0){
if(((JTextField) panel.getComponent(i+1)).getText().compareTo("")!=0){
field.setHiddenView(((JTextField) panel.getComponent(i+1)).getText());
}
}
if(text.compareTo("advancedAudit")==0){
if(((JTextField) panel.getComponent(i+1)).getText().compareTo("")!=0){
field.setAdvancedAudit(((JTextField) panel.getComponent(i+1)).getText());
}
}
if(text.compareTo("dateFormat")==0){
if(((JTextField) panel.getComponent(i+1)).getText().compareTo("")!=0){
field.setDateFormat(((JTextField) panel.getComponent(i+1)).getText());
}
}
if(text.compareTo("hidden")==0){
if(((JTextField) panel.getComponent(i+1)).getText().compareTo("")!=0){
field.setHidden(((JTextField) panel.getComponent(i+1)).getText());
}
}
if(text.compareTo("mandatory")==0){
if(((JTextField) panel.getComponent(i+1)).getText().compareTo("")!=0){
field.setMandatory(((JTextField) panel.getComponent(i+1)).getText());
}
}
if(text.compareTo("maxCount")==0){
if(((JTextField) panel.getComponent(i+1)).getText().compareTo("")!=0){
field.setMaxCount(((JTextField) panel.getComponent(i+1)).getText());
}
}
if(text.compareTo("password")==0){
if(((JTextField) panel.getComponent(i+1)).getText().compareTo("")!=0){
field.setPassword(((JTextField) panel.getComponent(i+1)).getText());
}
}
if(text.compareTo("readOnly")==0){
if(((JTextField) panel.getComponent(i+1)).getText().compareTo("")!=0){
field.setReadOnly(((JTextField) panel.getComponent(i+1)).getText());
}
}
if(text.compareTo("searchable")==0){
if(((JTextField) panel.getComponent(i+1)).getText().compareTo("")!=0){
field.setSearchable(((JTextField) panel.getComponent(i+1)).getText());
}
}
if(text.compareTo("sequence")==0){
if(((JTextField) panel.getComponent(i+1)).getText().compareTo("")!=0){
field.setSequence(((JTextField) panel.getComponent(i+1)).getText());
}
}
if(text.compareTo("store")==0){
if(((JTextField) panel.getComponent(i+1)).getText().compareTo("")!=0){
field.setStore(((JTextField) panel.getComponent(i+1)).getText());
}
}
}
}
}
return field;
}
private ListOfValues getListOfValuesInfo(JPanel panel){
ListOfValues listOfValues = new ListOfValues();
ListOfValuesSequence listOfValuesSequence = new ListOfValuesSequence();
//Panel del nodo List of Values
// Identificador y texto de cada uno de los campos
String text = "";
// Recoge la informacion del panel
88
PROYECTO HP
for (int i = 0; i < panel.getComponents().length; i++) {
if (panel.getComponent(i) instanceof JLabel) {
if (((JLabel) panel.getComponent(i)).getToolTipText() != null && ((JLabel) panel.getComponent(i)).getName()!= null) {
if(((JLabel) panel.getComponent(i)).getName().compareTo("Ayuda")!=0 ){
if (((JLabel)
panel.getComponent(i)).getToolTipText().compareTo(ResourceBundle.getBundle("/resources/Mensajes",Locale.getDefault()).getString("Mensaje_Correcto")) != 0){
isCorrect = false;
}
}
} else if(((JLabel) panel.getComponent(i)).getText()!= null){
text = ((JLabel) panel.getComponent(i)).getText();
if(text.compareTo("without-fk")==0){
if(((JComboBox) panel.getComponent(i+1)).getSelectedItem().toString().compareTo("")!=0){
listOfValues.setWithoutFk(ListOfValuesWithoutFkType.valueOf(((JComboBox) panel.getComponent(i+1)).getSelectedItem().toString()));
}
}
if(text.compareTo("BeanName*")==0){
if(((JComboBox) panel.getComponent(i+1)).getSelectedItem().toString().compareTo("")!=0){
listOfValuesSequence.setBeanName(((JComboBox) panel.getComponent(i+1)).getSelectedItem().toString());
}
}
if(text.compareTo("BeanClass")==0){
if(((JTextField) panel.getComponent(i+1)).getText().compareTo("")!=0){
listOfValuesSequence.setBeanClass(((JTextField) panel.getComponent(i+1)).getText());
}
}
if(text.compareTo("Label")==0){
if(((JTextField) panel.getComponent(i+1)).getText().compareTo("")!=0){
listOfValuesSequence.setLabel(((JTextField) panel.getComponent(i+1)).getText());
}
}
if(text.compareTo("Method")==0){
if(((JTextField) panel.getComponent(i+1)).getText().compareTo("")!=0){
listOfValuesSequence.setMethod(((JTextField) panel.getComponent(i+1)).getText());
}
}
}
}
}
listOfValues.setListOfValuesSequence(listOfValuesSequence);
return listOfValues;
}
private Param getParamInfo(JPanel panel){
Param param = new Param();
// Identificador y texto de cada uno de los campos
String text = "";
// Recoge la informacion del panel
for (int i = 0; i < panel.getComponents().length; i++) {
if (panel.getComponent(i) instanceof JLabel) {
if (((JLabel) panel.getComponent(i)).getToolTipText() != null && ((JLabel) panel.getComponent(i)).getName()!= null) {
if(((JLabel) panel.getComponent(i)).getName().compareTo("Ayuda")!=0 ){
if (((JLabel)
panel.getComponent(i)).getToolTipText().compareTo(ResourceBundle.getBundle("/resources/Mensajes",Locale.getDefault()).getString("Mensaje_Correcto")) != 0){
isCorrect = false;
}
}
} else if(((JLabel) panel.getComponent(i)).getText()!= null){
text = ((JLabel) panel.getComponent(i)).getText();
if(text.compareTo("Content*")==0){
if(((JTextField) panel.getComponent(i+1)).getText().compareTo("")!=0){
param.setContent(((JTextField) panel.getComponent(i+1)).getText());
}
}
if(text.compareTo("type")==0){
if(((JTextField) panel.getComponent(i+1)).getText().compareTo("")!=0){
param.setType(((JTextField) panel.getComponent(i+1)).getText());
}
}
}
}
}
return param;
}
public Fields getFields(DefaultMutableTreeNodeExt node) {
Fields f = new Fields();
// Panel asociado al nodo actual
JPanel panel;
//Array con todos los Field anidados
Field[] vField = new Field[node.getChildCount()];
// Recorre los Field
for (int j = 0; j < node.getChildCount(); j++) {
// Nodo actual
89
PROYECTO HP
DefaultMutableTreeNodeExt Nodo = node.getChildAtExt(j);
Field field;
panel = (JPanel) Nodo.getUserObject();
field = getFieldInfo(panel);
// Si el nodo tiene hijos los recorremos
if (Nodo.getChildCount() != 0) {
ListOfValues listOfValues = getListOfValuesInfo((JPanel)Nodo.getChildAtExt(0).getUserObject());
for(int h=0;h<Nodo.getChildAtExt(0).getChildCount();h++){
DefaultMutableTreeNodeExt paramNode = Nodo.getChildAtExt(0).getChildAtExt(h);
Param param = getParamInfo((JPanel) paramNode.getUserObject());
listOfValues.getListOfValuesSequence().addParam(param);
}
field.setListOfValues(listOfValues);
}
vField[j] = field;
}
//Añade los Field anidados a Fields
f.setField(vField);
return f;
}
private Key getKeyInfo(JPanel panel){
Key key = new Key();
// Identificador y texto de cada uno de los campos
String text = "";
// Recoge la informacion del panel
for (int i = 0; i < panel.getComponents().length; i++) {
if (panel.getComponent(i) instanceof JLabel) {
if (((JLabel) panel.getComponent(i)).getToolTipText() != null && ((JLabel) panel.getComponent(i)).getName()!= null) {
if(((JLabel) panel.getComponent(i)).getName().compareTo("Ayuda")!=0 ){
if (((JLabel)
panel.getComponent(i)).getToolTipText().compareTo(ResourceBundle.getBundle("/resources/Mensajes",Locale.getDefault()).getString("Mensaje_Correcto")) != 0){
isCorrect = false;
}
}
} else if(((JLabel) panel.getComponent(i)).getText()!= null){
text = ((JLabel) panel.getComponent(i)).getText();
if(text.compareTo("Name")==0){
if(((JTextField) panel.getComponent(i+1)).getText().compareTo("")!=0){
key.setName(((JTextField) panel.getComponent(i+1)).getText());
}
}
if(text.compareTo("findByArray")==0){
if(((JTextField) panel.getComponent(i+1)).getText().compareTo("")!=0){
key.setFindByArray(((JTextField) panel.getComponent(i+1)).getText());
}
}
if(text.compareTo("foreignBean")==0){
if(((JComboBox) panel.getComponent(i+1)).getSelectedItem().toString().compareTo("")!=0){
key.setForeignBean(((JComboBox) panel.getComponent(i+1)).getSelectedItem().toString());
}
}
if(text.compareTo("include-bean*")==0){
if(((JTextField) panel.getComponent(i+1)).getText().compareTo("")!=0){
key.setIncludeBean(((JTextField) panel.getComponent(i+1)).getText());
}
}
if(text.compareTo("makeIndex")==0){
if(((JTextField) panel.getComponent(i+1)).getText().compareTo("")!=0){
key.setMakeIndex(((JTextField) panel.getComponent(i+1)).getText());
}
}
if(text.compareTo("pk")==0){
if(((JTextField) panel.getComponent(i+1)).getText().compareTo("")!=0){
key.setPk(((JTextField) panel.getComponent(i+1)).getText());
}
}
if(text.compareTo("restrict")==0){
if(((JTextField) panel.getComponent(i+1)).getText().compareTo("")!=0){
key.setRestrict(((JTextField) panel.getComponent(i+1)).getText());
}
}
if(text.compareTo("sqlConstraint")==0){
if(((JTextField) panel.getComponent(i+1)).getText().compareTo("")!=0){
key.setSqlConstraint(((JTextField) panel.getComponent(i+1)).getText());
}
}
if(text.compareTo("unique")==0){
if(((JTextField) panel.getComponent(i+1)).getText().compareTo("")!=0){
key.setUnique(((JTextField) panel.getComponent(i+1)).getText());
}
}
}
}
}
return key;
}
private KeyField getKeyFieldInfo (JPanel panel){
90
PROYECTO HP
KeyField keyField = new KeyField();
// Identificador y texto de cada uno de los campos
String text = "";
// Recoge la informacion del panel
for (int i = 0; i < panel.getComponents().length; i++) {
if (panel.getComponent(i) instanceof JLabel) {
if (((JLabel) panel.getComponent(i)).getToolTipText() != null && ((JLabel) panel.getComponent(i)).getName()!= null) {
if(((JLabel) panel.getComponent(i)).getName().compareTo("Ayuda")!=0 ){
if (((JLabel)
panel.getComponent(i)).getToolTipText().compareTo(ResourceBundle.getBundle("/resources/Mensajes",Locale.getDefault()).getString("Mensaje_Correcto")) != 0){
isCorrect = false;
}
}
} else if(((JLabel) panel.getComponent(i)).getText()!= null){
text = ((JLabel) panel.getComponent(i)).getText();
if(text.compareTo("alias")==0){
if(((JTextField) panel.getComponent(i+1)).getText().compareTo("")!=0){
keyField.setAlias(((JTextField) panel.getComponent(i+1)).getText());
}
}
if(text.compareTo("Content*")==0){
if(((JTextField) panel.getComponent(i+1)).getText().compareTo("")!=0){
keyField.setContent(((JTextField) panel.getComponent(i+1)).getText());
}
}
if(text.compareTo("external-bean")==0){
if(((JTextField) panel.getComponent(i+1)).getText().compareTo("")!=0){
keyField.setExternalBean(((JTextField) panel.getComponent(i+1)).getText());
}
}
if(text.compareTo("external-join-field")==0){
if(((JTextField) panel.getComponent(i+1)).getText().compareTo("")!=0){
keyField.setExternalJoinField(((JTextField) panel.getComponent(i+1)).getText());
}
}
if(text.compareTo("foreignField")==0){
if(((JComboBox) panel.getComponent(i+1)).getSelectedItem().toString().compareTo("")!=0){
keyField.setForeignField(((JComboBox) panel.getComponent(i+1)).getSelectedItem().toString());
}
}
if(text.compareTo("ignore-case")==0){
if(((JTextField) panel.getComponent(i+1)).getText().compareTo("")!=0){
keyField.setIgnoreCase(((JTextField) panel.getComponent(i+1)).getText());
}
}
if(text.compareTo("join-field")==0){
if(((JTextField) panel.getComponent(i+1)).getText().compareTo("")!=0){
keyField.setJoinField(((JTextField) panel.getComponent(i+1)).getText());
}
}
}
}
}
return keyField;
}
private JoinBridge getJoinBridgeInfo(JPanel panel){
JoinBridge joinBridge = new JoinBridge();
String text = "";
// Recoge la informacion del panel
for (int i = 0; i < panel.getComponents().length; i++) {
if (panel.getComponent(i) instanceof JLabel) {
if (((JLabel) panel.getComponent(i)).getToolTipText() != null && ((JLabel) panel.getComponent(i)).getName()!= null) {
if(((JLabel) panel.getComponent(i)).getName().compareTo("Ayuda")!=0 ){
if (((JLabel)
panel.getComponent(i)).getToolTipText().compareTo(ResourceBundle.getBundle("/resources/Mensajes",Locale.getDefault()).getString("Mensaje_Correcto")) != 0){
isCorrect = false;
}
}
} else if(((JLabel) panel.getComponent(i)).getText()!= null){
text = ((JLabel) panel.getComponent(i)).getText();
if(text.compareTo("destination")==0){
if(((JTextField) panel.getComponent(i+1)).getText().compareTo("")!=0){
joinBridge.setDestination(((JTextField) panel.getComponent(i+1)).getText());
}
}
if(text.compareTo("inverse-jump-field")==0){
if(((JTextField) panel.getComponent(i+1)).getText().compareTo("")!=0){
joinBridge.setInverseJumpField(((JTextField) panel.getComponent(i+1)).getText());
}
}
if(text.compareTo("jump-field")==0){
if(((JTextField) panel.getComponent(i+1)).getText().compareTo("")!=0){
joinBridge.setJumpField(((JTextField) panel.getComponent(i+1)).getText());
}
}
if(text.compareTo("origin")==0){
if(((JTextField) panel.getComponent(i+1)).getText().compareTo("")!=0){
joinBridge.setOrigin(((JTextField) panel.getComponent(i+1)).getText());
}
}
}
91
PROYECTO HP
}
}
return joinBridge;
}
private Jump getJumpInfo(JPanel panel){
Jump jump = new Jump();
String text = "";
// Recoge la informacion del panel
for (int i = 0; i < panel.getComponents().length; i++) {
if (panel.getComponent(i) instanceof JLabel) {
if (((JLabel) panel.getComponent(i)).getToolTipText() != null && ((JLabel) panel.getComponent(i)).getName()!= null) {
if(((JLabel) panel.getComponent(i)).getName().compareTo("Ayuda")!=0 ){
if (((JLabel)
panel.getComponent(i)).getToolTipText().compareTo(ResourceBundle.getBundle("/resources/Mensajes",Locale.getDefault()).getString("Mensaje_Correcto")) != 0){
isCorrect = false;
}
}
} else if(((JLabel) panel.getComponent(i)).getText()!= null){
text = ((JLabel) panel.getComponent(i)).getText();
if(text.compareTo("Content*")==0){
if(((JTextField) panel.getComponent(i+1)).getText().compareTo("")!=0){
jump.setContent(((JTextField) panel.getComponent(i+1)).getText().toString());
}
}
if(text.compareTo("jump-field")==0){
if(((JTextField) panel.getComponent(i+1)).getText().compareTo("")!=0){
jump.setJumpField(((JTextField) panel.getComponent(i+1)).getText().toString());
}
}
if(text.compareTo("inverse-jump-field")==0){
if(((JTextField) panel.getComponent(i+1)).getText().compareTo("")!=0){
jump.setInverseJumpField(((JTextField) panel.getComponent(i+1)).getText());
}
}
}
}
}
return jump;
}
public Keys getKeys(DefaultMutableTreeNodeExt node) {
Keys k = new Keys();
// Panel asociado al nodo actual
JPanel panel;
//Array con todos los Key anidados a Keys
Key[] vKey = new Key[node.getChildCount()];
// Recorre los Key
for (int j = 0; j < node.getChildCount(); j++) {
// Nodo actual
DefaultMutableTreeNodeExt Nodo = node.getChildAtExt(j);
Key key;
panel = (JPanel) Nodo.getUserObject();
key = getKeyInfo(panel);
//Indice donde insertar los keyField y JoinBridge
int ikf = 0 ,ijb = 0;
KeyField[] vKeyField = new KeyField[Nodo.getChildCount()];
JoinBridge[] vJoinBridge = new JoinBridge[Nodo.getChildCount()];
// Si el nodo tiene hijos los recorremos
for (int i=0; i<Nodo.getChildCount();i++) {
if(Nodo.getChildAtExt(i).getID().startsWith("KeyField")){
KeyField keyField;
panel = (JPanel) Nodo.getChildAtExt(i).getUserObject();
keyField = getKeyFieldInfo(panel);
vKeyField[ikf]= keyField;
ikf++;
}
if( Nodo.getChildAtExt(i).getID().startsWith("JoinBridge")){
JoinBridge joinBridge;
panel = (JPanel) Nodo.getChildAtExt(i).getUserObject();
joinBridge = getJoinBridgeInfo(panel);
//Comprueba si joinBridge tiene algun Jump anidado
Jump[] vJump = new Jump[Nodo.getChildAt(i).getChildCount()];
for (int h=0;h<Nodo.getChildAtExt(i).getChildCount();h++){
vJump[h] = getJumpInfo((JPanel) Nodo.getChildAtExt(i).getChildAtExt(h).getUserObject());
}
joinBridge.setJump(vJump);
vJoinBridge[ijb]= joinBridge;
ijb++;
}
}
}
key.setKeyField(vKeyField);
key.setJoinBridge(vJoinBridge);
vKey[j] = key;
92
PROYECTO HP
//Añade los Field anidados a Fields
k.setKey(vKey);
return k;
}
private Operations getOperationsInfo(JPanel panel){
Operations operations = new Operations();
// Identificador y texto de cada uno de los campos
String text = "";
// Recoge la informacion del panel
for (int i = 0; i < panel.getComponents().length; i++) {
if (panel.getComponent(i) instanceof JLabel) {
if (((JLabel) panel.getComponent(i)).getToolTipText() != null && ((JLabel) panel.getComponent(i)).getName()!= null) {
if(((JLabel) panel.getComponent(i)).getName().compareTo("Ayuda")!=0 ){
if (((JLabel)
panel.getComponent(i)).getToolTipText().compareTo(ResourceBundle.getBundle("/resources/Mensajes",Locale.getDefault()).getString("Mensaje_Correcto")) != 0){
isCorrect = false;
}
}
} else if(((JLabel) panel.getComponent(i)).getText()!= null){
text = ((JLabel) panel.getComponent(i)).getText();
if(text.compareTo("Store")==0){
if(((JCheckBox) panel.getComponent(i+1)).isSelected()){
operations.setStore("");
}
}
if(text.compareTo("Update")==0){
if(((JCheckBox) panel.getComponent(i+1)).isSelected()){
operations.setUpdate("");
}
}
if(text.compareTo("Remove")==0){
if(((JCheckBox) panel.getComponent(i+1)).isSelected()){
operations.setRemove("");
}
}
if(text.compareTo("OnCreationJSPInitWF")==0){
if(((JTextField) panel.getComponent(i+1)).getText().compareTo("")!=0){
operations.setOnCreationJSPInitWF(((JTextField) panel.getComponent(i+1)).getText());
}
}
if(text.compareTo("OnUpdateJSPInitWF")==0){
if(((JTextField) panel.getComponent(i+1)).getText().compareTo("")!=0){
operations.setOnUpdateJSPInitWF(((JTextField) panel.getComponent(i+1)).getText());
}
}
if(text.compareTo("OnDeleteJSPInitWF")==0){
if(((JTextField) panel.getComponent(i+1)).getText().compareTo("")!=0){
operations.setOnDeleteJSPInitWF(((JTextField) panel.getComponent(i+1)).getText());
}
}
}
}
}
return operations;
}
private FindBy getFindByInfo(JPanel panel){
FindBy findBy = new FindBy();
// Identificador y texto de cada uno de los campos
String text = "";
// Recoge la informacion del panel
for (int i = 0; i < panel.getComponents().length; i++) {
if (panel.getComponent(i) instanceof JLabel) {
if (((JLabel) panel.getComponent(i)).getToolTipText() != null && ((JLabel) panel.getComponent(i)).getName()!= null) {
if(((JLabel) panel.getComponent(i)).getName().compareTo("Ayuda")!=0 ){
if (((JLabel)
panel.getComponent(i)).getToolTipText().compareTo(ResourceBundle.getBundle("/resources/Mensajes",Locale.getDefault()).getString("Mensaje_Correcto")) != 0){
isCorrect = false;
}
}
} else if(((JLabel) panel.getComponent(i)).getText()!= null){
text = ((JLabel) panel.getComponent(i)).getText();
if(text.compareTo("doReservation")==0){
if(((JTextField) panel.getComponent(i+1)).getText().compareTo("")!=0){
findBy.setDoReservation(((JTextField) panel.getComponent(i+1)).getText());
}
}
if(text.compareTo("key")==0){
if(((JComboBox) panel.getComponent(i+1)).getSelectedItem().toString().compareTo("")!=0){
findBy.setKey(((JComboBox) panel.getComponent(i+1)).getSelectedItem().toString());
}
}
}
}
}
return findBy;
}
private QueryForm getQueryFormInfo(JPanel panel){
93
PROYECTO HP
QueryForm queryForm = new QueryForm();
// Identificador y texto de cada uno de los campos
String text = "";
// Recoge la informacion del panel
for (int i = 0; i < panel.getComponents().length; i++) {
if (panel.getComponent(i) instanceof JLabel) {
if (((JLabel) panel.getComponent(i)).getToolTipText() != null && ((JLabel) panel.getComponent(i)).getName()!= null) {
if(((JLabel) panel.getComponent(i)).getName().compareTo("Ayuda")!=0 ){
if (((JLabel)
panel.getComponent(i)).getToolTipText().compareTo(ResourceBundle.getBundle("/resources/Mensajes",Locale.getDefault()).getString("Mensaje_Correcto")) != 0){
isCorrect = false;
}
}
} else if(((JLabel) panel.getComponent(i)).getText()!= null){
text = ((JLabel) panel.getComponent(i)).getText();
if(text.compareTo("Column")==0){
queryForm.addColumn(((JTextField) panel.getComponent(i+1)).getText());
}
}
}
}
return queryForm;
}
private OrderField getOrderFieldInfo(JPanel panel){
OrderField orderField = new OrderField();
// Identificador y texto de cada uno de los campos
String text = "";
// Recoge la informacion del panel
for (int i = 0; i < panel.getComponents().length; i++) {
if (panel.getComponent(i) instanceof JLabel) {
if (((JLabel) panel.getComponent(i)).getToolTipText() != null && ((JLabel) panel.getComponent(i)).getName()!= null) {
if(((JLabel) panel.getComponent(i)).getName().compareTo("Ayuda")!=0 ){
if (((JLabel)
panel.getComponent(i)).getToolTipText().compareTo(ResourceBundle.getBundle("/resources/Mensajes",Locale.getDefault()).getString("Mensaje_Correcto")) != 0){
isCorrect = false;
}
}
} else if(((JLabel) panel.getComponent(i)).getText()!= null){
text = ((JLabel) panel.getComponent(i)).getText();
if(text.compareTo("Content*")==0){
if(((JComboBox) panel.getComponent(i+1)).getSelectedItem().toString().compareTo("")!=0){
orderField.setContent(((JComboBox) panel.getComponent(i+1)).getSelectedItem().toString());
}
}
if(text.compareTo("convert-to")==0){
if(((JComboBox) panel.getComponent(i+1)).getSelectedItem().toString().compareTo("")!=0){
orderField.setConvertTo(OrderFieldConvertToType.valueOf(((JComboBox) panel.getComponent(i+1)).getSelectedItem().toString()));
}
}
if(text.compareTo("format")==0){
if(((JTextField) panel.getComponent(i+1)).getText().compareTo("")!=0){
orderField.setFormat(((JTextField) panel.getComponent(i+1)).getText());
}
}
if(text.compareTo("desc")==0){
if(((JComboBox) panel.getComponent(i+1)).getSelectedItem().toString().compareTo("")!=0){
orderField.setDesc(OrderFieldDescType.valueOf(((JComboBox) panel.getComponent(i+1)).getSelectedItem().toString()));
}
}
}
}
}
return orderField;
}
public Operations getOperations(DefaultMutableTreeNodeExt node){
Operations operations;
// Panel asociado al nodo actual
JPanel panel;
//Añade la informacion del panel de Operations
operations = getOperationsInfo((JPanel) node.getUserObject());
//Array con todos los FindBy anidados a Operations
FindBy[] vFindBy = new FindBy[node.getChildCount()];
int ifb = 0;
// Si el nodo tiene hijos los recorremos
for (int i=0; i<node.getChildCount();i++) {
// Nodo actual
DefaultMutableTreeNodeExt Nodo = node.getChildAtExt(i);
//Añade los FindBy que pueda tener
if(Nodo.getID().startsWith("FindBy")){
FindBy findBy;
panel = (JPanel) Nodo.getUserObject();
findBy = getFindByInfo(panel);
//Añade los orderField que pueda tener anidados el FindBy
OrderField[] vOrderField = new OrderField[Nodo.getChildCount()];
for(int h=0;h<Nodo.getChildCount();h++){
OrderField orderField = getOrderFieldInfo((JPanel) Nodo.getChildAtExt(h).getUserObject());
94
PROYECTO HP
vOrderField[h]= orderField;
}
findBy.setOrderField(vOrderField);
vFindBy[ifb]=findBy;
ifb++;
}
//Añade el campo queryForm Anidado si este existe
if(Nodo.getID().startsWith("QueryForm")){
QueryForm queryForm;
panel = (JPanel) Nodo.getUserObject();
queryForm = getQueryFormInfo(panel);
operations.setQueryForm(queryForm);
}
}
//Añade los Field anidados a Fields
operations.setFindBy(vFindBy);
return operations;
}
private Roles getRolesInfo(JPanel panel){
Roles roles = new Roles();
// Identificador y texto de cada uno de los campos
String text = "";
// Recoge la informacion del panel
for (int i = 0; i < panel.getComponents().length; i++) {
if (panel.getComponent(i) instanceof JLabel) {
if (((JLabel) panel.getComponent(i)).getToolTipText() != null && ((JLabel) panel.getComponent(i)).getName()!= null) {
if(((JLabel) panel.getComponent(i)).getName().compareTo("Ayuda")!=0 ){
if (((JLabel)
panel.getComponent(i)).getToolTipText().compareTo(ResourceBundle.getBundle("/resources/Mensajes",Locale.getDefault()).getString("Mensaje_Correcto")) != 0){
isCorrect = false;
}
}
} else if(((JLabel) panel.getComponent(i)).getText()!= null){
text = ((JLabel) panel.getComponent(i)).getText();
if(text.compareTo("Store")==0){
if(((JCheckBox) panel.getComponent(i+1)).isSelected()){
roles.setStore("");
}
}
if(text.compareTo("Update")==0){
if(((JCheckBox) panel.getComponent(i+1)).isSelected()){
roles.setUpdate("");
}
}
if(text.compareTo("Remove")==0){
if(((JCheckBox) panel.getComponent(i+1)).isSelected()){
roles.setRemove("");
}
}
if(text.compareTo("Query")==0){
if(((JTextField) panel.getComponent(i+1)).getText().compareTo("")!=0){
roles.setQuery(((JTextField) panel.getComponent(i+1)).getText());
}
}
}
}
}
return roles;
}
private ExtAttributes getExtAttributesInfo(JPanel panel){
ExtAttributes extAttributes = new ExtAttributes();
// Identificador y texto de cada uno de los campos
String text = "";
// Recoge la informacion del panel
for (int i = 0; i < panel.getComponents().length; i++) {
if (panel.getComponent(i) instanceof JLabel) {
if (((JLabel) panel.getComponent(i)).getToolTipText() != null && ((JLabel) panel.getComponent(i)).getName()!= null) {
if(((JLabel) panel.getComponent(i)).getName().compareTo("Ayuda")!=0 ){
if (((JLabel)
panel.getComponent(i)).getToolTipText().compareTo(ResourceBundle.getBundle("/resources/Mensajes",Locale.getDefault()).getString("Mensaje_Correcto")) != 0){
isCorrect = false;
}
}
} else if(((JLabel) panel.getComponent(i)).getText()!= null){
text = ((JLabel) panel.getComponent(i)).getText();
if(text.compareTo("Content*")==0){
if(((JTextField) panel.getComponent(i+1)).getText().compareTo("")!=0){
extAttributes.setContent(((JTextField) panel.getComponent(i+1)).getText());
}
}
if(text.compareTo("type*")==0){
if(((JComboBox) panel.getComponent(i+1)).getSelectedItem().toString().compareTo("")!=0){
extAttributes.setType(ExtAttributesTypeType.valueOf(((JComboBox) panel.getComponent(i+1)).getSelectedItem().toString()));
}
}
95
PROYECTO HP
}
}
}
return extAttributes;
}
public Roles getRoles (DefaultMutableTreeNodeExt node){
Roles roles;
// Panel asociado al nodo actual
JPanel panel;
//Añade la informacion del panel de Roles
roles = getRolesInfo((JPanel) node.getUserObject());
//Array con todos los Ext Attributes anidados a Roles
ExtAttributes[] vExtAttributes = new ExtAttributes[node.getChildCount()];
// Recorre los nodos anidados
for (int j = 0; j < node.getChildCount(); j++) {
// Nodo actual
DefaultMutableTreeNodeExt Nodo = node.getChildAtExt(j);
// Si el nodo tiene hijos los recorremos
ExtAttributes extAttributes;
panel = (JPanel) Nodo.getUserObject();
extAttributes = getExtAttributesInfo(panel);
vExtAttributes[j] = extAttributes;
}
//Añade los Field anidados a Fields
roles.setExtAttributes(vExtAttributes);
return roles;
}
private ValidationForm getValidationFormInfo(JPanel panel){
ValidationForm validationForm = new ValidationForm();
// Identificador y texto de cada uno de los campos
String text = "";
// Recoge la informacion del panel
for (int i = 0; i < panel.getComponents().length; i++) {
if (panel.getComponent(i) instanceof JLabel) {
if (((JLabel) panel.getComponent(i)).getToolTipText() != null && ((JLabel) panel.getComponent(i)).getName()!= null) {
if(((JLabel) panel.getComponent(i)).getName().compareTo("Ayuda")!=0 ){
if (((JLabel)
panel.getComponent(i)).getToolTipText().compareTo(ResourceBundle.getBundle("/resources/Mensajes",Locale.getDefault()).getString("Mensaje_Correcto")) != 0){
isCorrect = false;
}
}
} else if(((JLabel) panel.getComponent(i)).getText()!= null){
text = ((JLabel) panel.getComponent(i)).getText();
if(text.compareTo("Content*")==0){
if(((JTextField) panel.getComponent(i+1)).getText().compareTo("")!=0){
validationForm.setContent(
((JTextField) panel.getComponent(i+1)).getText());
}
}
if(text.compareTo("entry")==0){
if(((JTextField) panel.getComponent(i+1)).getText().compareTo("")!=0){
validationForm.setEntry(((JTextField) panel.getComponent(i+1)).getText());
}
}
if(text.compareTo("message")==0){
if(((JTextField) panel.getComponent(i+1)).getText().compareTo("")!=0){
validationForm.setMessage(((JTextField) panel.getComponent(i+1)).getText());
}
}
}
}
}
return validationForm;
}
public ValidationsForm getValidationsForm (DefaultMutableTreeNodeExt node){
ValidationsForm validationsForm = new ValidationsForm();
//Array con todos los validation Form anidados
ValidationForm[] vValidationForm = new ValidationForm[node.getChildCount()];
// Recorre los nodos anidados
for (int j = 0; j < node.getChildCount(); j++) {
// Nodo actual
DefaultMutableTreeNodeExt Nodo = node.getChildAtExt(j);
ValidationForm validationForm;
JPanel panel = (JPanel) Nodo.getUserObject();
validationForm = getValidationFormInfo(panel);
vValidationForm[j] = validationForm;
}
96
PROYECTO HP
//Añade los Field anidados a Fields
validationsForm.setValidationForm(vValidationForm);
return validationsForm;
}
private void marshal(Object object) {
try {
// Selecciona el archivo creado en nuestro proyecto
IProject project = Activator.PROYECTO;
IPath location = new Path("/src/inventory/xml/" + Activator.NOMBRE_ARCHIVO);
IFile file = project.getFile(location);
File newFile = new File(file.getLocation().toOSString());
// Crea un witer para este archivo
File tmpFile = new File("tmp.txt");
FileOutputStream fos = new FileOutputStream(tmpFile);
// Llamada al metodo marshal
String encoding = "UTF-8";
OutputStreamWriter osw = new OutputStreamWriter(fos, encoding);
Marshaller marshaller = new Marshaller(osw);
marshaller.setEncoding(encoding);
try {
marshaller.marshal(object);
} catch (MarshalException e1) {
e1.printStackTrace();
} catch (ValidationException e1) {
e1.printStackTrace();
}
//Transforma el archivo resultante mediante un XSLT
FileWriter writer = new FileWriter(newFile);
Result bufferResultado = new StreamResult(writer);
StreamSource xsltSource = new StreamSource(getClass().getResourceAsStream("/resources/Indent.xsl"));
StreamSource xmlSource = new StreamSource(tmpFile);
TransformerFactory tfFactory =TransformerFactory.newInstance();
Transformer tf;
try {
writer.flush();
tf = tfFactory.newTransformer(xsltSource);
tf.setOutputProperty(OutputKeys.DOCTYPE_SYSTEM,"bean.dtd");
tf.setOutputProperty(OutputKeys.ENCODING,"UTF-8");
tf.transform(xmlSource, bufferResultado);
tmpFile.delete();
} catch (TransformerConfigurationException e) {
e.printStackTrace();
} catch (TransformerException e) {
e.printStackTrace();
}
// Actualizael editor con la nueva informacion introducida
final IEditorInput ie = new FileEditorInput(file);
Display display = com.hp.spain.observatorio.Plugin.editors.MultiPageEditor.display;
display.asyncExec(new Runnable() {
public void run() {
MultiPageEditor.editor.setInput(ie);
}
});
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
97
PROYECTO HP
98
C.3: Unmarshal
Esta clase es la encargada de convertir los beans ya existentes en
objetos Java que siguen el modelo de datos definido por Castor.
package com.hp.spain.observatorio.Plugin.xml.unmarshal;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Properties;
import javax.swing.ImageIcon;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JTextField;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreeModel;
import org.exolab.castor.xml.MarshalException;
import org.exolab.castor.xml.Unmarshaller;
import org.exolab.castor.xml.ValidationException;
import com.hp.spain.observatorio.Plugin.castor.classes.ExtAttributes;
import com.hp.spain.observatorio.Plugin.castor.classes.Field;
import com.hp.spain.observatorio.Plugin.castor.classes.Fields;
import com.hp.spain.observatorio.Plugin.castor.classes.FindBy;
import com.hp.spain.observatorio.Plugin.castor.classes.JoinBridge;
import com.hp.spain.observatorio.Plugin.castor.classes.Jump;
import com.hp.spain.observatorio.Plugin.castor.classes.Key;
import com.hp.spain.observatorio.Plugin.castor.classes.KeyField;
import com.hp.spain.observatorio.Plugin.castor.classes.Keys;
import com.hp.spain.observatorio.Plugin.castor.classes.ListOfValues;
import com.hp.spain.observatorio.Plugin.castor.classes.ListOfValuesSequence;
import com.hp.spain.observatorio.Plugin.castor.classes.Operations;
import com.hp.spain.observatorio.Plugin.castor.classes.OrderField;
import com.hp.spain.observatorio.Plugin.castor.classes.Param;
import com.hp.spain.observatorio.Plugin.castor.classes.QueryForm;
import com.hp.spain.observatorio.Plugin.castor.classes.Roles;
import com.hp.spain.observatorio.Plugin.castor.classes.ValidationForm;
import com.hp.spain.observatorio.Plugin.castor.classes.ValidationsForm;
import com.hp.spain.observatorio.Plugin.ext.DefaultMutableTreeNodeExt;
import com.hp.spain.observatorio.Plugin.tree.SchemaTreeTraverserExt;
import com.hp.spain.observatorio.Plugin.validation.IValidation;
public class Unmarshal implements IUnmarshal {
static TreeModel model;
static Panel form;
final static Properties properties = new Properties();
public Unmarshal(){
try {
properties.load(getClass().getResourceAsStream("/resources/plugin.properties"));
} catch (IOException e) {
e.printStackTrace();
}
form = SchemaTreeTraverserExt.getFormPanel();
}
/**
* Parsea un archivo XML y lo crea un arbol que lo representa
*
*@param treeModel <code>TreeModel</code> del arbol que representa al XSD
*@param newFile Archivo XML abierto
*/
public Panel unmarshal (TreeModel treeModel, File newFile){
model = treeModel;
DefaultMutableTreeNodeExt rootNode;
JPanel auxPanel = null;
try {
Unmarshaller unmarshaller = new Unmarshaller();
unmarshaller.setClass(com.hp.spain.observatorio.Plugin.castor.classes.Bean.class);
String encoding = "UTF-8";
PROYECTO HP
99
com.hp.spain.observatorio.Plugin.castor.classes.Bean Bean = null;
try {
Bean = (com.hp.spain.observatorio.Plugin.castor.classes.Bean) unmarshaller.unmarshal(new InputStreamReader(new FileInputStream(newFile),encoding));
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
}
rootNode = ((DefaultMutableTreeNodeExt) treeModel.getRoot()).getFirstChildExt();
for(int j=0;j<form.getComponentCount();j++){
auxPanel = (JPanel) form.getComponents()[j];
if (auxPanel.getName() != null){
if (auxPanel.getName().compareTo(rootNode.getID()) == 0){
for(int i = 0; i<((JPanel)form.getComponent(j)).getComponents().length;i++){
if(((JPanel) form.getComponent(j)).getComponent(i) instanceof JLabel){
if (((JLabel)((JPanel) form.getComponent(j)).getComponent(i)).getText()!= null){
String name = ((JLabel)((JPanel) form.getComponent(j)).getComponent(i)).getText();
name = name.substring(0, 1).toUpperCase() + name.substring(1, name.length());
while(name.indexOf("-")!=-1){
name = name.substring(0, name.indexOf("-")) + name.substring(name.indexOf("-")+1, name.indexOf("-")+2).toUpperCase() +
name.substring(name.indexOf("-")+2,name.length());
}
if (i+1<((JPanel)form.getComponent(j)).getComponents().length){
if(name.endsWith("*"))name = name.substring(0, name.length()-1);
try {
String text="";
if(((JPanel) form.getComponent(j)).getComponent(i+1) instanceof JComboBox && !name.startsWith("InheritsFrom")){
Method metodo = Bean.getClass().getMethod("get" + name, null);
Class clase = Class.forName("com.hp.spain.observatorio.Plugin.castor.classes.types.Bean" + name + "Type");
Object ob = metodo.invoke(Bean, null);
Method metodo2 = clase.getMethod("toString", null);
if (ob !=null)
text = (String) metodo2.invoke(ob, null);
else
text = null;
}
else{
Method metodo = Bean.getClass().getMethod("get" + name, null);
text = (String) metodo.invoke(Bean, null);
}
if (text!=null){
String value = new String(text.getBytes(),"UTF-8");
JLabel label = (JLabel)((JPanel) form.getComponent(j)).getComponent(i);
JLabel checking = (JLabel)((JPanel) form.getComponent(j)).getComponent(i+2);
if(((JPanel) form.getComponent(j)).getComponent(i+1) instanceof JTextField)
((JTextField)((JPanel) form.getComponent(j)).getComponent(i+1)).setText(value);
else
((JComboBox)((JPanel) form.getComponent(j)).getComponent(i+1)).setSelectedItem(value);
IValidation validation = null;
String validador = properties.getProperty(label.getText());
Class validacionClass;
if(validador == null) validacionClass = Class.forName("com.hp.spain.observatorio.Plugin.validation.Validation_1");
else validacionClass = Class.forName(validador);
validation = (IValidation) validacionClass.newInstance();
if(validation.esObligatorio(label)){
if (value.isEmpty()){
checking.setIcon(new ImageIcon(getClass().getResource("/icons/cross.png")));
checking.setToolTipText(validation.getToolTipText());
}
else{
checking.setIcon(new ImageIcon(getClass().getResource("/icons/tick.png")));
checking.setToolTipText(validation.getToolTipText());
}
}
//Comprueba si el dato introducido es valido
if(!validation.esValido(value)){
checking.setIcon(new ImageIcon(getClass().getResource("/icons/cross.png")));
checking.setToolTipText(validation.getToolTipText());
}
else {
checking.setIcon(new ImageIcon(getClass().getResource("/icons/tick.png")));
checking.setToolTipText(validation.getToolTipText());
//Nombre de la etiqueta sin asteriscos
String nameLabel = label.getText();
if(nameLabel.endsWith("*"))nameLabel = nameLabel.substring(0,nameLabel.indexOf("*"));
//Comprueba si es el nombre para cambiar el nombre del nodo
if(nameLabel.compareTo("Name")==0 || nameLabel.startsWith("Content")){
findNode((DefaultMutableTreeNodeExt)
((DefaultMutableTreeNodeExt)
model.getRoot()).getChildAt(0),
form.getComponent(j)).getName()).setName(((JTextField)((JPanel) form.getComponent(j)).getComponent(i+1)).getText());
((JPanel)
PROYECTO HP
}
}
form.validate();
}
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
}
}
}
break;
}
}
}
Fields fields = Bean.getFields();
getNodeFromXML(fields);
Keys keys = Bean.getKeys();
getNodeFromXML(keys);
Operations operations = Bean.getOperations();
if(operations != null)
getNodeFromXML(operations);
Roles roles = Bean.getRoles();
if(roles != null)
getNodeFromXML(roles);
ValidationsForm validationsForm = Bean.getValidationsForm();
if(validationsForm != null)
getNodeFromXML(validationsForm);
} catch (MarshalException e) {
e.printStackTrace();
} catch (ValidationException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
return form;
}
/**
* Crea un nuevo nodo del arbol dado un objeto que represente un campo del archio XML
*
* @param object <code>Object</code> que representa un campo del archivo XML
*/
public void getNodeFromXML(Object object){
if (object instanceof Fields) getNode((Fields) object);
if (object instanceof Keys) getNode((Keys) object);
if (object instanceof Key) getNode((Key) object);
if (object instanceof Operations) getNode((Operations) object);
if (object instanceof FindBy) getNode((FindBy) object);
if (object instanceof Roles) getNode((Roles) object);
if (object instanceof ValidationsForm) getNode((ValidationsForm) object);
}
/**
* Crea un nuevo nodo del arbol dado un objeto que represente un campo del archio XML
*
* @param object <code>Object</code> que representa un campo del archivo XML
* @param i Indice del objeto
*/
public void getNodeFromXML(int i, Object object){
if (object instanceof Field) getNode(i,(Field) object);
}
/**
* Introduce en el formulario correspondiente a cada nodo la informacion recogida del campo en el archivo XML
*
* @param object <code>Object</code> que representa un campo del archivo XML que almacena la información a introducir
* @param i Indice del objeto
*/
public void setInfoFromXML(int i, Object object){
if (object instanceof Field) setInfo(i,(Field) object);
if (object instanceof Key) setInfo(i,(Key) object);
100
PROYECTO HP
if (object instanceof KeyField) setInfo(i,(KeyField)object);
if (object instanceof JoinBridge) setInfo(i,(JoinBridge)object);
if (object instanceof Jump) setInfo(i,(Jump)object);
if (object instanceof FindBy) setInfo(i,(FindBy)object);
if (object instanceof OrderField) setInfo(i,(OrderField)object);
if (object instanceof ExtAttributes) setInfo(i,(ExtAttributes)object);
if (object instanceof ValidationForm) setInfo(i,(ValidationForm)object);
if (object instanceof Param) setInfo(i,(Param)object);
}
/**
* Introduce en el formulario correspondiente a cada nodo la informacion recogida del campo en el archivo XML
*
* @param object <code>Object</code> que representa un campo del archivo XML que almacena la información a introducir
*/
public void setInfoFromXML(Object object){
if (object instanceof Operations) setInfo((Operations)object);
if (object instanceof QueryForm) setInfo((QueryForm)object);
if (object instanceof Roles) setInfo((Roles)object);
}
private static DefaultMutableTreeNodeExt findNode(DefaultMutableTreeNodeExt rootNode, String panelName){
DefaultMutableTreeNodeExt thisNode = null;
//Nombre del nodo
String nameNode = rootNode.getID();
if(nameNode.indexOf(" ")!=-1)nameNode = nameNode.substring(0, nameNode.indexOf(" "));
//Comprobamos si es el nodo correspondiente al panel
if(nameNode.compareTo(panelName)==0){
return (DefaultMutableTreeNodeExt) rootNode;
}
for(int i =0; i<rootNode.getChildCount();i++){
thisNode = findNode((DefaultMutableTreeNodeExt) rootNode.getChildAt(i),panelName);
if(thisNode!=null){
return thisNode;
}
}
return thisNode;
}
private static JMenuItem getMenuItem(String nombre, JPopupMenu popupMenu){
JMenuItem menuItem = null;
for(int i = 0;i<popupMenu.getComponentCount();i++){
if(((JMenuItem)popupMenu.getComponent(i)).getText().compareTo(nombre)== 0){
menuItem = (JMenuItem)popupMenu.getComponent(i);
}
}
return menuItem;
}
//NODO FIELDS ---------------------------------------------------------------------------------private void getNode(Fields fields){
JPopupMenu popupMenu = SchemaTreeTraverserExt.getJPopupMenu();
for(int i=0;i<fields.getFieldCount();i++){
com.hp.spain.observatorio.Plugin.castor.classes.Field field = fields.getField(i);
ActionEvent e = null;
getMenuItem("Field",popupMenu).getActionListeners()[0].actionPerformed(e);
setInfoFromXML(i, field);
getNodeFromXML(i,field);
}
}
private void getNode(int i,Field field){
ActionEvent e = null;
ListOfValues listOfValues = field.getListOfValues();
if(listOfValues!=null){
JPopupMenu popupMenu = SchemaTreeTraverserExt.getJPopupMenu();
getMenuItem("ListOfValues",popupMenu).getActionListeners()[0].actionPerformed(e);
setInfo(listOfValues,(JPanel) ((DefaultMutableTreeNodeExt) ((DefaultMutableTreeNodeExt) ((DefaultMutableTreeNodeExt) ((DefaultMutableTreeNode)
model.getRoot()).getFirstChild()).getFirstChild().getChildAt(i)).getFirstChild()).getUserObject());
Param[] param = listOfValues.getListOfValuesSequence().getParam();
if (param != null){
for (int j=0;j<param.length;j++){
getMenuItem("Param", popupMenu).getActionListeners()[0].actionPerformed(e);
setInfoFromXML(j,param[j]);
}
}
}
}
private void setInfo(int i, Field field){
JPanel auxPanel = null;
for(int j=0;j<form.getComponentCount();j++){
101
PROYECTO HP
auxPanel = (JPanel) form.getComponents()[j];
if (auxPanel.getName() != null){
if (auxPanel.getName().compareTo("Field" + i) == 0){
for(int i1 = 0; i1<((JPanel)form.getComponent(j)).getComponents().length;i1++){
if(((JPanel) form.getComponent(j)).getComponent(i1) instanceof JLabel){
if (((JLabel)((JPanel) form.getComponent(j)).getComponent(i1)).getText()!= null){
String name = ((JLabel)((JPanel) form.getComponent(j)).getComponent(i1)).getText();
name = name.substring(0, 1).toUpperCase() + name.substring(1, name.length());
while(name.indexOf("-")!=-1){
name = name.substring(0, name.indexOf("-")) + name.substring(name.indexOf("-")+1, name.indexOf("-")+2).toUpperCase() +
name.substring(name.indexOf("-")+2,name.length());
}
if (i1+1<((JPanel)form.getComponent(j)).getComponents().length){
if(name.endsWith("*"))name = name.substring(0, name.length()-1);
try {
String text="";
if(((JPanel) form.getComponent(j)).getComponent(i1+1) instanceof JComboBox){
Method metodo = field.getClass().getMethod("get" + name, null);
Class clase = Class.forName("com.hp.spain.observatorio.Plugin.castor.classes.types.Field" + name + "Type");
Object ob = metodo.invoke(field, null);
Method metodo2 = clase.getMethod("toString", null);
if (ob !=null)
text = (String) metodo2.invoke(ob, null);
else
text = null;
}
else{
Method metodo = field.getClass().getMethod("get" + name, null);
text = (String) metodo.invoke(field, null);
}
if (text!=null){
String value = new String(text.getBytes(),"UTF-8");
JLabel label = (JLabel)((JPanel) form.getComponent(j)).getComponent(i1);
JLabel checking = (JLabel)((JPanel) form.getComponent(j)).getComponent(i1+2);
if(((JPanel) form.getComponent(j)).getComponent(i1+1) instanceof JTextField)
((JTextField)((JPanel) form.getComponent(j)).getComponent(i1+1)).setText(value);
else
((JComboBox)((JPanel) form.getComponent(j)).getComponent(i1+1)).setSelectedItem(value);
IValidation validation = null;
String validador = properties.getProperty(label.getText());
Class validacionClass;
if(validador == null) validacionClass = Class.forName("com.hp.spain.observatorio.Plugin.validation.Validation_1");
else validacionClass = Class.forName(validador);
validation = (IValidation) validacionClass.newInstance();
if(validation.esObligatorio(label)){
if (value.isEmpty()){
checking.setIcon(new ImageIcon(getClass().getResource("/icons/cross.png")));
checking.setToolTipText(validation.getToolTipText());
}
else{
checking.setIcon(new ImageIcon(getClass().getResource("/icons/tick.png")));
checking.setToolTipText(validation.getToolTipText());
}
}
//Comprueba si el dato introducido es valido
if(!validation.esValido(value)){
checking.setIcon(new ImageIcon(getClass().getResource("/icons/cross.png")));
checking.setToolTipText(validation.getToolTipText());
}
else {
checking.setIcon(new ImageIcon(getClass().getResource("/icons/tick.png")));
checking.setToolTipText(validation.getToolTipText());
//Nombre de la etiqueta sin asteriscos
String nameLabel = label.getText();
if(nameLabel.endsWith("*"))nameLabel = nameLabel.substring(0,nameLabel.indexOf("*"));
//Comprueba si es el nombre para cambiar el nombre del nodo
if(nameLabel.compareTo("Name")==0 || nameLabel.startsWith("Content")){
if(findNode((DefaultMutableTreeNodeExt) ((DefaultMutableTreeNodeExt) model.getRoot()).getChildAt(0), ((JPanel)
form.getComponent(j)).getName())!=null)
findNode((DefaultMutableTreeNodeExt) ((DefaultMutableTreeNodeExt) model.getRoot()).getChildAt(0), ((JPanel)
form.getComponent(j)).getName()).setName(((JTextField)((JPanel) form.getComponent(j)).getComponent(i1+1)).getText());
}
}
form.validate();
}
} catch (SecurityException e1) {
e1.printStackTrace();
} catch (NoSuchMethodException e1) {
e1.printStackTrace();
102
PROYECTO HP
103
} catch (IllegalArgumentException e1) {
checking.setIcon(new
PROYECTO HP
ImageIcon(getClass().getResource("/icons/cross.png")));
checking.setToolTipText(validation.getToolTipText());
}
else{
checking.setIcon(new ImageIcon(getClass().getResource("/icons/tick.png")));
checking.setToolTipText(validation.getToolTipText());
}
}
//Comprueba si el dato introducido es valido
if(!validation.esValido(value)){
checking.setIcon(new ImageIcon(getClass().getResource("/icons/cross.png")));
checking.setToolTipText(validation.getToolTipText());
}
else {
checking.setIcon(new ImageIcon(getClass().getResource("/icons/tick.png")));
checking.setToolTipText(validation.getToolTipText());
//Nombre de la etiqueta sin asteriscos
String nameLabel = label.getText();
if(nameLabel.endsWith("*"))nameLabel = nameLabel.substring(0,nameLabel.indexOf("*"));
//Comprueba si es el nombre para cambiar el nombre del nodo
if(nameLabel.compareTo("Name")==0 || nameLabel.startsWith("Content")){
findNode((DefaultMutableTreeNodeExt) ((DefaultMutableTreeNodeExt) model.getRoot()).getChildAt(0), ((JPanel)
form.getComponent(j)).getName()).setName(((JTextField)((JPanel) form.getComponent(j)).getComponent(i1+1)).getText());
}
}
form.validate();
}
} catch (SecurityException e1) {
e1.printStackTrace();
} catch (NoSuchMethodException e1) {
e1.printStackTrace();
} catch (IllegalArgumentException e1) {
e1.printStackTrace();
} catch (IllegalAccessException e1) {
e1.printStackTrace();
} catch (InvocationTargetException e1) {
e1.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
}
}
}
break;
}
}
}
}
private void setInfo(int i,Param param){
JPanel auxPanel = null;
for(int j=0;j<form.getComponentCount();j++){
auxPanel = (JPanel) form.getComponents()[j];
if (auxPanel.getName() != null){
if (auxPanel.getName().compareTo("Param" + i) == 0){
for(int i1 = 0; i1<((JPanel)form.getComponent(j)).getComponents().length;i1++){
if(((JPanel) form.getComponent(j)).getComponent(i1) instanceof JLabel){
if (((JLabel)((JPanel) form.getComponent(j)).getComponent(i1)).getText()!= null){
String name = ((JLabel)((JPanel) form.getComponent(j)).getComponent(i1)).getText();
name = name.substring(0, 1).toUpperCase() + name.substring(1, name.length());
while(name.indexOf("-")!=-1){
name = name.substring(0, name.indexOf("-")) + name.substring(name.indexOf("-")+1, name.indexOf("-")+2).toUpperCase() +
name.substring(name.indexOf("-")+2,name.length());
}
if (i1+1<((JPanel)form.getComponent(j)).getComponents().length){
if(name.endsWith("*"))name = name.substring(0, name.length()-1);
try {
String text ="";
Method metodo = param.getClass().getMethod("get" + name, null);
text = (String) metodo.invoke(param, null);
if (text!=null){
String value = new String(text.getBytes(),"UTF-8");
JLabel label = (JLabel)((JPanel) form.getComponent(j)).getComponent(i1);
JLabel checking = (JLabel)((JPanel) form.getComponent(j)).getComponent(i1+2);
if(((JPanel) form.getComponent(j)).getComponent(i1+1) instanceof JTextField)
104
PROYECTO HP
((JTextField)((JPanel) form.getComponent(j)).getComponent(i1+1)).setText(value);
else
((JComboBox)((JPanel) form.getComponent(j)).getComponent(i1+1)).setSelectedItem(value);
IValidation validation = null;
String validador = properties.getProperty(label.getText());
Class validacionClass;
if(validador == null) validacionClass = Class.forName("com.hp.spain.observatorio.Plugin.validation.Validation_1");
else validacionClass = Class.forName(validador);
validation = (IValidation) validacionClass.newInstance();
if(validation.esObligatorio(label)){
if (value.isEmpty()){
checking.setIcon(new ImageIcon(getClass().getResource("/icons/cross.png")));
checking.setToolTipText(validation.getToolTipText());
}
else{
checking.setIcon(new ImageIcon(getClass().getResource("/icons/tick.png")));
checking.setToolTipText(validation.getToolTipText());
}
}
//Comprueba si el dato introducido es valido
if(!validation.esValido(value)){
checking.setIcon(new ImageIcon(getClass().getResource("/icons/cross.png")));
checking.setToolTipText(validation.getToolTipText());
}
else {
checking.setIcon(new ImageIcon(getClass().getResource("/icons/tick.png")));
checking.setToolTipText(validation.getToolTipText());
//Nombre de la etiqueta sin asteriscos
String nameLabel = label.getText();
if(nameLabel.endsWith("*"))nameLabel = nameLabel.substring(0,nameLabel.indexOf("*"));
//Comprueba si es el nombre para cambiar el nombre del nodo
if(nameLabel.compareTo("Name")==0 || nameLabel.startsWith("Content")){
findNode((DefaultMutableTreeNodeExt) ((DefaultMutableTreeNodeExt) model.getRoot()).getChildAt(0), ((JPanel)
form.getComponent(j)).getName()).setName(((JTextField)((JPanel) form.getComponent(j)).getComponent(i1+1)).getText());
}
}
form.validate();
}
} catch (SecurityException e1) {
e1.printStackTrace();
} catch (NoSuchMethodException e1) {
e1.printStackTrace();
} catch (IllegalArgumentException e1) {
e1.printStackTrace();
} catch (IllegalAccessException e1) {
e1.printStackTrace();
} catch (InvocationTargetException e1) {
e1.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
}
}
}
break;
}
}
}
}
//NODO KEYS -----------------------------------------------------------------------------------private void getNode(Keys keys){
JPopupMenu popupMenu = SchemaTreeTraverserExt.getJPopupMenu();
for(int i=0;i<keys.getKeyCount();i++){
com.hp.spain.observatorio.Plugin.castor.classes.Key key = keys.getKey(i);
ActionEvent e = null;
getMenuItem("Key",popupMenu).getActionListeners()[0].actionPerformed(e);
getNodeFromXML(key);
setInfoFromXML(i, key);
}
}
private void getNode(Key key){
KeyField[] keyField = key.getKeyField();
ActionEvent e = null;
if(keyField!=null){
105
PROYECTO HP
for(int j = 0; j<keyField.length;j++){
JPopupMenu popupMenu = SchemaTreeTraverserExt.getJPopupMenu();
getMenuItem("KeyField",popupMenu).getActionListeners()[0].actionPerformed(e);
setInfoFromXML(j,keyField[j]);
}
}
JoinBridge[] joinBridge = key.getJoinBridge();
if(joinBridge!=null){
for(int j = 0; j<joinBridge.length;j++){
JPopupMenu popupMenu = SchemaTreeTraverserExt.getJPopupMenu();
getMenuItem("JoinBridge",popupMenu).getActionListeners()[0].actionPerformed(e);
setInfoFromXML(j,joinBridge[j]);
Jump[] jump = joinBridge[j].getJump();
if(jump!=null){
for(int k = 0; k<jump.length;k++){
getMenuItem("Jump",popupMenu).getActionListeners()[0].actionPerformed(e);
setInfoFromXML(k,jump[k]);
}
}
}
}
}
private void setInfo(int i,Key key){
JPanel auxPanel = null;
for(int j=0;j<form.getComponentCount();j++){
auxPanel = (JPanel) form.getComponents()[j];
if (auxPanel.getName() != null){
if (auxPanel.getName().compareTo("Key" + i) == 0){
for(int i1 = 0; i1<((JPanel)form.getComponent(j)).getComponents().length;i1++){
if(((JPanel) form.getComponent(j)).getComponent(i1) instanceof JLabel){
if (((JLabel)((JPanel) form.getComponent(j)).getComponent(i1)).getText()!= null && ((JLabel)((JPanel)
form.getComponent(j)).getComponent(i1)).getText()!= " "){
String name = ((JLabel)((JPanel) form.getComponent(j)).getComponent(i1)).getText();
name = name.substring(0, 1).toUpperCase() + name.substring(1, name.length());
while(name.indexOf("-")!=-1){
name = name.substring(0, name.indexOf("-")) + name.substring(name.indexOf("-")+1, name.indexOf("-")+2).toUpperCase() +
name.substring(name.indexOf("-")+2,name.length());
}
if(name.endsWith("*"))name = name.substring(0, name.length()-1);
try {
String text ="";
if(((JPanel) form.getComponent(j)).getComponent(i1+1) instanceof JComboBox && name.compareTo("ForeignBean")!=0){
Method metodo = key.getClass().getMethod("get" + name, null);
Class clase = Class.forName("com.hp.spain.observatorio.Plugin.castor.classes.types.Key" + name + "Type");
Object ob = metodo.invoke(key, null);
Method metodo2 = clase.getMethod("toString", null);
if (ob !=null)
text = (String) metodo2.invoke(ob, null);
else
text = null;
}
else{
Method metodo = key.getClass().getMethod("get" + name, null);
text = (String) metodo.invoke(key, null);
}
if (text!=null){
String value = new String(text.getBytes(),"UTF-8");
JLabel label = (JLabel)((JPanel) form.getComponent(j)).getComponent(i1);
JLabel checking = (JLabel)((JPanel) form.getComponent(j)).getComponent(i1+2);
if(((JPanel) form.getComponent(j)).getComponent(i1+1) instanceof JTextField)
((JTextField)((JPanel) form.getComponent(j)).getComponent(i1+1)).setText(value);
else
((JComboBox)((JPanel) form.getComponent(j)).getComponent(i1+1)).setSelectedItem(value);
IValidation validation = null;
String validador = properties.getProperty(label.getText());
Class validacionClass;
if(validador == null) validacionClass = Class.forName("com.hp.spain.observatorio.Plugin.validation.Validation_1");
else validacionClass = Class.forName(validador);
validation = (IValidation) validacionClass.newInstance();
if(validation.esObligatorio(label)){
if (value.isEmpty()){
checking.setIcon(new ImageIcon(getClass().getResource("/icons/cross.png")));
checking.setToolTipText(validation.getToolTipText());
}
else{
checking.setIcon(new ImageIcon(getClass().getResource("/icons/tick.png")));
106
PROYECTO HP
checking.setToolTipText(validation.getToolTipText());
107
PROYECTO HP
((JComboBox)((JPanel) form.getComponent(j)).getComponent(i1+1)).setSelectedItem(value);
IValidation validation = null;
String validador = properties.getProperty(label.getText());
Class validacionClass;
if(validador == null) validacionClass = Class.forName("com.hp.spain.observatorio.Plugin.validation.Validation_1");
else validacionClass = Class.forName(validador);
validation = (IValidation) validacionClass.newInstance();
if(validation.esObligatorio(label)){
if (value.isEmpty()){
checking.setIcon(new ImageIcon(getClass().getResource("/icons/cross.png")));
checking.setToolTipText(validation.getToolTipText());
}
else{
checking.setIcon(new ImageIcon(getClass().getResource("/icons/tick.png")));
checking.setToolTipText(validation.getToolTipText());
}
}
//Comprueba si el dato introducido es valido
if(!validation.esValido(value)){
checking.setIcon(new ImageIcon(getClass().getResource("/icons/cross.png")));
checking.setToolTipText(validation.getToolTipText());
}
else {
checking.setIcon(new ImageIcon(getClass().getResource("/icons/tick.png")));
checking.setToolTipText(validation.getToolTipText());
//Nombre de la etiqueta sin asteriscos
String nameLabel = label.getText();
if(nameLabel.endsWith("*"))nameLabel = nameLabel.substring(0,nameLabel.indexOf("*"));
//Comprueba si es el nombre para cambiar el nombre del nodo
if(nameLabel.compareTo("Name")==0 || nameLabel.startsWith("Content")){
findNode((DefaultMutableTreeNodeExt) ((DefaultMutableTreeNodeExt) model.getRoot()).getChildAt(0), ((JPanel)
form.getComponent(j)).getName()).setName(((JTextField)((JPanel) form.getComponent(j)).getComponent(i1+1)).getText());
}
}
form.validate();
}
} catch (SecurityException e1) {
e1.printStackTrace();
} catch (NoSuchMethodException e1) {
e1.printStackTrace();
} catch (IllegalArgumentException e1) {
e1.printStackTrace();
} catch (IllegalAccessException e1) {
e1.printStackTrace();
} catch (InvocationTargetException e1) {
e1.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
}
}
}
break;
}
}
}
}
private void setInfo(int i,JoinBridge joinBridge){
JPanel auxPanel = null;
for(int j=0;j<form.getComponentCount();j++){
auxPanel = (JPanel) form.getComponents()[j];
if (auxPanel.getName() != null){
if (auxPanel.getName().compareTo("JoinBridge" + i) == 0){
for(int i1 = 0; i1<((JPanel)form.getComponent(j)).getComponents().length;i1++){
if(((JPanel) form.getComponent(j)).getComponent(i1) instanceof JLabel){
if (((JLabel)((JPanel) form.getComponent(j)).getComponent(i1)).getText()!= null){
String name = ((JLabel)((JPanel) form.getComponent(j)).getComponent(i1)).getText();
name = name.substring(0, 1).toUpperCase() + name.substring(1, name.length());
while(name.indexOf("-")!=-1){
name = name.substring(0, name.indexOf("-")) + name.substring(name.indexOf("-")+1, name.indexOf("-")+2).toUpperCase() +
name.substring(name.indexOf("-")+2,name.length());
}
108
PROYECTO HP
if (i1+1<((JPanel)form.getComponent(j)).getComponents().length){
if(name.endsWith("*"))name = name.substring(0, name.length()-1);
try {
String text="";
Method metodo = joinBridge.getClass().getMethod("get" + name, null);
text = (String) metodo.invoke(joinBridge, null);
if (text!=null){
String value = new String(text.getBytes(),"UTF-8");
JLabel label = (JLabel)((JPanel) form.getComponent(j)).getComponent(i1);
JLabel checking = (JLabel)((JPanel) form.getComponent(j)).getComponent(i1+2);
if(((JPanel) form.getComponent(j)).getComponent(i1+1) instanceof JTextField)
((JTextField)((JPanel) form.getComponent(j)).getComponent(i1+1)).setText(value);
else
((JComboBox)((JPanel) form.getComponent(j)).getComponent(i1+1)).setSelectedItem(value);
IValidation validation = null;
String validador = properties.getProperty(label.getText());
Class validacionClass;
if(validador == null) validacionClass = Class.forName("com.hp.spain.observatorio.Plugin.validation.Validation_1");
else validacionClass = Class.forName(validador);
validation = (IValidation) validacionClass.newInstance();
if(validation.esObligatorio(label)){
if (value.isEmpty()){
checking.setIcon(new ImageIcon(getClass().getResource("/icons/cross.png")));
checking.setToolTipText(validation.getToolTipText());
}
else{
checking.setIcon(new ImageIcon(getClass().getResource("/icons/tick.png")));
checking.setToolTipText(validation.getToolTipText());
}
}
//Comprueba si el dato introducido es valido
if(!validation.esValido(value)){
checking.setIcon(new ImageIcon(getClass().getResource("/icons/cross.png")));
checking.setToolTipText(validation.getToolTipText());
}
else {
checking.setIcon(new ImageIcon(getClass().getResource("/icons/tick.png")));
checking.setToolTipText(validation.getToolTipText());
//Nombre de la etiqueta sin asteriscos
String nameLabel = label.getText();
if(nameLabel.endsWith("*"))nameLabel = nameLabel.substring(0,nameLabel.indexOf("*"));
}
form.validate();
}
} catch (SecurityException e1) {
e1.printStackTrace();
} catch (NoSuchMethodException e1) {
e1.printStackTrace();
} catch (IllegalArgumentException e1) {
e1.printStackTrace();
} catch (IllegalAccessException e1) {
e1.printStackTrace();
} catch (InvocationTargetException e1) {
e1.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
}
}
}
break;
}
}
}
}
private void setInfo(int i,Jump jump){
JPanel auxPanel = null;
for(int j=0;j<form.getComponentCount();j++){
109
PROYECTO HP
auxPanel = (JPanel) form.getComponents()[j];
if (auxPanel.getName() != null){
if (auxPanel.getName().compareTo("Jump" + i) == 0){
for(int i1 = 0; i1<((JPanel)form.getComponent(j)).getComponents().length;i1++){
if(((JPanel) form.getComponent(j)).getComponent(i1) instanceof JLabel){
if (((JLabel)((JPanel) form.getComponent(j)).getComponent(i1)).getText()!= null){
String name = ((JLabel)((JPanel) form.getComponent(j)).getComponent(i1)).getText();
name = name.substring(0, 1).toUpperCase() + name.substring(1, name.length());
while(name.indexOf("-")!=-1){
name = name.substring(0, name.indexOf("-")) + name.substring(name.indexOf("-")+1, name.indexOf("-")+2).toUpperCase() +
name.substring(name.indexOf("-")+2,name.length());
}
if (i1+1<((JPanel)form.getComponent(j)).getComponents().length){
if(name.endsWith("*"))name = name.substring(0, name.length()-1);
try {
String text="";
Method metodo = jump.getClass().getMethod("get" + name, null);
text = (String) metodo.invoke(jump, null);
if (text!=null){
String value = new String(text.getBytes(),"UTF-8");
JLabel label = (JLabel)((JPanel) form.getComponent(j)).getComponent(i1);
JLabel checking = (JLabel)((JPanel) form.getComponent(j)).getComponent(i1+2);
if(((JPanel) form.getComponent(j)).getComponent(i1+1) instanceof JTextField)
((JTextField)((JPanel) form.getComponent(j)).getComponent(i1+1)).setText(value);
else
((JComboBox)((JPanel) form.getComponent(j)).getComponent(i1+1)).setSelectedItem(value);
IValidation validation = null;
String validador = properties.getProperty(label.getText());
Class validacionClass;
if(validador == null) validacionClass = Class.forName("com.hp.spain.observatorio.Plugin.validation.Validation_1");
else validacionClass = Class.forName(validador);
validation = (IValidation) validacionClass.newInstance();
if(validation.esObligatorio(label)){
if (value.isEmpty()){
checking.setIcon(new ImageIcon(getClass().getResource("/icons/cross.png")));
checking.setToolTipText(validation.getToolTipText());
}
else{
checking.setIcon(new ImageIcon(getClass().getResource("/icons/tick.png")));
checking.setToolTipText(validation.getToolTipText());
}
}
//Comprueba si el dato introducido es valido
if(!validation.esValido(value)){
checking.setIcon(new ImageIcon(getClass().getResource("/icons/cross.png")));
checking.setToolTipText(validation.getToolTipText());
}
else {
checking.setIcon(new ImageIcon(getClass().getResource("/icons/tick.png")));
checking.setToolTipText(validation.getToolTipText());
//Nombre de la etiqueta sin asteriscos
String nameLabel = label.getText();
if(nameLabel.endsWith("*"))nameLabel = nameLabel.substring(0,nameLabel.indexOf("*"));
}
form.validate();
}
} catch (SecurityException e1) {
e1.printStackTrace();
} catch (NoSuchMethodException e1) {
e1.printStackTrace();
} catch (IllegalArgumentException e1) {
e1.printStackTrace();
} catch (IllegalAccessException e1) {
e1.printStackTrace();
} catch (InvocationTargetException e1) {
e1.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
}
}
110
PROYECTO HP
}
break;
}
}
}
}
//NODO OPERATIONS ------------------------------------------------------------------------------private void getNode(Operations operations){
JPopupMenu popupMenu = SchemaTreeTraverserExt.getJPopupMenu();
ActionEvent e = null;
getMenuItem("Operations",popupMenu).getActionListeners()[0].actionPerformed(e);
setInfo (operations);
for (int i= 0; i<operations.getFindByCount();i++){
FindBy findby = operations.getFindBy(i);
getMenuItem("FindBy",popupMenu).getActionListeners()[0].actionPerformed(e);
getNodeFromXML(findby);
setInfoFromXML(i,findby);
}
QueryForm queryform = operations.getQueryForm();
if(queryform!=null){
getMenuItem("QueryForm",popupMenu).getActionListeners()[0].actionPerformed(e);
setInfoFromXML(queryform);
}
}
private void getNode(FindBy findBy){
OrderField[] orderField = findBy.getOrderField();
ActionEvent e = null;
if(orderField != null){
for(int j = 0; j<orderField.length; j++){
JPopupMenu popupMenu = SchemaTreeTraverserExt.getJPopupMenu();
getMenuItem("OrderField", popupMenu).getActionListeners()[0].actionPerformed(e);
setInfoFromXML(j,orderField[j]);
}
}
}
private void setInfo(Operations operations){
JPanel auxPanel = null;
for(int j=0;j<form.getComponentCount();j++){
auxPanel = (JPanel) form.getComponents()[j];
if (auxPanel.getName() != null){
if (auxPanel.getName().compareTo("Operations0") == 0){
for(int i1 = 0; i1<((JPanel)form.getComponent(j)).getComponents().length;i1++){
if(((JPanel) form.getComponent(j)).getComponent(i1) instanceof JLabel){
if (((JLabel)((JPanel) form.getComponent(j)).getComponent(i1)).getText()!= null){
String name = ((JLabel)((JPanel) form.getComponent(j)).getComponent(i1)).getText();
name = name.substring(0, 1).toUpperCase() + name.substring(1, name.length());
while(name.indexOf("-")!=-1){
name = name.substring(0, name.indexOf("-")) + name.substring(name.indexOf("-")+1, name.indexOf("-")+2).toUpperCase() +
name.substring(name.indexOf("-")+2,name.length());
}
if (i1+1<((JPanel)form.getComponent(j)).getComponents().length){
if(name.endsWith("*"))name = name.substring(0, name.length()-1);
try {
String text ="";
if(((JPanel) form.getComponent(j)).getComponent(i1+1) instanceof JComboBox){
Method metodo = operations.getClass().getMethod("get" + name, null);
Class clase = Class.forName("com.hp.spain.observatorio.Plugin.castor.classes.types.Operations" + name + "Type");
Object ob = metodo.invoke(operations, null);
Method metodo2 = clase.getMethod("toString", null);
if (ob !=null)
text = (String) metodo2.invoke(ob, null);
else
text = null;
}
else{
Method metodo = operations.getClass().getMethod("get" + name, null);
text = (String) metodo.invoke(operations, null);
}
if (text!=null){
String value = new String(text.getBytes(),"UTF-8");
JLabel label = (JLabel)((JPanel) form.getComponent(j)).getComponent(i1);
JLabel checking = (JLabel)((JPanel) form.getComponent(j)).getComponent(i1+2);
if(((JPanel) form.getComponent(j)).getComponent(i1+1) instanceof JTextField)
111
PROYECTO HP
((JTextField)((JPanel) form.getComponent(j)).getComponent(i1+1)).setText(value);
(i1+1<((JPanel)form.getComponent(j)).getComponents().length){
if
112
PROYECTO HP
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
}
}
}
break;
}
}
}
}
private void setInfo(int i, FindBy findby){
JPanel auxPanel = null;
for(int j=0;j<form.getComponentCount();j++){
auxPanel = (JPanel) form.getComponents()[j];
if (auxPanel.getName() != null){
if (auxPanel.getName().compareTo("FindBy" + i) == 0){
for(int i1 = 0; i1<((JPanel)form.getComponent(j)).getComponents().length;i1++){
if(((JPanel) form.getComponent(j)).getComponent(i1) instanceof JLabel){
if (((JLabel)((JPanel) form.getComponent(j)).getComponent(i1)).getText()!= null && ((JLabel)((JPanel)
form.getComponent(j)).getComponent(i1)).getText()!= " "){
String name = ((JLabel)((JPanel) form.getComponent(j)).getComponent(i1)).getText();
name = name.substring(0, 1).toUpperCase() + name.substring(1, name.length());
while(name.indexOf("-")!=-1){
name = name.substring(0, name.indexOf("-")) + name.substring(name.indexOf("-")+1, name.indexOf("-")+2).toUpperCase() +
name.substring(name.indexOf("-")+2,name.length());
}
if(name.endsWith("*"))name = name.substring(0, name.length()-1);
try {
String text ="";
if(((JPanel) form.getComponent(j)).getComponent(i1+1) instanceof JComboBox && name.compareTo("ForeignBean")!=0 &&
name.compareTo("Key")!=0){
Method metodo = findby.getClass().getMethod("get" + name, null);
Class clase = Class.forName("com.hp.spain.observatorio.Plugin.castor.classes.types.FindBy" + name + "Type");
Object ob = metodo.invoke(findby, null);
Method metodo2 = clase.getMethod("toString", null);
if (ob !=null)
text = (String) metodo2.invoke(ob, null);
else
text = null;
}
else{
Method metodo = findby.getClass().getMethod("get" + name, null);
text = (String) metodo.invoke(findby, null);
}
if (text!=null){
String value = new String(text.getBytes(),"UTF-8");
JLabel label = (JLabel)((JPanel) form.getComponent(j)).getComponent(i1);
JLabel checking = (JLabel)((JPanel) form.getComponent(j)).getComponent(i1+2);
if(((JPanel) form.getComponent(j)).getComponent(i1+1) instanceof JTextField)
((JTextField)((JPanel) form.getComponent(j)).getComponent(i1+1)).setText(value);
else
((JComboBox)((JPanel) form.getComponent(j)).getComponent(i1+1)).setSelectedItem(value);
IValidation validation = null;
String validador = properties.getProperty(label.getText());
Class validacionClass;
if(validador == null) validacionClass = Class.forName("com.hp.spain.observatorio.Plugin.validation.Validation_1");
else validacionClass = Class.forName(validador);
validation = (IValidation) validacionClass.newInstance();
if(validation.esObligatorio(label)){
if (value.isEmpty()){
checking.setIcon(new ImageIcon(getClass().getResource("/icons/cross.png")));
checking.setToolTipText(validation.getToolTipText());
}
else{
checking.setIcon(new ImageIcon(getClass().getResource("/icons/tick.png")));
checking.setToolTipText(validation.getToolTipText());
}
}
//Comprueba si el dato introducido es valido
if(!validation.esValido(value)){
checking.setIcon(new ImageIcon(getClass().getResource("/icons/cross.png")));
checking.setToolTipText(validation.getToolTipText());
}
else {
checking.setIcon(new ImageIcon(getClass().getResource("/icons/tick.png")));
checking.setToolTipText(validation.getToolTipText());
113
PROYECTO HP
//Nombre de la etiqueta sin asteriscos
String nameLabel = label.getText();
if(nameLabel.endsWith("*"))nameLabel = nameLabel.substring(0,nameLabel.indexOf("*"));
//Comprueba si es el nombre para cambiar el nombre del nodo
if(nameLabel.compareTo("Name")==0 || nameLabel.startsWith("Content")){
findNode((DefaultMutableTreeNodeExt) ((DefaultMutableTreeNodeExt) model.getRoot()).getChildAt(0), ((JPanel)
form.getComponent(j)).getName()).setName(((JTextField)((JPanel) form.getComponent(j)).getComponent(i1+1)).getText());
}
}
form.validate();
}
} catch (SecurityException e1) {
e1.printStackTrace();
} catch (NoSuchMethodException e1) {
e1.printStackTrace();
} catch (IllegalArgumentException e1) {
e1.printStackTrace();
} catch (IllegalAccessException e1) {
e1.printStackTrace();
} catch (InvocationTargetException e1) {
e1.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
}
}
break;
}
}
}
}
private void setInfo(int i, OrderField orderField){
JPanel auxPanel = null;
for(int j=0;j<form.getComponentCount();j++){
auxPanel = (JPanel) form.getComponents()[j];
if (auxPanel.getName() != null){
if (auxPanel.getName().compareTo("OrderField" + i) == 0){
for(int i1 = 0; i1<((JPanel)form.getComponent(j)).getComponents().length;i1++){
if(((JPanel) form.getComponent(j)).getComponent(i1) instanceof JLabel){
if (((JLabel)((JPanel) form.getComponent(j)).getComponent(i1)).getText()!= null){
String name = ((JLabel)((JPanel) form.getComponent(j)).getComponent(i1)).getText();
name = name.substring(0, 1).toUpperCase() + name.substring(1, name.length());
while(name.indexOf("-")!=-1){
name = name.substring(0, name.indexOf("-")) + name.substring(name.indexOf("-")+1, name.indexOf("-")+2).toUpperCase() +
name.substring(name.indexOf("-")+2,name.length());
}
if (i1+1<((JPanel)form.getComponent(j)).getComponents().length){
if(name.endsWith("*"))name = name.substring(0, name.length()-1);
try {
String text ="";
if(((JPanel) form.getComponent(j)).getComponent(i1+1) instanceof JComboBox && name.compareTo("Content")!=0){
Method metodo = orderField.getClass().getMethod("get" + name, null);
Class clase = Class.forName("com.hp.spain.observatorio.Plugin.castor.classes.types.OrderField" + name + "Type");
Object ob = metodo.invoke(orderField, null);
Method metodo2 = clase.getMethod("toString", null);
if (ob !=null)
text = (String) metodo2.invoke(ob, null);
else
text = null;
}
else{
Method metodo = orderField.getClass().getMethod("get" + name, null);
text = (String) metodo.invoke(orderField, null);
}
if (text!=null){
String value = new String(text.getBytes(),"UTF-8");
JLabel label = (JLabel)((JPanel) form.getComponent(j)).getComponent(i1);
JLabel checking = (JLabel)((JPanel) form.getComponent(j)).getComponent(i1+2);
if(((JPanel) form.getComponent(j)).getComponent(i1+1) instanceof JTextField)
((JTextField)((JPanel) form.getComponent(j)).getComponent(i1+1)).setText(value);
else
114
PROYECTO HP
((JComboBox)((JPanel) form.getComponent(j)).getComponent(i1+1)).setSelectedItem(value);
IValidation validation = null;
String validador = properties.getProperty(label.getText());
Class validacionClass;
if(validador == null) validacionClass = Class.forName("com.hp.spain.observatorio.Plugin.validation.Validation_1");
else validacionClass = Class.forName(validador);
validation = (IValidation) validacionClass.newInstance();
if(validation.esObligatorio(label)){
if (value.isEmpty()){
checking.setIcon(new ImageIcon(getClass().getResource("/icons/cross.png")));
checking.setToolTipText(validation.getToolTipText());
}
else{
checking.setIcon(new ImageIcon(getClass().getResource("/icons/tick.png")));
checking.setToolTipText(validation.getToolTipText());
}
}
//Comprueba si el dato introducido es valido
if(!validation.esValido(value)){
checking.setIcon(new ImageIcon(getClass().getResource("/icons/cross.png")));
checking.setToolTipText(validation.getToolTipText());
}
else {
checking.setIcon(new ImageIcon(getClass().getResource("/icons/tick.png")));
checking.setToolTipText(validation.getToolTipText());
//Nombre de la etiqueta sin asteriscos
String nameLabel = label.getText();
if(nameLabel.endsWith("*"))nameLabel = nameLabel.substring(0,nameLabel.indexOf("*"));
//Comprueba si es el nombre para cambiar el nombre del nodo
if(nameLabel.compareTo("Name")==0){
findNode((DefaultMutableTreeNodeExt) ((DefaultMutableTreeNodeExt) model.getRoot()).getChildAt(0), ((JPanel)
form.getComponent(j)).getName()).setName(((JTextField)((JPanel) form.getComponent(j)).getComponent(i1+1)).getText());
}
if(nameLabel.startsWith("Content")){
findNode((DefaultMutableTreeNodeExt) ((DefaultMutableTreeNodeExt) model.getRoot()).getChildAt(0), ((JPanel)
form.getComponent(j)).getName()).setName(((JComboBox)((JPanel) form.getComponent(j)).getComponent(i1+1)).getSelectedItem().toString());
}
}
form.validate();
}
} catch (SecurityException e1) {
e1.printStackTrace();
} catch (NoSuchMethodException e1) {
e1.printStackTrace();
} catch (IllegalArgumentException e1) {
e1.printStackTrace();
} catch (IllegalAccessException e1) {
e1.printStackTrace();
} catch (InvocationTargetException e1) {
e1.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
}
}
}
break;
}
}
}
}
//NODO ROLES ------------------------------------------------------------------------------------private void getNode(Roles roles){
JPopupMenu popupMenu = SchemaTreeTraverserExt.getJPopupMenu();
ActionEvent e = null;
getMenuItem("Roles",popupMenu).getActionListeners()[0].actionPerformed(e);
setInfo(roles);
for (int i= 0; i<roles.getExtAttributesCount();i++){
ExtAttributes extattributes = roles.getExtAttributes(i);
getMenuItem("Ext-Attributes",popupMenu).getActionListeners()[0].actionPerformed(e);
setInfoFromXML (i,extattributes);
}
}
private void setInfo(int i, ExtAttributes extattributes){
JPanel auxPanel = null;
for(int j=0;j<form.getComponentCount();j++){
auxPanel = (JPanel) form.getComponents()[j];
if (auxPanel.getName() != null){
115
PROYECTO HP
if (auxPanel.getName().compareTo("Ext-Attributes" + i) == 0){
for(int i1 = 0; i1<((JPanel)form.getComponent(j)).getComponents().length;i1++){
if(((JPanel) form.getComponent(j)).getComponent(i1) instanceof JLabel){
if (((JLabel)((JPanel) form.getComponent(j)).getComponent(i1)).getText()!= null && ((JLabel)((JPanel)
form.getComponent(j)).getComponent(i1)).getText()!= " "){
String name = ((JLabel)((JPanel) form.getComponent(j)).getComponent(i1)).getText();
name = name.substring(0, 1).toUpperCase() + name.substring(1, name.length());
while(name.indexOf("-")!=-1){
name = name.substring(0, name.indexOf("-")) + name.substring(name.indexOf("-")+1, name.indexOf("-")+2).toUpperCase() +
name.substring(name.indexOf("-")+2,name.length());
}
if(name.endsWith("*"))name = name.substring(0, name.length()-1);
try {
String text ="";
if(((JPanel) form.getComponent(j)).getComponent(i1+1) instanceof JComboBox){
Method metodo = extattributes.getClass().getMethod("get" + name, null);
Class clase = Class.forName("com.hp.spain.observatorio.Plugin.castor.classes.types.ExtAttributes" + name + "Type");
Object ob = metodo.invoke(extattributes, null);
Method metodo2 = clase.getMethod("toString", null);
if (ob !=null)
text = (String) metodo2.invoke(ob, null);
else
text = null;
}
else{
Method metodo = extattributes.getClass().getMethod("get" + name, null);
text = (String) metodo.invoke(extattributes, null);
}
if (text!=null){
String value = new String(text.getBytes(),"UTF-8");
JLabel label = (JLabel)((JPanel) form.getComponent(j)).getComponent(i1);
JLabel checking = (JLabel)((JPanel) form.getComponent(j)).getComponent(i1+2);
if(((JPanel) form.getComponent(j)).getComponent(i1+1) instanceof JTextField)
((JTextField)((JPanel) form.getComponent(j)).getComponent(i1+1)).setText(value);
else
((JComboBox)((JPanel) form.getComponent(j)).getComponent(i1+1)).setSelectedItem(value);
IValidation validation = null;
String validador = properties.getProperty(label.getText());
Class validacionClass;
if(validador == null) validacionClass = Class.forName("com.hp.spain.observatorio.Plugin.validation.Validation_1");
else validacionClass = Class.forName(validador);
validation = (IValidation) validacionClass.newInstance();
if(validation.esObligatorio(label)){
if (value.isEmpty()){
checking.setIcon(new ImageIcon(getClass().getResource("/icons/cross.png")));
checking.setToolTipText(validation.getToolTipText());
}
else{
checking.setIcon(new ImageIcon(getClass().getResource("/icons/tick.png")));
checking.setToolTipText(validation.getToolTipText());
}
}
//Comprueba si el dato introducido es valido
if(!validation.esValido(value)){
checking.setIcon(new ImageIcon(getClass().getResource("/icons/cross.png")));
checking.setToolTipText(validation.getToolTipText());
}
else {
checking.setIcon(new ImageIcon(getClass().getResource("/icons/tick.png")));
checking.setToolTipText(validation.getToolTipText());
//Nombre de la etiqueta sin asteriscos
String nameLabel = label.getText();
if(nameLabel.endsWith("*"))nameLabel = nameLabel.substring(0,nameLabel.indexOf("*"));
//Comprueba si es el nombre para cambiar el nombre del nodo
if(nameLabel.compareTo("Name")==0 || nameLabel.startsWith("Content")){
findNode((DefaultMutableTreeNodeExt) ((DefaultMutableTreeNodeExt) model.getRoot()).getChildAt(0), ((JPanel)
form.getComponent(j)).getName()).setName(((JTextField)((JPanel) form.getComponent(j)).getComponent(i1+1)).getText());
}
}
form.validate();
}
} catch (SecurityException e1) {
e1.printStackTrace();
} catch (NoSuchMethodException e1) {
e1.printStackTrace();
} catch (IllegalArgumentException e1) {
e1.printStackTrace();
} catch (IllegalAccessException e1) {
e1.printStackTrace();
} catch (InvocationTargetException e1) {
e1.printStackTrace();
} catch (ClassNotFoundException e) {
116
PROYECTO HP
117
e.printStackTrace();
checking.setIcon(new
PROYECTO HP
ImageIcon(getClass().getResource("/icons/tick.png")));
checking.setToolTipText(validation.getToolTipText());
//Nombre de la etiqueta sin asteriscos
String nameLabel = label.getText();
if(nameLabel.endsWith("*"))nameLabel = nameLabel.substring(0,nameLabel.indexOf("*"));
//Comprueba si es el nombre para cambiar el nombre del nodo
if(nameLabel.compareTo("Name")==0 || nameLabel.startsWith("Content")){
findNode((DefaultMutableTreeNodeExt) ((DefaultMutableTreeNodeExt) model.getRoot()).getChildAt(0), ((JPanel)
form.getComponent(j)).getName()).setName(((JTextField)((JPanel) form.getComponent(j)).getComponent(i1+1)).getText());
}
}
form.validate();
}
} catch (SecurityException e1) {
e1.printStackTrace();
} catch (NoSuchMethodException e1) {
e1.printStackTrace();
} catch (IllegalArgumentException e1) {
e1.printStackTrace();
} catch (IllegalAccessException e1) {
e1.printStackTrace();
} catch (InvocationTargetException e1) {
e1.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
}
}
}
break;
}
}
}
}
//NODO VALIDATIONS-FORM -------------------------------------------------------------------------private void getNode(ValidationsForm validationsForm){
JPopupMenu popupMenu = SchemaTreeTraverserExt.getJPopupMenu();
for(int i=0;i<validationsForm.getValidationFormCount();i++){
com.hp.spain.observatorio.Plugin.castor.classes.ValidationForm validationForm = validationsForm.getValidationForm(i);
ActionEvent e = null;
getMenuItem("Validations-form",popupMenu).getActionListeners()[0].actionPerformed(e);
getMenuItem("Validation-form",popupMenu).getActionListeners()[0].actionPerformed(e);
setInfoFromXML(i, validationForm);
}
}
private void setInfo(int i,ValidationForm validationForm){
JPanel auxPanel = null;
for(int j=0;j<form.getComponentCount();j++){
auxPanel = (JPanel) form.getComponents()[j];
if (auxPanel.getName() != null){
if (auxPanel.getName().compareTo("Validation-form" + i) == 0){
for(int i1 = 0; i1<((JPanel)form.getComponent(j)).getComponents().length;i1++){
if(((JPanel) form.getComponent(j)).getComponent(i1) instanceof JLabel){
if (((JLabel)((JPanel) form.getComponent(j)).getComponent(i1)).getText()!= null){
String name = ((JLabel)((JPanel) form.getComponent(j)).getComponent(i1)).getText();
name = name.substring(0, 1).toUpperCase() + name.substring(1, name.length());
while(name.indexOf("-")!=-1){
name = name.substring(0, name.indexOf("-")) + name.substring(name.indexOf("-")+1, name.indexOf("-")+2).toUpperCase() +
name.substring(name.indexOf("-")+2,name.length());
}
if (i1+1<((JPanel)form.getComponent(j)).getComponents().length){
if(name.endsWith("*"))name = name.substring(0, name.length()-1);
try {
String text ="";
if(((JPanel) form.getComponent(j)).getComponent(i+1) instanceof JComboBox){
Method metodo = validationForm.getClass().getMethod("get" + name, null);
Class clase = Class.forName("com.hp.spain.observatorio.Plugin.castor.classes.types.ValidationForm" + name + "Type");
Object ob = metodo.invoke(validationForm, null);
Method metodo2 = clase.getMethod("toString", null);
if (ob !=null)
text = (String) metodo2.invoke(ob, null);
else
text = null;
}
else{
118
PROYECTO HP
Method metodo = validationForm.getClass().getMethod("get" + name, null);
text = (String) metodo.invoke(validationForm, null);
}
if (text!=null){
String value = new String(text.getBytes(),"UTF-8");
JLabel label = (JLabel)((JPanel) form.getComponent(j)).getComponent(i1);
JLabel checking = (JLabel)((JPanel) form.getComponent(j)).getComponent(i1+2);
if(((JPanel) form.getComponent(j)).getComponent(i1+1) instanceof JTextField)
((JTextField)((JPanel) form.getComponent(j)).getComponent(i1+1)).setText(value);
else
((JComboBox)((JPanel) form.getComponent(j)).getComponent(i1+1)).setSelectedItem(value);
IValidation validation = null;
String validador = properties.getProperty(label.getText());
Class validacionClass;
if(validador == null) validacionClass = Class.forName("com.hp.spain.observatorio.Plugin.validation.Validation_1");
else validacionClass = Class.forName(validador);
validation = (IValidation) validacionClass.newInstance();
if(validation.esObligatorio(label)){
if (value.isEmpty()){
checking.setIcon(new ImageIcon(getClass().getResource("/icons/cross.png")));
checking.setToolTipText(validation.getToolTipText());
}
else{
checking.setIcon(new ImageIcon(getClass().getResource("/icons/tick.png")));
checking.setToolTipText(validation.getToolTipText());
}
}
//Comprueba si el dato introducido es valido
if(!validation.esValido(value)){
checking.setIcon(new ImageIcon(getClass().getResource("/icons/cross.png")));
checking.setToolTipText(validation.getToolTipText());
}
else {
checking.setIcon(new ImageIcon(getClass().getResource("/icons/tick.png")));
checking.setToolTipText(validation.getToolTipText());
//Nombre de la etiqueta sin asteriscos
String nameLabel = label.getText();
if(nameLabel.endsWith("*"))nameLabel = nameLabel.substring(0,nameLabel.indexOf("*"));
//Comprueba si es el nombre para cambiar el nombre del nodo
if(nameLabel.compareTo("Name")==0 || nameLabel.startsWith("Content")){
findNode((DefaultMutableTreeNodeExt) ((DefaultMutableTreeNodeExt) model.getRoot()).getChildAt(0), ((JPanel)
form.getComponent(j)).getName()).setName(((JTextField)((JPanel) form.getComponent(j)).getComponent(i1+1)).getText());
}
}
form.validate();
}
} catch (SecurityException e1) {
e1.printStackTrace();
} catch (NoSuchMethodException e1) {
e1.printStackTrace();
} catch (IllegalArgumentException e1) {
e1.printStackTrace();
} catch (IllegalAccessException e1) {
e1.printStackTrace();
} catch (InvocationTargetException e1) {
e1.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
}
}
}
break;
}
}
}
}
}
119