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>


@RESTControllerpublic 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 <abros...@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 <abros...@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 <abros...@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-unsubscr...@cocoon.apache.org
> >         >         For additional commands, e-mail:
> >         users-h...@cocoon.apache.org
> >         >
> >         >
> >         >
> >
> >
> >
> >
> ---------------------------------------------------------------------
> >         To unsubscribe, e-mail: users-unsubscr...@cocoon.apache.org
> >         For additional commands, e-mail: users-h...@cocoon.apache.org
> >
> >
> >
> >
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscr...@cocoon.apache.org
> For additional commands, e-mail: users-h...@cocoon.apache.org
>
>

Reply via email to