Author: rwatler
Date: Tue Dec 22 20:51:45 2009
New Revision: 893311
URL: http://svn.apache.org/viewvc?rev=893311&view=rev
Log:
add '@0', '@1'..'@N', and '@$' current path patterns support for menu options:
used to make menu options relative to current portal page path
Modified:
portals/jetspeed-2/portal/trunk/components/jetspeed-portal-site/src/main/java/org/apache/jetspeed/portalsite/impl/MenuImpl.java
portals/jetspeed-2/portal/trunk/components/jetspeed-portal-site/src/main/java/org/apache/jetspeed/portalsite/view/SiteView.java
portals/jetspeed-2/portal/trunk/components/jetspeed-portal-site/src/test/java/org/apache/jetspeed/portalsite/TestPortalSite.java
portals/jetspeed-2/portal/trunk/components/jetspeed-portal-site/src/test/resources/webapp/WEB-INF/pages/folder.metadata
Modified:
portals/jetspeed-2/portal/trunk/components/jetspeed-portal-site/src/main/java/org/apache/jetspeed/portalsite/impl/MenuImpl.java
URL:
http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-portal-site/src/main/java/org/apache/jetspeed/portalsite/impl/MenuImpl.java?rev=893311&r1=893310&r2=893311&view=diff
==============================================================================
---
portals/jetspeed-2/portal/trunk/components/jetspeed-portal-site/src/main/java/org/apache/jetspeed/portalsite/impl/MenuImpl.java
(original)
+++
portals/jetspeed-2/portal/trunk/components/jetspeed-portal-site/src/main/java/org/apache/jetspeed/portalsite/impl/MenuImpl.java
Tue Dec 22 20:51:45 2009
@@ -166,7 +166,7 @@
}
// set relative element flag if options path is relative
- this.elementRelative = (this.elementRelative ||
!options.startsWith(Folder.PATH_SEPARATOR));
+ this.elementRelative = (this.elementRelative ||
!options.startsWith(Folder.PATH_SEPARATOR) ||
options.contains(SiteView.ALT_CURRENT_PAGE_PATH));
}
// menu defined only with menu definition options
@@ -632,7 +632,7 @@
}
// set relative element flag if path is relative
- elementRelative = (elementRelative ||
!optionPath.startsWith(Folder.PATH_SEPARATOR));
+ elementRelative = (elementRelative ||
!optionPath.startsWith(Folder.PATH_SEPARATOR) ||
options.contains(SiteView.ALT_CURRENT_PAGE_PATH));
}
}
Modified:
portals/jetspeed-2/portal/trunk/components/jetspeed-portal-site/src/main/java/org/apache/jetspeed/portalsite/view/SiteView.java
URL:
http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-portal-site/src/main/java/org/apache/jetspeed/portalsite/view/SiteView.java?rev=893311&r1=893310&r2=893311&view=diff
==============================================================================
---
portals/jetspeed-2/portal/trunk/components/jetspeed-portal-site/src/main/java/org/apache/jetspeed/portalsite/view/SiteView.java
(original)
+++
portals/jetspeed-2/portal/trunk/components/jetspeed-portal-site/src/main/java/org/apache/jetspeed/portalsite/view/SiteView.java
Tue Dec 22 20:51:45 2009
@@ -65,6 +65,8 @@
* ALT_CURRENT_PAGE_PATH - alternate expression used to match the current
page
*/
public final static String ALT_CURRENT_PAGE_PATH = "@";
+ public final static char ALT_CURRENT_PAGE_PATH_CHAR = '@';
+ public final static String ALT_CURRENT_PAGE_PATH_0 = "@0";
/**
* STANDARD_*_MENU_NAME - standard menu names
@@ -705,6 +707,15 @@
return currentPage;
}
+ // match current node path
+ if (currentPath.equals(ALT_CURRENT_PAGE_PATH_0))
+ {
+ // return current node, (assume viewable)
+ List proxies = new ArrayList(1);
+ proxies.add(currentNode);
+ return currentNode;
+ }
+
// convert absolute path to a root relative search
// and default current folder
if (currentPath.startsWith(Folder.PATH_SEPARATOR))
@@ -850,6 +861,79 @@
return null;
}
}
+
+ // convert pattern with indexed current node path expressions
+ if (currentNode != null)
+ {
+ // match current node path
+ if (currentRegexpPath.equals(ALT_CURRENT_PAGE_PATH_0))
+ {
+ // return current node, (assume viewable)
+ List proxies = new ArrayList(1);
+ proxies.add(currentNode);
+ return proxies;
+ }
+
+ // match current node path expression
+ int currentNodePathIndex =
currentRegexpPath.indexOf(ALT_CURRENT_PAGE_PATH_CHAR);
+ String [] currentNodePathElements = null;
+ while (currentNodePathIndex != -1)
+ {
+ if (currentNodePathIndex+1 < currentRegexpPath.length())
+ {
+ String currentNodePathElement = null;
+ char currentNodePathElementIndexChar =
currentRegexpPath.charAt(currentNodePathIndex+1);
+ if ((currentNodePathElementIndexChar >= '0') &&
(currentNodePathElementIndexChar <= '9'))
+ {
+ // valid current node path pattern
+ int currentNodePathElementIndex =
(int)(currentNodePathElementIndexChar-'0');
+ if (currentNodePathElementIndex > 0)
+ {
+ // use indexed current node path element
+ if (currentNodePathElements == null)
+ {
+ // note: leading '/' in path makes index one
based
+ currentNodePathElements =
currentNode.getPath().split(Folder.PATH_SEPARATOR);
+ }
+ if (currentNodePathElementIndex <
currentNodePathElements.length)
+ {
+ currentNodePathElement =
currentNodePathElements[currentNodePathElementIndex];
+ }
+ }
+ else
+ {
+ // use full current node path trimmed of separators
+ currentNodePathElement = currentNode.getPath();
+ if
(currentNodePathElement.endsWith(Folder.PATH_SEPARATOR))
+ {
+ currentNodePathElement =
currentNodePathElement.substring(0, currentNodePathElement.length()-1);
+ }
+ if
(currentNodePathElement.startsWith(Folder.PATH_SEPARATOR))
+ {
+ currentNodePathElement =
currentNodePathElement.substring(1);
+ }
+ }
+ }
+ else if (currentNodePathElementIndexChar == '$')
+ {
+ // use last current node path element
+ if (currentNodePathElements == null)
+ {
+ // note: leading '/' in path makes index one based
+ currentNodePathElements =
currentNode.getPath().split(Folder.PATH_SEPARATOR);
+ }
+ currentNodePathElement =
currentNodePathElements[currentNodePathElements.length-1];
+ }
+ // replace current node path expression
+ if (currentNodePathElement != null)
+ {
+ currentRegexpPath = currentRegexpPath.substring(0,
currentNodePathIndex)+currentNodePathElement+currentRegexpPath.substring(currentNodePathIndex+2);
+ currentNodePathIndex +=
currentNodePathElement.length()-1;
+ }
+ }
+ currentNodePathIndex =
currentRegexpPath.indexOf(ALT_CURRENT_PAGE_PATH_CHAR, currentNodePathIndex+1);
+ }
+ }
// convert absolute path to a root relative search
// and default current folder
Modified:
portals/jetspeed-2/portal/trunk/components/jetspeed-portal-site/src/test/java/org/apache/jetspeed/portalsite/TestPortalSite.java
URL:
http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-portal-site/src/test/java/org/apache/jetspeed/portalsite/TestPortalSite.java?rev=893311&r1=893310&r2=893311&view=diff
==============================================================================
---
portals/jetspeed-2/portal/trunk/components/jetspeed-portal-site/src/test/java/org/apache/jetspeed/portalsite/TestPortalSite.java
(original)
+++
portals/jetspeed-2/portal/trunk/components/jetspeed-portal-site/src/test/java/org/apache/jetspeed/portalsite/TestPortalSite.java
Tue Dec 22 20:51:45 2009
@@ -275,7 +275,7 @@
assertEquals("/page0.psml",
extractFileSystemPathFromId(rootPage0Proxy.getId()));
List rootPage0ProxyMenus = rootPage0Proxy.getMenuDefinitions();
assertNotNull(rootPage0ProxyMenus);
- assertEquals(3 + aggregateView.getStandardMenuNames().size(),
rootPage0ProxyMenus.size());
+ assertEquals(5 + aggregateView.getStandardMenuNames().size(),
rootPage0ProxyMenus.size());
Iterator menusIter = rootPage0ProxyMenus.iterator();
MenuDefinition rootPage0ProxyTemplateTestMenu =
(MenuDefinition)menusIter.next();
assertEquals("template-test",
rootPage0ProxyTemplateTestMenu.getName());
@@ -289,6 +289,10 @@
assertEquals("bread-crumbs", rootPage0ProxyBreadCrumbMenu.getName());
assertEquals("./", rootPage0ProxyBreadCrumbMenu.getOptions());
assertEquals(true, rootPage0ProxyBreadCrumbMenu.isPaths());
+ MenuDefinition rootPage0ProxyCurrentPageTestMenu =
(MenuDefinition)menusIter.next();
+ assertEquals("current-page-test",
rootPage0ProxyCurrentPageTestMenu.getName());
+ MenuDefinition rootPage0ProxyCurrentPathTestMenu =
(MenuDefinition)menusIter.next();
+ assertEquals("current-path-test",
rootPage0ProxyCurrentPathTestMenu.getName());
for (int i = 0; (i < aggregateView.getStandardMenuNames().size()); i++)
{
assertTrue(aggregateView.getStandardMenuNames().contains(((MenuDefinition)menusIter.next()).getName()));
@@ -300,7 +304,7 @@
assertEquals("/_user/user/page2.psml",
extractFileSystemPathFromId(rootPage2Proxy.getId()));
List rootPage2ProxyMenus = rootPage2Proxy.getMenuDefinitions();
assertNotNull(rootPage2ProxyMenus);
- assertEquals(3 + aggregateView.getStandardMenuNames().size(),
rootPage2ProxyMenus.size());
+ assertEquals(5 + aggregateView.getStandardMenuNames().size(),
rootPage2ProxyMenus.size());
menusIter = rootPage2ProxyMenus.iterator();
MenuDefinition rootPage2ProxyTopMenu =
(MenuDefinition)menusIter.next();
assertEquals("top", rootPage2ProxyTopMenu.getName());
@@ -311,6 +315,10 @@
MenuDefinition rootPage2ProxyTemplateTestMenu =
(MenuDefinition)menusIter.next();
assertEquals("template-test",
rootPage2ProxyTemplateTestMenu.getName());
assertEquals("/page0.psml",
rootPage2ProxyTemplateTestMenu.getOptions());
+ MenuDefinition rootPage2ProxyCurrentPageTestMenu =
(MenuDefinition)menusIter.next();
+ assertEquals("current-page-test",
rootPage0ProxyCurrentPageTestMenu.getName());
+ MenuDefinition rootPage2ProxyCurrentPathTestMenu =
(MenuDefinition)menusIter.next();
+ assertEquals("current-path-test",
rootPage0ProxyCurrentPathTestMenu.getName());
for (int i = 0; (i < aggregateView.getStandardMenuNames().size()); i++)
{
assertTrue(aggregateView.getStandardMenuNames().contains(((MenuDefinition)menusIter.next()).getName()));
@@ -687,10 +695,12 @@
assertNotNull(requestContext);
Set customMenuNames = requestContext.getCustomMenuNames();
assertNotNull(customMenuNames);
- assertEquals(3, customMenuNames.size());
+ assertEquals(5, customMenuNames.size());
assertTrue(customMenuNames.contains("top"));
assertTrue(customMenuNames.contains("bread-crumbs"));
assertTrue(customMenuNames.contains("template-test"));
+ assertTrue(customMenuNames.contains("current-page-test"));
+ assertTrue(customMenuNames.contains("current-path-test"));
Menu topMenu = requestContext.getMenu("top");
assertNotNull(topMenu);
assertEquals(MenuElement.MENU_ELEMENT_TYPE, topMenu.getElementType());
@@ -800,6 +810,21 @@
assertEquals(1, templateTestElements.size());
assertTrue(templateTestElements.get(0) instanceof MenuOption);
assertEquals("/page1.psml",
((MenuOption)templateTestElements.get(0)).getUrl());
+ Menu currentPageTestMenu = requestContext.getMenu("current-page-test");
+ assertEquals("current-page-test", currentPageTestMenu.getName());
+ assertFalse(currentPageTestMenu.isEmpty());
+ List currentPageTestElements = currentPageTestMenu.getElements();
+ assertNotNull(currentPageTestElements);
+ assertEquals(1, currentPageTestElements.size());
+ assertTrue(currentPageTestElements.get(0) instanceof MenuOption);
+ assertEquals("/page2.psml",
((MenuOption)currentPageTestElements.get(0)).getUrl());
+ assertTrue(currentPageTestMenu.isSelected(requestContext));
+
assertTrue(((MenuOption)currentPageTestElements.get(0)).isSelected(requestContext));
+ Menu currentPathTestMenu = requestContext.getMenu("current-path-test");
+ assertEquals("current-path-test", currentPathTestMenu.getName());
+ assertTrue(currentPathTestMenu.isEmpty());
+ List currentPathTestElements = currentPathTestMenu.getElements();
+ assertNull(currentPathTestElements);
// second request at /folder0
locator = new JetspeedProfileLocator();
@@ -842,7 +867,27 @@
Menu navigationsMenu = requestContext.getMenu("navigations");
assertNotNull(navigationsMenu);
assertTrue(navigationsMenu.isEmpty());
-
+ currentPageTestMenu = requestContext.getMenu("current-page-test");
+ assertEquals("current-page-test", currentPageTestMenu.getName());
+ assertFalse(currentPageTestMenu.isEmpty());
+ currentPageTestElements = currentPageTestMenu.getElements();
+ assertNotNull(currentPageTestElements);
+ assertEquals(1, currentPageTestElements.size());
+ assertTrue(currentPageTestElements.get(0) instanceof MenuOption);
+ assertEquals("/folder0/page0.psml",
((MenuOption)currentPageTestElements.get(0)).getUrl());
+ assertTrue(currentPageTestMenu.isSelected(requestContext));
+
assertTrue(((MenuOption)currentPageTestElements.get(0)).isSelected(requestContext));
+ currentPathTestMenu = requestContext.getMenu("current-path-test");
+ assertEquals("current-path-test", currentPathTestMenu.getName());
+ assertFalse(currentPathTestMenu.isEmpty());
+ currentPathTestElements = currentPathTestMenu.getElements();
+ assertNotNull(currentPathTestElements);
+ assertEquals(1, currentPathTestElements.size());
+ assertTrue(currentPathTestElements.get(0) instanceof MenuOption);
+ assertEquals("/folder0/page0.psml",
((MenuOption)currentPathTestElements.get(0)).getUrl());
+ assertTrue(currentPathTestMenu.isSelected(requestContext));
+
assertTrue(((MenuOption)currentPathTestElements.get(0)).isSelected(requestContext));
+
// third request at /page1.psml
locator = new JetspeedProfileLocator();
locator.init(null, "/page1.psml");
Modified:
portals/jetspeed-2/portal/trunk/components/jetspeed-portal-site/src/test/resources/webapp/WEB-INF/pages/folder.metadata
URL:
http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-portal-site/src/test/resources/webapp/WEB-INF/pages/folder.metadata?rev=893311&r1=893310&r2=893311&view=diff
==============================================================================
---
portals/jetspeed-2/portal/trunk/components/jetspeed-portal-site/src/test/resources/webapp/WEB-INF/pages/folder.metadata
(original)
+++
portals/jetspeed-2/portal/trunk/components/jetspeed-portal-site/src/test/resources/webapp/WEB-INF/pages/folder.metadata
Tue Dec 22 20:51:45 2009
@@ -35,4 +35,6 @@
<menu name="bread-crumbs" options="./" paths="true"/>
<menu name="template-test" options="/page0.psml"/>
+ <menu name="current-page-test" options="~"/>
+ <menu name="current-path-test" regexp="true" options="/@1/*.psml"/>
</folder>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]