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

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