API-INTERFAZ DE PROGRAMACIÓN Y GENERACIÓN DE COMPONENTES PARA SWB CURSO: CURSO API API-INTERFAZ DE PROGRAMACIÓN Y GENERACIÓN DE COMPONENTES PARA SWB Curso: Curso API Fondo de Información y Documentación para la Industria Av. San Fernando #37 Col. Toriello Guerra Del. Tlalpan México DF El Copyright y las Marcas registradas INFOTEC WebBuilder, SemanticWebBuilder, el personaje Semius y demás logotipos, emblemas y características distintivas, así como elementos relacionados son propiedad de INFOTEC Fondo de Información y Documentación para la Industria, Centro de Investigación CONACYT. Reservados todos los derechos. Queda estrictamente prohibido bajo las sanciones establecidas en las leyes, la reproducción parcial o total de esta obra por cualquier medio o procedimiento de alquiler o préstamos públicos de ejemplares de la misma, sin la autorización escrita de INFOTEC Fondo de Información y Documentación para la Industria, Centro de Investigación CONACYT. API y Programación de Recursos Prologo SemanticWebBuilder (SWB) es una plataforma tecnológica desarrollada en INFOTEC, un Centro de Investigación y Desarrollo Tecnológico del CONACYT, por lo que es un producto hecho en México y por mexicanos que tiene como propósito principal el brindar los elementos y utilerías necesarias para permitir una construcción rápida y simple de Sitios y Portales Web Semánticos, así como desarrollo de aplicaciones con características semánticas. La idea principal de aplicar Semántica a los Sitios y Portales Web o mejor dicho incorporarle Semántica a Internet, es permitir que la información pueda ser definida con un significado específico, de forma que conforme se le van incorporando descripciones y propiedades a cada elemento de información este pueda tener más aspectos que lo distingan de los demás y lo puedan identificar mejor, logrando con ello que pueda ser fácilmente consultado, interpretado y procesado ya sea por personas o incluso por otras aplicaciones y sistemas, es decir por maquinas. Esta característica de la semántica que hace que la información tenga un mayor significado y en consecuencia sea fácilmente consultada por personas o sistemas, implica que el intercambio e integración de información sea de forma más natural sin importar el lugar físico donde se encuentre la información o la forma en que haya sido procesada originalmente. Esto implica que podremos realizar una consulta de información y la respuesta será más completa y adecuada a nuestro criterio de búsqueda, pues la fuente de consulta podrá ser leída, interpretada e integrada a partir de la información publicada por diferentes organizaciones, a múltiples niveles técnicos y/o humanos, permitiendo con ello obtener información más completa y adecuada a los requerimientos específicos de cada usuario en la red. Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. i API y Programación de Recursos Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. ii API y Programación de Recursos Índice de Contenidos Prologo ............................................................................................................................... i Índice de Contenidos ......................................................................................................... iii Acerca de este manual ...................................................................................................... v Objetivos............................................................................................................................ v Convenciones usadas en este manual .............................................................................. vi Acerca del administrador de SemanticWebBuilder .......................................................... viii Comenzando a trabajar… .................................................................................................. xi SEMANTICWEBBUILDER ................................................................................................. 1 SUITE DE HERRAMIENTAS DE SEMANTICWEBBUILDER ......................................... 1 SemWB Portal ............................................................................................................ 1 SemWB End Point ...................................................................................................... 2 SemWB Platform ........................................................................................................ 2 AppServer................................................................................................................... 2 SemWB Triple Store ................................................................................................... 2 SemWB Base ............................................................................................................. 2 ARQUITECTURA DE SEMANTICWEBBUILDER .......................................................... 4 Componentes ............................................................................................................. 8 SWBPortal .................................................................................................................. 8 SWBForms ................................................................................................................. 8 SWBModel.................................................................................................................. 8 SWBPlatform .............................................................................................................. 9 Cache y Sincronización .............................................................................................. 9 SWBTripleStore .......................................................................................................... 9 SWBBase ................................................................................................................... 9 Servidor de Aplicaciones ............................................................................................ 9 INTRODUCCIÓN AL API DE PROGRAMACIÓN DE RECURSOS DE SEMANTICWEBBUILDER ............................................................................................... 10 RECURSO ................................................................................................................... 10 CICLO DE VIDA DE UN RECURSO ............................................................................ 11 MODOS DE UN RECURSO ......................................................................................... 11 TIPOS DE RECURSOS ............................................................................................... 11 MÉTODOS DE LLAMADA............................................................................................ 12 API ............................................................................................................................... 12 Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. iii API y Programación de Recursos INTERFAZ SWBResource ........................................................................................... 14 Método init().............................................................................................................. 15 Método render() ........................................................................................................ 15 Método processAction() ............................................................................................ 16 Método setResourceBase() ...................................................................................... 17 Método getResourceBase() ...................................................................................... 17 Método install() ......................................................................................................... 17 Método uninstall() ..................................................................................................... 17 Método destroy()....................................................................................................... 17 GENERIC RESOURCE ................................................................................................ 18 INCORPORACIÓN DE UN RECURSO A SEMANTICWEBBUILDER .......................... 22 INCORPORACIÓN DE LOS OBJETOS RESOURCE, WEB PAGE, USER, SWBRESOURCEURL QUE INTERACTÚAN CON LA CLASE GENERIC RESOURCE ..................................................................................................................................... 25 Objeto Resource ....................................................................................................... 25 Objeto WebPage ...................................................................................................... 26 Objeto User .............................................................................................................. 31 OBJETO SWBResourceURL .................................................................................... 33 INCORPORACIÓN DE MODOS PERSONALIZADOS DE UN RECURSO A SEMANTICWEBBUILDER ........................................................................................... 34 INCORPORACIÓN DEL MÉTODO DE LLAMADA “DIRECT” A SEMANTICWEBBUILDER ........................................................................................... 34 INCLUSION DE SERVLET/JSP ................................................................................... 35 INTERNACIONALIZACIÓN DE UN RECURSO ........................................................... 38 ANEXOS.......................................................................................................................... 39 CAMBIOS DE WB3 A SWB.......................................................................................... 40 SEMANTICWEBBUILDER BASE ................................................................................. 42 Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. iv API y Programación de Recursos Acerca de este manual Este manual fue realizado con el objetivo de poder crear recursos personalizados para extender la funcionalidad de SemanticWebBuilder. El API cuenta con una serie de clases e interfaces que impulsan el esquema Open Source para que los desarrolladores contribuyan a la competitividad del gobierno y de las pymes, para lograr el uso estratégico de SWB e impulsar la transición de México hacia la sociedad de la información y conocimiento En él se muestra la creación de recursos básicos, utilizando las clases e interfaces principales que auxiliaran en la creación de recursos más complejos. Objetivos General: Al finalizar el curso el alumno podrá crear sus propios recursos utilizando las clases e interfaces del API de SemanticWebBuilder. Obtendrá un conocimiento general de la plataforma que le ayudara a resolver sus necesidades de manejo y manipulación de información como desarrollador. Específicos: Al finalizar el curso el alumno creara recursos que podrán visualizarse y administrarse desde la plataforma de SemanticWebBuilder. Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. v API y Programación de Recursos Convenciones usadas en este manual Las siguientes convenciones son utilizadas en este manual para representar diferentes elementos de capacitación y recursos alternativos de aprendizaje: Iconos Sabias Que – Indica comentarios al margen en los que se extenderá el tema expuesto mediante recomendaciones o tips que mejoren el aprovechamiento de la herramienta Consideraciones Importantes – Exponen puntos importantes que deben tenerse en cuenta para la correcta operación de las utilerías. Nota – Indica Información adicional que puede ayudarle a aprovechar mejor la funcionalidad expuesta. Referencia – Indica la necesidad de consultar otro documento o dirección Web en donde se encontrara mayor información sobre el tema expuesto. Procedimiento Guiado – Indica que se comenzara la descripción paso a paso de la operación de un proceso. Ejercicio Guiado – A partir de este punto se comenzara la ejecución de un ejercicio que deberá realizar el usuario de manera guiada paso a paso con el manual. Resultado – Expone el efecto final correcto de una operación o procedimiento. Diagnostico – Por características de la tecnología involucrada, se generan resultados no deseados. Aquí se indicara como resolverlo. Improcedente – Indica situaciones tecnológicas en las que no es posible realizar una operación o que requiere de algún proceso alterno para obtener el resultado deseado. Cuidado – Indica que existe alguna información restringida o con derechos reservados. Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. vi API y Programación de Recursos Convenciones Tipográficas Arial 26 Negrita, es utilizada como titulo de tema Calibri 14 color Azul Énfasis Negrita, es utilizada para los títulos de tema Calibri 12 color Azul Énfasis 1 negrita, es utilizada para destacar subtemas Arial 11, es utilizada como fuente principal para el cuerpo del texto <Times New Roman 11> es utilizada para descripción de configuraciones o código Arial 10 negrita color azul con recuadro y sombreado azul indica temas a resaltar y/o puntos importante en los que el lector debe prestar especial atención Arial 10 en color azul con recuadro azul y sombreado azul, se utiliza para denotar puntos importantes en los que el lector debe prestar atención especial Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. vii API y Programación de Recursos Acerca del administrador de SemanticWebBuilder Para accesar a la administración de SemanticWebBuilder (SWB) es necesario que en el URL agregue al final “swbadmin”, como se muestra a continuación: Portal Publico http://www.sitio.com/swb Administración del sitio http://www.sitio.com/swb/swbadmin Nota: El contexto “swb” indicado aquí puede ser opcional y cambiar de una instancia de SWB a otra dependiendo de la configuración especifica establecida en cada caso. A continuación se mostrará la ventana de identificación (login) de SemanticWebBuilder, en donde deberá proporcionar su usuario, su contraseña, para después presionar el botón entrar: El administrador de SemanticWebBuilder (SWB) tiene diferentes zonas o áreas de trabajo en las cuales se presentan los elementos y componentes mediante los cuales es posible incorporar los diferentes recursos de configuración y administración con los que puede desarrollar y dar mantenimiento a su Sitio Web. Las diferentes Zonas que se localizan en el sitio Administrador de SemanticWebBuilder se detallan en las imágenes siguientes: Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. viii API y Programación de Recursos Descripción Barra de Menús En esta barra se contienen las opciones generales de la administración de la herramienta Acordeone s de Estructura En esta zona se mostraran en pestañas expandibles (Acordeones) diversos elementos de configuración de la estructura de los sitios generados en la herramienta, así como herramientas y funcionalidades de operación general. Zona de Trabajo Área en la que se despliega el detalle de la información, elementos de configuración y administración de los elementos de SWB Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. ix API y Programación de Recursos Descripción Catálogos de Estructura Se denomina “Catalogo de Estructura de…” a cada uno de los acordeones, donde se localizaran diversos catálogos de elementos que permiten la administración especifica de los diferentes recursos de SWB Zona de Información Esta zona mostrara la información básica del componente o recurso seleccionado en los acordeones de estructura. También se le conoce como la zona de metadatos del elemento. Pestañas de Elementos En esta zona se mostraran las pestañas de administración de cada uno de los componentes que sean abiertos dentro de SWB de forma que se pueda pasar de uno a otro sin perder la información o cambios que se hubieran efectuado en otro componente. Pestañas de Configuración de Elemento A segundo nivel en la zona de “Pestañas de Elementos” se muestran las pestañas de administración especifica del componente seleccionado, permitiendo la configuración a detalle de cada componente en el SWB Barra Emergente de Estatus Esta barra se mostrara de manera emergente en la parte inferior de la pantalla de Administración de SWB y mostrara mensajes sobre el éxito o no de la operación realizada Zona de Trabajo y Configuración Muestra el detalle de cada aspecto de configuración de las “Pestañas de Configuración de Elementos”, de forma que pueda trabajar con cada recurso y lo configure de acuerdo a sus requerimientos. Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. x API y Programación de Recursos Comenzando a trabajar… API INTERFAZ DE PROGRAMACIÓN Y GENERACIÓN DE COMPONENTES PARA SWB Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. xi API y Programación de Recursos SEMANTICWEBBUILDER SemanticWebBuilder (SWB) es una plataforma para el desarrollo de aplicaciones y portales semánticos. El uso de la tecnología semántica permite generar contextos de información y definirles un significado, de esta forma la información es interpretada y procesada por personas y/o sistemas. Establecer un significado a la información expuesta en un portal, permite una mejor clasificación, integración y búsqueda de la información. SWB cuenta con una suite de herramientas y con una estructura operacional descrita en su arquitectura. A continuación se describirán estas dos áreas. SUITE DE HERRAMIENTAS DE SEMANTICWEBBUILDER La Suite de herramientas de SemanticWebBuilder permitirá la evolución de los sitios web convencionales (sin significado) hacia portales que cumplan con la visión de la web semántica (con significado), permitiendo exponer en formatos estándar como RDF todo el conocimiento generado, además de contar con un modelo (Ontología) que permita el intercambio de esta información entre los diferentes sistemas. La suite del SemanticWebBuilder está formada por los siguientes productos: SemWB Portal SemWB Portal es una plataforma para el desarrollo de portales semánticos, en donde la información o contenido a desplegar se define de forma que pueda ser interpretada y procesada por personas y/o sistemas. Este producto se enfoca en la representación del conocimiento de las organizaciones a través de la identificación de la semántica en la información a publicar. Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. 1 API y Programación de Recursos SemWB End Point Herramienta que permite tener acceso a la información de una organización por medio de RDF y SPARQL. SemWB Platform Plataforma para el desarrollo de productos semánticos. Es la base para el desarrollo de la plataforma de desarrollo de portales (SemWB Portal). AppServer Servidor de aplicaciones donde se ejecuta SWB. SemWB Triple Store Herramienta para almacenar y hacer búsquedas sobre los triples de RDF. El objetivo es integrar un triple store existente OS, utilizando JENA. SemWB Base SemanticWebBuilder Base (Midas), es un conjunto de estándares abiertos, componentes, metodologías, librerías, utilerías, convenciones y buenas prácticas que sirven de base en el desarrollo de aplicaciones, contemplando las siguientes premisas: La reutilización de código El desarrollo acelerado Estandarización Seguridad Escalabilidad Disponibilidad Interoperabilidad Algunos de los productos que integran la suite de SemanticWebBuilder constan de herramientas que facilitan su funcionamiento, en seguida se muestra un esquema: Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. 2 API y Programación de Recursos SemWB Portal Servidor de Portales Administración de Contenidos Administración de Contextos de Información Administración de Usuarios SemWB Platform Plataforma Semántica Punto de Acceso para Consultas Semánticas (SPARQL) Integración de Información (Fuentes externas) Persistencia de Datos (RDF) Generación de Código Basado en Ontologías SemWB Ontology Editor Modelado de Información (Definición de Significados) Editor de Ontologías (OWL) Los productos Platform y Portal tienen interacción directamente con el creador del portal. En Platform se lleva a cabo la generación de código dada por una ontología definida, la cual determina la estructura de la información; la arquitectura de los objetos, sus dependencias y su representación gráfica; incluyendo el guardado de información en una base de datos semántica en forma persistente. Platform es el punto de acceso para realizar consultas semánticas, es decir, la información es expuesta para ser consultada por sistemas externos como WS o SPARQL. Portal se encarga de la interfaz gráfica del sitio web que incluye una arquitectura de información la cual define el diseño estructural de los datos. Una serie de componentes que son requeridos para la interfaz como banners, chats, publicación de documentos, redes sociales, blogs, entre otros. Y finalmente la presentación del sitio web en diferentes idiomas y dispositivos (PC, PDA o teléfono móvil). La siguiente figura esquematiza estos conceptos: Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. 3 API y Programación de Recursos Niveles de Objetos para el producto SemWBPlatform La plataforma semántica maneja una organización jerárquica de objetos, este nivel jerárquico esta hecho en base a la función que desempeñan. A continuación se listan estos objetos: SemWB Base: Este objeto es la base de SWB y se encarga de manejar las utilerías E-mail e I/O; control de errores en Logs, manejo XML (Extensible Markup Language), Connection Pool. RDF Library: Es el segundo nivel y contiene las librerías RDF (Resource Description Framework) el cual es un modelo de datos que representa recursos y relaciones que se puedan establecer entre ellos. SemWB Triple Store: Es el tercer nivel, es una herramienta que almacena y realiza búsquedas sobre triplas RDF usando el framework de JENA SemWB Platform: Es el cuarto nivel, y se encarga de la construcción de modelos semánticos. La unión entre el objeto SemWB Triple Store y SemWB Platform la realizan la Sincronización de aplicaciones y el mantenimiento en memoria cache de SWB Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. 4 API y Programación de Recursos Core Model: Es el quinto nivel y mantiene las ontologías que definen a SWB. Se modela una Ontología, se genera código y finalmente se personaliza código. Core Model mantiene el código generado Niveles (Core Model) Ontología Código Autogenerado Código Personalizado SemWB Platform Cache, Sincronización SemWB Triple Store RDF Library SemWB Base Niveles de Objetos para el producto SemWBPortal La jerarquía de objetos para el producto SemWBPortal consta de los mismos niveles que para el producto SemWBPlatform con dos objetos adicionales, a continuación se muestra la jerarquía: SemWB Base RDF Library SemWB Triple Store SemWB Platform Core Model SWBForms: Este nivel, mantiene las tecnologías para implementar los formularios como AJAX, DOJO y XForms SWBPortal: Este nivel se encarga de la administración de usuarios, reportes, monitoreos, reglas, grupos, roles, componentes, plantillas, lenguajes, dispositivos, campañas, entre otros. Componentes: Este nivel muestra los recursos en el sitio web Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. 5 API y Programación de Recursos Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. 6 API y Programación de Recursos ARQUITECTURA DE SEMANTICWEBBUILDER La arquitectura de SWB define el diseño conceptual y la estructura operacional de SemanticWebBuilder. La arquitectura consta de los siguientes elementos: SWBPortal, SWBForms, SWBModel, SWBPlatform, SWBTripleStore, SWBBase, Servidor de Aplicaciones y Cache – Sincronización. Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. 7 API y Programación de Recursos Los Componentes La capa de componentes muestra los elementos que se pueden incrustar dentro de una página web con la finalidad de darle presentación, funcionalidad e interactividad. Esta capa es la visualización de la plataforma de SemanticWebBuilder que permite la creación de portales. SWB ofrece: Recursos (componentes) tal como Banners, Survey, Search, Comments, Blogs, entre otros. Administración de comunidades Implementación de Portlets Externos y Gadges. Implementación de estándares JSR-168 y JSR-288 y el API Open Social Administración de recursos en el sitio a través de su manejador de recursos (Resource Manager). Administración de recursos en memoria, Resource Cache. Seguimiento de recursos empleando el Resource Trace. Extensión de recursos estándar utilizando el API para el desarrollo de Componentes a través de SWBPortal SWBPortal Este elemento tiene las siguientes funciones: Administración de reportes, monitoreo, reglas, grupos, roles, usuarios, componentes, plantillas, lenguajes, dispositivos, campañas, DNS’s, contenidos, sitios, alarmas, paginas, flujos de publicación, entre otros. Manejo de Web Services (interfaz en xml), el cual permite generar interfaces con otro software para intercambiar datos. El web service determina el proceso de ligado con otras aplicaciones en tiempo de ejecución. Manejo de documentos Semántico (JSR-170). Seguridad JAAS. Manejo del repositorio de Usuarios. Administración y seguimiento de usuarios. SWBForms Este elemento es un manejador de formularios. Estos formularios utilizan algunas tecnologías para implementarse tal como: AJAX (Asynchronous JavaScript And XML) DOJO Page Flow XForms SWBModel Este elemento consta de las ontologías que definen a SemanticWebBuilder, las ontologías son las siguientes: Ontología Office, define el esquema para la publicación con Office. Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. 8 API y Programación de Recursos Ontología del Repositorio de Documentos (JSR-170) que define la estructura para el manejo de documentos. Ontología Base SemanticWebBuilder, la cual define las clases e interfaces que sirven como base para SWB. SWBPlatform Este elemento se encarga de desarrollar la construcción de modelos semánticos. Generador de Código RESTful Web Services, conocido como Rest(Representation state transfer), es un modelo de servicios web basados en HTTP; donde los recursos son accedidos por una URI Bridge (Semántica-Java), técnica que desacopla una abstracción de su implementación. OWL (Ontology Web Language), ontología que define el vocabulario de SWB Cache y Sincronización Este elemento permite mantener en cache a SWB y la sincronización entre aplicaciones. SWBTripleStore Este elemento permite: Realizar Búsquedas (SPARQL) Almacenar en forma Semántica (SDB, TDB) Persistencia RDF, DB, FS SWBBase Este elemento es la base para SWB, es un conjunto de estándares abiertos, componentes, metodologías, librerías, utilerías, convenciones y buenas prácticas. Manejo de XML Manejo de Logs Connection Pool Utilerías I/O E-mail Servidor de Aplicaciones Este elemento es el servidor en el que está montado SWB. Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. 9 API y Programación de Recursos INTRODUCCIÓN AL API SEMANTICWEBBUILDER DE PROGRAMACIÓN DE RECURSOS DE RECURSO Un recurso es un componente dentro de un sitio o portal web que permite la interacción, cercanía, retroalimentación y usabilidad con el usuario, ejemplos de recursos en SemanticWebBuilder son los chats, foros, banners, comentarios, registro de usuarios, buscadores, menús, encuestas, entre otros. Un recurso permite la comunicación entre el usuario y el sitio. El recurso tiene un ciclo de vida y cuenta con modos que definen las tareas que ejecutara. Se clasifica de acuerdo a su ubicación dentro del sitio web, ya sea en la plantilla o en el contenido. La forma de extender de SemanticWebBuilder es a través de la interface SWBResource que pertenece al API, esta interfaz se encarga de definir los métodos para implementar y administrar un recurso. A continuación se muestra un diagrama de flujo de las relaciones: Install Init setResourceBase HandleRequest Destroy Unistall CONTENT STRATEGY DIRECT View Admin Edit Help XML Index Admhlp MÉTODOS DE LLAMADA CICLO DE VIDA MODOS RECURSO TIPOS DE PETICIÓN TIPOS API ProcessAction Render Interfaz SWBResource Contenido Estrategia Sistema Clase GenericResource Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. 10 API y Programación de Recursos CICLO DE VIDA DE UN RECURSO El ciclo de vida de un recurso es: Install: Este método es llamado una sola vez, cuando el recurso es agregado al catálogo de recursos. Init: Este método inicializa el recurso y lo agrega al servicio, adicionalmente es llamado cada vez que inicia SWB o bien cuando el recurso es recargado utilizando carga dinámica de recursos. setResourceBase: Es llamado cada vez que se modifica alguno de los atributos del recurso a través de la administración del recurso. Handle requests: Procesa las acciones Action y renderRequest. Destroy: Este método es llamado cuando el recurso es eliminado del servicio. Uninstall: Este método es convocado cuando el recurso es eliminado del catálogo de recurso. MODOS DE UN RECURSO Los modos de un recurso indican la función que el recurso atenderá. Usualmente los recursos ejecutan diferentes tareas y crean diferente contenido, dependiendo de la función que ejecutan. Los modos del recurso avisan al recurso que tarea realizará y cual contenido debe generar. Cuando se invoca un recurso SemanticWebBuilder indica al recurso cual modo se ejecutará. El recurso puede cambiar programáticamente su modo cuando se está ejecutando el método processAction. Los modos por defecto son View, Admin, Edit, Help, XML, Index, Admhlp; un recurso debe soportar al menos el modo View. El modo Admin es usado para modificar los atributos de configuración del recurso y es invocado utilizando la administración de SemanticWebBuilder. El modo View es utilizado para visualizar el recurso en el sitio web. El programador del recurso puede agregar modos adicionales dependiendo de la lógica del recurso. TIPOS DE RECURSOS Los recursos están clasificados en 3 tipos que son: Contenido, Estrategia y Sistema, la diferencia radica básicamente en la ubicación en la que son llamados y presentados dentro del administrador de SemanticWebBuilder y dentro de los Templates. Recurso tipo Contenido: Estos recursos pueden ser creados tanto por el administrador Web como por el administrador .Net en la sección de contenidos y son presentador por el tag <content/> dentro de los templates. Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. 11 API y Programación de Recursos Recurso tipo Estrategia: Estos recursos sólo pueden ser creador por el administrador .Net en la sección de elementos publicitarios y son presentados por el tag <resource/> dentro de los templates. Recurso tipo Sistema: Estos recursos pueden ser utilizados como contenidos y/o estrategias, por lo que pueden crearse por los dos administradores y pueden presentarse con ambos tags <content/>, <resource/> dentro de los templates. Nota. Cuando un recurso es creado como contenido este queda asociado a la sección en donde fue creado. MÉTODOS DE LLAMADA Los métodos de llamada en SemanticWebBuilder para invocar un recurso son los siguientes: Content: Esta llamada invoca al recurso para mostrarse como contenido en una página web. Algunos ejemplos de contenido en una página web son elementos creados en Word, Excel, Power Point, HTML, documentos PDF, entre otros. Strategy: Este método invoca al recurso para visualizarlo como contenido base en una plantilla. Ejemplo de estos recursos son los banners, menús, textos estáticos, promos, entre otros recursos. Direct: Este método permite invocar un recurso sin pasar por la plantilla, de esta forma se puede regresar una imagen o un archivo binario con el comportamiento de un Web Service. Tiene el comportamiento de un servlet pero con las ventajas de seguridad, monitoreo, calendarización entre otras que proporciona un recurso. API El API de desarrollo de SemanticWebBuilder fue introducido por la versión 2.0 de la aplicación WebBuilder y, en la nueva versión semántica, su objetivo fundamental es proporcionar una serie de clases e interfaces que nos permitan extender la funcionalidad de SemanticWebBuilder de forma estándar. En la figura siguiente podemos observar la localización del API dentro de la arquitectura de SemanticWebBuilder. Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. 12 API y Programación de Recursos Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. 13 API y Programación de Recursos La base del API de desarrollo de SWB es la interfaz SWBResource, que es la que nos permite extender la funcionalidad de SemanticWebBuilder, así como las clases: GenericResource, SWBParamRequest, SWBActionResponse, SWBResourceURL, Resource, WebPage, User las cuales interactúan directamente con el recurso al momento de implementar la interfaz SWBResource. En la siguiente figura podemos ver la estructura de estas clases. Objeto Web Page Objeto Resource WebSite ResourceType getWebSite getResourceType WebPage getWebPage Objeto User Resource getResourceBase User getWebPage getResourceBase getUser getUser SWBParamRequest getActionUrl getRenderUrl SWBResourceURL getResourceBase render SWBActionResponse processAction GenericResource Implementa SWBResource Extiende Nuevo Recurso Objeto SWBResourceURL INTERFAZ SWBResource Una interfaz en java, es un conjunto de métodos (sin implementaciones) y de valores constantes que indican que una clase tiene un comportamiento particular además del que hereda de sus superclases. La interfaz SWBResource es la que define los métodos que una clase debe implementar para poder ser considerado como un recurso que pueda ser administrado por SemanticWebBuilder. La estructura de la interfaz SWBResource es la siguiente: Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. 14 API y Programación de Recursos package org.semanticwb.portal.api; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.semanticwb.model.Resource; import org.semanticwb.model.ResourceType; public interface SWBResource { public void setResourceBase(Resource base) throws SWBResourceException; public void init() throws SWBResourceException; public Resource getResourceBase(); public void processAction(HttpServletRequest request, SWBActionResponse actionResponse) throws SWBResourceException, java.io.IOException; public void render(HttpServletRequest request, HttpServletResponse response, SWBParamRequest paramRequest) throws SWBResourceException, java.io.IOException; public void install(ResourceType resourceType) throws SWBResourceException; public void uninstall(ResourceType resourceType) throws SWBResourceException; public void destroy(); } La interfaz implementa los métodos setResourceBase, init, getResourceBase, processAction, render, install, uninstall y destroy. Estos métodos tienen la funcionalidad siguiente: Método init() Este método es llamado cuando es cargado el recurso en memoria (sólo es llamado una vez). Método render() Este es el método principal del recurso ya que es llamado en cada solicitud de despliegue del recurso por lo que se encarga de la presentación del recurso. Este método recibe los siguientes parámetros: Request: Este es el HttpServletRequest asociado con la petición, y nos permite tener acceso a los parámetros de la petición(mediante getParameter), el tipo de petición(GET, POST, HEAD) y las cabeceras HTTP entrantes(cookies, Referer) Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. 15 API y Programación de Recursos Response: Este es el HttpServletResponse asociado con la respuesta al cliente. SWBParamRequest: Es el objeto que proporciona información sobre el estado del recurso. Adicionalmente permite acceder a objetos internos como User, WebPage y Action. User: Este objeto provee información acerca del usuario que visualiza el recurso. WebPage: Este objeto proporciona la sección del sitio en donde se encuentra el recurso. Adicionalmente se puede obtener las secciones relacionadas con dicha sección, padres, hijos o asociaciones. Action: Este objeto provee las acciones que puede llevar a cabo el recurso, tal como editar, añadir o eliminar. Excepción SWBResourceException: Se presenta en el momento en que ocurre un problema con la acción del recurso. Excepción IOException: Este objeto proporciona información si sucede algún problema I/O con el procesamiento de streams. Método processAction() Este método permite procesar una acción que fue solicitada al recurso. Típicamente es la respuesta a una solicitud de una acción. Este método es convocado si el llamado fue originado por un URL creado con el método SWBParamRequest.getActionURL(). El recurso actualiza su estado basado en la información enviada en el parámetro actionResponse. En esta acción el recurso puede: Enviar un redireccionamiento. Cambiar su estado de la ventana. Cambiar el modo del recurso. Asignar parámetros al render. La solicitud hacia un actionURL es enviada a un processAction y a un número de renders, los cuales dependen del número de recursos por cada sección. El procesamiento de la acción es finalizado antes que el request sea invocado. Este método recibe los siguientes parámetros: Request: Es el parámetro HttpServletRequest asociado con la petición, la cual nos permite tener acceso a los parámetros (mediante getParameter), el tipo de petición (GET,POST,HEAD, etc) y las cabeceras HTTP entrantes(cookies, Referer, etc). SWBActionResponse: Proporciona información referente al estado del recurso adicionalmente da acceso a objetos como User, WebPage y Params. Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. 16 API y Programación de Recursos User: Este objeto provee información acerca del usuario que visualiza el recurso. WebPage: Este objeto proporciona la sección del sitio en donde se encuentra el recurso. Adicionalmente se puede obtener las secciones relacionadas con dicha sección, padres, hijos o asociaciones. Action: Este objeto provee las acciones que puede llevar a cabo el recurso, tal como Editar, añadir o eliminar. Excepción SWBResourceException: Este objeto maneja los errores si ocurre un problema con el procesamiento de la acción. Excepción IOException: Este objeto proporciona información si sucede algún problema I/O con el procesamiento de streams. Método setResourceBase() Este método es llamado para proporcionar información del recurso que SemanticWebBuilder requiere para su administración. Adicionalmente es convocado cada vez que el recurso es modificado desde la administración de SemanticWebBuilder. Este método recibe un parámetro de objeto Resource que contiene información por defecto como id, titulo, descripción, tipo, subtipo, campaña, fecha de creación, entre otras propiedades. El método se encarga de guardar la referencia del objeto Resource para su posterior utilización. Método getResourceBase() Este método obtiene la información base o por defecto del recurso y devuelve la referencia al objeto Resource solicitado. Método install() Este método es llamado cuando se instala el recurso en SemanticWebBuilder. Es utilizado si el recurso requiere configuración específica, tal como la creación de un directorio de trabajo o alguna tabla adicional en la base de datos. Método uninstall() Este método es convocado cuando se desinstala el recurso en SemanticWebBuilder. Método destroy() Este método es llamado por el SWBServiceMgr para indicarle al recurso cuando va a ser retirado del servicio. Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. 17 API y Programación de Recursos GENERIC RESOURCE El API incluye la clase GenericResource que implementa la interface SWBResource y provee la funcionalidad por defecto del recurso. package org.semanticwb.portal.api; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletRequest; import java.io.IOException; import java.util.Locale; import org.semanticwb.SWBUtils; import org.semanticwb.model.ResourceType; import org.semanticwb.model.Resource; import org.semanticwb.model.SWBContext; import org.semanticwb.model.WebSite; public class GenericResource implements SWBResource, SWBResourceCache, SWBResourceWindow { private Resource base; public GenericResource() { } public void destroy() { } public Resource getResourceBase() { return base; } public void init() throws SWBResourceException { } public void install(ResourceType recobj) throws SWBResourceException { } public void processAction(HttpServletRequest request, SWBActionResponse response) throws SWBResourceException, IOException { throw new SWBResourceException("method not implemented"); } public void render(HttpServletRequest request, HttpServletResponse response, SWBParamRequest paramRequest) throws SWBResourceException, IOException { Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. 18 API y Programación de Recursos if(!paramRequest.WinState_MINIMIZED.equals(paramRequest.getWindowState())) { processRequest(request, response, paramRequest); } } public void processRequest(HttpServletRequest request, HttpServletResponse response, SWBParamRequest paramRequest) throws SWBResourceException, IOException { if(paramRequest.getMode().equals(paramRequest.Mode_VIEW)) { doView(request,response,paramRequest); }else if(paramRequest.getMode().equals(paramRequest.Mode_EDIT)) { doEdit(request,response,paramRequest); }else if(paramRequest.getMode().equals(paramRequest.Mode_HELP)) { doHelp(request,response,paramRequest); }else if(paramRequest.getMode().equals(paramRequest.Mode_ADMIN)) { doAdmin(request,response,paramRequest); }else if(paramRequest.getMode().equals(paramRequest.Mode_ADMHLP)) { doAdminHlp(request,response,paramRequest); }else if(paramRequest.getMode().equals(paramRequest.Mode_INDEX)) { doIndex(request,response,paramRequest); }else if(paramRequest.getMode().equals(paramRequest.Mode_XML)) { doXML(request,response,paramRequest); }else { throw new SWBResourceException("method not implemented Mode:("+paramRequest.getMode()+"), URL:("+request.getRequestURL()+"), Ref:("+request.getHeader("referer")+")"); } } public void doView(HttpServletRequest request, HttpServletResponse response, SWBParamRequest paramRequest) throws SWBResourceException, IOException { throw new SWBResourceException("method not implemented - doView"); } public void doEdit(HttpServletRequest request, HttpServletResponse response, SWBParamRequest paramRequest) throws SWBResourceException, IOException { throw new SWBResourceException("method not implemented - doEdit"); } Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. 19 API y Programación de Recursos public void doHelp(HttpServletRequest request, HttpServletResponse response, SWBParamRequest paramRequest) throws SWBResourceException, IOException { throw new SWBResourceException("method not implemented - doHelp"); } public void doAdmin(HttpServletRequest request, HttpServletResponse response, SWBParamRequest paramRequest) throws SWBResourceException, IOException { java.io.PrintWriter out = response.getWriter(); out.println("<div class=\"swbform\">"); out.println("<table width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"5\">"); out.println("<tr>"); out.println("<td class=datos>"); out.println(SWBUtils.TEXT.getLocaleString("org.semanticwb.portal.api.GenericResou rce", "msgNotAdmin",new Locale(paramRequest.getUser().getLanguage()))); out.println("</td>"); out.println("</tr>"); out.println("</table>"); out.println("</div>"); } public void doAdminHlp(HttpServletRequest request, HttpServletResponse response, SWBParamRequest paramRequest) throws SWBResourceException, IOException { throw new SWBResourceException("method not implemented - doAdminHlp"); } public void doIndex(HttpServletRequest request, HttpServletResponse response, SWBParamRequest paramRequest) throws SWBResourceException, IOException { doView(request, response, paramRequest); } public void doXML(HttpServletRequest request, HttpServletResponse response, SWBParamRequest paramRequest) throws SWBResourceException, IOException { throw new SWBResourceException("method not implemented - doXML"); } public void setResourceBase(Resource base) throws SWBResourceException { this.base=base; } public void uninstall(ResourceType recobj) throws SWBResourceException { } public String getResourceCacheID(HttpServletRequest request, SWBParamRequest paramRequest) throws SWBResourceException { if (request.getParameterNames().hasMoreElements()) Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. 20 API y Programación de Recursos { return null; }else { Resource base=paramRequest.getResourceBase(); return SWBResourceCachedMgr.getKey(base); } } public String[] getModes(HttpServletRequest request, SWBParamRequest paramRequest) throws SWBResourceException, java.io.IOException { WebSite tm=SWBContext.getAdminWebSite(); if(tm!=null) { if(paramRequest.getUser().hasUserGroup(SWBContext.getAdminRepository ().getUserGroup("admin"))) { return new String[]{paramRequest.Mode_VIEW,paramRequest.Mode_ADMIN}; } } return new String[]{paramRequest.Mode_VIEW}; } public String getTitle(HttpServletRequest request, SWBParamRequest paramRequest) throws SWBResourceException, java.io.IOException { return paramRequest.getWindowTitle(); } public String[] getWindowStates(HttpServletRequest request, SWBParamRequest paramRequest) throws SWBResourceException, java.io.IOException { return new String[]{paramRequest.WinState_MINIMIZED, paramRequest.WinState_NORMAL, paramRequest.WinState_MAXIMIZED}; } public boolean windowSupport(HttpServletRequest request, SWBParamRequest paramRequest) throws SWBResourceException, java.io.IOException { if(!paramRequest.getAdminTopic().getWebSiteId().equals(SWBContext.WEBSITE_A DMIN)) { if(paramRequest.getResourceBase().isResourceWindow()) { return true; } } return false; } Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. 21 API y Programación de Recursos } La clase GenericResource implementa el método render y luego invoca a su propio método processRequest el cual determina en base al modo de recurso cual es el método apropiado a invocar: doView para VIEW, doEdit para EDIT, etc. INCORPORACIÓN DE UN RECURSO A SEMANTICWEBBUILDER Los requisitos para agregar un recurso en SemanticWebBuilder son: Extender de la clase GenericResource Implementar por lo menos el método View El siguiente ejercicio consiste en crear una clase llamada HolaMundo.java que extienda de GenericResource y que implemente el modo DoView, el cual es llamado cada vez que se despliega el recurso. La clase pertenecerá al paquete cursoSWB. package cursoSWB; import import import import import import import java.io.IOException; java.io.PrintWriter; javax.servlet.http.HttpServletRequest; javax.servlet.http.HttpServletResponse; org.semanticwb.portal.api.GenericResource; org.semanticwb.portal.api.SWBParamRequest; org.semanticwb.portal.api.SWBResourceException; public class HolaMundo extends GenericResource { public void doView(HttpServletRequest request, HttpServletResponse response, SWBParamRequest paramsRequest) throws SWBResourceException, IOException { PrintWriter out = response.getWriter(); out.println("<PRE>"); out.println("<font face=Comic Sans MS,arial,verdana>"); out.println("<font size=6>"); out.println("--------------------------------"); out.println("Hola Mundo"); out.println("</font>"); out.println("</PRE>"); } } Una vez creada y compilada la clase, copiar el archivo HolaMundo.class en la carpeta clases dentro del directorio WEB-INF en la ruta de instalación de SemanticWebBuilder. Un recurso puede ser agregado a SWB como componente de Contenido, de Estrategia o de Sistema, en este ejercicio se agregara como tipo Contenido. Dentro del administrador de SemanticWebBuilder, dar click con el botón derecho del mouse sobre la opción de Componentes de Contenido y elegir Agregar Tipo de Recurso como se muestra en la figura siguiente: Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. 22 API y Programación de Recursos Agregar los datos del recurso como título, tipo de recurso, identificador y nombre de la clase que lo implementa, incluyendo el paquete al que pertenece dicha clase. Editar la sección de Home y en la pestaña de Contenidos, seleccionar Agregar Nuevo, en la lista aparecerá el recurso que se implemento. Seleccionarlo y guardar. Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. 23 API y Programación de Recursos Asignar un nombre a la nueva instancia del componente, editar los componentes de descripción y activar el contenido. Al finalizar el procedimiento se debe visualizar la siguiente pantalla: Nota: Otra forma de agregar las clases compiladas es construyendo el archivo JAR y copiándolo a la carpeta lib que se encuentra en WEB-INF dentro de swb. Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. 24 API y Programación de Recursos INCORPORACIÓN DE LOS OBJETOS RESOURCE, WEB PAGE, USER, SWBRESOURCEURL QUE INTERACTÚAN CON LA CLASE GENERIC RESOURCE Objeto Resource El objeto Resource es un objeto que pertenece al paquete model de la librería SWBModel. Está encargado de proporcionar a los SWBResources (recursos de usuario) la información por defecto que requiere SemanticWebBuilder para administrar el recurso. A continuación se muestra el código de PropiedadesRecurso.java: package cursoSWB; import import import import import import import import import java.io.IOException; java.io.PrintWriter; javax.servlet.http.HttpServletRequest; javax.servlet.http.HttpServletResponse; org.semanticwb.SWBPlatform; org.semanticwb.portal.api.GenericResource; org.semanticwb.portal.api.SWBParamRequest; org.semanticwb.portal.api.SWBResourceException; org.semanticwb.model.Resource; public class PropiedadesRecurso extends GenericResource{ public void doView(HttpServletRequest request, HttpServletResponse response, SWBParamRequest paramsRequest) throws SWBResourceException, IOException { PrintWriter out=response.getWriter(); Resource base=paramsRequest.getResourceBase(); out.println("<PRE>"); out.println("<font face=Comic Sans MS size=5>Propiedades de un Recurso</font><br>"); out.println("<b>ID: </b>" + base.getId()); out.println("<b>TITULO:</b> "+ base.getTitle()); out.println("<b>DESCRIPCIÓN:</b> "+base.getDescription()); out.println("<b>PRIORIDAD:</b> "+base.getPriority()); out.println("<b>TIPO ID(ESTRATEGIA, CONTENIDO O SISTEMA):</b> " + base.getResourceType().getResourceMode()); out.println("<b>TIPO NAME:</b> " + base.getResourceType().getTitle()); out.println("<b>XML:</b> " + base.getXml()); out.println("<b>XMLCONF:</b> "+ base.getXmlConf()); out.println("<b>RESOURCEWORKPATH:</b> "+base.getWorkPath()); out.println("<b>RUTA FISICA:</b> " + SWBPortal.getWorkPath()+base.getWorkPath()); out.println("<b>RUTA WEB:</b> "+ SWBPlatform.getWebWorkPath()+base.getWorkPath()); out.println("<PRE>"); } } Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. 25 API y Programación de Recursos Compilar la clase y copiarla a las clases de SWB. Dar de alta el recurso en el administrador de SemanticWebBuilder como se muestra a continuación: La visualización del recurso es la siguiente: Objeto WebPage Este objeto proporciona información de una sección dentro del sitio, así como la relación que tiene con las demás secciones (padres, hijos y secciones asociadas). Este objeto se puede utilizar para crear un recurso que implemente un menú o un índice temático. Recurso menú WebPage El siguiente ejercicio utiliza el objeto Web Page para implementar un menú con las secciones de un sitio web. Para visualizar el ejercicio, el sitio debe tener secciones hijas y nietas. A continuación se muestra el código que implementa este objeto: Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. 26 API y Programación de Recursos package cursoSWB; import import import import import import import import import import java.io.IOException; java.io.PrintWriter; java.util.Iterator; javax.servlet.http.HttpServletRequest; javax.servlet.http.HttpServletResponse; org.semanticwb.model.User; org.semanticwb.model.WebPage; org.semanticwb.portal.api.GenericResource; org.semanticwb.portal.api.SWBParamRequest; org.semanticwb.portal.api.SWBResourceException; public class Menu1 extends GenericResource{ public void doView(HttpServletRequest request, HttpServletResponse response, SWBParamRequest paramRequest) throws SWBResourceException, IOException { PrintWriter out = response.getWriter(); WebPage page = paramRequest.getWebPage(); User user = paramRequest.getUser(); out.println(paramRequest.getResourceBase().getTitle()); out.println("<ul>"); //Obtiene la url de la pagina web padre if(page.getParent()!=null) { out.println("<li><a href=\""+ page.getParent().getUrl()+ "\">"+page.getParent().getDisplayName(user.getLanguage())+"</a></li>"); } out.println("<li><b>"+page.getDisplayName(user.getLanguage())+"</b></li>"); //Obtiene los hijos activos, ordenados y no borrados Iterator<WebPage> it = page.listVisibleChilds(user.getLanguage()); while(it.hasNext()) { WebPage tp = it.next(); if(user.haveAccess(tp)) out.println("<li><a href=\""+ tp.getUrl()+"\">"+ tp.getDisplayName(user.getLanguage())+"</a></li>"); } out.println("</ul>"); } } La visualización de este ejercicio se muestra a continuación: Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. 27 API y Programación de Recursos Recurso menú WebPage con formato El siguiente recurso implementa un menú con formato (color, tamaño y tipo de letra). El formato lo obtiene a través de los argumentos que envía la solicitud. A continuación se muestra el código que implementa este formato: package cursoSWB; import import import import import import import import import import java.io.IOException; java.io.PrintWriter; java.util.Iterator; javax.servlet.http.HttpServletRequest; javax.servlet.http.HttpServletResponse; org.semanticwb.model.User; org.semanticwb.model.WebPage; org.semanticwb.portal.api.GenericResource; org.semanticwb.portal.api.SWBParamRequest; org.semanticwb.portal.api.SWBResourceException; public class Menu2 extends GenericResource{ public void doView(HttpServletRequest request, HttpServletResponse response, SWBParamRequest paramRequest) throws SWBResourceException, IOException { PrintWriter out = response.getWriter(); WebPage page = paramRequest.getWebPage(); User user = paramRequest.getUser(); String font="<font face=\""+ paramRequest.getArgument("fontface", "Arial")+"\" size=\""+ paramRequest.getArgument("fontsize", "4")+ "\"color=\""+ paramRequest.getArgument("fontcolor", "#000000")+ "\">"; String fontc="</font>"; out.println(font+paramRequest.getResourceBase().getTitle()+fontc); out.println("<ul>"); if(page.getParent()!=null) { out.println("<li>"+"<a href=\""+ page.getParent().getUrl()+ "\">"+ font+page.getParent().getDisplayName(user.getLanguage())+fontc+"</a></li>"); } out.println("<li>"+font+"<b>"+page.getDisplayName(user.getLanguage())+fontc+"</b> </li>"); Iterator<WebPage> it = page.listVisibleChilds(user.getLanguage()); while(it.hasNext()) { WebPage tp = it.next(); if(user.haveAccess(tp)) out.println("<li>"+"<a href=\""+tp.getUrl()+"\">"+font+ tp.getDisplayName(user.getLanguage())+fontc+"</a></li>"); } out.println("</ul>"); } } En seguida se muestra como se vera el recurso en pantalla: Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. 28 API y Programación de Recursos El formato para el color de fondo y tipo, tamaño y color de letra, pueden ser modificados desde el Administrador de SWB, si han sido dados de alta como recursos de Estrategia, a través de la siguiente instrucción: Recurso menú WebPage administrable El siguiente recurso extiende de la clase GenericAdmResource que permite editar el formato de presentación del menú desde el Administrador de SemanticWebBuilder. Los cambios al formato son guardados en un archivo XML, los cuales son cargados cada vez que se edita el recurso. A continuación se muestra el código y el archivo XML: package cursoSWB; import java.io.IOException; import java.io.PrintWriter; import java.util.Iterator; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.semanticwb.model.User; import org.semanticwb.model.WebPage; import org.semanticwb.portal.api.GenericAdmResource; import org.semanticwb.portal.api.SWBParamRequest; import org.semanticwb.portal.api.SWBResourceException; public class Menu3 extends GenericAdmResource{ public void doView(HttpServletRequest request, HttpServletResponse response, SWBParamRequest paramsRequest) throws SWBResourceException, IOException { PrintWriter out=response.getWriter(); WebPage page=paramsRequest.getWebPage(); User user = paramsRequest.getUser(); String bgcolor=paramsRequest.getResourceBase().getAttribute("bgcolor" ,paramsRequest.getArgument("bgcolor","#006699")); Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. 29 API y Programación de Recursos String fontface=paramsRequest.getResourceBase().getAttribute( "fontface",paramsRequest.getArgument("fontface","Courier")); String fontcolor=paramsRequest.getResourceBase().getAttribute( "fontcolor",paramsRequest.getArgument("fontcolor","#C0C0C0")); String fontsize=paramsRequest.getResourceBase().getAttribute( "fontsize",paramsRequest.getArgument("fontsize","4")); String font="<font "\"color=\""+fontcolor+"\">"; face=\""+fontface+"\" size=\""+fontsize+ String fontc="</font>"; out.println("<font Admin</font><br>"); out.println("<TABLE face=Arial border=0 size=4>Menú, implementación cellspacing='1' del modo bgcolor=\""+bgcolor+ "\">"); if(page.getParent()!=null) { out.println("<TR><TD colspan=2><a href=\""+ page.getParent().getUrl()+"\">"+font +page.getParent().getDisplayName(user.getLanguage())+fontc+"</a></TD></TR>"); } out.println("<TR><TD colspan=2>"+font+"<B>&nbsp;&nbsp;"+ page.getDisplayName(user.getLanguage())+"</B>"+fontc+"</TD></TR>"); Iterator it=page.listVisibleChilds(user.getLanguage()); while(it.hasNext()) { WebPage tp=(WebPage)it.next(); out.println("<TR>"); out.println("<TD width=15> </TD>"); out.println("<TD><a href=\""+tp.getUrl()+"\">"+font+ tp.getDisplayName(user.getLanguage())+fontc+"</a></TD>"); out.println("</TR>"); } out.println("</TABLE>"); } } Archivo Menu3.xml: <?xml version="1.0" encoding="ISO-8859-1" ?> <admresource xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <form name="frmAdmin"> <fieldset> <input type="TEXT" name="bgcolor" label="Color de fondo:" /> <input type="TEXT" name="fontface" label="Nombre de la Fuente:" /> <input type="TEXT" jsvaltype="js_numbers" /> name="fontsize" label="Tamaño de la Fuente:" <input type="TEXT" name="fontcolor" label="Color de la Fuente:" /> </fieldset> <fieldset> Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. 30 API y Programación de Recursos <input type="SUBMIT" name="btnSave" value="GUARDAR" /> <input type="RESET" name="btnReset" value="CANCELAR" /> </fieldset> </form> </admresource> El código de XML se copia en la carpeta clases dentro del directorio WEB-INF en la ruta de instalación de SemanticWebBuilder, el nombre del archivo debe coincidir con el de la clase que implementa el recurso. El recurso puede ser editado desde el Administrador de SemanticWebBuilder como se muestra a continuación: El recurso se visualiza en pantalla como se muestra en la siguiente figura: Objeto User La función de este objeto es proporcionar información del usuario, adicionalmente provee información sobre el dispositivo e idioma que mantiene en la sesión. Se puede utilizar este objeto para crear un registro de usuario o para seleccionar el idioma de preferencia del usuario. A continuación se muestra el código TestUser.java: Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. 31 API y Programación de Recursos package cursoSWB; import import import import import import import import java.io.IOException; java.io.PrintWriter; javax.servlet.http.HttpServletRequest; javax.servlet.http.HttpServletResponse; org.semanticwb.model.User; org.semanticwb.portal.api.GenericResource; org.semanticwb.portal.api.SWBParamRequest; org.semanticwb.portal.api.SWBResourceException; public class TestUser extends GenericResource{ public void doView(HttpServletRequest request, HttpServletResponse response, SWBParamRequest paramRequest) throws SWBResourceException, IOException { PrintWriter out = response.getWriter(); User user = paramRequest.getUser(); out.println("<PRE>"); out.println("<font face=Comic Sans MS size=5>Propiedades de un User</font><br>"); out.println("<b>Login: </b>" + user.getLogin()); out.println("<b>Nombre: </b>" +user.getName()); out.println("<b>Correo: </b>" +user.getEmail()); out.println("<b>Dispositivo: </b>" +user.getDevice().getTitle()); out.println("<b>Lenguaje: </b>" +user.getLanguage()); out.println("<b>Registrado: </b>" +user.isRegistered()); out.println("<b>Logeado: </b>" +user.isSigned()); out.println("<b>ID: </b>" +user.getId()); out.println("</PRE>"); } } Objeto La visualización en pantalla de este recurso se muestra a continuación: Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. 32 API y Programación de Recursos OBJETO SWBResourceURL El objeto SWBResourceURL provee el URL para tener acceso a los diferentes modos, estados de la ventana o acciones del recurso. Esta Url invoca al método processAction. Este objeto puede ser obtenido por medio de los Objetos SWBParamRequest del método render (doView) y SWBActionResponse del método processAction. A continuación se muestra el código TestUrl.java que muestra el uso de los estados de la ventana y el modo doView utilizando el objeto SWBResourceUrl. package cursoSWB; import import import import import import import import java.io.IOException; java.io.PrintWriter; javax.servlet.http.HttpServletRequest; javax.servlet.http.HttpServletResponse; org.semanticwb.portal.api.GenericResource; org.semanticwb.portal.api.SWBParamRequest; org.semanticwb.portal.api.SWBResourceException; org.semanticwb.portal.api.SWBResourceURL; public class TestUrl extends GenericResource{ public void doView(HttpServletRequest request, HttpServletResponse response, SWBParamRequest paramRequest) throws SWBResourceException, IOException { PrintWriter out = response.getWriter(); SWBResourceURL url = paramRequest.getRenderUrl(); url.setMode(url.Mode_EDIT); out.println("<b>Redireccionamiento: URL</b><br>"); out.println("<a href=\"" +url +"\">Edit</a><br>"); out.println("<a href=\"" +paramRequest.getRenderUrl().setWindowState (SWBResourceURL.WinState_MAXIMIZED) +"\">Maximizado</a>"); out.println("<a href=\"" +paramRequest.getRenderUrl().setWindowState (SWBResourceURL.WinState_MINIMIZED) +"\">Minimizado</a>"); out.println("<a href=\""+paramRequest.getRenderUrl().setWindowState (SWBResourceURL.WinState_NORMAL)+"\">Normal</a>"); } public void doEdit(HttpServletRequest request, HttpServletResponse response, SWBParamRequest paramRequest) throws SWBResourceException, IOException { PrintWriter out = response.getWriter(); out.println("Hola mundo... Edit"); SWBResourceURL url = paramRequest.getRenderUrl(); url.setMode(url.Mode_VIEW); out.println("<a href=\""+url+"\">View</a>"); } } La visualización del ejercicio anterior se muestra a continuación: Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. 33 API y Programación de Recursos INCORPORACIÓN DE MODOS PERSONALIZADOS DE UN RECURSO A SEMANTICWEBBUILDER El recurso puede requerir el uso de modos adicionales a los preestablecidos, por lo que se pueden agregar sobrescribiendo el método processRequest de la siguiente forma: public void processRequest(HttpServletRequest request, HttpServletResponse response, SWBParamRequest paramsRequest) throws SWBResourceException, IOException { if(paramsRequest.getMode().equals(“gateway”)) { doGateway(request, response, paramsRequest); }else super.processRequest(request, response, paramsRequest); } En el ejemplo anterior se muestra como crear un nuevo modo gateway el cual está siendo redireccionado al método doGateway. INCORPORACIÓN DEL SEMANTICWEBBUILDER MÉTODO DE LLAMADA “DIRECT” A El método de llamada Direct invoca un recurso que no pasa por la plantilla. El siguiente ejercicio implementa la creación de un archivo XML como componente. A continuación se muestra el código del recurso TestXML.java: package cursoSWB; import import import import import import import import import import import java.io.IOException; java.io.PrintWriter; javax.servlet.http.HttpServletRequest; javax.servlet.http.HttpServletResponse; org.semanticwb.SWBUtils; org.semanticwb.portal.api.GenericResource; org.semanticwb.portal.api.SWBParamRequest; org.semanticwb.portal.api.SWBResourceException; org.semanticwb.portal.api.SWBResourceURL; org.w3c.dom.Document; org.w3c.dom.Element; public class TestXML extends GenericResource{ public void doXML(HttpServletRequest request, HttpServletResponse response, SWBParamRequest paramsRequest) throws SWBResourceException, IOException { PrintWriter out=response.getWriter(); response.setContentType("text/xml"); Document doc=null; try { doc=SWBUtils.XML.getNewDocument(); Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. 34 API y Programación de Recursos Element root=doc.createElement("Root"); doc.appendChild(root); Element child=doc.createElement("Child"); root.appendChild(child); child.setAttribute("NombreValor", "Valor de Child"); Element nieto=doc.createElement("GrandChild"); child.appendChild(nieto); nieto.setTextContent("Contexto"); nieto.setAttribute("NombreValor", "Valor de GrandChild"); }catch(Exception e) { throw new SWBResourceException("Error al generar Document TestXML.doXML()",e); } String xml=SWBUtils.XML.domToXml(doc); out.print(xml); } public void doView(HttpServletRequest request, HttpServletResponse response, SWBParamRequest paramsRequest) throws SWBResourceException, IOException { PrintWriter out=response.getWriter(); SWBResourceURL url=paramsRequest.getRenderUrl(); url.setMode(url.Mode_XML); url.setCallMethod(url.Call_DIRECT); out.println("<PRE>"); out.println("<font face=Comic Sans MS,arial,verdana size=6 ><p align='center'>MÉTODO DE LLAMADA DIRECTO DEL RECURSO </p></font>"); out.println("<p align='center'><a href=\""+url+"\">TEST XML</a></p>"); out.println("</PRE>"); } } La visualización de este recurso en pantalla se muestra a continuación: INCLUSION DE SERVLET/JSP Para soportar el patrón Model-View-Controller, el recurso soporta la inclusión de contenido generado por un Servlet o JSP, de este modo el recurso actual como controlador llena un objeto bean con los datos e incluye un JSP para procesar la vista de la página. La forma de hacer la inclusión es similar a la forma en la que un servlet hace esta misma tarea, ejemplo: Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. 35 API y Programación de Recursos RequestDispatcher dispatcher = request.getRequestDispatcher(“/view.jsp”); Dispatcher.include(request, response); Si se requiere pasar atributos al JSP se puede hacer de la siguiente forma: request.setAttribute(“saldo”, “”+saldo); request.setAttribute(“paramRequest”, paramsRequest); Del lado del JSP se pueden obtener estos atributos como se muestra a continuación: <jsp:useBean id=”paramRequest” scope=”request” class=”org.semanticwb.portal.api.SWBParamRequest”/> <jsp:useBean id=”saldo” scope=”request” class=”java.lang.String”/> A continuación se muestra un ejemplo de cómo direcciona el JavaBean al JSP, el paso de atributos al JSP y la obtención de atributos desde el JSP. El JavaBean se muestra enseguida: package cursoSWB; import import import import import import import java.io.IOException; javax.servlet.RequestDispatcher; javax.servlet.http.HttpServletRequest; javax.servlet.http.HttpServletResponse; org.semanticwb.portal.api.GenericResource; org.semanticwb.portal.api.SWBParamRequest; org.semanticwb.portal.api.SWBResourceException; public class JspResource extends GenericResource { public void processRequest(HttpServletRequest request, HttpServletResponse response, SWBParamRequest paramRequest) throws SWBResourceException, IOException { if(paramRequest.getMode().equals("facturar")) { doFacturar(request,response,paramRequest); }else super.processRequest(request, response, paramRequest); } public void doView(HttpServletRequest request, HttpServletResponse response, SWBParamRequest paramRequest) throws SWBResourceException, IOException { try{ request.setAttribute("paramRequest", paramRequest); RequestDispatcher rd = request.getRequestDispatcher("/curso/curso.jsp"); rd.include(request, response); }catch(Exception e) { e.printStackTrace(); } } public void doFacturar(HttpServletRequest request, HttpServletResponse response, SWBParamRequest paramRequest) throws SWBResourceException,IOException{ try{ request.setAttribute("paramRequest", paramRequest); Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. 36 API y Programación de Recursos RequestDispatcher rd=request.getRequestDispatcher("/curso/fact.jsp"); rd.include(request, response); }catch(Exception e) { e.printStackTrace(); } } } Para los JSP, se debe crear una carpeta y llamarla “curso”, esta carpeta debe ser creada dentro de la carpeta “Web Pages”. El primer JSP debe llamarse curso, y se muestra su código a continuación: <jsp:useBean id="paramRequest" scope="request" type="org.semanticwb.portal.api.SWBParamRequest"/> <%@page import="org.semanticwb.model.Resource,org.semanticwb.model.User,org.semanticwb.mo del.WebPage,org.semanticwb.portal.api.SWBResourceURL" %> <% Resource base=paramRequest.getResourceBase(); User user=paramRequest.getUser(); WebPage wpage=paramRequest.getWebPage(); SWBResourceURL url=paramRequest.getRenderUrl(); %> Recurso ID: <%=base.getId()%><br/> Recurso Título: <%=base.getTitle()%><br/> Usuario: <%=user.getEmail()%><br/> Usuario:<%=user.getFullName()%><br/> Página: <%=wpage.getDisplayName()%><br/> Redirigir: <a href="<%=url.setMode("facturar")%>">Otro Jsp</a> El segundo JSP se debe llamar “fact” y su código se muestra en seguida: <jsp:useBean id="paramRequest" scope="request" type="org.semanticwb.portal.api.SWBParamRequest"/> <%@page import="org.semanticwb.model.Resource,org.semanticwb.model.User,org.semanticwb.mo del.WebPage,org.semanticwb.portal.api.SWBResourceURL" %> Facturando... <% SWBResourceURL url = paramRequest.getRenderUrl(); %> <a href="<%=url.setMode(url.Mode_VIEW)%>">Regresate a la vista</a> La visualización de este recurso se muestra a continuación: Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. 37 API y Programación de Recursos El recurso muestra el primer JSP con datos proporcionados por el JavaBeans. Los datos que obtiene del JavaBeans son de los objetos Resource, User y WebPage. La siguiente figura muestra el segundo JSP que se visualiza cuando se da click sobre la liga de Facturar: INTERNACIONALIZACIÓN DE UN RECURSO La internacionalización de los recursos está definida utilizando archivos de propiedades, los cuales se recomienda sean creados utilizando el mismo nombre y ruta de la clase del recurso. Ejemplo: cursoSWB.HolaMundo.class cursoSWB.HolaMundo.properties cursoSWB.HolaMundo_es.properties cursoSWB.HolaMundo_en.properties cursoSWB.HolaMundo_pt.properties La forma de acceder a los textos de los archivos de propiedades es por medio del método getLocalString() de los objetos SWBParamRequest y SWBActionResponse que pasados por parámetro en los métodos render y processAction respectivamente. paramRequest.getLocalString(“txtHolaMundo”); Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. 38 API y Programación de Recursos ANEXOS Anexos Ejercicios Adicionales CreateImg.java import import import import import import import import import import import import import java.awt.AWTException; java.awt.Graphics2D; java.awt.image.BufferedImage; org.semanticwb.portal.api.GenericResource; org.semanticwb.portal.api.SWBResourceException; org.semanticwb.portal.api.SWBParamRequest; java.io.IOException; java.io.PrintWriter; java.util.Date; javax.servlet.http.HttpServletRequest; javax.servlet.http.HttpServletResponse; org.semanticwb.SWBUtils; org.semanticwb.portal.api.SWBResourceURL; public class CreateImg extends GenericResource{ public void processRequest(HttpServletRequest request, HttpServletResponse response, SWBParamRequest paramsRequest) throws SWBResourceException, IOException { if(paramsRequest.getMode().equals("GRAPH")) { doGraph(request,response,paramsRequest); }else super.processRequest(request,response,paramsRequest); } public void doView(HttpServletRequest request, HttpServletResponse response, SWBParamRequest paramRequest) throws SWBResourceException, IOException { PrintWriter out=response.getWriter(); SWBResourceURL url=paramRequest.getRenderUrl(); url.setMode("GRAPH"); url.setCallMethod(url.Call_DIRECT); out.println("<img src=\""+url+"\">"); } public void doGraph(HttpServletRequest request, HttpServletResponse response, SWBParamRequest paramsRequest) throws SWBResourceException, IOException { //Creamos Imagen BufferedImage buffer=new BufferedImage(500,200,BufferedImage.TYPE_INT_RGB); Graphics2D g=buffer.createGraphics(); int[] x={250,300,350}; int[] y={50,100,50}; g.drawString("Hola Mundo:"+new Date(),10,40); Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. 39 API y Programación de Recursos g.drawRoundRect(5, 5, 490, 190, 10, 20); g.drawOval(50,50, 100,100); //codificamos GIF try { org.semanticwb.base.util.GIFEncoder encoder = new org.semanticwb.base.util.GIFEncoder(buffer); response.setContentType("image/gif"); encoder.Write(response.getOutputStream()); }catch(AWTException e){SWBUtils.getLogger(CreateImg.class).error(e);} } } CAMBIOS DE WB3 A SWB Uno de los principales cambios planteados para esta versión del producto es la del cambio de la nombre de WebBuilder al SemanticWebBuilder, esto con la finalidad de hacer más evidente las características semánticas del producto. También se quiere marcar la evolución de la web hacia la web semántica (o Web 3.0) pero también se quiere conservar el nombre de WebBuilder, que es como actualmente se conoce el producto, por lo que al final creemos que el nombre de SemanticWebBuilder cumple con la visión que se desea transmitir. Principales cambios Cambios en los paquetes del API. Desaparición del Application Framework. Transformación de la Interfaz WBResource a SWBResource. Separación de los recursos del portal de los recursos de la administración. Cambios en los paquetes del API Antes Ahora ------------------------------------------------- org.semanticwb ------------------------------------------------- org.semanticwb.model.comm ------------------------------------------------- org.semanticwb.model.comm.base ------------------------------------------------- org.semanticwb.portal.access com.infotec.wb.admin org.semanticwb.portal.admin ------------------------------------------------- org.semanticwb.portal.admin.admresources.db ------------------------------------------------- org.semanticwb.portal.admin.admresources.lib ------------------------------------------------- org.semanticwb.portal.admin.admresources.util ------------------------------------------------- org.semanticwb.portal.admin.admresources.util.JSValidations Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. 40 API y Programación de Recursos ------------------------------------------------- org.semanticwb.portal.admin.resources ------------------------------------------------- org.semanticwb.portal.admin.resources.old ------------------------------------------------- org.semanticwb.portal.admin.resources.reports ------------------------------------------------- org.semanticwb.portal.admin.resources.reports.beans ------------------------------------------------- org.semanticwb.portal.admin.resources.reports.datadetail ------------------------------------------------- org.semanticwb.portal.admin.resources.reports.jrresources ------------------------------------------------- org.semanticwb.portal.admin.resources.reports.jrresources.data ------------------------------------------------- org.semanticwb.portal.admin.resources.reports.jrresources.templates ------------------------------------------------- org.semanticwb.portal.admin.resources.reports.jrresources.templates.img ------------------------------------------------- org.semanticwb.portal.admin.resources.swbtree ------------------------------------------------- org.semanticwb.portal.admin.resources.wbtree com.infotec.wb.workflow.proxy org.semanticwb.portal.admin.resources.workflow.proxy ------------------------------------------------- org.semanticwb.portal.api ------------------------------------------------- org.semanticwb.portal.db ------------------------------------------------- org.semanticwb.portal.indexer com.infotec.wb.lib org.semanticwb.portal.lib com.infotec.wb.resources org.semanticwb.portal.resources ------------------------------------------------- org.semanticwb.portal.resources.blog ------------------------------------------------- org.semanticwb.portal.resources.community ------------------------------------------------- org.semanticwb.portal.resources.demo ------------------------------------------------- org.semanticwb.portal.resources.googlegadgets ------------------------------------------------- org.semanticwb.portal.resources.old ------------------------------------------------- org.semanticwb.portal.resources.sem ------------------------------------------------- org.semanticwb.portal.resources.sem.base ------------------------------------------------- org.semanticwb.portal.resources.sem.directory ------------------------------------------------- org.semanticwb.portal.resources.sem.directory.base ------------------------------------------------- org.semanticwb.portal.resources.sem.events ------------------------------------------------- org.semanticwb.portal.resources.sem.events.base ------------------------------------------------- org.semanticwb.portal.resources.sem.forum ------------------------------------------------- org.semanticwb.portal.resources.sem.forum.base ------------------------------------------------- org.semanticwb.portal.resources.wiki com.infotec.wb.services org.semanticwb.portal.services ------------------------------------------------- org.semanticwb.portal.social.facebook ------------------------------------------------- org.semanticwb.portal.social.facebook.resources ------------------------------------------------- org.semanticwb.portal.social.facebook.util ------------------------------------------------- org.semanticwb.portal.social.google.blogger ------------------------------------------------- org.semanticwb.portal.social.google.youtube ------------------------------------------------- org.semanticwb.portal.social.twitter com.infotec.wb.util org.semanticwb.portal.util ------------------------------------------------- org.semanticwb.portal.util.fileupload ------------------------------------------------- org.semanticwb.portal.xforms ------------------------------------------------- org.semanticwb.portal.xforms.lib ------------------------------------------------- org.semanticwb.portal.xforms.ui ------------------------------------------------- org.semanticwb.portal.xforms.ui.action Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. 41 API y Programación de Recursos ------------------------------------------------- org.semanticwb.portal.xforms.ui.container ------------------------------------------------- org.semanticwb.security.auth com.infotec.wb.servlets org.semanticwb.servlet ------------------------------------------------- org.semanticwb.servlet.internal com.infotec.appfw -------------------------------------------------------------------------------------------------- com.infotec.appfw.bean -------------------------------------------------------------------------------------------------- com.infotec.appfw.exception -------------------------------------------------------------------------------------------------- com.infotec.appfw.lib -------------------------------------------------------------------------------------------------- com.infotec.appfw.servlets -------------------------------------------------------------------------------------------------- com.infotec.appfw.util -------------------------------------------------------------------------------------------------- com.infotec.topicmaps -------------------------------------------------------------------------------------------------- com.infotec.topicmaps.bean -------------------------------------------------------------------------------------------------- com.infotec.topicmaps.db -------------------------------------------------------------------------------------------------- com.infotec.topicmaps.util -------------------------------------------------------------------------------------------------- com.infotec.wb.core -------------------------------------------------------------------------------------------------- com.infotec.wb.integration -------------------------------------------------------------------------------------------------- SEMANTICWEBBUILDER BASE Objetivo: Definir, diseñar, desarrollar y recopilar clases, utilidades y librerías que sirvan como base en el desarrollo de aplicaciones. Las aplicaciones desarrolladas utilizando el Infotec Application Framework, contendrán elementos de configuración comunes que ayudarán en la administración y mantenimiento de las mismas. Funciones actuales del SWB BASE Control de log errores y debug. Definición de excepciones. Connection pool. Administración de variables de ambiente. Administración de envío de correo electrónico. File Upload. Utilerías vacías para el manejo de XML, streams, archivos, compresión, etc. Configuración del SWB BASE Los archivos de configuración del Infotec Application FrameWork son: db.properties: archivo que define la configuración y log del connection pool. web.properties: archivo que define configuración del log, debug, mail y variables de ambiente. Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. 42 API y Programación de Recursos Ejemplo de db.properties #Directorio de logs del connection pool #Ejemplos: # Relativo a Application Path # logfile=/work/logs/db.log # Relativo al derectorio raiz de la unidad del disco. # logfile=file:/work/logs/db.log logfile=/work/logs/db.log #Usar el connection pool del application server #Ejemplo de como configurar el conection pool en tomcat en el server.xml: # <Resource name="jdbc/wb2" auth="Container" type="javax.sql.DataSource" /> # <ResourceParams name="jdbc/swb4"> # <parameter> # <name>user</name> # <value>root</value> # </parameter> # <parameter> # <name>password</name> # <value /> # </parameter> # <parameter> # <name>driverClassName</name> # <value>org.gjt.mm.mysql.Driver</value> # </parameter> # <parameter> # <name>driverName</name> # <value>jdbc:mysql://localhost:3306/swb4</value> # </parameter> # </ResourceParams> jndi_patern=java:comp/env/jdbc/ #Usar conection pool por JNDI del Application Server jndi_pool=false # Archivo de configuraci\u00F3n de Base de datos #drivers=drivers de bases de datos separados por espacios #xx.xxxx = [nombre del pool].[atributos] #xx.url= Url del JDBC #xx.maxconn= Numero m\u00E1ximo de conexiones permitidas #xx.user= Usuario de DB #xx.password= Password #xx.idle_time= Tiempo m\u00E1ximo (segundos) de permanec\u00EDa de la conexi\u00F3n inactiva en el pool, si es = 0 no expira #drivers=org.gjt.mm.mysql.Driver #swb.url=jdbc:mysql://localhost:3306/swb #swb.maxconn=200 #swb.user=root #swb.password= #swb.idle_time=900 drivers=org.hsqldb.jdbcDriver swb.url=jdbc:hsqldb:mem:swbmemdb swb.url=jdbc:hsqldb:file:{apppath}/WEB-INF/db/hsqldb/swb Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. 43 API y Programación de Recursos swb.maxconn=50 swb.user=SA swb.password= swb.idle_time=900 #drivers=com.pointbase.jdbc.jdbcUniversalDriver #swb.url=jdbc:pointbase:server://localhost/swb4,new #swb.maxconn=50 #swb.user=adminwb #swb.password=manager #swb.idle_time=900 #drivers=com.informix.jdbc.IfxDriver #swb.url=jdbc:informix-sqli://localhost:1526/se:informixserver=ol_economia #swb.maxconn=0 #swb.user=informix #swb.password=informix #swb.idle_time=900 #drivers=oracle.jdbc.driver.OracleDriver #swb.url=jdbc:oracle:thin:@localhost:1521:se #swb.maxconn=80 #swb.user=se #swb.password=admse #swb.idle_time=900 #drivers= com.sybase.jdbc3.jdbc.SybDriver #swb.url=jdbc:sybase:Tds:192.168.6.135:5000/swb4 #swb.maxconn=50 #swb.user=root #swb.password=rootwb #swb.idle_time=900 #drivers=com.microsoft.jdbc.sqlserver.SQLServerDriver #swb.url=jdbc:microsoft:sqlserver://localhost:1433;user=sa;password=sa;databasena me=swb4 #swb.maxconn=50 #swb.user=sa #swb.password=sa #swb.idle_time=900 Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. 44 API y Programación de Recursos Ejemplo de web.properties #SemanticWebBuilder web.properties #Manejador de repositorios semanticos, si se desean m\u00E1s de otras implementaciones,se debe agregar separado por comas swbrep/repositoryManager=org.semanticwb.repository.SWBRepositoryManager #N\u00FAmero de versiones de contenido soportadas 0=sin limite 1 o m\u00E1s v\u00E1lido swbrep/maxNumberOfVersions=5 #Servlet distribuidor swb/distributor=swb #Habilita compresi\u00F3n de respuesta de distribuidor por GZIP swb/responseGZIPEncoding=true #Muestra sitio de administracion para modificacion swb/adminShow=false #Modo de desarrollo del sitio de administraci\u00F3n (carga sitio de DB) swb/adminDev=false #Habilitar acceso a la administraci\u00F3n de WB swb/adminAccess=true #Habilitar acceso a la administraci\u00F3n de WB swb/secureAdmin=false #property sun.net.client.defaultConnectTimeout milisegundos swb/defaultConnectTimeout=5000 #property sun.net.client.defaultReadTimeout milisegundos swb/defaultReadTimeout=30000 #Ruta del archivo owl que se usa de base #swb/ontologyFiles=/WEB-INF/owl/swb_base.owl,/WEB-INF/owl/swb_model.owl #swb/ontologyFiles=/WEB-INF/owl/swb.owl,/WEB-INF/owl/swb_rep.owl,/WEBINF/owl/office.owl,/WEB-INF/owl/oqp_engine.owl swb/ontologyFiles=/WEB-INF/owl/swb.owl,/WEB-INF/owl/swb_rep.owl,/WEBINF/owl/office.owl #swb/ontologyFiles=/WEB-INF/owl/swb.owl,/WEB-INF/owl/swb_rep.owl,/WEBINF/owl/office.owl,/WEB-INF/owl/swb_userTypes.owl,/WEB-INF/owl/catalogs.owl,/WEBINF/owl/emexcatalog.owl #agregar o no el modelo de DBPedia #swb/addModel_DBPedia=true #swb/addModel_DBPedia=false #User Trace swb/usersTrace=true #Ruta relativa a classes donde esta la configuraci\u00F3n del JAAS swb/security.auth.login.config=/jaas.config #Path de trabajo fuera de webapp local #swb/workPath=file:E:/programming/proys/WB2/wb2/work swb/workPath=/work #Path de trabajo para Web swb/webWorkPath=/work #Activar Seguimiento de Recursos swb/resourceTrace=true #Soportar carga din\u00E1mica de recursos swb/resReloader=false #Ruta relativa al path de la aplicaci\u00F3n en donde #se almacenan los recursos recargables swb/resPath=/WEB-INF/classes #Max Num of Cached Resouces swb/resourceCached=100 #*********************************************************** Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. 45 API y Programación de Recursos #*** Definici\u00F3n de la configuraci\u00F3n de WebBuilder... #*** Opciones: #*** - SASC (Standalon Same Context) #*** - SAC (Standalon Client **Diferent Context**) #*** - SAS (Standalon Server **Diferent Context**) #*** - Client (Client **Diferent Computer**) #*** - ClientFR (Client **Diferent Computer** files replication) #*** - Server (Server **Diferent Computer**) #*********************************************************** #Config. Cliente Servidor swb/clientServer=SASC #*********************************************************** #*** URL de la ruta del workpath remoto... #*** Esta variable se define solo si wb/clientServer=Client #*** Ejemplo: #*** http://jsolis.infotec.com.mx:84/work #*********************************************************** #Path de trabajo fuera de webapp local #swb/remoteWorkPath=http://192.168.6.147:8080/work swb/remoteWorkPath=http://localhost:8080/swb/work #*********************************************************** #*** URL de la maquina que servir\u00E1 de administrador de WebBuilder... #*** Esta variable tambi\u00E9n es utilizada por el Workflow, #*** Por lo que siempre debe apuntar a la maquina de administraci\u00F3n #*** o en el caso de #*** Ejemplo: #*** http://jsolis.infotec.com.mx #***********************************************************--> #URL de la maquina de administraci\u00F3n #swb/serverURL=http://192.168.6.147:8080 swb/serverURL=http://localhost:8080 #ip del servidor de correos (SMTP) swb/smtpServer=webmail.infotec.com.mx #swb/smtpUser=usuario #swb/smtpPassword=password #Periodo de tiempo en segundos entre cada sincronizaci\u00F3n con db swb/syncTime=10 #IP address utilizado para el envi\u00F3 y recepci\u00F3n de mensajes... swb/MessageIPAddr=localhost #Puerto UDP de envi\u00F3 de mensajes de sincronizaci\u00F3n entre servidores... #este es en el caso de no definir wb/sendMessageIPAddrs #se utiliza este puerto y se env\u00EDa a broadcast swb/sendMessagePort=1500 #Direcci\u00F3n para el envi\u00F3 de mensajes de sincronizaci\u00F3n entre servidores #se especifica: [direcci\u00F3n IP]:[puerto]; [direcci\u00F3n IP]:[puerto] #en caso de no utilizar una direcci\u00F3n broadcast se tiene que incluir la direcci\u00F3n #de la misma maquina swb/sendMessageIPAddrs=localhost:1500, localhost:1501 #Puerto UDP de recepci\u00F3n de mensajes de sincronizaci\u00F3n entre servidores... swb/reciveMessagePort=1500 #ruta de log de Acceso de WebBuilder swb/accessLog=/logs/wb_log #*********************************************************** #*** Definici\u00F3n de la periodicidad del log de acceso de WebBuilder... Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. 46 API y Programación de Recursos #*** Opciones: #*** - yearly (un archivo por a\u00F1o) #*** - monthly (un archivo por mes ***por defecto***) #*** - daily (un archivo diario) #*********************************************************** #periodo de almacenamiento de log de Acceso de WebBuilder swb/accessLogPeriod=monthly #Periodo de tiempo en segundos entre cada actualizaci\u00F3n de accesos a db swb/accessLogTime=300 #*********************************************************** #*** Definici\u00F3n del tipo de persistencia de los triples de RDF #*** Opciones: #*** - default (Base de datos) #*** - sdb (Base de datos, optimizada SparQl) #*** - tdb (File System, no transaccional) #*********************************************************** swb/triplepersist=default #triple store statements cache (solo se usa una conexioon a DB) #se recomienda desactivarlo en produccion swb/ts_statementsCache=true General:http://es.wikipedia.org/wiki/Resource_Description_Framework RDF: http://searchsoa.techtarget.com/sDefinition/0,,sid26_gci213545,00.html OWL: http://www.internetnews.com/dev-news/article.php/3065781 Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. 47