+ All Categories
Home > Documents > API - Interfaz de Programación y Generación de Componentes para ...

API - Interfaz de Programación y Generación de Componentes para ...

Date post: 23-Dec-2016
Category:
Upload: duongthuan
View: 223 times
Download: 6 times
Share this document with a friend
63
API-INTERFAZ DE PROGRAMACIÓN Y GENERACIÓN DE COMPONENTES PARA SWB CURSO: CURSO API
Transcript
Page 1: API - Interfaz de Programación y Generación de Componentes para ...

API-INTERFAZ DE

PROGRAMACIÓN Y

GENERACIÓN DE

COMPONENTES PARA

SWB

CURSO: CURSO API

Page 2: API - Interfaz de Programación y Generación de Componentes para ...
Page 3: API - Interfaz de Programación y Generación de Componentes para ...

API-INTERFAZ DE

PROGRAMACIÓN Y

GENERACIÓN DE

COMPONENTES PARA

SWB

Curso:

Curso API

Page 4: API - Interfaz de Programación y Generación de Componentes para ...

Fondo de Información y Documentación para la Industria

Av. San Fernando #37 Col. Toriello Guerra Del. Tlalpan

México DF

Page 5: API - Interfaz de Programación y Generación de Componentes para ...

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.

Page 6: API - Interfaz de Programación y Generación de Componentes para ...

API y Programación de Recursos

Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. i

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.

Page 7: API - Interfaz de Programación y Generación de Componentes para ...

API y Programación de Recursos

Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. ii

Page 8: API - Interfaz de Programación y Generación de Componentes para ...

API y Programación de Recursos

Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. iii

Í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

Page 9: API - Interfaz de Programación y Generación de Componentes para ...

API y Programación de Recursos

Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. iv

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

Page 10: API - Interfaz de Programación y Generación de Componentes para ...

API y Programación de Recursos

Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. v

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.

Page 11: API - Interfaz de Programación y Generación de Componentes para ...

API y Programación de Recursos

Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. vi

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.

Page 12: API - Interfaz de Programación y Generación de Componentes para ...

API y Programación de Recursos

Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. vii

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

Page 13: API - Interfaz de Programación y Generación de Componentes para ...

API y Programación de Recursos

Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. viii

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 Administración del sitio

http://www.sitio.com/swb 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:

Page 14: API - Interfaz de Programación y Generación de Componentes para ...

API y Programación de Recursos

Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. ix

Descripción

Barra de Menús

En esta barra se contienen las opciones generales de la administración de la herramienta

Acordeones 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

Page 15: API - Interfaz de Programación y Generación de Componentes para ...

API y Programación de Recursos

Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. x

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.

Page 16: API - Interfaz de Programación y Generación de Componentes para ...

API y Programación de Recursos

Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. xi

Comenzando a trabajar…

API INTERFAZ DE PROGRAMACIÓN Y GENERACIÓN DE COMPONENTES PARA SWB

Page 17: API - Interfaz de Programación y Generación de Componentes para ...

API y Programación de Recursos

Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. 1

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.

Page 18: API - Interfaz de Programación y Generación de Componentes para ...

API y Programación de Recursos

Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. 2

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:

Page 19: API - Interfaz de Programación y Generación de Componentes para ...

API y Programación de Recursos

Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. 3

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:

Servidor de Portales

Administración de Contenidos

Administración de Contextos de Información

Administración de Usuarios

SemWB Portal

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 Platform

Modelado de Información (Definición de Significados)

Editor de Ontologías (OWL)

SemWB Ontology Editor

Page 20: API - Interfaz de Programación y Generación de Componentes para ...

API y Programación de Recursos

Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. 4

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

Page 21: API - Interfaz de Programación y Generación de Componentes para ...

API y Programación de Recursos

Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. 5

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 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

SemWB Triple Store

RDF Library

SemWB Base

SemWB Platform

Cache, Sincronización

(Core Model)

Ontología Código Autogenerado Código Personalizado

Niveles

Page 22: API - Interfaz de Programación y Generación de Componentes para ...

API y Programación de Recursos

Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. 6

Page 23: API - Interfaz de Programación y Generación de Componentes para ...

API y Programación de Recursos

Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. 7

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.

Page 24: API - Interfaz de Programación y Generación de Componentes para ...

API y Programación de Recursos

Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. 8

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.

Page 25: API - Interfaz de Programación y Generación de Componentes para ...

API y Programación de Recursos

Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. 9

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.

Page 26: API - Interfaz de Programación y Generación de Componentes para ...

API y Programación de Recursos

Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. 10

INTRODUCCIÓN AL API DE PROGRAMACIÓN DE RECURSOS DE SEMANTICWEBBUILDER

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:

RECURSO

TIPOS DE PETICIÓN

MODOS

API

TIPOS

MÉTODOS DE LLAMADA

Install

Init

setResourceBase

HandleRequest

Destroy

Unistall

View

Admin

Edit

Help

XML

Index

Admhlp

Interfaz SWBResource Clase GenericResource

Contenido

Estrategia

Sistema

CONTENT

STRATEGY

DIRECT

CICLO DE VIDA

ProcessAction

Render

Page 27: API - Interfaz de Programación y Generación de Componentes para ...

API y Programación de Recursos

Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. 11

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.

Page 28: API - Interfaz de Programación y Generación de Componentes para ...

API y Programación de Recursos

Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. 12

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.

Page 29: API - Interfaz de Programación y Generación de Componentes para ...

API y Programación de Recursos

Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. 13

Page 30: API - Interfaz de Programación y Generación de Componentes para ...

API y Programación de Recursos

Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. 14

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.

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:

ResourceType WebSite

SWBActionResponse

getWebSite getResourceType

getResourceBase

Extiende

getResourceBase

Objeto Web

Page Objeto

Resource

Objeto User

Objeto

SWBResourceURL

Nuevo Recurso

WebPage Resource

Implementa SWBResource GenericResource

processAction

getWebPage getResourceBase

getUser

User

render getActionUrl

getRenderUrl

SWBResourceURL

SWBParamRequest getUser

getWebPage

Page 31: API - Interfaz de Programación y Generación de Componentes para ...

API y Programación de Recursos

Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. 15

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)

Page 32: API - Interfaz de Programación y Generación de Componentes para ...

API y Programación de Recursos

Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. 16

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.

Page 33: API - Interfaz de Programación y Generación de Componentes para ...

API y Programación de Recursos

Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. 17

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.

Page 34: API - Interfaz de Programación y Generación de Componentes para ...

API y Programación de Recursos

Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. 18

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

{

Page 35: API - Interfaz de Programación y Generación de Componentes para ...

API y Programación de Recursos

Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. 19

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");

}

Page 36: API - Interfaz de Programación y Generación de Componentes para ...

API y Programación de Recursos

Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. 20

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())

Page 37: API - Interfaz de Programación y Generación de Componentes para ...

API y Programación de Recursos

Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. 21

{

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;

}

Page 38: API - Interfaz de Programación y Generación de Componentes para ...

API y Programación de Recursos

Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. 22

}

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 java.io.IOException;

import java.io.PrintWriter;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.semanticwb.portal.api.GenericResource;

import org.semanticwb.portal.api.SWBParamRequest;

import 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:

Page 39: API - Interfaz de Programación y Generación de Componentes para ...

API y Programación de Recursos

Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. 23

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.

Page 40: API - Interfaz de Programación y Generación de Componentes para ...

API y Programación de Recursos

Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. 24

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.

Page 41: API - Interfaz de Programación y Generación de Componentes para ...

API y Programación de Recursos

Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. 25

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 java.io.IOException;

import java.io.PrintWriter;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.semanticwb.SWBPlatform;

import org.semanticwb.portal.api.GenericResource;

import org.semanticwb.portal.api.SWBParamRequest;

import org.semanticwb.portal.api.SWBResourceException;

import 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>");

}

}

Page 42: API - Interfaz de Programación y Generación de Componentes para ...

API y Programación de Recursos

Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. 26

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:

Page 43: API - Interfaz de Programación y Generación de Componentes para ...

API y Programación de Recursos

Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. 27

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.GenericResource;

import org.semanticwb.portal.api.SWBParamRequest;

import 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:

Page 44: API - Interfaz de Programación y Generación de Componentes para ...

API y Programación de Recursos

Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. 28

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 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.GenericResource;

import org.semanticwb.portal.api.SWBParamRequest;

import 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:

Page 45: API - Interfaz de Programación y Generación de Componentes para ...

API y Programación de Recursos

Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. 29

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"));

Page 46: API - Interfaz de Programación y Generación de Componentes para ...

API y Programación de Recursos

Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. 30

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 face=\""+fontface+"\" size=\""+fontsize+

"\"color=\""+fontcolor+"\">";

String fontc="</font>";

out.println("<font face=Arial size=4>Menú, implementación del modo

Admin</font><br>");

out.println("<TABLE border=0 cellspacing='1' 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" name="fontsize" label="Tamaño de la Fuente:"

jsvaltype="js_numbers" />

<input type="TEXT" name="fontcolor" label="Color de la Fuente:" />

</fieldset>

<fieldset>

Page 47: API - Interfaz de Programación y Generación de Componentes para ...

API y Programación de Recursos

Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. 31

<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:

Page 48: API - Interfaz de Programación y Generación de Componentes para ...

API y Programación de Recursos

Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. 32

package cursoSWB;

import java.io.IOException;

import java.io.PrintWriter;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.semanticwb.model.User;

import org.semanticwb.portal.api.GenericResource;

import org.semanticwb.portal.api.SWBParamRequest;

import 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 Objeto

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>");

}

}

La visualización en pantalla de este recurso se muestra a continuación:

Page 49: API - Interfaz de Programación y Generación de Componentes para ...

API y Programación de Recursos

Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. 33

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 java.io.IOException;

import java.io.PrintWriter;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.semanticwb.portal.api.GenericResource;

import org.semanticwb.portal.api.SWBParamRequest;

import org.semanticwb.portal.api.SWBResourceException;

import 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:

Page 50: API - Interfaz de Programación y Generación de Componentes para ...

API y Programación de Recursos

Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. 34

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 MÉTODO DE LLAMADA “DIRECT” A SEMANTICWEBBUILDER

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 java.io.IOException;

import java.io.PrintWriter;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.semanticwb.SWBUtils;

import org.semanticwb.portal.api.GenericResource;

import org.semanticwb.portal.api.SWBParamRequest;

import org.semanticwb.portal.api.SWBResourceException;

import org.semanticwb.portal.api.SWBResourceURL;

import org.w3c.dom.Document;

import 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();

Page 51: API - Interfaz de Programación y Generación de Componentes para ...

API y Programación de Recursos

Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. 35

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:

Page 52: API - Interfaz de Programación y Generación de Componentes para ...

API y Programación de Recursos

Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. 36

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 java.io.IOException;

import javax.servlet.RequestDispatcher;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.semanticwb.portal.api.GenericResource;

import org.semanticwb.portal.api.SWBParamRequest;

import 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);

Page 53: API - Interfaz de Programación y Generación de Componentes para ...

API y Programación de Recursos

Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. 37

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:

Page 54: API - Interfaz de Programación y Generación de Componentes para ...

API y Programación de Recursos

Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. 38

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”);

Page 55: API - Interfaz de Programación y Generación de Componentes para ...

API y Programación de Recursos

Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. 39

ANEXOS

Anexos

Ejercicios Adicionales

CreateImg.java

import java.awt.AWTException;

import java.awt.Graphics2D;

import java.awt.image.BufferedImage;

import org.semanticwb.portal.api.GenericResource;

import org.semanticwb.portal.api.SWBResourceException;

import org.semanticwb.portal.api.SWBParamRequest;

import java.io.IOException;

import java.io.PrintWriter;

import java.util.Date;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.semanticwb.SWBUtils;

import 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);

Page 56: API - Interfaz de Programación y Generación de Componentes para ...

API y Programación de Recursos

Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. 40

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

Page 57: API - Interfaz de Programación y Generación de Componentes para ...

API y Programación de Recursos

Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. 41

------------------------------------------------- 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

Page 58: API - Interfaz de Programación y Generación de Componentes para ...

API y Programación de Recursos

Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. 42

------------------------------------------------- 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.

Page 59: API - Interfaz de Programación y Generación de Componentes para ...

API y Programación de Recursos

Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. 43

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

Page 60: API - Interfaz de Programación y Generación de Componentes para ...

API y Programación de Recursos

Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. 44

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

Page 61: API - Interfaz de Programación y Generación de Componentes para ...

API y Programación de Recursos

Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. 45

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,/WEB-

INF/owl/office.owl,/WEB-INF/owl/oqp_engine.owl

swb/ontologyFiles=/WEB-INF/owl/swb.owl,/WEB-INF/owl/swb_rep.owl,/WEB-

INF/owl/office.owl

#swb/ontologyFiles=/WEB-INF/owl/swb.owl,/WEB-INF/owl/swb_rep.owl,/WEB-

INF/owl/office.owl,/WEB-INF/owl/swb_userTypes.owl,/WEB-INF/owl/catalogs.owl,/WEB-

INF/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

#***********************************************************

Page 62: API - Interfaz de Programación y Generación de Componentes para ...

API y Programación de Recursos

Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. 46

#*** 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...

Page 63: API - Interfaz de Programación y Generación de Componentes para ...

API y Programación de Recursos

Fecha de Elaboración: Septiembre de 2009. Fecha de Actualización Diciembre 2010 INFOTEC CONACYT FIDEICOMISO. 47

#*** 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


Recommended