### Eclipse Workspace Patch 1.0 #P pencmsSprint Index: src/org/opencms/jsp/CmsJspNavBuilder.java =================================================================== RCS file: /usr/local/cvs/opencms/src/org/opencms/jsp/CmsJspNavBuilder.java,v retrieving revision 1.26 diff -u -r1.26 CmsJspNavBuilder.java --- src/org/opencms/jsp/CmsJspNavBuilder.java 27 Feb 2008 12:05:34 -0000 1.26 +++ src/org/opencms/jsp/CmsJspNavBuilder.java 10 Sep 2008 13:31:31 -0000 @@ -31,6 +31,15 @@ package org.opencms.jsp; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Locale; +import java.util.Map; + +import org.opencms.file.CmsFile; import org.opencms.file.CmsObject; import org.opencms.file.CmsProperty; import org.opencms.file.CmsPropertyDefinition; @@ -38,11 +47,10 @@ import org.opencms.file.CmsResourceFilter; import org.opencms.main.CmsException; import org.opencms.main.OpenCms; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.Iterator; -import java.util.List; +import org.opencms.util.CmsStringUtil; +import org.opencms.xml.content.CmsXmlContent; +import org.opencms.xml.content.CmsXmlContentFactory; +import org.opencms.xml.types.I_CmsXmlContentValue; /** * Bean to provide a convenient way to build navigation structures based on the @@ -140,25 +148,28 @@ * @return a sorted (ascending to nav position) ArrayList of navigation elements */ public static List getNavigationForFolder(CmsObject cms, String folder) { - + folder = CmsResource.getFolderPath(folder); - List result = new ArrayList(); - - List resources; - try { - resources = cms.getResourcesInFolder(folder, CmsResourceFilter.DEFAULT); - } catch (Exception e) { - return Collections.EMPTY_LIST; - } + List result = getNavConfigFromXml(cms, folder); + if (result == null){ + result = new ArrayList(); + List resources; + try { + resources = cms.getResourcesInFolder(folder, CmsResourceFilter.DEFAULT); + } catch (Exception e) { + return Collections.EMPTY_LIST; + } - for (int i = 0; i < resources.size(); i++) { - CmsResource r = (CmsResource)resources.get(i); - CmsJspNavElement element = getNavigationForResource(cms, cms.getSitePath(r)); - if ((element != null) && element.isInNavigation()) { - result.add(element); + for (int i = 0; i < resources.size(); i++) { + CmsResource r = (CmsResource)resources.get(i); + CmsJspNavElement element = getNavigationForResource(cms, cms.getSitePath(r), null); + if ((element != null) && element.isInNavigation()) { + result.add(element); + } } + Collections.sort(result); + } - Collections.sort(result); return result; } @@ -199,19 +210,99 @@ * must be a full path name, e.g. "/docs/index.html". * @return a CmsJspNavElement for the given resource */ - public static CmsJspNavElement getNavigationForResource(CmsObject cms, String resource) { + public static CmsJspNavElement getNavigationForResource(CmsObject cms, String resource, CmsJspNavXmlConfigElement config) { - List properties; - try { - properties = cms.readPropertyObjects(resource, false); - } catch (Exception e) { - return null; + List properties = new ArrayList(); + Map propertyMap = new HashMap(); + if (cms.existsResource(resource)) { + try { + properties = cms.readPropertyObjects(resource, false); + propertyMap = CmsProperty.toMap(properties); + } catch (Exception e) { + // not able to read properties,may be an external link in XML content + } + } + if(config == null){ + List navElements = getNavConfigFromXml(cms, CmsResource.getFolderPath(resource)); + if(navElements != null){ + for(int i=0; i