Author: cbrisson
Date: Wed May 29 18:06:22 2019
New Revision: 1860363

URL: http://svn.apache.org/viewvc?rev=1860363&view=rev
Log:
[view-tools] BreadcrumbTool: Add overridable method for navigation elements 
customization

Modified:
    
velocity/tools/trunk/velocity-tools-view/src/main/java/org/apache/velocity/tools/view/BreadcrumbTool.java

Modified: 
velocity/tools/trunk/velocity-tools-view/src/main/java/org/apache/velocity/tools/view/BreadcrumbTool.java
URL: 
http://svn.apache.org/viewvc/velocity/tools/trunk/velocity-tools-view/src/main/java/org/apache/velocity/tools/view/BreadcrumbTool.java?rev=1860363&r1=1860362&r2=1860363&view=diff
==============================================================================
--- 
velocity/tools/trunk/velocity-tools-view/src/main/java/org/apache/velocity/tools/view/BreadcrumbTool.java
 (original)
+++ 
velocity/tools/trunk/velocity-tools-view/src/main/java/org/apache/velocity/tools/view/BreadcrumbTool.java
 Wed May 29 18:06:22 2019
@@ -156,6 +156,7 @@ public class BreadcrumbTool extends Loca
         String uri = request.getRequestURI();
         // infer extension
         String ext = getExtension(uri);
+        // deduce default index page
         String index = "index." + ext;
         if ("/".equals(uri)) uri = "/" + index;
         String elements[] = uri.split("/");
@@ -163,17 +164,36 @@ public class BreadcrumbTool extends Loca
         StringBuilder builder = new StringBuilder();
         for (String elem : elements)
         {
+            // for each URI path element
             builder.append(elem);
             String currentPath = builder.toString();
             if (index.equals(elem)) continue;
             if (!elem.endsWith('.' + ext)) currentPath = currentPath + '/' + 
index;
             String name = builder.length() == 0 ? "home" : elem.replace('_', ' 
').toLowerCase(getLocale());
-            navigationElements.add(new NavigationElement(currentPath, name));
+            NavigationElement navElem = new NavigationElement(currentPath, 
name);
+            // give a chance to subclasses to customize an item
+            if (customize(navElem, request))
+            {
+                navigationElements.add(navElem);
+            }
             builder.append('/');
         }
     }
 
     /**
+     * <p>Let the user customize programmatically the name and URL of a 
specific element.</p>
+     * <p>For instance, one can do use query parameters to customize the 
displayed name or target URL.</p>
+     * @param navElem navigation element
+     * @param request initial request
+     * @return true (default value) to include this navigation element, false 
to skip it
+     */
+    protected boolean customize(NavigationElement navElem, HttpServletRequest 
request)
+    {
+        // default implementation does nothing
+        return true;
+    }
+
+    /**
      * Configuration
      */
     @Override


Reply via email to