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