ovidiu 02/04/15 17:22:50
Added: src/scratchpad/schecoon/src/org/apache/cocoon/transformation
AugmentTransformer.java
Log:
Added. Prepends to the "href" content of elements the full path of the
request.
Revision Changes Path
1.1
xml-cocoon2/src/scratchpad/schecoon/src/org/apache/cocoon/transformation/AugmentTransformer.java
Index: AugmentTransformer.java
===================================================================
package org.apache.cocoon.transformation;
import org.apache.avalon.excalibur.pool.Poolable;
import org.apache.avalon.framework.parameters.Parameters;
import org.apache.cocoon.ProcessingException;
import org.apache.cocoon.environment.Request;
import org.apache.cocoon.transformation.AbstractTransformer;
import org.apache.cocoon.environment.SourceResolver;
import org.apache.cocoon.components.language.markup.xsp.XSPRequestHelper;
import org.apache.cocoon.environment.Request;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.AttributesImpl;
import java.io.IOException;
import java.util.Map;
/**
* Augments any <href> attributes with the full path to the request.
*
* Usage in sitemap
* <map:transform type="augment"/>
*
* @author <a href="mailto:[EMAIL PROTECTED]">Ovidiu Predescu</a>
* @since October 10, 2001
*/
public class AugmentTransformer
extends AbstractTransformer
implements Poolable
{
Map objectModel;
Request request;
String baseURI;
public void setup(SourceResolver resolver,
Map objectModel,
String source,
Parameters parameters)
throws ProcessingException, SAXException, IOException
{
this.objectModel = objectModel;
request = (Request)objectModel.get("request");
String mountPoint = (String)parameters.getParameter("mount", null);
StringBuffer uribuf = new StringBuffer();
boolean isSecure = request.isSecure();
int port = request.getServerPort();
if (isSecure)
uribuf.append("https://");
else
uribuf.append("http://");
uribuf.append(request.getServerName());
if (isSecure) {
if (port != 443) {
uribuf.append(":").append(port);
}
}
else {
if (port != 80) {
uribuf.append(":").append(port);
}
}
if (mountPoint == null) {
String requestedURI = request.getRequestURI();
requestedURI = requestedURI.substring(0, requestedURI.lastIndexOf("/"));
uribuf.append(requestedURI);
uribuf.append("/");
}
else {
uribuf.append(request.getContextPath());
uribuf.append("/");
uribuf.append(mountPoint);
}
baseURI = uribuf.toString();
}
public void startElement(String uri,
String name,
String qname,
Attributes attrs)
throws SAXException
{
AttributesImpl newAttrs = null;
for (int i = 0, size = attrs.getLength(); i < size; i++) {
String attrName = attrs.getLocalName(i);
if (attrName.equals("href")) {
String value = attrs.getValue(i);
// Don't touch the attribute if it's an absolute URL
if (value.startsWith("http:") || value.startsWith("https:"))
continue;
if (newAttrs == null)
newAttrs = new AttributesImpl(attrs);
String newValue = baseURI + value;
newAttrs.setValue(i, newValue);
}
}
if (newAttrs == null)
super.startElement(uri, name, qname, attrs);
else
super.startElement(uri, name, qname, newAttrs);
}
public void recycle()
{
this.objectModel = null;
}
}
----------------------------------------------------------------------
In case of troubles, e-mail: [EMAIL PROTECTED]
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]