|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object org.apache.avalon.framework.logger.AbstractLogEnabled org.apache.cocoon.xml.AbstractXMLProducer org.apache.cocoon.xml.AbstractXMLPipe org.apache.cocoon.transformation.AbstractTransformer org.apache.cocoon.transformation.AbstractSAXTransformer org.apache.cocoon.transformation.VariableRewriterTransformer
public class VariableRewriterTransformer
Rewrites URIs in links to a value determined by an InputModule. The URI scheme identifies the InputModule to use, and the rest of the URI is used as the attribute name.
XMLFileModule
, configured to
read values from an XML file:
<site> <faq> <how_to_boil_eggs href="faq/eggs.html"/> </faq> </site>mapped to the prefix 'site:', then <link href="site:/site/faq/how_to_boil_eggs/@href"> would be replaced with <link href="faq/eggs.html">
InputModules are configured twice; first statically in
cocoon.xconf
, and then dynamically at runtime, with dynamic
configuration (if any) taking precedence. VariableRewriterTransformer allows
you to pass a dynamic configuration to used InputModules as follows.
First, a template Configuration is specified in the static <map:components> block of the sitemap:
<map:transformer name="linkrewriter" src="org.apache.cocoon.transformation.VariableRewriterTransformer"> <input-module name="site" src="cocoon://samples/link/linkmap" reloadable="true"/> <input-module name="mapper"> <input-module name="site" src="{src}" reloadable="true"/> <prefix>/site/</prefix> <suffix>/@href</suffix> </input-module> </map:transformer>Here, we have established dynamic configuration templates for two modules, 'site' (an
XMLFileModule
and 'mapper' (A SimpleMappingMetaModule
. All
other InputModules will use their static configs. Note that the dynamic
config syntax different to the static config syntax (attributes instead of
elements). Note also that, when configuring a Meta InputModule like
'mapper', we need to also configure the 'inner' module (here, 'site') with a
nested <input-module>.
There is one further twist; to have really dynamic configuration, we need information available only when the transformer actually runs. This is why the above config was called a "template" Configuration; it needs to be 'instantiated' and provided extra info, namely:
<map:match pattern="**welcome"> <map:generate src="index.xml"/> <map:transform type="linkrewriter" src="cocoon:/{1}linkmap"/> <map:serialize type="xml"/> </map:match>Which would cause the 'mapper' XMLFileModule to be configured with a different XML file, depending on the request.
Similarly, we could use a dynamic prefix:
<prefix>{prefix}</prefix>in the template config, and:
<map:parameter name="prefix" value="/site/"/>in the map:transform
The following map:parameter's are recognised:
Note that currently, only links in the default ("") namespace are converted.
Field Summary |
---|
Fields inherited from class org.apache.cocoon.transformation.AbstractSAXTransformer |
---|
context, defaultNamespaceURI, EMPTY_ATTRIBUTES, emptyAttributes, ignoreEmptyCharacters, ignoreEventsCount, ignoreHooksCount, ignoreWhitespaces, manager, namespaceURI, objectModel, parameters, recorderStack, request, resolver, response, source, stack |
Fields inherited from class org.apache.cocoon.xml.AbstractXMLProducer |
---|
contentHandler, EMPTY_CONTENT_HANDLER, lexicalHandler, xmlConsumer |
Fields inherited from interface org.apache.cocoon.transformation.Transformer |
---|
ROLE |
Constructor Summary | |
---|---|
VariableRewriterTransformer()
|
Method Summary | |
---|---|
void |
characters(char[] p0,
int p1,
int p2)
Process the SAX event. |
void |
configure(Configuration conf)
Configure this component from the map:transformer block. |
void |
dispose()
|
void |
initialize()
Initiate resources prior to this component becoming active. |
void |
recycle()
Recycle this component for use in another map:transform. |
void |
setup(SourceResolver resolver,
Map objectModel,
String src,
Parameters parameters)
Setup this component to handle a map:transform instance. |
void |
startTransformingElement(String uri,
String name,
String raw,
Attributes attr)
Start processing elements of our namespace. |
Methods inherited from class org.apache.cocoon.xml.AbstractXMLProducer |
---|
setConsumer, setContentHandler, setLexicalHandler |
Methods inherited from class org.apache.avalon.framework.logger.AbstractLogEnabled |
---|
enableLogging, getLogger, setupLogger, setupLogger, setupLogger |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Methods inherited from interface org.apache.cocoon.xml.XMLProducer |
---|
setConsumer |
Constructor Detail |
---|
public VariableRewriterTransformer()
Method Detail |
---|
public void configure(Configuration conf) throws ConfigurationException
configure
in interface Configurable
configure
in class AbstractSAXTransformer
ConfigurationException
public void initialize() throws Exception
initialize
in interface Initializable
Exception
public void setup(SourceResolver resolver, Map objectModel, String src, Parameters parameters) throws ProcessingException, SAXException, IOException
setup
in interface SitemapModelComponent
setup
in class AbstractSAXTransformer
ProcessingException
SAXException
IOException
public void startTransformingElement(String uri, String name, String raw, Attributes attr) throws ProcessingException, IOException, SAXException
startTransformingElement
in class AbstractSAXTransformer
uri
- The namespace of the element.name
- The local name of the element.raw
- The qualified name of the element.attr
- The attributes of the element.
ProcessingException
IOException
SAXException
public void characters(char[] p0, int p1, int p2) throws SAXException
characters
in interface ContentHandler
characters
in class AbstractSAXTransformer
p0
- The characters from the XML document.p1
- The start position in the array.p2
- The number of characters to read from the array.
SAXException
ContentHandler.characters(char[], int, int)
public void recycle()
recycle
in interface Recyclable
recycle
in class AbstractSAXTransformer
public void dispose()
dispose
in interface Disposable
dispose
in class AbstractSAXTransformer
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |