taylor 2004/11/03 21:05:56
Modified: components/page-manager/src/java/org/apache/jetspeed/page/impl
CastorXmlPageManager.java
Log:
patch Randy Watler
supports root navigation profiler properties and eliminates redundant search path
generation.
Revision Changes Path
1.21 +109 -31
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.20
retrieving revision 1.21
diff -u -r1.20 -r1.21
--- CastorXmlPageManager.java 3 Nov 2004 15:58:46 -0000 1.20
+++ CastorXmlPageManager.java 4 Nov 2004 05:05:56 -0000 1.21
@@ -606,25 +606,64 @@
private List generateProfilingSearchPaths(String requestPath, ProfileLocator
locator, boolean forceRequestPath)
{
- // generate profile locator folder/page paths
- List paths = new ArrayList();
+ // set locator page path default
String pagePath = requestPath;
+
+ // generate profile locator folder/page paths
+ List orderedLocatorPaths = new ArrayList();
+ List locatorPathsSet = new ArrayList();
Iterator locatorIter = locator.iterator();
while (locatorIter.hasNext())
{
// get fallback locator properties
ProfileLocatorProperty [] locatorProperties = (ProfileLocatorProperty
[]) locatorIter.next();
log.debug("generateProfilingSearchPaths(), locatorPath = " +
locator.getLocatorPath(locatorProperties));
-
+
// get folder and page locator path elements
+ String locatorPathRoot = Folder.PATH_SEPARATOR;
+ int locatorPathDepth = 0;
List locatorPaths = new ArrayList();
- locatorPaths.add(new StringBuffer(Folder.PATH_SEPARATOR));
+ locatorPaths.add(new StringBuffer(locatorPathRoot));
int lastLocatorPathsCount = 0;
String lastLocatorPropertyName = null;
+ int lastLocatorPropertyValueCount = 0;
int lastLocatorPropertyValueLength = 0;
for (int i = 0; (i < locatorProperties.length); i++)
{
- if (locatorProperties[i].isControl())
+ if (locatorProperties[i].isNavigation())
+ {
+ // reset search paths to navigation root path, (reset
+ // only navigation supported), skip null navigation values
+ if (locatorProperties[i].getValue() != null)
+ {
+ // assume navigation value must be a root prefix
+ locatorPathRoot = locatorProperties[i].getValue();
+ if (! locatorPathRoot.startsWith(Folder.PATH_SEPARATOR))
+ {
+ locatorPathRoot = Folder.PATH_SEPARATOR +
locatorPathRoot;
+ }
+ if (! locatorPathRoot.endsWith(Folder.PATH_SEPARATOR))
+ {
+ locatorPathRoot += Folder.PATH_SEPARATOR;
+ }
+
+ // reset locator paths using new prefix
+ locatorPathDepth = 0;
+ locatorPaths.clear();
+ locatorPaths.add(new StringBuffer(locatorPathRoot));
+ lastLocatorPathsCount = 0;
+ lastLocatorPropertyName = null;
+ lastLocatorPropertyValueCount = 0;
+ lastLocatorPropertyValueLength = 0;
+ }
+ else
+ {
+ // make sure trailing null valued property is ignored
+ // and previous value is removed from profiler iterator
+ lastLocatorPropertyValueCount++;
+ }
+ }
+ else if (locatorProperties[i].isControl())
{
// skip null control values
if (locatorProperties[i].getValue() != null)
@@ -653,6 +692,7 @@
multipleValueLocatorPaths.add(multipleValueLocatorPath);
}
locatorPaths.addAll(multipleValueLocatorPaths);
+ lastLocatorPropertyValueCount++;
}
else
{
@@ -669,60 +709,98 @@
}
// reset last locator property vars
+ locatorPathDepth++;
lastLocatorPathsCount = locatorPaths.size();
lastLocatorPropertyName = locatorPropertyName;
+ lastLocatorPropertyValueCount = 1;
lastLocatorPropertyValueLength =
locatorPropertyValue.length();
}
}
+ else
+ {
+ // make sure trailing null valued property is ignored
+ // and previous value is removed from profiler iterator
+ lastLocatorPropertyValueCount++;
+ }
}
- else if (! forceRequestPath)
+ else
{
// set locator page path with page/path properties relative
// to the request path
- if (locatorProperties[i].getValue() != null)
- {
- pagePath = constructRootPagePath(requestPath,
locatorProperties[i].getValue());
- }
- else
+ if (! forceRequestPath)
{
- pagePath = requestPath;
+ if (locatorProperties[i].getValue() != null)
+ {
+ pagePath = constructRootPagePath(requestPath,
locatorProperties[i].getValue());
+ }
+ else
+ {
+ pagePath = requestPath;
+ }
}
+
+ // make sure trailing page/path property is ignored
+ // and previous value is removed from profiler iterator
+ lastLocatorPropertyValueCount++;
}
}
- // append page path to locator path folders and add to paths
- Iterator locatorPathsIter = locatorPaths.iterator();
- while (locatorPathsIter.hasNext())
+ // append any generated paths to locator path set
+ if (locatorPathDepth > 0)
+ {
+ locatorPathsSet.addAll(locatorPaths);
+ }
+
+ // if end of locator path set, append locator path root to locator path
+ // set, (locator path roots not returned by profile iterator), and
+ // insert set into ordered locator paths
+ if (locatorPathDepth <= 1)
{
- StringBuffer locatorPath = (StringBuffer) locatorPathsIter.next();
- if (pagePath != null)
+ // add locator path root to set
+ locatorPathsSet.add(new StringBuffer(locatorPathRoot));
+
+ // add set to ordered and unique locator paths
+ ListIterator locatorPathsIter =
locatorPathsSet.listIterator(locatorPathsSet.size());
+ while (locatorPathsIter.hasPrevious())
{
- if (pagePath.startsWith(Folder.PATH_SEPARATOR))
- {
- locatorPath.append(pagePath.substring(1));
- }
- else
+ String locatorPath = locatorPathsIter.previous().toString();
+ if (! orderedLocatorPaths.contains(locatorPath))
{
- locatorPath.append(pagePath);
+ orderedLocatorPaths.add(0, locatorPath);
}
}
- paths.add(locatorPath.toString());
+ locatorPathsSet.clear();
+ }
+
+ // skip multiple last property values, (because profile
+ // iterator is not multiple value aware), or because last
+ // property does not constitute a valid or control property
+ for (int skip = lastLocatorPropertyValueCount; ((skip > 1) &&
(locatorIter.hasNext())); skip--)
+ {
+ locatorIter.next();
}
}
- // add default page path with no locator path to paths
+ // append page path to returned ordered locator path if required
if (pagePath != null)
{
- if (! pagePath.startsWith(Folder.PATH_SEPARATOR))
+ // trim leading path separator from page path
+ if (pagePath.startsWith(Folder.PATH_SEPARATOR))
{
- paths.add(Folder.PATH_SEPARATOR + pagePath);
+ pagePath = pagePath.substring(1);
}
- else
+
+ // append page path to locator paths
+ ListIterator locatorPathsIter = orderedLocatorPaths.listIterator();
+ while (locatorPathsIter.hasNext())
{
- paths.add(pagePath);
+ String locatorPath = (String) locatorPathsIter.next();
+ locatorPathsIter.set(locatorPath + pagePath);
}
}
- return paths;
+
+ // return ordered locator search paths
+ return orderedLocatorPaths;
}
private String constructRootPagePath(String requestPath, String pagePath)
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]