Curso introductorio de desarrollo de productos archetypes para plone. Herramientas UML, introducción a diagramas uml para desarrollo archetypes, ArgoUml, archgenxml, vocabularios, workflow.
KELA Presentacion Costa Rica 2024 - evento Protégeles
UML to Archetypes code generation with ArchGenXML
1. menttes
corporate training
Desarrollo de Productos con
Archetypes y ArchGenXML
Sebastian, Ferreyra
info@menttes.com
2. ¿Qué es UML?
UML son las siglas para Unified Modeling Language;
que en castellano quiere decir: Lenguaje de
Modelado Unificado. Para comprender que es el
UML basta con analizar cada una de las palabras
que lo componen por separado.
menttes
3. Lenguaje
UML es, precisamente, un lenguaje. Lo que implica
que éste cuente con una sintaxis y una semántica.
Por lo tanto, al modelar un concepto en UML,
existen reglas sobre cómo deben agruparse los
elementos del lenguaje y el significado de esta
agrupación.
menttes
4. Modelado
UML es visual. Mediante su sintaxis se modelan
distintos aspectos del mundo real que permiten
una mejor interpretación y entendimiento de éste.
menttes
5. Unificado
Por que unifica varias técnicas de modelado en una
única.
menttes
6. UML Tools
ArchGenXML procesa modelos almacenados en
formato XMI. Este formato XML no esta pensado para
ser escrito en un editor de texto plano ni en un editor
basado en XML, por lo tanto se debe usar una
herramienta de diseño UML. A continuación damos un
listado de las herramientas UML mas conocidad
menttes
7. UML Tools - Poseidon
1) Software comercial
2) Escrito en Java, corre en la mayoria de las
plataformas
3) Basado en ArgoUML
4) Almacena el modelo en formato XMI + información
del diagrama en archivos .zuml (archivos zip)
5) Es bastante lento
6) Necesita mucha memoria y una rapida CPU
Website y download - www.gentleware.com
menttes
8. UML Tools - ArgoUML
1) Software libre
2) Escrito en Java, corre en la mayoría de las
plataformas
3) Almacena el modelo en formato XMI + información
del diagrama en archivos .zuml (archivos zip)
4) No posee undo
5) Conocidas, pero no criticas bugs
Website y download - argouml.tigris.org
menttes
9. UML Tools - ObjectDomain
1) Comercial, demo por tiempo limitado <= 30 días
2) Escrito en Java, corre en la mayoría de las
plataformas
3) Se necesita exportar el modelo desde su nativo
.odm formato
Website y download - objectdomain.com
menttes
10. UML Tools - Powerdesigner
1) Version XMI 1.1
2) Se necesita exportar el modelo
Website y download - sybase.com
menttes
11. UML Tools - Umbrello
1) Software libre
2) Corre bajo Linux/KDE
3) Almacena el modelo en formato XMI
4) Hasta la version 1.4 Umbrello no soportaba de
manera correcta el formato XMI
Website y download - uml.sourceforge.net
menttes
12. Una breve introducción a UML
UML (Lenguaje de Modelado Unificado), es un lenguaje
gráfico diseñado para describir software atraves de
diagramas. Tenemos varios tipos de diagramas, pero los
mas relevantes para ArchGenXML son:
- Diagrama de clases
- Diagrama de estados
El diagrama de clases es utilizado para dibujar interfaces,
content types (representados como clases) y herramientas
(representadas como clases con el estereotipo portal_tool),
así como los atributos y operaciones publicas en los
mismos. Además de poder asociar los diagramas para ser
contenidos o referenciados entre si.
menttes
17. ArgoUML - Windows XP Download
Descargamos ArgoUML 0.24: http://argouml-downloads.tigris.org/argouml-0.24/
menttes
18. ArgoUML – Ejecutar Jar File
Para ejecutar ArgoUML hacemos doble click en el archivo argouml
menttes
19. ArgoUML – Descargando archgenxml tagged values
1) Descargamos argouml_profile:
http://plone.org/products/archgenxml/issues/30/18/at_download/attachment/
2) Copiamos el archivo argouml_profile.xmi dentro de la carpeta donde tenemos el
ejecutable argouml.jar
menttes
20. ArgoUML – Creando un .zargo con argouml_profile
1) Abrimos ArgoUML
2) Vamos a “Archivo” -> “Guardar el proyecto como ...” y elegimos el nombre de
nuestro proyecto (Ejemplo ArtistSite.zargo)
menttes
21. ArgoUML – Creando un .zargo con argouml_profile
3) Luego lo que hacemos es pararnos encima del archivo .zargo que acabamos de crear
y con el boton derecho del mouse elegimos la opción “Abrir con” -> “Elegir
programa...”, por el momento seleccionamos el “Bloc de Notas” como programa por
defecto para abrir los archivos .zargo para que Windows pueda identificarlos con algún
formato.
4) A continuación dentro de la misma carpeta en donde se encuentra el archivo .zargo,
elegimos el tab “Tipos de archivo” y elegimos nuestro archivo ZARGO.
menttes
22. ArgoUML – Creando un .zargo con argouml_profile
5) Clickeamos en “Opciones avanzadas”, luego seleccionamos “open” y a continuación
clickeamos en “Editar”, lo que hacemos es modificar “Aplicación utilizada para
realizar la acción” por:
quot;C:Program FilesJavajre1.5.0_06binjavaw.exequot; quot;-
Dargo.defaultModel=your_PC_pathargouml_profile.xmiquot; -jar
quot;your_PC_pathArgoUML-0.20argouml.jarquot; quot;%Lquot;
menttes
23. ArgoUML – Creando un .zargo con argouml_profile
Listo, ahora podemos ver dentro de nuestro modelo
las opciones AGX en ArgoUML, y cada ves que
abramos un archivo .zargo se cargara con todos estos
tag de manera automática
menttes
24. ¿Que es ArgoUML?
ArgoUML es una herramienta utilizada en el
modelaje de sistemas, mediante la cual se realizan
diseños en UML llevados acabo en el análisis y pre-
diseño de Sistemas de Software.
menttes
25. ¿Porque ArgoUML?
● Maduro – Este soporta importantes características
● Es relativamente liviano. Lo cual es muy
importante.
● El precio es muy bueno. Es gratis.
menttes
33. ¿Que es ArchGenXML?
● Es un generador de código para productos Plone,
basados en Archetypes.
● Analiza modelos UML en el XMI-FORMATO
(.xmi.zargo.zuml), creados con ArgoUML,
menttes
34. ¿Porqué usar ArchGenXML? (parte 1)
• Quieres ahorrarte tiempo
• Eres un programador bago
• No te gusta re inventar la rueda
• No te gusta copiar y pegar código
• Haces uso de referencias e interfaces
menttes
35. ¿Porqué usar ArchGenXML? (parte 2)
• Tienes proyectos grandes con muchos content
types diferentes
• Quieres o necesitas una correcta y bien
documentada interfase para tu producto
• Quieres mantener tu proyecto en el futuro sin
tener un dolor de cabeza
menttes
38. Agregando un nuevo Artist
1) Copiar la carpeta ArtistSite en el directorio Products
2) Reiniciar Zope
3) Instalar ArtistSite usando QuickInstaller
4) Agregar un nuevo Artist
menttes
41. Moviendo el modelo al producto
1) Dentro de la carpeta ArtistSite crear una sub-
carpeta llamada model
2) Copiar el archivo ArtistSite.zargo dentro de la
carpeta model
menttes
43. Agregar ATVM como dependencia
1) En la raíz del producto agregar el archivo
AppConfig.py
2) Editar AppConfig.py y agregar la linea:
DEPENDENCIES = ['ATVocabularyManager']
3) Reiniciar Zope
4) Reinstalar ArtistSite
menttes
47. Contenedor
Usaremos el rombo solido para hacer una estricta
contención, instancias del tipo Artist pueden ser
agregadas solo en instancias del tipo 'Artists'
menttes
56. Agregando una nueva Suggestion
1) Copiar la carpeta GiveSuggestion en el directorio Products
2) Reiniciar Zope
3) Instalar GiveSuggestion usando QuickInstaller
4) Agregar una nueva Suggestion
menttes
58. Workflow
Lo que haremos ahora es agregarle workflow a
nuestro content type Suggestion.
Definiremos los estados Submitted, Approved,
Complete y Rejected con sus respectivas
transacciones.
menttes
59. Agregando el diagrama de estado
1) Dentro de nuestro clase Suggestion, clickeamos en
Crear -> Diagrama de estado
menttes
60. Agregando un estado inicial
2) Agregamos un estado inicial, solo debemos clickear
en el circulo de color negro solida, luego le
ponemos el nombre Creating
menttes
61. Agregando un estado simple
3) A continuación agregamos un estado simple, este
luce como una caja redonda con una linea
horizontal en el medio. Llamar a esta Submitted
menttes
62. Otro estado simple
4) A la derecha de Submitted agregamos otro estado
simple, lo llamaremos a este Approved
menttes
63. Agregando estados finales
5) A la derecha de Approved agregamos un estado
final (circulo negro con contorno blanco) al cual
llamaremos Complete
6) Abajo de Approved agregamos un estado final al
cual llamaremos Rejected
menttes
64. Nombrando las transiciones
7) Lo que hacemos a continuación es nombrar las
transiciones, la trancision que va al estado
Submitted se llamara Submit, la transición que va
al estado Approved se llamara Approve, la
transición que va al estado Rejected se llamara
Reject y por ultimo la transición que va al estado
Completed se llamara Complete
menttes
65. Permisos de los usuarios
8) Ahora vamos a definir lo que cada rol puede ver,
los usuarios Anonimos podran Crear (un estado
inicial) y requerir un Submit (una transición de
estado), pero no podrán Aprobar una suggestion.
Los Managers y Reviewer podrán
approve/reject/complete la suggestions. Pero los
usuarios anonimos podrán ver el pedido durante
todo el proceso.
menttes
70. Quien puede modificar los estados
9) Definiremos guardas (guards), para saber que
estado es el que puede setear cada usuario en el
content type. Para esto nos pararemos en cada una
de las transacciones (menos en la inicial Submit) y
agregaremos una guard:
guard_roles:Reviewer;Manager
menttes
75. Agregando una nueva Suggestion
1) Copiar la carpeta GiveSuggestion en el directorio Products
2) Reiniciar Zope
3) Instalar GiveSuggestion usando QuickInstaller
4) Agregar una nueva Suggestion
menttes
76. Anónimos Suggestion
Lo que haremos ahora es permitirle a los usuarios
anónimos agregar suggestions a nuestro sitio. Pero no
en cualquier lugar sino mas bien en una carpeta que
crearemos para que se agreguen dentro de esta.
menttes
77. Carpeta Suggestion
1) En nuestra instancia Plone agregamos una carpeta
en la raíz llamada Suggestions. Y dentro de esta
creamos otra carpeta llamada Archive.
menttes
78. Carpeta Suggestion - Security
2) En nuestro ZMI:
a) Navegamos hasta la carpeta suggestions/archive
y clickeamos en el tab Security, buscamos el
permiso Add portal content, Desclikeamos el box
Aquire a la izquierda y clickeamos los boxes
Anonymous y Authenticated a la derecha.
menttes
79. Carpeta Suggestion - Security
b) Buscamos ahora el permiso Modify portal
content. Asegurarse de que Aquire esta
desclickeado y clickear Anonymous y
Authenticated.
menttes
80. Carpeta Suggestion - Security
c) En la parte de mas abajo de la pagina
clickeamos en el boton Save Changes para
guardar los cambios.
Si abrimos el Sitio Plone con otro navegador o nos
deslogeamos del sitio que estamos utilizando,
podremos ver que los usuarios anónimos pueden
ahora agregar suggestions dentro de la carpeta
Archive. Y poner el contenido en estado Submited.
Pero tenemos un problema, los usuarios anónimos
pueden editar dentro de Archive y eso no lo
queremos.
menttes
81. Negar edición a los Anónimos
El objetivo es hacer que los usuarios anónimos no
puedan editar suggestions, para esto agregaremos
dos script dentro de nuestro producto GiveSuggestion
que lo que harán es modificar de manera automática
el estado de las suggestion al ser creadas a Submited,
ya que en ese estado hemos definido que los únicos
que pueden modificar los objetos son los Managers y
Reviewers.
Es importante tener en cuenta que estos scripts se
pueden borrar si regeneramos el producto con
ArchGenXML por lo tanto debemos mantener una
copia del producto en algun lado.
menttes
84. Editamos Install.py
En ProductsGiveSuggestionExtensionsInstall.py
buscamos la linea:
print >>out,'no workflow install'
y debajo de esta ponemos:
controller = getToolByName(self, 'portal_form_controller')
addFormControllerAction(self, out,
controller,
template = 'validate_integrity',
status = 'success',
contentType = 'Suggestion',
button = '',
actionType = 'traverse_to',
action = 'string:suggestion_post')
menttes
85. Editamos Install.py
En la parte inferior del archivo agregamos el código:
def addFormControllerAction(self, out, controller, template, status,
contentType, button, actionType, action):
quot;quot;quot;Add the given action to the portalFormControllerquot;quot;quot;
controller.addFormAction(template, status, contentType, button, actionType, action)
print >> out, quot;Added action %s to %squot; % (action, template)
Listo, si probamos ahora agregar una suggestion
como usuarios anónimos, no podremos editarlo.
menttes
87. Objetivo
El objetivo es crear un nuevo content type Document
que herede todos los campos de ATDocument y a su
ves añadir un par de campos adicionales
menttes
90. Moviendo los nuevos campos debajo de title
Para mover los nuevos campos debajo del campo title
debemos utilizar la función moveField, en:
ProductsATAGAEXDocumentcontentAGAEXDocument.py
luego de la definición de nuestro schema, ponemos
AGAEXDocument_schema.moveField('autor', after='title')
AGAEXDocument_schema.moveField('conocimiento', after='autor')
AGAEXDocument_schema.moveField('publico', after='conocimiento')
AGAEXDocument_schema.moveField('email', after='publico')'
menttes
97. Agregando un nuevo Article
1) Copiar la carpeta ATArticle en el directorio Products
2) Reiniciar Zope
3) Instalar ATArticle usando QuickInstaller
4) Agregar un nuevo Article
menttes
102. Borrando el schemata default
Para borrar el schemata default primero debemos
mover los atributos id y title a nuestro schemata
article, en:
ProductsATArticlecontentArticle.py
luego de la definición de nuestro schema, ponemos
Article_schema['id'].schemata = 'article'
Article_schema['title'].schemata = 'article'
menttes
104. Ocultando title en Article
Lo que haremos a continuación es borrar el atributo
title de nuestro content type Article, en:
ProductsATArticlecontentArticle.py
luego de la definición de nuestro schema, ponemos
Article_schema['title'].required = 0
Article_schema['title'].widget.visible = {'edit': 'hidden', 'view': 'invisible'}
menttes
106. Que paso con el id de nuestro ATArticle?
Al haber ocultado el atributo title de nuestro
content type, Plone utiliza un id por defecto que
lo obtiene de manera automática de acuerdo a
la fecha del día en que se crea el objeto.
menttes
107. Pisando title en Article
Lo que haremos sera modificar el atributo title
cambiándole el nombre a Author, en:
ProductsATArticlecontentArticle.py
luego de la definición de nuestro schema, ponemos
Article_schema['title'].widget.label = 'Author'
#Article_schema['title'].required = 0
#Article_schema['title'].widget.visible = {'edit': 'hidden', 'view': 'invisible'}
menttes
113. ¿Qué es un esquema Archetypes ?
El corazón de archetypes es su esquema (secuencia
de campos).
El esquema trabaja como una definición de lo que su
objeto contendrá y como presentar la información
contenida.
menttes
114. Esquema y Esquema Base
Para crear un esquema se pasan los campos
que se desean dentro del objeto esquema
como una tupla.
Ej.:
Schema((
StringField('body',
widget = TextAreaWidget(label='Body')
),
# otros campos aquí
))
menttes
116. Fields
Todos los campos son instanciados de la misma
manera, creando un campo y pasándole a este un
parámetro requerido: name
Ej.:
from Products.Archetypes.public import IntegerField
# un simple campo para edad
age = IntegerField('age')
menttes
117. Widgets
Una widget contiene la información acerca de cómo
será representado visualmente el objeto
Ej.:
from Products.Archetypes.public import IntegerField
from Products.Archetypes.public import IntegerWidget
# un simple campo para la edad
age = IntegerField('age',
widget=IntegerWidget(label=quot;Your agequot;)
)
menttes
118. Ejemplo de Archetypes: Artist
schema = Schema((
StringField('name'),
ImageField('photo'),
LinesField('instrument'),
))
class Artist(BaseContent)
schema = BaseSchema + schema
registerType(Artist,PROJECTNAME)
menttes
120. Ejemplo: Artist paso a paso
Products
|
Artist
|
__init__.py
|
Artist.py
|
config.py
|
Extension
|
__init__.py
|
menttes
Install.py
121. Paso 1) Directorio Artist
Lo primero que debemos hacer es ir dentro de
nuestro directorio de productos Plone y crear una
carpeta con el nombre “Artist”
Ejemplo: /var/www/zope/plone-2.1.1/Product/Artist
(Aunque podemos crearla en cualquier lado y luego
tirarla dentro de “Product”)
menttes
127. Bien ya tenemos nuestro producto Plone listo con
nuestro content type definido mediante esquemas.
Ahora veamos como hacer el producto que hemos
creado instalable.
menttes
128. Paso 6) Install.py
Bien, primero debemos crear una nueva carpeta
Extensions dentro de nuestra carpeta Artist. Ahora
si, dentro de esta agregamos Install.py:
1 from Products.Artist.config import PROJECTNAME
2 from Products.Archetypes.public import listTypes
3 from Products.Archetypes.Extensions.utils import installTypes
4 from StringIO import StringIO
5 def install(self):
6 out = StringIO()
7 installTypes(self, out,
8 listTypes(PROJECTNAME),
9 PROJECTNAME)
10 print >> out, quot;Successfully installed %s.quot; % PROJECTNAME
11 return out.getvalue()
menttes
129. Listo! Hemos terminado.
Ahora vamos a probarlo, para esto reiniciemos
nuestra instancia Zope, dentro de Plone vamos al
ZMI, luego a portal_quickinstaller e instalamos
nuestro nuevo producto.
En la front-page vamos a nuestra barra de
contenidos 'drop-down list' y cargamos un nuevo
content type Artist!
menttes
130. Material leido para ArchGenXML/ArgoUML
http://plone.org/documentation/tutorial/archgenxml-getting-started/tutorial-all-pages
http://plone.org/products/archgenxml/documentation/how-to/setting-up-argouml-to-provide-tagg
http://plone.org/products/archgenxml/issues/30
http://plone.org/documentation/tutorial/picking-archetypes-widgets/tutorial-all-pages
http://plone.org/documentation/tutorial/archgenxml-getting-started/archgenxmlquickref
http://plone.org/products/archgenxml/documentation/how-to/subclassing-atcontenttypes
http://plone.org/documentation/tutorial/anonymously-adding-custom-content-types-with-argoum
http://oodt.jpl.nasa.gov/wiki/display/edrn/UML+to+Portal+in+a+Few+Easy+Steps
http://www.jazkarta.com/presentations/ArchGenXML-ArgoUML.pdf
http://plone.org/documentation/how-to/make-view-page-use-schemata-declarations/?searchterm
http://plone.org/products/archetypes/documentation/how-to/title-less-type
menttes