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 <[email protected]>
> 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 <[email protected]>
> >
> > 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
> <[email protected]>
> > >
> > > 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:
> > [email protected]
> > > For additional commands, e-mail:
> > [email protected]
> > >
> > >
> > >
> >
> >
> >
> >
> ---------------------------------------------------------------------
> > To unsubscribe, e-mail:
> [email protected]
> > For additional commands, e-mail:
> [email protected]
> >
> >
> >
> >
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
>
>
>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]