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