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 2007/11/26 16:50:25 UTC

svn commit: r598318 - in /lenya/trunk/src/modules/svg: ./ config/cocoon-xconf/ java/ java/src/ java/src/org/ java/src/org/apache/ java/src/org/apache/lenya/ java/src/org/apache/lenya/modules/ java/src/org/apache/lenya/modules/svg/ xslt/

Author: andreas
Date: Mon Nov 26 07:50:23 2007
New Revision: 598318

URL: http://svn.apache.org/viewvc?rev=598318&view=rev
Log:
Adding Batik protocol handlers for site: and lenya-document:, this allows to use internal URLs. Fixes bug 43933.

Added:
    lenya/trunk/src/modules/svg/config/cocoon-xconf/
    lenya/trunk/src/modules/svg/config/cocoon-xconf/protocol-handlers.xconf
    lenya/trunk/src/modules/svg/java/
    lenya/trunk/src/modules/svg/java/src/
    lenya/trunk/src/modules/svg/java/src/org/
    lenya/trunk/src/modules/svg/java/src/org/apache/
    lenya/trunk/src/modules/svg/java/src/org/apache/lenya/
    lenya/trunk/src/modules/svg/java/src/org/apache/lenya/modules/
    lenya/trunk/src/modules/svg/java/src/org/apache/lenya/modules/svg/
    lenya/trunk/src/modules/svg/java/src/org/apache/lenya/modules/svg/ProtocolHandler.java
Modified:
    lenya/trunk/src/modules/svg/sitemap.xmap
    lenya/trunk/src/modules/svg/xslt/scale.xsl

Added: lenya/trunk/src/modules/svg/config/cocoon-xconf/protocol-handlers.xconf
URL: http://svn.apache.org/viewvc/lenya/trunk/src/modules/svg/config/cocoon-xconf/protocol-handlers.xconf?rev=598318&view=auto
==============================================================================
--- lenya/trunk/src/modules/svg/config/cocoon-xconf/protocol-handlers.xconf (added)
+++ lenya/trunk/src/modules/svg/config/cocoon-xconf/protocol-handlers.xconf Mon Nov 26 07:50:23 2007
@@ -0,0 +1,35 @@
+<?xml version="1.0"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+<!-- $Id: doctypes.xconf 164635 2005-04-25 20:01:43Z tschlabach $ -->
+
+<xconf xpath="/cocoon" unless="/cocoon/component[@role = 'org.apache.lenya.modules.svg.SiteProtocolHandler']">
+
+  <component logger="lenya.modules.svg"
+    role="org.apache.lenya.modules.svg.SiteProtocolHandler"
+    class="org.apache.lenya.modules.svg.ProtocolHandler">
+    <parameter name="protocol" value="site"/>
+  </component>
+
+  <component logger="lenya.modules.svg"
+    role="org.apache.lenya.modules.svg.LenyaDocumentProtocolHandler"
+    class="org.apache.lenya.modules.svg.ProtocolHandler">
+    <parameter name="protocol" value="lenya-document"/>
+  </component>
+  
+</xconf>

Added: lenya/trunk/src/modules/svg/java/src/org/apache/lenya/modules/svg/ProtocolHandler.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/modules/svg/java/src/org/apache/lenya/modules/svg/ProtocolHandler.java?rev=598318&view=auto
==============================================================================
--- lenya/trunk/src/modules/svg/java/src/org/apache/lenya/modules/svg/ProtocolHandler.java (added)
+++ lenya/trunk/src/modules/svg/java/src/org/apache/lenya/modules/svg/ProtocolHandler.java Mon Nov 26 07:50:23 2007
@@ -0,0 +1,123 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.lenya.modules.svg;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Iterator;
+
+import org.apache.avalon.framework.activity.Startable;
+import org.apache.avalon.framework.component.Component;
+import org.apache.avalon.framework.logger.AbstractLogEnabled;
+import org.apache.avalon.framework.parameters.ParameterException;
+import org.apache.avalon.framework.parameters.Parameterizable;
+import org.apache.avalon.framework.parameters.Parameters;
+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.batik.util.ParsedURL;
+import org.apache.batik.util.ParsedURLData;
+import org.apache.batik.util.ParsedURLProtocolHandler;
+import org.apache.cocoon.CascadingIOException;
+import org.apache.excalibur.source.Source;
+import org.apache.excalibur.source.SourceResolver;
+
+/**
+ * Batik URL protocol handler for protocols which are handled by the SourceResolver.
+ */
+public class ProtocolHandler extends AbstractLogEnabled implements ParsedURLProtocolHandler,
+        ThreadSafe, Startable, Component, Serviceable, Parameterizable {
+
+    protected static final String PARAM_PROTOCOL = "protocol";
+
+    public static final String ROLE = ProtocolHandler.class.getName();
+    
+    private SourceResolver resolver;
+    private ServiceManager manager;
+
+    private String protocol;
+
+    public ParsedURLData parseURL(String urlStr) {
+        if (this.resolver == null) {
+            throw new IllegalStateException("Please call setResolver() first!");
+        }
+        return new ParsedUrlData(getProtocolHandled(), this.resolver, urlStr);
+    }
+
+    public ParsedURLData parseURL(ParsedURL basepurl, String urlStr) {
+        return parseURL(urlStr);
+    }
+
+    static class ParsedUrlData extends ParsedURLData {
+
+        private Source source;
+        private SourceResolver resolver;
+        private String url;
+
+        public ParsedUrlData(String protocol, SourceResolver resolver, String url) {
+            this.url = url;
+            this.protocol = protocol;
+            this.resolver = resolver;
+            try {
+                this.source = resolver.resolveURI(url);
+                this.contentType = this.source.getMimeType();
+            } catch (Exception e) {
+                throw new RuntimeException(e);
+            }
+        }
+
+        /**
+         * Open a stream for the data. If the thread-local
+         * <code>SourceResolver</code> exists, then use it, otherwise fall
+         * back to <code>SourceHandler</code>.
+         */
+        protected InputStream openStreamInternal(String userAgent, Iterator mimeTypes,
+                Iterator encodingTypes) throws IOException {
+            try {
+                return this.source.getInputStream();
+            } catch (Exception e) {
+                throw new CascadingIOException("Cannot open URL " + this.url, e);
+            } finally {
+                this.resolver.release(this.source);
+            }
+        }
+
+    }
+
+    public void start() throws Exception {
+        this.resolver = (SourceResolver) this.manager.lookup(SourceResolver.ROLE);
+        ParsedURL.registerHandler(this);
+    }
+
+    public void stop() throws Exception {
+    }
+
+    public void service(ServiceManager manager) throws ServiceException {
+        this.manager = manager;
+    }
+
+    public String getProtocolHandled() {
+        return this.protocol;
+    }
+
+    public void parameterize(Parameters params) throws ParameterException {
+        this.protocol = params.getParameter(PARAM_PROTOCOL);
+    }
+
+}

Modified: lenya/trunk/src/modules/svg/sitemap.xmap
URL: http://svn.apache.org/viewvc/lenya/trunk/src/modules/svg/sitemap.xmap?rev=598318&r1=598317&r2=598318&view=diff
==============================================================================
--- lenya/trunk/src/modules/svg/sitemap.xmap (original)
+++ lenya/trunk/src/modules/svg/sitemap.xmap Mon Nov 26 07:50:23 2007
@@ -89,11 +89,9 @@
         
         <map:generate src="dummy.xml"/>
         <map:act type="resource-exists">
-          <map:parameter name="url" value="site://{1}/{2}/{page-envelope:default-language}/{3}"/>
+          <map:parameter name="url" value="lenya-document:{page-envelope:document-uuid},lang={page-envelope:document-language},pub={1},area={2}"/>
           <map:transform src="xslt/scale.xsl">
-            <map:parameter name="nonProxyBaseUrl" value="http://localhost:{request:serverPort}{request:contextPath}"/>
-            <map:parameter name="url" value="/{../1}/{../2}/{../3}.{../4}"/>
-            <map:parameter name="revision" value="{request-param:lenya.revision}"/>
+            <map:parameter name="url" value="lenya-document:{page-envelope:document-uuid},lang={page-envelope:document-language},pub={../1},area={../2}{link:rev}"/>
             <map:parameter name="width" value="{request-param:width}"/>
             <map:parameter name="height" value="{request-param:height}"/>
           </map:transform>

Modified: lenya/trunk/src/modules/svg/xslt/scale.xsl
URL: http://svn.apache.org/viewvc/lenya/trunk/src/modules/svg/xslt/scale.xsl?rev=598318&r1=598317&r2=598318&view=diff
==============================================================================
--- lenya/trunk/src/modules/svg/xslt/scale.xsl (original)
+++ lenya/trunk/src/modules/svg/xslt/scale.xsl Mon Nov 26 07:50:23 2007
@@ -21,30 +21,13 @@
   xmlns:xlink="http://www.w3.org/1999/xlink">
   
   <xsl:param name="url"/>
-  <xsl:param name="nonProxyBaseUrl"/>
   <xsl:param name="height"/>
   <xsl:param name="width"/>
-  <xsl:param name="revision"/>
-  
-  <!-- Workaround: Batik doesn't seem to like SSL URLs -->
-  <xsl:param name="imageUrl">
-    <xsl:choose>
-      <xsl:when test="starts-with($url, '/')">
-        <xsl:value-of select="$nonProxyBaseUrl"/><xsl:value-of select="$url"/>
-      </xsl:when>
-      <xsl:when test="starts-with($url, 'https:')">
-        <xsl:text>http</xsl:text><xsl:value-of select="substring($url, 6)"/>
-      </xsl:when>
-      <xsl:otherwise>
-        <xsl:value-of select="$url"/>
-      </xsl:otherwise>
-    </xsl:choose>
-    <xsl:if test="$revision != ''">?lenya.revision=<xsl:value-of select="$revision"/></xsl:if>
-  </xsl:param>
   
   <xsl:template match="/">
     <svg width="{$width}" height="{$height}" version="1.1">
-      <image x="0" y="0" width="{$width}" height="{$height}" xlink:href="{$imageUrl}" preserveAspectRatio="none"/>        
+      <image x="0" y="0" width="{$width}" height="{$height}" xlink:href="{$url}" preserveAspectRatio="none"/>        
     </svg>
   </xsl:template>
+  
 </xsl:stylesheet>



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@lenya.apache.org
For additional commands, e-mail: commits-help@lenya.apache.org