You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lenya.apache.org by an...@apache.org on 2008/05/17 21:37:00 UTC
svn commit: r657435 - in
/lenya/trunk/src/modules-core/linking/java/src/org/apache/lenya/cms/cocoon/transformation:
AbstractLinkTransformer.java IncomingProxyTransformer.java
ProxyTransformer.java UuidToUrlTransformer.java
Author: andreas
Date: Sat May 17 12:36:59 2008
New Revision: 657435
URL: http://svn.apache.org/viewvc?rev=657435&view=rev
Log:
Allow to pass the current URL as a parameter to link transformers (be independent of called webapp URL).
Modified:
lenya/trunk/src/modules-core/linking/java/src/org/apache/lenya/cms/cocoon/transformation/AbstractLinkTransformer.java
lenya/trunk/src/modules-core/linking/java/src/org/apache/lenya/cms/cocoon/transformation/IncomingProxyTransformer.java
lenya/trunk/src/modules-core/linking/java/src/org/apache/lenya/cms/cocoon/transformation/ProxyTransformer.java
lenya/trunk/src/modules-core/linking/java/src/org/apache/lenya/cms/cocoon/transformation/UuidToUrlTransformer.java
Modified: lenya/trunk/src/modules-core/linking/java/src/org/apache/lenya/cms/cocoon/transformation/AbstractLinkTransformer.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/modules-core/linking/java/src/org/apache/lenya/cms/cocoon/transformation/AbstractLinkTransformer.java?rev=657435&r1=657434&r2=657435&view=diff
==============================================================================
--- lenya/trunk/src/modules-core/linking/java/src/org/apache/lenya/cms/cocoon/transformation/AbstractLinkTransformer.java (original)
+++ lenya/trunk/src/modules-core/linking/java/src/org/apache/lenya/cms/cocoon/transformation/AbstractLinkTransformer.java Sat May 17 12:36:59 2008
@@ -28,6 +28,7 @@
import org.apache.avalon.framework.configuration.Configuration;
import org.apache.avalon.framework.configuration.ConfigurationException;
+import org.apache.avalon.framework.parameters.ParameterException;
import org.apache.avalon.framework.parameters.Parameters;
import org.apache.cocoon.ProcessingException;
import org.apache.cocoon.environment.ObjectModelHelper;
@@ -49,8 +50,9 @@
* <code><transform/></code> elements.
* </p>
* <p>
- * If the link rewriter returns <code>null</code> for a link, an attribute can be
- * added to the corresponding element, with an optional message of the form "Broken link: ...".
+ * If the link rewriter returns <code>null</code> for a link, an attribute can
+ * be added to the corresponding element, with an optional message of the form
+ * "Broken link: ...".
* </p>
* <code><pre>
* <map:transformer ... >
@@ -59,30 +61,58 @@
* <markBrokenLinks attribute="..." value="..." messageAttribute="..."/>
* </map:transformer>
* </pre></code>
+ * <p>
+ * The reference URL can optionally be passed using the <em>url</em>
+ * parameter.
+ * </p>
*/
public abstract class AbstractLinkTransformer extends AbstractSAXTransformer {
-
+
private String area;
-
+ protected static final String PARAM_URL = "url";
+
public void setup(SourceResolver resolver, Map objectModel, String src, Parameters params)
throws ProcessingException, SAXException, IOException {
super.setup(resolver, objectModel, src, params);
- Request request = ObjectModelHelper.getRequest(objectModel);
- String webappUrl = ServletHelper.getWebappURI(request);
+
+ String webappUrl = getWebappUrl(params, objectModel);
URLInformation url = new URLInformation(webappUrl);
this.area = url.getArea();
}
/**
+ * @param params
+ * @param objectModel
+ * @return The web application URL which was passed using the <em>url</em>
+ * parameter or the web application URL the transformer was called on,
+ * respectively.
+ * @throws ProcessingException
+ */
+ protected String getWebappUrl(Parameters params, Map objectModel) throws ProcessingException {
+ String webappUrl;
+ if (params.isParameter(PARAM_URL)) {
+ try {
+ webappUrl = params.getParameter(PARAM_URL);
+ } catch (ParameterException e) {
+ throw new ProcessingException(e);
+ }
+ } else {
+ Request request = ObjectModelHelper.getRequest(objectModel);
+ webappUrl = ServletHelper.getWebappURI(request);
+ }
+ return webappUrl;
+ }
+
+ /**
* Set of supported local names for quick pre-checks.
*/
private Set localNames = new HashSet();
-
+
private boolean markBrokenLinks;
private String brokenLinkAttribute;
private String brokenLinkValue;
private String brokenLinkMessageAttribute;
-
+
public void configure(Configuration config) throws ConfigurationException {
super.configure(config);
Configuration[] transformConfigs = config.getChildren("transform");
@@ -110,8 +140,7 @@
this.brokenLinkMessageAttribute = messageAttr;
}
this.markBrokenLinks = true;
- }
- else {
+ } else {
this.markBrokenLinks = false;
}
}
@@ -155,20 +184,19 @@
* @param attrs The attributes.
* @return A set of {@link AttributeConfiguration} objects.
*/
- protected Set getMatchingConfigurations(String namespace,
- String localName, Attributes attrs) {
-
+ protected Set getMatchingConfigurations(String namespace, String localName, Attributes attrs) {
+
// pre-check for performance reasons
if (!existsMatchingConfiguration(namespace, localName)) {
return Collections.EMPTY_SET;
}
-
+
String key = getCacheKey(namespace, localName);
-
+
// don't initialize yet for performance reasons
Set configs = null;
Set allConfigs = (Set) this.namespaceLocalname2configSet.get(key);
- for (Iterator i = allConfigs.iterator(); i.hasNext(); ) {
+ for (Iterator i = allConfigs.iterator(); i.hasNext();) {
AttributeConfiguration config = (AttributeConfiguration) i.next();
if (config.matches(namespace, localName, attrs)) {
if (configs == null) {
@@ -182,7 +210,7 @@
}
return configs;
}
-
+
/**
* Cache to improve performance.
*/
@@ -193,7 +221,7 @@
if (!this.localNames.contains(localName)) {
return false;
}
-
+
// more expensive check
String key = getCacheKey(namespace, localName);
return this.namespaceLocalname2configSet.containsKey(key);
@@ -229,7 +257,7 @@
newAttrs = new AttributesImpl(attrs);
this.ignoreLinkElement = false;
- for (Iterator i = configs.iterator(); i.hasNext(); ) {
+ for (Iterator i = configs.iterator(); i.hasNext();) {
AttributeConfiguration config = (AttributeConfiguration) i.next();
String linkUrl = newAttrs.getValue(config.attribute);
try {
@@ -249,15 +277,15 @@
}
// use existsMatching to match up with endElement
- if (existsMatchingConfiguration(uri,name) && this.useIgnore) {
- if(this.ignoreLinkElement) {
+ if (existsMatchingConfiguration(uri, name) && this.useIgnore) {
+ if (this.ignoreLinkElement) {
ignoreLinkElementStack.push(Boolean.TRUE);
return;
- } else {
+ } else {
ignoreLinkElementStack.push(Boolean.FALSE);
}
}
-
+
if (newAttrs != null) {
attrs = newAttrs;
}
@@ -272,7 +300,7 @@
* @param linkUrl The link URL.
* @param config The attribute configuration which matched the link.
* @param newAttrs The new attributes which will be added to the result
- * element.
+ * element.
* @throws Exception if an error occurs.
*/
protected void handleLink(String linkUrl, AttributeConfiguration config, AttributesImpl newAttrs)
@@ -281,12 +309,10 @@
String rewrittenUrl = getLinkRewriter().rewrite(linkUrl);
if (rewrittenUrl != null) {
setAttribute(newAttrs, config.attribute, rewrittenUrl);
- }
- else {
+ } else {
if (this.area != null && this.area.equals(Publication.LIVE_AREA)) {
this.ignoreLinkElement = true;
- }
- else {
+ } else {
markBrokenLink(newAttrs, config.attribute, linkUrl);
}
}
@@ -302,13 +328,13 @@
this.indent = this.indent.substring(2);
getLogger().debug(this.indent + "</" + qname + ">");
}
- if (existsMatchingConfiguration(uri, name) && this.useIgnore) {
- if( ((Boolean)ignoreLinkElementStack.pop()).booleanValue()) {
+ if (existsMatchingConfiguration(uri, name) && this.useIgnore) {
+ if (((Boolean) ignoreLinkElementStack.pop()).booleanValue()) {
this.ignoreLinkElement = false;
return;
}
}
-
+
if (getLogger().isDebugEnabled()) {
getLogger().debug(this.indent + "</" + qname + "> sent");
}
@@ -322,7 +348,7 @@
* @param name The attribute name.
* @param value The value.
* @throws IllegalArgumentException if the href attribute is not contained
- * in this attributes.
+ * in this attributes.
*/
protected void setAttribute(AttributesImpl attr, String name, String value) {
int position = attr.getIndex(name);
@@ -338,9 +364,11 @@
protected abstract LinkRewriter getLinkRewriter();
/**
- * Marks a link element as broken and removes the attribute which contained the URL.
+ * Marks a link element as broken and removes the attribute which contained
+ * the URL.
* @param newAttrs The new attributes.
- * @param attrName The attribute name containing the URL which could not be rewritten.
+ * @param attrName The attribute name containing the URL which could not be
+ * rewritten.
* @param brokenLinkUri The broken link URI.
* @throws AccessControlException when something went wrong.
*/
@@ -351,7 +379,8 @@
newAttrs.removeAttribute(newAttrs.getIndex(this.brokenLinkAttribute));
}
if (newAttrs.getIndex(attrName) > -1) {
- newAttrs.setAttribute(newAttrs.getIndex(attrName), "", attrName, attrName, "CDATA", "");
+ newAttrs.setAttribute(newAttrs.getIndex(attrName), "", attrName, attrName, "CDATA",
+ "");
}
String msgAttr = this.brokenLinkMessageAttribute;
if (msgAttr != null) {
@@ -362,7 +391,8 @@
String msg = "Broken link: " + brokenLinkUri;
newAttrs.addAttribute("", msgAttr, msgAttr, "CDATA", msg);
}
- newAttrs.addAttribute("", this.brokenLinkAttribute, this.brokenLinkAttribute, "CDATA", this.brokenLinkValue);
+ newAttrs.addAttribute("", this.brokenLinkAttribute, this.brokenLinkAttribute, "CDATA",
+ this.brokenLinkValue);
}
}
Modified: lenya/trunk/src/modules-core/linking/java/src/org/apache/lenya/cms/cocoon/transformation/IncomingProxyTransformer.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/modules-core/linking/java/src/org/apache/lenya/cms/cocoon/transformation/IncomingProxyTransformer.java?rev=657435&r1=657434&r2=657435&view=diff
==============================================================================
--- lenya/trunk/src/modules-core/linking/java/src/org/apache/lenya/cms/cocoon/transformation/IncomingProxyTransformer.java (original)
+++ lenya/trunk/src/modules-core/linking/java/src/org/apache/lenya/cms/cocoon/transformation/IncomingProxyTransformer.java Sat May 17 12:36:59 2008
@@ -32,7 +32,6 @@
import org.apache.lenya.cms.publication.URLInformation;
import org.apache.lenya.cms.repository.RepositoryUtil;
import org.apache.lenya.cms.repository.Session;
-import org.apache.lenya.util.ServletHelper;
import org.xml.sax.SAXException;
/**
@@ -44,14 +43,15 @@
private LinkRewriter rewriter;
public void setup(SourceResolver _resolver, Map _objectModel, String _source,
- Parameters _parameters) throws ProcessingException, SAXException, IOException {
- super.setup(_resolver, _objectModel, _source, _parameters);
+ Parameters params) throws ProcessingException, SAXException, IOException {
+ super.setup(_resolver, _objectModel, _source, params);
Request request = ObjectModelHelper.getRequest(_objectModel);
try {
Session session = RepositoryUtil.getSession(this.manager, request);
DocumentFactory factory = DocumentUtil.createDocumentFactory(this.manager, session);
- URLInformation info = new URLInformation(ServletHelper.getWebappURI(request));
+ String webappUrl = getWebappUrl(params, objectModel);
+ URLInformation info = new URLInformation(webappUrl);
String pubId = info.getPublicationId();
this.rewriter = new IncomingLinkRewriter(factory.getPublication(pubId));
} catch (final Exception e) {
Modified: lenya/trunk/src/modules-core/linking/java/src/org/apache/lenya/cms/cocoon/transformation/ProxyTransformer.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/modules-core/linking/java/src/org/apache/lenya/cms/cocoon/transformation/ProxyTransformer.java?rev=657435&r1=657434&r2=657435&view=diff
==============================================================================
--- lenya/trunk/src/modules-core/linking/java/src/org/apache/lenya/cms/cocoon/transformation/ProxyTransformer.java (original)
+++ lenya/trunk/src/modules-core/linking/java/src/org/apache/lenya/cms/cocoon/transformation/ProxyTransformer.java Sat May 17 12:36:59 2008
@@ -67,16 +67,16 @@
private LinkRewriter rewriter;
public void setup(SourceResolver resolver, Map objectModel, String source,
- Parameters parameters) throws ProcessingException, SAXException, IOException {
- super.setup(resolver, objectModel, source, parameters);
+ Parameters params) throws ProcessingException, SAXException, IOException {
+ super.setup(resolver, objectModel, source, params);
Request request = ObjectModelHelper.getRequest(objectModel);
try {
- if (parameters.isParameter(PARAMETER_URLS)) {
- setUrlType(parameters.getParameter(PARAMETER_URLS));
+ if (params.isParameter(PARAMETER_URLS)) {
+ setUrlType(params.getParameter(PARAMETER_URLS));
}
Session session = RepositoryUtil.getSession(this.manager, request);
- String webappUrl = ServletHelper.getWebappURI(request);
+ String webappUrl = getWebappUrl(params, objectModel);
this.rewriter = new OutgoingLinkRewriter(this.manager, session, webappUrl,
request.isSecure(), false, this.relativeUrls);
} catch (final Exception e) {
Modified: lenya/trunk/src/modules-core/linking/java/src/org/apache/lenya/cms/cocoon/transformation/UuidToUrlTransformer.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/modules-core/linking/java/src/org/apache/lenya/cms/cocoon/transformation/UuidToUrlTransformer.java?rev=657435&r1=657434&r2=657435&view=diff
==============================================================================
--- lenya/trunk/src/modules-core/linking/java/src/org/apache/lenya/cms/cocoon/transformation/UuidToUrlTransformer.java (original)
+++ lenya/trunk/src/modules-core/linking/java/src/org/apache/lenya/cms/cocoon/transformation/UuidToUrlTransformer.java Sat May 17 12:36:59 2008
@@ -31,7 +31,6 @@
import org.apache.lenya.cms.linking.UuidToUrlRewriter;
import org.apache.lenya.cms.publication.DocumentFactory;
import org.apache.lenya.cms.publication.DocumentUtil;
-import org.apache.lenya.util.ServletHelper;
import org.xml.sax.SAXException;
/**
@@ -47,14 +46,14 @@
private LinkResolver linkResolver;
public void setup(SourceResolver resolver, Map objectModel, String source,
- Parameters parameters) throws ProcessingException, SAXException, IOException {
- super.setup(resolver, objectModel, source, parameters);
+ Parameters params) throws ProcessingException, SAXException, IOException {
+ super.setup(resolver, objectModel, source, params);
Request request = ObjectModelHelper.getRequest(objectModel);
this.useIgnore = true;
try {
+ String currentUrl = getWebappUrl(params, objectModel);
DocumentFactory factory = DocumentUtil.getDocumentFactory(this.manager, request);
- String currentUrl = ServletHelper.getWebappURI(request);
this.linkResolver = (LinkResolver) this.manager.lookup(LinkResolver.ROLE);
this.rewriter = new UuidToUrlRewriter(currentUrl, this.linkResolver, factory);
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@lenya.apache.org
For additional commands, e-mail: commits-help@lenya.apache.org