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/03/13 14:52:28 UTC

svn commit: r636764 - /lenya/sandbox/modules/navigation/java/src/org/apache/lenya/modules/navigation/

Author: andreas
Date: Thu Mar 13 06:52:23 2008
New Revision: 636764

URL: http://svn.apache.org/viewvc?rev=636764&view=rev
Log:
Adding language support to navigation module.

Added:
    lenya/sandbox/modules/navigation/java/src/org/apache/lenya/modules/navigation/LanguagesSelector.java
Modified:
    lenya/sandbox/modules/navigation/java/src/org/apache/lenya/modules/navigation/BreadcrumbSelector.java
    lenya/sandbox/modules/navigation/java/src/org/apache/lenya/modules/navigation/ChildrenSelector.java
    lenya/sandbox/modules/navigation/java/src/org/apache/lenya/modules/navigation/FragmentSelector.java
    lenya/sandbox/modules/navigation/java/src/org/apache/lenya/modules/navigation/NodeGenerator.java
    lenya/sandbox/modules/navigation/java/src/org/apache/lenya/modules/navigation/SiteFragmentGenerator.java
    lenya/sandbox/modules/navigation/java/src/org/apache/lenya/modules/navigation/SiteMetaDataTransformer.java
    lenya/sandbox/modules/navigation/java/src/org/apache/lenya/modules/navigation/SubtreeSelector.java

Modified: lenya/sandbox/modules/navigation/java/src/org/apache/lenya/modules/navigation/BreadcrumbSelector.java
URL: http://svn.apache.org/viewvc/lenya/sandbox/modules/navigation/java/src/org/apache/lenya/modules/navigation/BreadcrumbSelector.java?rev=636764&r1=636763&r2=636764&view=diff
==============================================================================
--- lenya/sandbox/modules/navigation/java/src/org/apache/lenya/modules/navigation/BreadcrumbSelector.java (original)
+++ lenya/sandbox/modules/navigation/java/src/org/apache/lenya/modules/navigation/BreadcrumbSelector.java Thu Mar 13 06:52:23 2008
@@ -26,7 +26,8 @@
 
 public class BreadcrumbSelector implements FragmentSelector {
 
-    public void selectFragment(NodeGenerator generator, SiteStructure site, String path) throws SAXException, SiteException {
+    public void selectFragment(NodeGenerator generator, SiteStructure site, String path, String lang)
+            throws SAXException, SiteException {
         StringTokenizer tokens = new StringTokenizer(path, "/");
         StringBuffer currentPath = new StringBuffer();
         while (tokens.hasMoreTokens()) {
@@ -35,9 +36,9 @@
             if (site.contains(path)) {
                 SiteNode node = site.getNode(path);
                 generator.startNode(node);
+                generator.generateLink(node, lang);
                 generator.endNode(node);
-            }
-            else {
+            } else {
                 break;
             }
         }

Modified: lenya/sandbox/modules/navigation/java/src/org/apache/lenya/modules/navigation/ChildrenSelector.java
URL: http://svn.apache.org/viewvc/lenya/sandbox/modules/navigation/java/src/org/apache/lenya/modules/navigation/ChildrenSelector.java?rev=636764&r1=636763&r2=636764&view=diff
==============================================================================
--- lenya/sandbox/modules/navigation/java/src/org/apache/lenya/modules/navigation/ChildrenSelector.java (original)
+++ lenya/sandbox/modules/navigation/java/src/org/apache/lenya/modules/navigation/ChildrenSelector.java Thu Mar 13 06:52:23 2008
@@ -23,25 +23,26 @@
 import org.xml.sax.SAXException;
 
 /**
- * Select the child nodes of a node non-recursively. If the path is "" or "/", the top-level nodes are generated.
+ * Select the child nodes of a node non-recursively. If the path is "" or "/",
+ * the top-level nodes are generated.
  */
 public class ChildrenSelector implements FragmentSelector {
 
-    public void selectFragment(NodeGenerator generator, SiteStructure site, String path) throws SAXException, SiteException {
+    public void selectFragment(NodeGenerator generator, SiteStructure site, String path, String lang)
+            throws SAXException, SiteException {
         SiteNode[] nodes;
         if (path.equals("/") || path.equals("")) {
             nodes = site.getTopLevelNodes();
-        }
-        else {
+        } else {
             if (site.contains(path)) {
                 nodes = site.getNode(path).getChildren();
-            }
-            else {
+            } else {
                 nodes = new SiteNode[0];
             }
         }
         for (int i = 0; i < nodes.length; i++) {
             generator.startNode(nodes[i]);
+            generator.generateLink(nodes[i], lang);
             generator.endNode(nodes[i]);
         }
     }

Modified: lenya/sandbox/modules/navigation/java/src/org/apache/lenya/modules/navigation/FragmentSelector.java
URL: http://svn.apache.org/viewvc/lenya/sandbox/modules/navigation/java/src/org/apache/lenya/modules/navigation/FragmentSelector.java?rev=636764&r1=636763&r2=636764&view=diff
==============================================================================
--- lenya/sandbox/modules/navigation/java/src/org/apache/lenya/modules/navigation/FragmentSelector.java (original)
+++ lenya/sandbox/modules/navigation/java/src/org/apache/lenya/modules/navigation/FragmentSelector.java Thu Mar 13 06:52:23 2008
@@ -22,7 +22,8 @@
 import org.xml.sax.SAXException;
 
 public interface FragmentSelector {
-    
-    void selectFragment(NodeGenerator generator, SiteStructure site, String path) throws SAXException, SiteException;
+
+    void selectFragment(NodeGenerator generator, SiteStructure site, String path, String language)
+            throws SAXException, SiteException;
 
 }

Added: lenya/sandbox/modules/navigation/java/src/org/apache/lenya/modules/navigation/LanguagesSelector.java
URL: http://svn.apache.org/viewvc/lenya/sandbox/modules/navigation/java/src/org/apache/lenya/modules/navigation/LanguagesSelector.java?rev=636764&view=auto
==============================================================================
--- lenya/sandbox/modules/navigation/java/src/org/apache/lenya/modules/navigation/LanguagesSelector.java (added)
+++ lenya/sandbox/modules/navigation/java/src/org/apache/lenya/modules/navigation/LanguagesSelector.java Thu Mar 13 06:52:23 2008
@@ -0,0 +1,40 @@
+/*
+ * 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.navigation;
+
+import org.apache.lenya.cms.site.SiteException;
+import org.apache.lenya.cms.site.SiteNode;
+import org.apache.lenya.cms.site.SiteStructure;
+import org.xml.sax.SAXException;
+
+public class LanguagesSelector implements FragmentSelector {
+
+    public void selectFragment(NodeGenerator generator, SiteStructure site, String path,
+            String language) throws SAXException, SiteException {
+        if (site.contains(path)) {
+            SiteNode node = site.getNode(path);
+            generator.startNode(node);
+            String[] languages = node.getLanguages();
+            for (int i = 0; i < languages.length; i++) {
+                generator.generateLink(node, languages[i]);
+            }
+            generator.endNode(node);
+        }
+    }
+
+}

Modified: lenya/sandbox/modules/navigation/java/src/org/apache/lenya/modules/navigation/NodeGenerator.java
URL: http://svn.apache.org/viewvc/lenya/sandbox/modules/navigation/java/src/org/apache/lenya/modules/navigation/NodeGenerator.java?rev=636764&r1=636763&r2=636764&view=diff
==============================================================================
--- lenya/sandbox/modules/navigation/java/src/org/apache/lenya/modules/navigation/NodeGenerator.java (original)
+++ lenya/sandbox/modules/navigation/java/src/org/apache/lenya/modules/navigation/NodeGenerator.java Thu Mar 13 06:52:23 2008
@@ -17,14 +17,22 @@
  */
 package org.apache.lenya.modules.navigation;
 
-import org.apache.cocoon.ProcessingException;
 import org.apache.lenya.cms.site.SiteNode;
 import org.xml.sax.SAXException;
 
 public interface NodeGenerator {
-    
+
     void startNode(SiteNode node) throws SAXException;
 
     void endNode(SiteNode node) throws SAXException;
+
+    /**
+     * Generates a link if the corresponding node is visible and contains a link
+     * for the specified language.
+     * @param node The node.
+     * @param language The language.
+     * @throws SAXException if an error occurs.
+     */
+    void generateLink(SiteNode node, String language) throws SAXException;
 
 }

Modified: lenya/sandbox/modules/navigation/java/src/org/apache/lenya/modules/navigation/SiteFragmentGenerator.java
URL: http://svn.apache.org/viewvc/lenya/sandbox/modules/navigation/java/src/org/apache/lenya/modules/navigation/SiteFragmentGenerator.java?rev=636764&r1=636763&r2=636764&view=diff
==============================================================================
--- lenya/sandbox/modules/navigation/java/src/org/apache/lenya/modules/navigation/SiteFragmentGenerator.java (original)
+++ lenya/sandbox/modules/navigation/java/src/org/apache/lenya/modules/navigation/SiteFragmentGenerator.java Thu Mar 13 06:52:23 2008
@@ -169,7 +169,7 @@
         try {
             FragmentSelector selector = (FragmentSelector) Class.forName(this.selectorClass)
                     .newInstance();
-            selector.selectFragment(this, getSite(), this.selectorPath);
+            selector.selectFragment(this, getSite(), this.selectorPath, getLanguage());
         } catch (Exception e) {
             throw new ProcessingException(e);
         }
@@ -179,39 +179,43 @@
         AttributesImpl attrs = new AttributesImpl();
         addAttribute(attrs, ATTR_UUID, node.getUuid());
         addAttribute(attrs, ATTR_NAME, node.getName());
-        
-        if (node.getPath().equals(getPath())) {
-            addAttribute(attrs, ATTR_CURRENT, Boolean.toString(true));
-        }
-        
+
         if (getPath().startsWith(node.getPath() + "/")) {
             addAttribute(attrs, ATTR_ANCESTOR_OF_CURRENT, Boolean.toString(true));
         }
-        
+
         this.contentHandler.startElement(NAMESPACE, ELEM_NODE, PREFIX + ':' + ELEM_NODE, attrs);
 
-        String lang = getLanguage();
-        if (node.isVisible() && node.hasLink(lang)) {
-            try {
-                generateLink(node.getLink(lang));
-            } catch (SiteException e) {
-                throw new SAXException(e);
-            }
-        }
     }
 
     public void endNode(SiteNode node) throws SAXException {
         this.contentHandler.endElement(NAMESPACE, ELEM_NODE, PREFIX + ':' + ELEM_NODE);
     }
 
-    protected void generateLink(Link link) throws SAXException {
-        AttributesImpl attrs = new AttributesImpl();
-        attrs.addAttribute(XML_NAMESPACE, ATTR_LANG, XML_PREFIX + ":" + ATTR_LANG, "CDATA", link
-                .getLanguage());
-        addAttribute(attrs, ATTR_LABEL, link.getLabel());
-        addAttribute(attrs, ATTR_HREF, getHref(link).getUri());
-        this.contentHandler.startElement(NAMESPACE, ELEM_LINK, PREFIX + ':' + ELEM_LINK, attrs);
-        this.contentHandler.endElement(NAMESPACE, ELEM_LINK, PREFIX + ':' + ELEM_LINK);
+    public void generateLink(SiteNode node, String language) throws SAXException {
+        if (node.isVisible() && node.hasLink(language)) {
+            Link link = getLink(node, language);
+            AttributesImpl attrs = new AttributesImpl();
+            attrs.addAttribute(XML_NAMESPACE, ATTR_LANG, XML_PREFIX + ":" + ATTR_LANG, "CDATA",
+                    link.getLanguage());
+            addAttribute(attrs, ATTR_LABEL, link.getLabel());
+            addAttribute(attrs, ATTR_HREF, getHref(link).getUri());
+            
+            if (node.getPath().equals(getPath()) && language.equals(getLanguage())) {
+                addAttribute(attrs, ATTR_CURRENT, Boolean.toString(true));
+            }
+
+            this.contentHandler.startElement(NAMESPACE, ELEM_LINK, PREFIX + ':' + ELEM_LINK, attrs);
+            this.contentHandler.endElement(NAMESPACE, ELEM_LINK, PREFIX + ':' + ELEM_LINK);
+        }
+    }
+
+    protected Link getLink(SiteNode node, String language) throws SAXException {
+        try {
+            return node.getLink(language);
+        } catch (SiteException e) {
+            throw new SAXException(e);
+        }
     }
 
     protected org.apache.lenya.cms.linking.Link getHref(Link link) {
@@ -219,7 +223,7 @@
         href.setPubId(getSite().getPublication().getId());
         href.setArea(getSite().getArea());
         href.setUuid(link.getNode().getUuid());
-        href.setLanguage(getLanguage());
+        href.setLanguage(link.getLanguage());
         return href;
     }
 

Modified: lenya/sandbox/modules/navigation/java/src/org/apache/lenya/modules/navigation/SiteMetaDataTransformer.java
URL: http://svn.apache.org/viewvc/lenya/sandbox/modules/navigation/java/src/org/apache/lenya/modules/navigation/SiteMetaDataTransformer.java?rev=636764&r1=636763&r2=636764&view=diff
==============================================================================
--- lenya/sandbox/modules/navigation/java/src/org/apache/lenya/modules/navigation/SiteMetaDataTransformer.java (original)
+++ lenya/sandbox/modules/navigation/java/src/org/apache/lenya/modules/navigation/SiteMetaDataTransformer.java Thu Mar 13 06:52:23 2008
@@ -19,18 +19,15 @@
 
 import java.io.IOException;
 import java.net.MalformedURLException;
-import java.util.HashMap;
 import java.util.Map;
 
 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.cocoon.transformation.AbstractSAXTransformer;
-import org.apache.excalibur.store.impl.MRUMemoryStore;
 import org.apache.lenya.cms.linking.Link;
 import org.apache.lenya.cms.linking.LinkResolver;
 import org.apache.lenya.cms.linking.LinkTarget;
@@ -56,19 +53,6 @@
     private Area area;
     private LinkResolver linkResolver;
 
-    protected static MRUMemoryStore cache;
-
-    protected synchronized MRUMemoryStore getCache() {
-        if (cache == null) {
-            try {
-                cache = (MRUMemoryStore) this.manager.lookup(getClass().getName() + "Store");
-            } catch (ServiceException e) {
-                throw new RuntimeException(e);
-            }
-        }
-        return cache;
-    }
-
     public void setup(SourceResolver resolver, Map objectModel, String src, Parameters params)
             throws ProcessingException, SAXException, IOException {
         super.setup(resolver, objectModel, src, params);
@@ -149,14 +133,14 @@
     }
 
     protected boolean isFolderNode(Document doc) throws MetaDataException {
-        CacheableMetaData meta = getMetaData(doc);
+        MetaData meta = doc.getMetaData(NAMESPACE);
         String value = meta.getFirstValue(ELEM_FOLDER_NODE);
         boolean isFolderNode = value != null && Boolean.valueOf(value).booleanValue();
         return isFolderNode;
     }
 
     protected String getExternalLink(Document doc) throws MetaDataException {
-        CacheableMetaData meta = getMetaData(doc);
+        MetaData meta = doc.getMetaData(NAMESPACE);
         return meta.getFirstValue(ELEM_EXTERNAL_LINK);
     }
 
@@ -171,52 +155,6 @@
             link.setPubId(this.area.getPublication().getId());
         }
         return link.getUri();
-    }
-
-    protected CacheableMetaData getMetaData(Document doc) throws MetaDataException {
-        CacheableMetaData cacheableMeta = null;
-        String key = doc.getRepositoryNode().getSourceURI();
-        MRUMemoryStore cache = getCache();
-        MetaData meta = doc.getMetaData(NAMESPACE);
-        if (cache.containsKey(key)) {
-            cacheableMeta = (CacheableMetaData) cache.get(key);
-            if (meta.getLastModified() > cacheableMeta.getLastModified()) {
-                cacheableMeta = null;
-            }
-        }
-        if (cacheableMeta == null) {
-            cacheableMeta = new CacheableMetaData(meta);
-            cache.hold(key, cacheableMeta);
-        }
-        return cacheableMeta;
-    }
-
-    protected static class CacheableMetaData {
-
-        private Map map = new HashMap();
-        private long lastModified;
-
-        public CacheableMetaData(MetaData meta) throws MetaDataException {
-            this.lastModified = meta.getLastModified();
-            String[] keys = meta.getAvailableKeys();
-            for (int i = 0; i < keys.length; i++) {
-                this.map.put(keys[i], meta.getValues(keys[i]));
-            }
-        }
-
-        public String getFirstValue(String key) {
-            String[] values = (String[]) this.map.get(key);
-            if (values != null && values.length > 0) {
-                return values[0];
-            } else {
-                return null;
-            }
-        }
-        
-        public long getLastModified() {
-            return this.lastModified;
-        }
-
     }
 
 }

Modified: lenya/sandbox/modules/navigation/java/src/org/apache/lenya/modules/navigation/SubtreeSelector.java
URL: http://svn.apache.org/viewvc/lenya/sandbox/modules/navigation/java/src/org/apache/lenya/modules/navigation/SubtreeSelector.java?rev=636764&r1=636763&r2=636764&view=diff
==============================================================================
--- lenya/sandbox/modules/navigation/java/src/org/apache/lenya/modules/navigation/SubtreeSelector.java (original)
+++ lenya/sandbox/modules/navigation/java/src/org/apache/lenya/modules/navigation/SubtreeSelector.java Thu Mar 13 06:52:23 2008
@@ -28,26 +28,29 @@
  */
 public class SubtreeSelector implements FragmentSelector {
 
-    public void selectFragment(NodeGenerator generator, SiteStructure site, String path)
+    public void selectFragment(NodeGenerator generator, SiteStructure site, String path, String lang)
             throws SAXException, SiteException {
         if (path.equals("/") || path.equals("")) {
             SiteNode[] nodes = site.getTopLevelNodes();
-            selectNodes(generator, nodes);
+            selectNodes(generator, nodes, lang);
         } else if (site.contains(path)) {
             SiteNode node = site.getNode(path);
-            selectSubtree(generator, node);
+            selectSubtree(generator, node, lang);
         }
     }
-    
-    protected void selectSubtree(NodeGenerator generator, SiteNode node) throws SAXException {
+
+    protected void selectSubtree(NodeGenerator generator, SiteNode node, String lang)
+            throws SAXException {
         generator.startNode(node);
-        selectNodes(generator, node.getChildren());
+        generator.generateLink(node, lang);
+        selectNodes(generator, node.getChildren(), lang);
         generator.endNode(node);
     }
 
-    protected void selectNodes(NodeGenerator generator, SiteNode[] nodes) throws SAXException {
+    protected void selectNodes(NodeGenerator generator, SiteNode[] nodes, String lang)
+            throws SAXException {
         for (int i = 0; i < nodes.length; i++) {
-            selectSubtree(generator, nodes[i]);
+            selectSubtree(generator, nodes[i], lang);
         }
     }
 



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