Author: andreas
Date: Wed Mar 19 18:33:21 2008
New Revision: 639105
URL: http://svn.apache.org/viewvc?rev=639105&view=rev
Log:
Use only resource type for sitetree icon URLs to reduce traffic.
Added:
lenya/trunk/src/modules/sitetree/java/src/org/apache/lenya/cms/cocoon/transformation/IconUrlTransformer.java
Modified:
lenya/trunk/src/modules/sitetree/config/module.xml
lenya/trunk/src/modules/sitetree/resources/javascript/lenyatree.js
lenya/trunk/src/modules/sitetree/resources/javascript/navtree.js
lenya/trunk/src/modules/sitetree/sitemap.xmap
lenya/trunk/src/modules/sitetree/xslt/navigation/sitetree2nav.xsl
Modified: lenya/trunk/src/modules/sitetree/config/module.xml
URL: http://svn.apache.org/viewvc/lenya/trunk/src/modules/sitetree/config/module.xml?rev=639105&r1=639104&r2=639105&view=diff
==============================================================================
--- lenya/trunk/src/modules/sitetree/config/module.xml (original)
+++ lenya/trunk/src/modules/sitetree/config/module.xml Wed Mar 19 18:33:21 2008
@@ -23,6 +23,7 @@
<export package="org.apache.lenya.cms.site.tree"/>
<depends module="org.apache.lenya.modules.ac"/>
<depends module="org.apache.lenya.modules.usecase"/>
+ <depends module="org.apache.lenya.modules.linking"/>
<package>org.apache.lenya.modules</package>
<version>0.1-dev</version>
<name>Sitetree</name>
Added: lenya/trunk/src/modules/sitetree/java/src/org/apache/lenya/cms/cocoon/transformation/IconUrlTransformer.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/modules/sitetree/java/src/org/apache/lenya/cms/cocoon/transformation/IconUrlTransformer.java?rev=639105&view=auto
==============================================================================
--- lenya/trunk/src/modules/sitetree/java/src/org/apache/lenya/cms/cocoon/transformation/IconUrlTransformer.java (added)
+++ lenya/trunk/src/modules/sitetree/java/src/org/apache/lenya/cms/cocoon/transformation/IconUrlTransformer.java Wed Mar 19 18:33:21 2008
@@ -0,0 +1,139 @@
+/*
+ * 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.cms.cocoon.transformation;
+
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.util.Arrays;
+import java.util.Map;
+
+import org.apache.avalon.framework.activity.Disposable;
+import org.apache.avalon.framework.activity.Initializable;
+import org.apache.avalon.framework.parameters.Parameters;
+import org.apache.avalon.framework.service.ServiceException;
+import org.apache.cocoon.ProcessingException;
+import org.apache.cocoon.environment.ObjectModelHelper;
+import org.apache.cocoon.environment.Request;
+import org.apache.cocoon.environment.SourceResolver;
+import org.apache.lenya.cms.linking.Link;
+import org.apache.lenya.cms.linking.LinkResolver;
+import org.apache.lenya.cms.linking.LinkRewriter;
+import org.apache.lenya.cms.linking.LinkTarget;
+import org.apache.lenya.cms.publication.Document;
+import org.apache.lenya.cms.publication.DocumentFactory;
+import org.apache.lenya.cms.publication.DocumentUtil;
+import org.apache.lenya.cms.publication.ResourceType;
+import org.apache.lenya.cms.publication.URLInformation;
+import org.apache.lenya.util.ServletHelper;
+import org.xml.sax.SAXException;
+
+/**
+ * Transforms <code>icon:{uuid}...</code> URLs into
+ * <code>/{pub}/{area}/{resourceType}.gif?lenya.module=sitetree</code> URLs.
+ */
+public class IconUrlTransformer extends AbstractLinkTransformer {
+
+ private LinkResolver linkResolver;
+ private IconLinkRewriter rewriter = null;
+ private DocumentFactory factory;
+ private String pubId;
+ private String area;
+
+ protected LinkRewriter getLinkRewriter() {
+ if (this.rewriter == null) {
+ this.rewriter = new IconLinkRewriter();
+ }
+ return this.rewriter;
+ }
+
+ protected class IconLinkRewriter implements LinkRewriter {
+
+ protected static final String PROTOCOL = "icon:";
+
+ public boolean matches(String url) {
+ return url.startsWith(PROTOCOL);
+ }
+
+ public String rewrite(String url) {
+ String pubId = IconUrlTransformer.this.pubId;
+ String area = IconUrlTransformer.this.area;
+ StringBuffer iconUrl = new StringBuffer();
+ iconUrl.append("/").append(pubId).append("/").append(area).append("/");
+ String name = "default";
+ if (url.length() > PROTOCOL.length()) {
+ String suffix = url.substring(PROTOCOL.length());
+ String linkUri = "lenya-document:" + suffix;
+ try {
+ Link link = getLink(linkUri, pubId, area);
+ LinkTarget target = IconUrlTransformer.this.linkResolver.resolve(
+ IconUrlTransformer.this.factory, link.getUri());
+ if (target.exists()) {
+ Document doc = target.getDocument();
+ ResourceType type = doc.getResourceType();
+ if (Arrays.asList(type.getFormats()).contains("icon")) {
+ name = type.getName();
+ }
+ }
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+ iconUrl.append(name).append(".gif?lenya.module=sitetree");
+ return iconUrl.toString();
+ }
+
+ protected Link getLink(String linkUri, String pubId, String area)
+ throws MalformedURLException {
+ Link link = new Link(linkUri);
+ if (link.getArea() == null) {
+ link.setArea(area);
+ }
+ if (link.getPubId() == null) {
+ link.setPubId(pubId);
+ }
+ return link;
+ }
+
+ }
+
+ public void setup(SourceResolver resolver, Map objectModel, String src, Parameters params)
+ throws ProcessingException, SAXException, IOException {
+ super.setup(resolver, objectModel, src, params);
+ try {
+ Request request = ObjectModelHelper.getRequest(objectModel);
+ this.factory = DocumentUtil.getDocumentFactory(this.manager, request);
+ this.linkResolver = (LinkResolver) this.manager.lookup(LinkResolver.ROLE);
+
+ String webappUrl = ServletHelper.getWebappURI(request);
+ URLInformation url = new URLInformation(webappUrl);
+ this.pubId = url.getPublicationId();
+ this.area = url.getArea();
+
+ } catch (ServiceException e) {
+ throw new ProcessingException(e);
+ }
+ }
+
+ public void dispose() {
+ super.dispose();
+ if (this.linkResolver != null) {
+ this.manager.release(linkResolver);
+ }
+ }
+
+}
Modified: lenya/trunk/src/modules/sitetree/resources/javascript/lenyatree.js
URL: http://svn.apache.org/viewvc/lenya/trunk/src/modules/sitetree/resources/javascript/lenyatree.js?rev=639105&r1=639104&r2=639105&view=diff
==============================================================================
--- lenya/trunk/src/modules/sitetree/resources/javascript/lenyatree.js (original)
+++ lenya/trunk/src/modules/sitetree/resources/javascript/lenyatree.js Wed Mar 19 18:33:21 2008
@@ -245,17 +245,14 @@
else {
var href;
if (steps.length < 4) {
- href = AREA_BASE_PATH + "/folder";
- }
- else if(item.href == "") {
- href = AREA_BASE_PATH + "/default";
+ href = AREA_BASE_PATH + "/folder.gif?lenya.module=sitetree";
}
else {
- href = item.href;
+ href = item.icon;
}
var img = this.doc.createElement('img');
var language = CHOSEN_LANGUAGE;
- img.setAttribute('src', href + '.gif?lenya.module=sitetree');
+ img.setAttribute('src', href);
img.setAttribute('alt', '');
return img;
}
Modified: lenya/trunk/src/modules/sitetree/resources/javascript/navtree.js
URL: http://svn.apache.org/viewvc/lenya/trunk/src/modules/sitetree/resources/javascript/navtree.js?rev=639105&r1=639104&r2=639105&view=diff
==============================================================================
--- lenya/trunk/src/modules/sitetree/resources/javascript/navtree.js (original)
+++ lenya/trunk/src/modules/sitetree/resources/javascript/navtree.js Wed Mar 19 18:33:21 2008
@@ -51,6 +51,7 @@
newItem.uuid = node.getAttribute('uuid');
newItem.isprotected = isNodeProtected(node);
newItem.href = node.getAttribute('href');
+ newItem.icon = node.getAttribute('icon');
newItem.label = getLabel(node);
newItem.existsChosenLanguage = existsChosenLanguage(node);
newItem.langSuffix = node.getAttribute('language-suffix');
Modified: lenya/trunk/src/modules/sitetree/sitemap.xmap
URL: http://svn.apache.org/viewvc/lenya/trunk/src/modules/sitetree/sitemap.xmap?rev=639105&r1=639104&r2=639105&view=diff
==============================================================================
--- lenya/trunk/src/modules/sitetree/sitemap.xmap (original)
+++ lenya/trunk/src/modules/sitetree/sitemap.xmap Wed Mar 19 18:33:21 2008
@@ -39,10 +39,15 @@
<urls type="relative"/>
<transform namespace="http://apache.org/cocoon/lenya/navigation/1.0" element="node" attribute="href"/>
</map:transformer>
+ <map:transformer logger="lenya.sitemap.transformer.uuid2url" name="icon-sitetree"
+ src="org.apache.lenya.cms.cocoon.transformation.IconUrlTransformer">
+ <transform namespace="http://apache.org/cocoon/lenya/navigation/1.0" element="node" attribute="icon"/>
+ </map:transformer>
<map:transformer logger="lenya.sitemap.transformer.proxy" name="proxy-sitetree"
src="org.apache.lenya.cms.cocoon.transformation.ProxyTransformer">
<transform namespace="http://apache.org/cocoon/lenya/navigation/1.0" element="site" attribute="href"/>
<transform namespace="http://apache.org/cocoon/lenya/navigation/1.0" element="node" attribute="href"/>
+ <transform namespace="http://apache.org/cocoon/lenya/navigation/1.0" element="node" attribute="icon"/>
</map:transformer>
</map:transformers>
</map:components>
@@ -94,6 +99,7 @@
<!-- pattern: {1:nav-element}/{2:pub-id}/{3:area}/{4:default-language}/{5:language}/{6:path}.xml -->
<map:match pattern="*/*/*/*/*/**.xml">
<map:generate src="cocoon:/navtree/{2}/{3}/{4}/{5}/{6}.xml"/>
+ <map:transform type="sitemeta"/>
<map:transform src="fallback://lenya/modules/sitetree/xslt/navigation/{1}.xsl">
<map:parameter name="area" value="{3}"/>
<map:parameter name="root" value="/{2}/{3}/"/>
@@ -150,6 +156,7 @@
<map:parameter name="locale" value="{request:locale}"/>
</map:transform>
<map:transform type="uuid2url-sitetree"/>
+ <map:transform type="icon-sitetree"/>
<map:transform type="proxy-sitetree"/>
<map:serialize type="xml"/>
</map:match>
@@ -173,18 +180,9 @@
<map:match pattern="*/*/default.gif">
<map:read src="fallback://lenya/modules/sitetree/resources/icons/default.gif"/>
</map:match>
-
- <map:match pattern="*/*/**.gif">
- <map:select type="parameter">
- <map:parameter name="parameter-selector-test"
- value="{resource-type:{doc-info:{1}:{2}:{page-envelope:document-uuid}:{page-envelope:language}:resourceType}:supportsFormat:icon}"/>
- <map:when test="true">
- <map:read src="lenya-document:{page-envelope:document-uuid},lang={page-envelope:language},area={2},pub={1}?format=icon"/>
- </map:when>
- <map:otherwise>
- <map:read src="fallback://lenya/modules/sitetree/resources/icons/default.gif"/>
- </map:otherwise>
- </map:select>
+
+ <map:match pattern="*/*/*.gif">
+ <map:read src="{resource-type:{3}:format-icon}" mime-type="image/gif"/>
</map:match>
</map:pipeline>
Modified: lenya/trunk/src/modules/sitetree/xslt/navigation/sitetree2nav.xsl
URL: http://svn.apache.org/viewvc/lenya/trunk/src/modules/sitetree/xslt/navigation/sitetree2nav.xsl?rev=639105&r1=639104&r2=639105&view=diff
==============================================================================
--- lenya/trunk/src/modules/sitetree/xslt/navigation/sitetree2nav.xsl (original)
+++ lenya/trunk/src/modules/sitetree/xslt/navigation/sitetree2nav.xsl Wed Mar 19 18:33:21 2008
@@ -144,6 +144,15 @@
</xsl:when>
</xsl:choose>
</xsl:attribute>
+
+ <xsl:attribute name="icon">
+ <xsl:text>icon:</xsl:text>
+ <xsl:if test="@uuid">
+ <xsl:value-of select="@uuid"/>
+ <xsl:text>,lang=</xsl:text><xsl:value-of select="$existinglanguage"/>
+ <xsl:value-of select="$areaParam"/>
+ </xsl:if>
+ </xsl:attribute>
<xsl:if test="@mimetype">
<xsl:attribute name="mimetype">
lmpx.com only provides a reader for public news (NNTP) servers. It is not
affiliated with the servers or forums shown here and is not responsible for
the content of articles, which is written by their respective authors.