<?xml version="1.0" encoding="ISO-8859-15"?>
<feed version="0.3" xmlns="http://purl.org/atom/ns#"
      xmlns:dc="http://purl.org/dc/elements/1.1/">
  <title mode="escaped" type="text/html">Anahide Tchertchian</title>
  <tagline>ATOM Feed - Anahide Tchertchian</tagline>
  <link rel="alternate" type="text/html"
        href="http://blogs.nuxeo.com/sections/blogs/anahide_tchertchian" />
  <id>tag:blogs.nuxeo.com:sections:blogs:anahide_tchertchian</id>
  <generator url="http://cps-project.org" version="3">CPS</generator>
  <modified>2005-05-10 04:17:22</modified>

  <link rel="service.feed"
        href=" http://blogs.nuxeo.com/sections/blogs/anahide_tchertchian/atomFeed"
        title="Anahide Tchertchian"
        type="application/atom+xml" />
  <link rel="service.post"
        href=" http://blogs.nuxeo.com/sections/blogs/anahide_tchertchian/postAtom"
        title="Anahide Tchertchian"
        type="application/atom+xml" />
  <link rel="service.categories"
        href=" http://blogs.nuxeo.com/sections/blogs/anahide_tchertchian/atomCategories"
        title="Anahide Tchertchian"
        type="application/atom+xml" />

  
      <entry xmlns="http://purl.org/atom/ns#"
       xmlns:dc="http://purl.org/dc/elements/1.1/">
     
  <title mode="escaped" type="text/html">Google Web Toolkit integration in Nuxeo EP</title>
  <link rel="alternate" type="text/html"
        href="http://blogs.nuxeo.com/sections/blogs/anahide_tchertchian/2008_07_03_google-web-toolkit-integration-in-nuxeo-ep" />
  <issued>2008-07-03T09:38:45Z</issued>
  <modified>2008-07-03T09:38:45Z</modified>
  <created>2008-07-03T09:24:38Z</created>
  <draft xmlns="http://purl.org/atom-blog/ns#">false</draft>
  <author>
    <name>atchertchian</name>
  </author>
  
  
    <dc:subject>java</dc:subject>
  
  
    <dc:subject>nuxeo</dc:subject>
  
  
  <summary type="text/html" mode="escaped">
The Nuxeo application extensively uses JSF facelets and Seam for its
rendering:

Seam provides a great bridge between Nuxeo services and JSF rendering, using contextual components;
The themes and layouts modules rely on facelets to build rendering based on contributions to extension points;
The url module relies on JSF phase listener and navigation handler pluggable behaviours to provide ...</summary>

  <content type="text/html" mode="escaped"
           xml:space="preserve">&lt;p&gt;
The Nuxeo application extensively uses JSF facelets and Seam for its
rendering:
&lt;ul&gt;
&lt;li&gt;Seam provides a great bridge between Nuxeo services and JSF rendering, using contextual components;&lt;/li&gt;
&lt;li&gt;The themes and layouts modules rely on facelets to build rendering based on contributions to extension points;&lt;/li&gt;
&lt;li&gt;The url module relies on JSF phase listener and navigation handler pluggable behaviours to provide bookmarkable urls to documents.&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;

&lt;p&gt;
Even though last versions of Seam offer a very clean integration with Richfaces/ajax4jsf JSF libraries, the Google Web Toolkit (&lt;a href="http://code.google.com/webtoolkit/" target="_blank"&gt;http://code.google.com/webtoolkit/&lt;/a&gt;) looks like a good alternative when dealing with the more complex screens.
&lt;/p&gt;
&lt;p&gt;
For instance, rendering a table of documents with pagination, sorting and
selection support is not straight-forward with JSF facelets.
&lt;/p&gt;
&lt;p&gt;
While JSF goal to separate logic and rendering can be seen as too restrictive for a framework like Nuxeo EP, GWT makes it possible to keep this separation and not lose any expressivity because a GWT application is written in Java. Also, JSF has a quite steeper learning curve than GWT.
&lt;/p&gt;
&lt;p&gt;
Integrating GWT with Nuxeo EP is an attempt to get the best of both worlds: keep JSF for its integration with Seam, third-party JSF libraries, easy deployment/override of xhtml pages as well as existing Nuxeo modules relying on it, and use GWT for some specific complex screens.
&lt;/p&gt;
&lt;p&gt;
An addon has been written as a proof-of-concept. Documents are retrieved
from the Nuxeo application via a Seam component and information for their
rendering is serialized on the GWT client side to display them in a
paginated table.
&lt;/p&gt;
&lt;/p&gt;
Seam made life easier by providing a remoting service interacting with the
GWT service framework: from GWT rendering classes, it's possible to call a
standard Seam component that will implement server logic.
&lt;/p&gt;
&lt;p&gt;
Some code has been added to restore the conversation when calling the Seam component, as we want to display the list of current folder children. The conversation id is retrieved on client side thanks to javascript code
parsing the url. It is passed alongside when calling the remote service.
&lt;/p&gt;
&lt;p&gt;
Packaging was not a problem thanks to maven plugins that perform the GWT
compilation and make it possible to include them in the nuxeo.war folder at
deployment.
&lt;/p&gt;
&lt;p&gt;
Integrating the GWT module within standard xhtml pages was easy: the
javascript simply needs to be included in the page as mere html code.
&lt;/p&gt;
&lt;p&gt;
Here's a screenshot of rendered table:
&lt;br /&gt;
&lt;img src="http://blogs.nuxeo.com/portal_skins/custom/material/gwt_addon" /&gt;
&lt;/p&gt;
&lt;p&gt;
What's next?
&lt;ul&gt;
&lt;li&gt;Support internationalization: GWT offers different promising internationalization procedures to achieve sharing of translation files *.properties with GWT modules.&lt;/li&gt;
&lt;li&gt;Use GWT or GWT-ext libraries modules to customize some complex Nuxeo screens like users, access rights or workflow management.&lt;/li&gt;
&lt;li&gt;Provide shared libraries that can be used by other rendering frameworks like Flex, mostly document model serialization.&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;
&lt;p&gt;
For better understanding of these technologies, I strongly recommend the excellent article written by Rob Jellinghaus (Seam / JSF / GWT Integration: What, Why, and How: &lt;a href="http://unrealities.com/seamgwt/article_0.2.html" target="_blank"&gt;http://unrealities.com/seamgwt/article_0.2.html&lt;/a&gt;).
&lt;/p&gt;
&lt;p&gt;
The addon code is at &lt;a href="http://hg.nuxeo.org/addons/nuxeo-platform-gwt/" target="_blank"&gt;http://hg.nuxeo.org/addons/nuxeo-platform-gwt/&lt;/a&gt;. It
currently only works with the Nuxeo Seam 2 branch that should be merged in
the 5.2 branch shortly.
&lt;/p&gt;</content>

  <id>tag:blogs.nuxeo.com:sections:blogs:anahide_tchertchian:2008_07_03_google-web-toolkit-integration-in-nuxeo-ep</id>
  <link rel="service.edit" type="application/atom+xml"
        href="http://blogs.nuxeo.com/sections/blogs/anahide_tchertchian/2008_07_03_google-web-toolkit-integration-in-nuxeo-ep/atom?2008_07_03_google-web-toolkit-integration-in-nuxeo-ep"
        title="Edit Here - Google Web Toolkit integration in Nuxeo EP" />
</entry>

  
  
      <entry xmlns="http://purl.org/atom/ns#"
       xmlns:dc="http://purl.org/dc/elements/1.1/">
     
  <title mode="escaped" type="text/html">How to invoke method expressions with parameters in JSF?</title>
  <link rel="alternate" type="text/html"
        href="http://blogs.nuxeo.com/sections/blogs/anahide_tchertchian/2007_09_04_how-to-invoke-method-expressions-with-parameters-in-jsf" />
  <issued>2007-09-04T14:06:16Z</issued>
  <modified>2007-09-04T14:06:16Z</modified>
  <created>2007-09-04T13:11:21Z</created>
  <draft xmlns="http://purl.org/atom-blog/ns#">false</draft>
  <author>
    <name>atchertchian</name>
  </author>
  
  
    <dc:subject>nuxeo5</dc:subject>
  
  
  <summary type="text/html" mode="escaped">
The usual way to use EL expression in JSF could seem a little too
restrictive for some of us who are used to scripting languages.



For instance, if you'd like to display a bean property, you will write a
getter on it:



public class MyBean {

  String myProperty;

  public String getMyProperty() {
      return myProperty;
  }

}



Then you'll be able to write the ...</summary>

  <content type="text/html" mode="escaped"
           xml:space="preserve">&lt;p&gt;
The usual way to use EL expression in JSF could seem a little too
restrictive for some of us who are used to scripting languages.
&lt;/p&gt;

&lt;p&gt;
For instance, if you'd like to display a bean property, you will write a
getter on it:
&lt;/p&gt;

&lt;pre&gt;
public class MyBean {

  String myProperty;

  public String getMyProperty() {
      return myProperty;
  }

}
&lt;/pre&gt;

&lt;p&gt;
Then you'll be able to write the following value expression in a template:
&lt;/p&gt;

&lt;pre&gt;
&amp;lt;h:outputText value="#{myBean.myProperty}" /&amp;gt;
&lt;/pre&gt;

&lt;p&gt;
Now imagine that your bean has to perform a more complex task to retrieve the property, like calling a service, and pass parameters to it. Even if there is always the possibility to pass the parameter using a "f:parameter" tag, the bean API will look kind of awkward. The more natural way to do so is to write a method with this parameter, and find a way to call it from the template.
&lt;/p&gt;

&lt;p&gt;
For instance, we could have:
&lt;/p&gt;

&lt;pre&gt;
public String getMyProperty(String param) {
   // execute any function to get the result
   return function(param);
}
&lt;/pre&gt;

&lt;pre&gt;
&amp;lt;h:outputText value="#{myBean.getMyProperty('foo')}" /&amp;gt;
&lt;/pre&gt;

&lt;p&gt;
Sadly, there is no way to do that using "pure" JSF implementations.
&lt;/p&gt;

&lt;p&gt;
That's where facelets can be very handy. In &lt;a href="http://andrewfacelets.blogspot.com/2006/06/creating-composite-controls-with-jsf.html" target="_blank"&gt;a very nice blog post&lt;/a&gt;, Andrew Robinson explains how to pass method bindings to children components using the facelet user tag system. I will explain how Nuxeo uses the same tricks to invoke method expressions with parameters as regular value expressions.
&lt;/p&gt;

&lt;p&gt;
First let's define the famous MethodValueExpression class, that will behave
as a regular value expression but will invoke a method expression when
trying to resolve the value:
&lt;/p&gt;

&lt;pre&gt;
public class MethodValueExpression extends ValueExpression implements
        Externalizable {

    public MethodValueExpression(MethodExpression methodExpression,
            Class[] paramTypesClasses) {
        this.methodExpression = methodExpression;
        this.paramTypesClasses = paramTypesClasses;
    }

    ...

    @Override
    public Object getValue(ELContext context) {
        // invoke method instead of resolving value
        Object res;
        try {
            return methodExpression.invoke(context, paramTypesClasses);
        }
        catch(Throwable t) {
            return null;
        }
    }

}
&lt;/pre&gt;

&lt;p&gt;
Nuxeo benefits from an extension to the EL provided by Seam: it makes it possible to use parameters on any method expression without having to configure parameter types. That's why parameter types classes are never actually set in the Nuxeo code.
&lt;/p&gt;

&lt;p&gt;
When this is done, we can use facelets meta rules to use this class instead
of the generic one. This is done via a component handler:
&lt;/p&gt;

&lt;pre&gt;
public class GenericHtmlComponentHandler extends HtmlComponentHandler {

    ...

    protected MetaRuleset createMetaRuleset(Class type) {
        MetaRuleset m = super.createMetaRuleset(type);
        if (ValueHolder.class.isAssignableFrom(type)) {
            m.addRule(GenericValueHolderRule.Instance);
        }
        return m;
    }

}
&lt;/pre&gt;

&lt;p&gt;
This configuration tells to use the GenericValueHolderRule class when
setting a component attributes. This rule does not do much but use our MethodValueExpression when appropriate, e.g. when brackets are detected.
&lt;/p&gt;

&lt;p&gt;
We can configure tags to use this handler in a facelet taglib:
&lt;/p&gt;

&lt;pre&gt;
&amp;lt;tag&amp;gt;
  &amp;lt;tag-name&amp;gt;outputText&amp;lt;/tag-name&amp;gt;
  &amp;lt;component&amp;gt;
    &amp;lt;component-type&amp;gt;javax.faces.HtmlOutputText&amp;lt;/component-type&amp;gt;
    &amp;lt;renderer-type&amp;gt;javax.faces.Text&amp;lt;/renderer-type&amp;gt;
    &amp;lt;handler-class&amp;gt;org.nuxeo.ecm.platform.ui.web.tag.handler.GenericHtmlComponentHandler&amp;lt;/handler-class&amp;gt;
  &amp;lt;/component&amp;gt;
&amp;lt;/tag&amp;gt;
&lt;/pre&gt;

&lt;p&gt;
Note that there is no need to use another term than "value" as shown in this
code (using "genericValue") as the last rule added to the MetaRuleSet will
apply first and override the default behaviour.
&lt;/p&gt;

&lt;p&gt;
The nxh taglib, using the namespace "http://nuxeo.org/nxweb/html" redefines all basic jsf html tags to use this handler.
&lt;/p&gt;

&lt;p&gt;
We could add any number of attributes to be dealt in the same way than
"value": for instance, being able to write &amp;lt;nxh:outputText
rendered="#{myBean.getProperty('foo')}" /&amp;gt; can be handy too.
&lt;/p&gt;

&lt;p&gt;
Now it can a little painful to define a new taglib with this handler when
reusing custom tag libraries. The Nuxeo tag library defines a new tag
"nxu:methodResult", that will make the result of the given expression
available in the variable map:
&lt;/p&gt;

&lt;pre&gt;
&amp;lt;nxu:methodResult name="prop" value="#{myBean.getMyProperty('foo'}"&amp;gt;
  &amp;lt;h:outputText value="foo" rendered="#{prop == 'bar'}" /&amp;gt;
&amp;lt;/nxu:methodResult&amp;gt;
&lt;/pre&gt;

&lt;p&gt;
The variable named "prop" is available inside the methodResult tag, as a row
variable in a "h:dataTable" tag.
&lt;/p&gt;

&lt;p&gt;
This behaviour is achieved using a specific tag handler that will use the
MethodValueExpression presented above:
&lt;/p&gt;

&lt;pre&gt;
public class MethodResultTagHandler extends MetaTagHandler {

    private final TagAttribute name;

    private final TagAttribute value;

    public MethodResultTagHandler(TagConfig config) {
        super(config);
        name = getRequiredAttribute("name");
        value = getRequiredAttribute("value");
    }

    public void apply(FaceletContext ctx, UIComponent parent)
            throws IOException {
        String nameStr = name.getValue(ctx);
        // parameter types evaluation not needed using Seam
        MethodExpression meth = value.getMethodExpression(ctx, Object.class,
                new Class[0]);
        ValueExpression ve = new MethodValueExpression(meth, paramTypesClasses);
        ctx.getVariableMapper().setVariable(nameStr, ve);
        this.nextHandler.apply(ctx, parent);
    }

}
&lt;/pre&gt;

&lt;p&gt;
This tag handler is linked to the MethodResult tag in a taglib file:
&lt;/p&gt;

&lt;pre&gt;
&amp;lt;tag&amp;gt;
  &amp;lt;tag-name&amp;gt;methodResult&amp;lt;/tag-name&amp;gt;
  &amp;lt;handler-class&amp;gt;org.nuxeo.ecm.platform.ui.web.tag.handler.MethodResultTagHandler&amp;lt;/handler-class&amp;gt;
&amp;lt;/tag&amp;gt;
&lt;/pre&gt;

&lt;p&gt;
Nice, huh?
&lt;/p&gt;

&lt;p&gt;
Nuxeo Tag Library documentation: &lt;a href="http://maven.nuxeo.org/nuxeo-platform-parent/nuxeo-platform-ui-web/tlddoc/" target="_blank"&gt;http://maven.nuxeo.org/nuxeo-platform-parent/nuxeo-platform-ui-web/tlddoc/&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
Complete code mentioned above is available here:
&lt;ul&gt;
  &lt;li&gt;&lt;a href="http://svn.nuxeo.org/trac/nuxeo/browser/org.nuxeo.ecm.platform/trunk/nuxeo-platform-ui-web/src/main/java/org/nuxeo/ecm/platform/ui/web/binding/MethodValueExpression.java" target="_blank"&gt;MethodValueExpression.java&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="http://svn.nuxeo.org/trac/nuxeo/browser/org.nuxeo.ecm.platform/trunk/nuxeo-platform-ui-web/src/main/java/org/nuxeo/ecm/platform/ui/web/tag/handler/GenericHtmlComponentHandler.java" target="_blank"&gt;GenericHtmlComponentHandler.java&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="http://svn.nuxeo.org/trac/nuxeo/browser/org.nuxeo.ecm.platform/trunk/nuxeo-platform-ui-web/src/main/java/org/nuxeo/ecm/platform/ui/web/tag/jsf/GenericValueHolderRule.java" target="_blank"&gt;GenericValueHolderRule.java&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="http://svn.nuxeo.org/trac/nuxeo/browser/org.nuxeo.ecm.platform/trunk/nuxeo-platform-ui-web/src/main/java/org/nuxeo/ecm/platform/ui/web/tag/handler/MethodResultTagHandler.java" target="_blank"&gt;MethodResultTagHandler.java&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;</content>

  <id>tag:blogs.nuxeo.com:sections:blogs:anahide_tchertchian:2007_09_04_how-to-invoke-method-expressions-with-parameters-in-jsf</id>
  <link rel="service.edit" type="application/atom+xml"
        href="http://blogs.nuxeo.com/sections/blogs/anahide_tchertchian/2007_09_04_how-to-invoke-method-expressions-with-parameters-in-jsf/atom?2007_09_04_how-to-invoke-method-expressions-with-parameters-in-jsf"
        title="Edit Here - How to invoke method expressions with parameters in JSF?" />
</entry>

  
  
      <entry xmlns="http://purl.org/atom/ns#"
       xmlns:dc="http://purl.org/dc/elements/1.1/">
     
  <title mode="escaped" type="text/html">RDF relations in CPS</title>
  <link rel="alternate" type="text/html"
        href="http://blogs.nuxeo.com/sections/blogs/anahide_tchertchian/2005_09_30_rdf-relations-in-cps" />
  <issued>2005-10-09T14:42:52Z</issued>
  <modified>2005-10-09T14:42:52Z</modified>
  <created>2005-09-30T19:35:02Z</created>
  <draft xmlns="http://purl.org/atom-blog/ns#">false</draft>
  <author>
    <name>atchertchian</name>
  </author>
  
  
    <dc:subject>cps</dc:subject>
  
  
    <dc:subject>rdf</dc:subject>
  
  
    <dc:subject>semantic_web</dc:subject>
  
  
  <summary type="text/html" mode="escaped">
  A new Zope product, CPSRelation, has been designed to handle RDF relations
  within  the CPS framework: it gives access to any kind of content RDF
  indexation and serialization, as well as querying features.
   
   CPSRelation offers RDF features installing a tool, portal_relations, that
  is able to manage several kinds of graphs. Another tool, portal_serializer,
  has been ...</summary>

  <content type="text/html" mode="escaped"
           xml:space="preserve">
  A new Zope product, CPSRelation, has been designed to handle RDF relations
  within&amp;nbsp; the CPS framework: it gives access to any kind of content RDF
  indexation and serialization, as well as querying features.&lt;br /&gt;
   &lt;br /&gt;
   CPSRelation offers RDF features installing a tool, portal_relations, that
  is able to manage several kinds of graphs. Another tool, portal_serializer,
  has been designed to provide object serializations via pluggable TALES
  expressions.&lt;br /&gt;
   &lt;br /&gt;
   We've been using IOBTree graphs to handle relations between documents,
  using their docid in the repository as unique identifiers. Now we can also
  handle RDF relations, provided by the rdflib Python library and the Redland
  framework.&lt;br /&gt;
   &lt;br /&gt;
   We have tested Redland graphs to index and serialize CPS content, and query
  relations created in the graph. The mechanism is rather simple:&lt;br /&gt;
   

  &lt;ul&gt;
   &lt;li&gt;add a Redland graph with an appropriate supported backend in the
   portal_relations tool.&lt;/li&gt;

   &lt;li&gt;define a serializer for each kind of content to get the triples to add
   to the graph, or define triples manually.&lt;/li&gt;

   &lt;li&gt;use the portal_relations API to add/delete relations and query the
   graph created.&lt;/li&gt;

   &lt;li&gt;use the portal_serializer API to serialize as RDF/XML files the graph,
   or results of a query.&lt;br /&gt;
   &lt;/li&gt;
  &lt;/ul&gt;
  &lt;br /&gt;
   The product's SVN repository is here: &lt;a
  href="http://svn.nuxeo.org/trac/pub/browser/CPSRelation/trunk/"&gt;http://svn.nuxeo.org/trac/pub/browser/CPSRelation/trunk/&lt;/a&gt;&lt;br /&gt;

  And can be downloaded using 
&lt;pre&gt;
svn co http://svn.nuxeo.org/pub/CPSRelation/trunk CPSRelation
&lt;/pre&gt;
  &lt;br /&gt;
   Additional information:&lt;br /&gt;
   

  &lt;ul&gt;
   &lt;li&gt;rdflib homepage: &lt;a href="http://rdflib.net"&gt;http://rdflib.net&lt;/a&gt;&lt;/li&gt;

   &lt;li&gt;Redland homepage: &lt;a
   href="http://librdf.org/"&gt;http://librdf.org/&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
 </content>

  <id>tag:blogs.nuxeo.com:sections:blogs:anahide_tchertchian:2005_09_30_rdf-relations-in-cps</id>
  <link rel="service.edit" type="application/atom+xml"
        href="http://blogs.nuxeo.com/sections/blogs/anahide_tchertchian/2005_09_30_rdf-relations-in-cps/atom?2005_09_30_rdf-relations-in-cps"
        title="Edit Here - RDF relations in CPS" />
</entry>

  
  
      <entry xmlns="http://purl.org/atom/ns#"
       xmlns:dc="http://purl.org/dc/elements/1.1/">
     
  <title mode="escaped" type="text/html">CPSWorkflow Documentation</title>
  <link rel="alternate" type="text/html"
        href="http://blogs.nuxeo.com/sections/blogs/anahide_tchertchian/2005_06_16_cpsworkflow" />
  <issued>2005-06-16T10:24:13Z</issued>
  <modified>2005-06-16T10:24:13Z</modified>
  <created>2005-06-16T10:04:22Z</created>
  <draft xmlns="http://purl.org/atom-blog/ns#">false</draft>
  <author>
    <name>atchertchian</name>
  </author>
  
  
    <dc:subject>cps</dc:subject>
  
  
  <summary type="text/html" mode="escaped">
  Woke up this morning, can't believe what I saw: CPSWorkflow documentation
  was out !
  
  You can find it at the following URL:
   
  http://www.cps-project.org/sections/documentation/developers/cpsworkflow/switchLanguage/en
  
   A Zope product comes with this documentation, as it is constructed as a
  tutorial.
  
  I hope the document construction makes it easy to understand how ...</summary>

  <content type="text/html" mode="escaped"
           xml:space="preserve">
  Woke up this morning, can't believe what I saw: CPSWorkflow documentation
  was out !&lt;br /&gt;
  &lt;br /&gt;
  You can find it at the following URL:&lt;br /&gt;
   &lt;a class="moz-txt-link-freetext"
  href="http://www.cps-project.org/sections/documentation/developers/cpsworkflow/switchLanguage/en"&gt;
  http://www.cps-project.org/sections/documentation/developers/cpsworkflow/switchLanguage/en&lt;/a&gt;
  &lt;br /&gt;
   A Zope product comes with this documentation, as it is constructed as a
  tutorial.&lt;br /&gt;
  &lt;br /&gt;
  I hope the document construction makes it easy to understand how CPS
  workflows work, and how powerful they can be.&lt;br /&gt;
   The sample workflow is quite simple because I did not want to present a
  complicated example.&lt;br /&gt;
   &lt;br /&gt;
   Hope you'll enjoy, any kind of feedback is very welcome.&lt;br /&gt;
 </content>

  <id>tag:blogs.nuxeo.com:sections:blogs:anahide_tchertchian:2005_06_16_cpsworkflow</id>
  <link rel="service.edit" type="application/atom+xml"
        href="http://blogs.nuxeo.com/sections/blogs/anahide_tchertchian/2005_06_16_cpsworkflow/atom?2005_06_16_cpsworkflow"
        title="Edit Here - CPSWorkflow Documentation" />
</entry>

  

</feed>
