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]
>
>