cocoon-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Alberto Brosich <abros...@ogs.trieste.it>
Subject Re: [C3] Can i18n transformer use an internal pipeline as bundle?
Date Sat, 18 Jan 2014 12:28:40 GMT

I thought about your options.

Solution 1 seems to have the same problem as i18n transformer: use a
pipeline as parameter for transformers. In this case is a parameter of
the xsl transformer.

Solution 2 in my case is not useful because i18n data is added in more
than one place in the pipeline.

I think I will do some changes to use the sql transformer to retrieve
i18n data. After all i18n data is stored in a relational database.

Regards

Alberto


On Fri, 2014-01-17 at 20:15 +0100, gelo1234 wrote:
> OK, 100 xslt params would be too complicated as xslt params.
> 
> 
> I have 2 more options though :)
> 
> 
> 1. Option with pure xml/xsl
> 
> 
> How about making properties a raw xml data (with xml serializer, not
> txt), e.g.
> 
> 
> <properties>
> 
>       <key1>value1</key1>
> 
>       <key2>value2</key2>
>       ...
> 
>       <keyN>valueN</keyN>
> 
> </properties>
> 
> 
> and in subsequent XSLT use:
> 
> 
> <xsl:variable name="properties" select="/Root/properties"/>
> 
> 
> and each parameter inserted with <xsl:value-of
> select="$properties/keyX"/> ?
> 
> 
> With this approach, it is a matter of rewriting your XSL that
> generates HTML.
> 
> 
> 
> 2. Option with RESTController
> 
> 
> Use generator to get properties out from database and put it inside
> 
> a Map, then call string-template to render XML/HTML with values
> from Map:
> 
> <map:match pattern="homepage">
>         <map:generate src="homepage.xhtml" type="stringtemplate" />
>         <map:serialize type="html" />
> </map:match>
> 
> 
> <map:match pattern="homepage.html">
>         <controller:call controller="rest-controller" select="HomepageController">
>           <map:parameter name="lang" value="{jexl:cocoon.request.lang}" />
>         </controller:call>
> </map:match>
> 
> 
> @RESTController
> public class HomepageController implements Get {
> 
>     @SitemapParameter
>     private String lang;
> 
>     @RequestParameter
>     private String someParam;
> 
>     public RestResponse doGet() throws Exception {
>         
>       // get properties out from database
>       --> custom jdbc code here
>       ResultSet rs = properties_from_db;
> 
>       // put it inside Map
> 
>       Map<String, Object> data = new HashMap<String, Object>();
> 
>       while (rs.hasNext()) {
>               rs.next();
>               data.put(rs.getString("key"), rs.getString("value"));
> 
>       }
>       return new Page("servlet:/homepage", data);
>     }
> }
> 
> 
> 
> 
> Greetings,
> Greg
>  
> 
> 
> 2014/1/17 Alberto Brosich <abrosich@ogs.trieste.it>
>         On Fri, 2014-01-17 at 16:44 +0100, gelo1234 wrote:
>         > How about a workaround that puts those properties values
>         into XSL
>         > params and transform with standard XSLTransformer not
>         > i18nTransformer ?
>         
>         
>         mmh, it seems quite complicated. The properties file is more
>         than one
>         hundred lines long. How can I pass all these properties?
>         A choice could be a dynamic xslt, built querying the database.
>         But can I
>         specify a "servlet:" protocol in the src attribute of an xsl
>         transformer? I think no.
>         
>         
>         >
>         >
>         > Where do you need those properties in pipeline ?
>         
>         
>         I have a pipeline that produce an html page, querying a
>         database.
>         
>         <map:match pattern="homepage">
>           <map:generate src="files/homepage.xml" />
>           <map:transform type="sql">
>             <map:parameter name="use-connection" value="dataSource" />
>           </map:transform>
>         
>           <map:transform src="stylesheets/homepage-sql2xml.xsl"/>
>           <map:transform type="i18n">
>             <map:parameter name="locale"
>         value="{jexl:cocoon.request.lang}" />
>             <map:parameter name="bundle"
>         value="COB-INF/files/translations" />
>           </map:transform>
>           <map:transform src="stylesheets/homepage2html.xsl"/>
>         etc...
>         
>         >
>         >
>         >
>         > Greetings,
>         > Greg
>         >
>         >
>         >
>         > 2014/1/17 Alberto Brosich <abrosich@ogs.trieste.it>
>         >
>         >         Yes, it's really simple.
>         >         The source file is an xml file with a sqltransformer
>         query.
>         >         The query is simple: just a select to a specific
>         table (or
>         >         view) with a where condition.
>         >         Then an xsl transformer convert the xml to txt with
>         a pair of
>         >         key and value for every row.
>         >         That's all.
>         >
>         >             <map:pipeline internal-only="true">
>         >
>         >               <map:match
>         pattern="translations_*.properties">
>         >                         <map:generate type="string-template"
>         >         src="files/dbdata.xml">
>         >                                 <map:parameter name="table"
>         >         value="messages"/>
>         >                                 <map:parameter name="fields"
>         >         value="key_value, value"/>
>         >                                 <map:parameter
>         name="condition"
>         >         value="lang_id='{map:1}'"/>
>         >                                 <map:parameter
>         name="orderfields"
>         >         value="1"/>
>         >                                 <map:parameter
>         name="rowcount"
>         >         value="100000"/>
>         >                         </map:generate>
>         >                         <map:transform type="sql">
>         >                                 <map:parameter
>         name="use-connection"
>         >         value="dataSource" />
>         >                         </map:transform>
>         >                 <map:transform
>         src="stylesheets/sql2properties.xsl"/>
>         >                         <map:serialize type="txt"/>
>         >               </map:match>
>         >
>         >
>         >         This is a snip of the xsl stylesheet:
>         >
>         >         <xsl:template match="sql:row">
>         >                 <xsl:text>
>         >         <xsl:value-of select="sql:key_value"/></xsl:text>
>         >                 <xsl:text>=</xsl:text>
>         >                 <xsl:text><xsl:value-of
>         >         select="sql:value"/></xsl:text>
>         >         </xsl:template>
>         >
>         >
>         >         Alberto
>         >
>         >
>         >         On Fri, 2014-01-17 at 15:30 +0100, gelo1234 wrote:
>         >         > Can you show here your full original Cocoon
>         pipeline ? Do
>         >         you store
>         >         > property files content or property filenames
>         inside db ?
>         >         >
>         >         >
>         >         > Greetings,
>         >         > Greg
>         >         >
>         >         >
>         >         >
>         >         > 2014/1/17 Alberto Brosich
>         <abrosich@ogs.trieste.it>
>         >         >
>         >         >         Hi,
>         >         >
>         >         >         I'm migrating a 2.1 cocoon application to
>         3.0, using
>         >         >         beta1-SNAPSHOT
>         >         >         because I need the sql transformer.
>         >         >         As I wrote in the subject, I'm need to
>         specify an
>         >         internal
>         >         >         pipeline as
>         >         >         bundle for the i18n transformer, because
>         the
>         >         properties file
>         >         >         has to be
>         >         >         derived from database. Using a plain file
>         it works.
>         >         >         I tried several urls using "servlet:"
>         protocol, but
>         >         without
>         >         >         success.
>         >         >
>         >         >         I have the following internal pipeline:
>         >         >         <map:match
>         pattern="translations_*.properties">
>         >         >
>         >         >         and I tried several bundles urls like:
>         >         >         <map:parameter name="bundle"
>         >         value="servlet:/translations" />
>         >         >         or
>         >         >         <map:parameter name="bundle"
>         >         >
>         >
>         value="servlet:/translations_{jexl:cocoon.request.lang}.properties" />
>         >         >
>         >         >         The exception is:
>         >         >         org.apache.cocoon.pipeline.SetupException:
>         >         >         java.util.MissingResourceException: Can't
>         find
>         >         bundle for base
>         >         >         name
>         >         >         servlet:/translations, locale en
>         >         >
>         >         >         What I doing wrong?
>         >         >
>         >         >         Best regards
>         >         >
>         >         >         Alberto
>         >         >
>         >         >
>         >         >
>         >
>         ---------------------------------------------------------------------
>         >         >         To unsubscribe, e-mail:
>         >         users-unsubscribe@cocoon.apache.org
>         >         >         For additional commands, e-mail:
>         >         users-help@cocoon.apache.org
>         >         >
>         >         >
>         >         >
>         >
>         >
>         >
>         >
>         ---------------------------------------------------------------------
>         >         To unsubscribe, e-mail:
>         users-unsubscribe@cocoon.apache.org
>         >         For additional commands, e-mail:
>         users-help@cocoon.apache.org
>         >
>         >
>         >
>         >
>         
>         
>         
>         ---------------------------------------------------------------------
>         To unsubscribe, e-mail: users-unsubscribe@cocoon.apache.org
>         For additional commands, e-mail: users-help@cocoon.apache.org
>         
>         
> 
> 



---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@cocoon.apache.org
For additional commands, e-mail: users-help@cocoon.apache.org


Mime
View raw message