Re: [C3] Can i18n transformer use an internal pipeline as bundle?

gelo1234 <[email protected]>
Newsgroups gmane.text.xml.cocoon.user
Message-ID <CAPJaKUrKuYr8oWU2Y9sAC0hEJGFQ09iXR1Hjc3BnBccXZUrxgg@mail.gmail.com>
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 <[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]
>
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.