All you need to do is to change a little the SystemProperyModule like this:
1. extend AbstractJXPathModule (instead of AbstractLoggable)
2. Add this method:
protected Object getContextObject(Configuration modeConf,
Map objectModel) {
return m_properties;
}
3. Remove the getAttribute() and getAttributeValues().
4. Check that I didn't forget anything ;)
--
Konstantin
----- Original Message -----
From: "Unico Hommes" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Friday, October 31, 2003 16:44
Subject: RE: cvs commit: cocoon-2.2/src/webapp/WEB-INF cocoon.xconf
Yes, that would be even better. I didn't realize extending
AbstractJXPathModule could be so powerful. OK, I'll make this change
later.
-- Unico
>
> -----Original Message-----
> From: Konstantin Piroumian [mailto:[EMAIL PROTECTED]
> Sent: vrijdag 31 oktober 2003 14:19
> To: [EMAIL PROTECTED]
> Cc: [EMAIL PROTECTED]
>
> Btw, won't it be better to inherit this module from
> AbstraxtJXPathModule the same way as SystemPropertyModule does?
> It would be a little bit more flexible, e.g. you could do
> something like
> this:
>
> <map:parameter name="version-details"
> value="{cocoon-properties:concat('Major: ',
> substring-before(version, '.'), ', Minor: ',
> substring-after(version, '.'), ', Year: ', year)}"/>
>
> Regards,
> Konstantin
>
> ----- Original Message -----
> From: <[EMAIL PROTECTED]>
> To: <[EMAIL PROTECTED]>
> Sent: Friday, October 31, 2003 16:12
> Subject: cvs commit: cocoon-2.2/src/webapp/WEB-INF cocoon.xconf
>
>
> > unico 2003/10/31 05:12:06
> >
> > Modified: src/webapp/samples/modules menu.xml index.xhtml
> sitemap.xmap
> > src/webapp/WEB-INF cocoon.xconf
> > Added: src/java/org/apache/cocoon/components/modules/input
> > PropertiesFileModule.java
> > Log:
> > new properties file input module
> >
> > Revision Changes Path
> > 1.9 +1 -0
> cocoon-2.2/src/webapp/samples/modules/menu.xml
> >
> > Index: menu.xml
> >
> ===================================================================
> > RCS file:
> /home/cvs/cocoon-2.2/src/webapp/samples/modules/menu.xml,v
> > retrieving revision 1.8
> > retrieving revision 1.9
> > diff -u -r1.8 -r1.9
> > --- menu.xml 18 May 2003 16:31:35 -0000 1.8
> > +++ menu.xml 31 Oct 2003 13:12:05 -0000 1.9
> > @@ -24,6 +24,7 @@
> > <menu-item label="ChainMetaModule" href="chain.xsp"/>
> > <menu-item label="RandomNumberModule"
> href="randomnumber.xsp"/>
> > <menu-item label="RealPathModule" href="realpath.xsp"/>
> > + <menu-item label="PropertiesFileModule"
> href="properties.xsp"/>
> > </menu>
> >
> > <menu label="Documentation">
> >
> >
> >
> > 1.5 +5 -1
> cocoon-2.2/src/webapp/samples/modules/index.xhtml
> >
> > Index: index.xhtml
> >
> ===================================================================
> > RCS file:
> /home/cvs/cocoon-2.2/src/webapp/samples/modules/index.xhtml,v
> > retrieving revision 1.4
> > retrieving revision 1.5
> > diff -u -r1.4 -r1.5
> > --- index.xhtml 17 May 2003 08:11:27 -0000 1.4
> > +++ index.xhtml 31 Oct 2003 13:12:05 -0000 1.5
> > @@ -57,9 +57,13 @@
> > <td><a href="randomnumber.xsp">randomnumber</a></td>
> > <td>Random number</td>
> > </tr>
> > - <tr>
> > + <tr>
> > <td><a href="realpath.xsp">realpath</a></td>
> > <td>Real filesystem paths of context paths</td>
> > + </tr>
> > + <tr>
> > + <td><a href="properties.xsp">properties</a></td>
> > + <td>Properties file values</td>
> > </tr>
> > </table>
> > </td>
> >
> >
> >
> > 1.7 +20 -2
> cocoon-2.2/src/webapp/samples/modules/sitemap.xmap
> >
> > Index: sitemap.xmap
> >
> ===================================================================
> > RCS file:
> /home/cvs/cocoon-2.2/src/webapp/samples/modules/sitemap.xmap,v
> > retrieving revision 1.6
> > retrieving revision 1.7
> > diff -u -r1.6 -r1.7
> > --- sitemap.xmap 17 May 2003 08:11:27 -0000 1.6
> > +++ sitemap.xmap 31 Oct 2003 13:12:05 -0000 1.7
> > @@ -261,7 +261,6 @@
> > <map:serialize />
> > </map:match>
> >
> > -
> > <map:match pattern="content/realpath.xsp">
> > <map:generate type="serverpages" src="properties.xsp">
> > <map:parameter name="/" value="{realpath:/}"/>
> > @@ -275,6 +274,25 @@
> > </map:transform>
> > <map:serialize />
> > </map:match>
> > +
> > + <map:match pattern="content/properties.xsp">
> > + <map:generate type="serverpages" src="properties.xsp">
> > + <map:parameter name="name"
> value="{cocoon-properties:name}"/>
> > + <map:parameter name="Name"
> value="{cocoon-properties:Name}"/>
> > + <map:parameter name="fullname"
> value="{cocoon-properties:fullname}"/>
> > + <map:parameter name="version"
> value="{cocoon-properties:version}"/>
> > + <map:parameter name="released.version"
> value="{cocoon-properties:released.version}"/>
> > + <map:parameter name="year"
> value="{cocoon-properties:year}"/>
> > + </map:generate>
> > + <map:transform src="properties2html.xsl">
> > + <map:parameter name="title" value="Properties
> File Module
> > + (PropertiesFileModule)"/>
> > + <map:parameter name="description"
> value="PropertiesFileModule
> provides access
> > + to properties from a properties file. In
> this example the
> keys identify properties in
> > + resource://org/apache/cocoon/cocoon.properties"/>
> > + </map:transform>
> > + <map:serialize />
> > + </map:match>
> >
> > <!-- Menu generation -->
> > <map:match pattern="menu/*">
> >
> >
> >
> > 1.1
> cocoon-2.2/src/java/org/apache/cocoon/components/modules/input
> /PropertiesFil
> eModule.java
> >
> > Index: PropertiesFileModule.java
> >
> ===================================================================
> > /*
> >
> >
> ==============================================================
> ==============
> > The Apache Software License, Version 1.1
> >
> ==============================================================
> ==============
> >
> > Copyright (C) 1999-2003 The Apache Software Foundation.
> All rights
> reserved.
> >
> > Redistribution and use in source and binary forms, with
> or without
> modifica-
> > tion, are permitted provided that the following
> conditions are met:
> >
> > 1. Redistributions of source code must retain the
> above copyright
> notice,
> > this list of conditions and the following disclaimer.
> >
> > 2. Redistributions in binary form must reproduce the
> above copyright
> notice,
> > this list of conditions and the following disclaimer in the
> documentation
> > and/or other materials provided with the distribution.
> >
> > 3. The end-user documentation included with the
> redistribution, if any,
> must
> > include the following acknowledgment: "This
> product includes
> software
> > developed by the Apache Software Foundation
> (http://www.apache.org/)."
> > Alternately, this acknowledgment may appear in the software
> itself, if
> > and wherever such third-party acknowledgments normally appear.
> >
> > 4. The names "Apache Cocoon" and "Apache Software
> Foundation" must
> not be
> > used to endorse or promote products derived from
> this software
> without
> > prior written permission. For written permission,
> please contact
> > [EMAIL PROTECTED]
> >
> > 5. Products derived from this software may not be
> called "Apache",
> nor may
> > "Apache" appear in their name, without prior
> written permission
> of the
> > Apache Software Foundation.
> >
> > THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
> WARRANTIES,
> > INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
> MERCHANTABILITY AND
> > FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
> NO EVENT SHALL
> THE
> > APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE
> LIABLE FOR ANY
> DIRECT,
> > INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
> CONSEQUENTIAL DAMAGES
> (INCLU-
> > DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
> GOODS OR SERVICES;
> LOSS
> > OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
> HOWEVER CAUSED
> AND ON
> > ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
> LIABILITY, OR
> TORT
> > (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY
> WAY OUT OF THE
> USE OF
> > THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
> >
> > This software consists of voluntary contributions made by many
> individuals
> > on behalf of the Apache Software Foundation and was originally
> created by
> > Stefano Mazzocchi <[EMAIL PROTECTED]>. For more
> information on the
> Apache
> > Software Foundation, please see <http://www.apache.org/>.
> >
> > */
> > package org.apache.cocoon.components.modules.input;
> >
> > import java.io.IOException;
> > import java.io.InputStream;
> > import java.util.Iterator;
> > import java.util.Map;
> > import java.util.Properties;
> >
> > import org.apache.avalon.framework.configuration.Configurable;
> > import org.apache.avalon.framework.configuration.Configuration;
> > import
> org.apache.avalon.framework.configuration.ConfigurationException;
> > import org.apache.avalon.framework.logger.AbstractLogEnabled;
> > import org.apache.avalon.framework.service.ServiceException;
> > import org.apache.avalon.framework.service.ServiceManager;
> > import org.apache.avalon.framework.service.Serviceable;
> > import org.apache.avalon.framework.thread.ThreadSafe;
> > import org.apache.excalibur.source.Source;
> > import org.apache.excalibur.source.SourceResolver;
> >
> > /**
> > * Input module for accessing properties in a properties file.
> > *
> > * <p>
> > * The properties file can only be configured statically and
> > * is resolved via the SourceResolver system.
> > * </p>
> > *
> > * @author <a href="mailto:[EMAIL PROTECTED]">Unico Hommes</a>
> > */
> > public class PropertiesFileModule extends AbstractLogEnabled
> > implements InputModule, Serviceable, Configurable, ThreadSafe {
> >
> > private SourceResolver m_resolver;
> >
> > private Properties m_properties;
> >
> >
> > public void service(ServiceManager manager) throws
> ServiceException
> {
> > m_resolver = (SourceResolver)
> manager.lookup(SourceResolver.ROLE);
> > }
> >
> > /**
> > * Configure the location of the properties file:
> > * <p>
> > * <code><file src="resource://my.properties" /></code>
> > * </p>
> > */
> > public void configure(Configuration configuration) throws
> ConfigurationException {
> > String file =
> configuration.getChild("file").getAttribute("src");
> > load(file);
> > }
> >
> > private void load(String file) throws ConfigurationException {
> > Source source = null;
> > InputStream stream = null;
> > try {
> > source = m_resolver.resolveURI(file);
> > stream = source.getInputStream();
> > m_properties = new Properties();
> > m_properties.load(stream);
> > }
> > catch (IOException e) {
> > throw new ConfigurationException("Cannot load
> properties
> file " + file);
> > }
> > finally {
> > if (source != null) {
> > m_resolver.release(source);
> > }
> > if (stream != null) {
> > try {
> > stream.close();
> > }
> > catch (IOException e) {
> > }
> > }
> > }
> > }
> >
> > public Object getAttribute(String name,Configuration
> modeConf,Map
> objectModel)
> > throws ConfigurationException {
> >
> > return m_properties.getProperty(name);
> > }
> >
> > public Iterator getAttributeNames(Configuration modeConf, Map
> objectModel)
> > throws ConfigurationException {
> >
> > return m_properties.keySet().iterator();
> > }
> >
> > public Object[] getAttributeValues(String name,Configuration
> modeConf,Map objectModel)
> > throws ConfigurationException {
> >
> > return new Object[] {
> getAttribute(name,modeConf,objectModel) };
> > }
> >
> > }
> >
> >
> >
> > 1.32 +3 -0 cocoon-2.2/src/webapp/WEB-INF/cocoon.xconf
> >
> > Index: cocoon.xconf
> >
> ===================================================================
> > RCS file: /home/cvs/cocoon-2.2/src/webapp/WEB-INF/cocoon.xconf,v
> > retrieving revision 1.31
> > retrieving revision 1.32
> > diff -u -r1.31 -r1.32
> > --- cocoon.xconf 9 Oct 2003 20:12:35 -0000 1.31
> > +++ cocoon.xconf 31 Oct 2003 13:12:05 -0000 1.32
> > @@ -174,6 +174,9 @@
> > <input-module name="session-attr"/>
> > <input-module name="defaults"/>
> > </component-instance>
> > + <component-instance
> class="org.apache.cocoon.components.modules.input.PropertiesFi
> leModule"
> logger="core.modules.input" name="cocoon-properties">
> > + <file
> src="resource://org/apache/cocoon/cocoon.properties" />
> > + </component-instance>
> >
> > <!-- The 'defaults', 'myxml' and 'slashdot' input
> modules are used
> > in the samples -->
> >
> >
> >
> >
> >
>
>
>