taylor 2004/10/14 12:29:12 Modified: components/page-manager/src/java/org/apache/jetspeed/page/impl CastorXmlPageManager.java Log: to allow users with multiple roles, groups, etc. to be profiled correctly. Revision Changes Path 1.14 +68 -20 jakarta-jetspeed-2/components/page-manager/src/java/org/apache/jetspeed/page/impl/CastorXmlPageManager.java Index: CastorXmlPageManager.java =================================================================== RCS file: /home/cvs/jakarta-jetspeed-2/components/page-manager/src/java/org/apache/jetspeed/page/impl/CastorXmlPageManager.java,v retrieving revision 1.13 retrieving revision 1.14 diff -u -r1.13 -r1.14 --- CastorXmlPageManager.java 26 Sep 2004 06:10:05 -0000 1.13 +++ CastorXmlPageManager.java 14 Oct 2004 19:29:12 -0000 1.14 @@ -399,28 +399,71 @@ if (log.isDebugEnabled()) log.debug("generateProfilingPageSearchPaths(), locatorPath = " + locator.getLocatorPath(locatorProperties)); - // get folder and page path elements - StringBuffer path = new StringBuffer("/"); + // get folder and page locator path elements + List locatorPaths = new ArrayList(); + locatorPaths.add(new StringBuffer("/")); + int lastLocatorPathsCount = 0; + String lastLocatorPropertyName = null; + int lastLocatorPropertyValueLength = 0; for (int i = 0; (i < locatorProperties.length); i++) { if (locatorProperties[i].isControl()) { - // construct folder path with control properties + // skip null control values if (locatorProperties[i].getValue() != null) { - path.append(PROFILE_PROPERTY_FOLDER_PREFIX); - path.append(locatorProperties[i].getName().toLowerCase()); - path.append('/'); - path.append(locatorProperties[i].getValue().toLowerCase()); - path.append('/'); + // fold control names and values to lower case + String locatorPropertyName = locatorProperties[i].getName().toLowerCase(); + String locatorPropertyValue = locatorProperties[i].getValue().toLowerCase(); + + // detect duplicate control names which indicates multiple + // values: must duplicate locator paths for each value; different + // control values are simply appended to all locator paths + if (locatorPropertyName.equals(lastLocatorPropertyName)) + { + // duplicate last locator paths set, stripping last matching + // control value from each, appending nevw value, and adding new + // valued set to collection of locatorPaths + ArrayList multipleValueLocatorPaths = new ArrayList(lastLocatorPathsCount); + Iterator locatorPathsIter = locatorPaths.iterator(); + for (int count = 0; (locatorPathsIter.hasNext() && (count < lastLocatorPathsCount)); count++) + { + StringBuffer locatorPath = (StringBuffer) locatorPathsIter.next(); + StringBuffer multipleValueLocatorPath = new StringBuffer(locatorPath.toString()); + multipleValueLocatorPath.setLength(multipleValueLocatorPath.length() - lastLocatorPropertyValueLength - 1); + multipleValueLocatorPath.append(locatorPropertyValue); + multipleValueLocatorPath.append('/'); + multipleValueLocatorPaths.add(multipleValueLocatorPath); + } + locatorPaths.addAll(multipleValueLocatorPaths); + } + else + { + // construct locator path folders with control properties + Iterator locatorPathsIter = locatorPaths.iterator(); + while (locatorPathsIter.hasNext()) + { + StringBuffer locatorPath = (StringBuffer) locatorPathsIter.next(); + locatorPath.append(PROFILE_PROPERTY_FOLDER_PREFIX); + locatorPath.append(locatorPropertyName); + locatorPath.append('/'); + locatorPath.append(locatorPropertyValue); + locatorPath.append('/'); + } + + // reset last locator property vars + lastLocatorPathsCount = locatorPaths.size(); + lastLocatorPropertyName = locatorPropertyName; + lastLocatorPropertyValueLength = locatorPropertyValue.length(); + } } } else if (! forceRequestPath) { - // set page path with page/path properties, assumes - // page names and relative paths are relative to - // request path and that any page paths with no url - // separator should have the page extension appended + // set locator page path with page/path properties, assumes + // page names and relative paths are relative to request path + // and that any page paths with no url separator should have + // the page extension appended if (locatorProperties[i].getValue() != null) { // get locator path property @@ -463,13 +506,18 @@ } } - // append page path to folder path and record - if (pagePath != null) - if (pagePath.startsWith("/")) - path.append(pagePath.substring(1)); - else - path.append(pagePath); - paths.add(path.toString()); + // append page path to locator path folders and record + Iterator locatorPathsIter = locatorPaths.iterator(); + while (locatorPathsIter.hasNext()) + { + StringBuffer locatorPath = (StringBuffer) locatorPathsIter.next(); + if (pagePath != null) + if (pagePath.startsWith("/")) + locatorPath.append(pagePath.substring(1)); + else + locatorPath.append(pagePath); + paths.add(locatorPath.toString()); + } } // append default page path with no locator path
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]