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]