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]

Reply via email to