weaver      2004/09/10 14:39:02

  Modified:    components/page-manager/src/java/org/apache/jetspeed/page/document
                        NodeSetImpl.java
  Log:
  Optimize regex filtering by storing previoulsy compiled patterns.
  
  Revision  Changes    Path
  1.3       +45 -3     
jakarta-jetspeed-2/components/page-manager/src/java/org/apache/jetspeed/page/document/NodeSetImpl.java
  
  Index: NodeSetImpl.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-jetspeed-2/components/page-manager/src/java/org/apache/jetspeed/page/document/NodeSetImpl.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- NodeSetImpl.java  9 Sep 2004 19:04:02 -0000       1.2
  +++ NodeSetImpl.java  10 Sep 2004 21:39:02 -0000      1.3
  @@ -20,6 +20,7 @@
   import java.util.Iterator;
   import java.util.Map;
   import java.util.TreeMap;
  +import java.util.regex.Pattern;
   
   /**
    * <p>
  @@ -39,6 +40,7 @@
       private Map subsets;
       private String resolveToPath;
       private Comparator comparator;
  +    protected static final Map patternCache = new HashMap();
   
       public NodeSetImpl( String resolveToPath )
       {
  @@ -187,12 +189,13 @@
       {
           Iterator allNodes = nodes.entrySet().iterator();
           NodeSetImpl subset = new NodeSetImpl(resolveToPath, comparator);
  +        final Pattern pattern = getPattern(regex);
           while (allNodes.hasNext())
           {
               Map.Entry entry = (Map.Entry) allNodes.next();
               Node node = (Node) entry.getValue();
               String key = (String) entry.getKey();
  -            if (!key.matches(regex) && !node.getName().matches(regex))
  +            if (!matches(pattern, key) && !matches(pattern, node.getName()))
               {
                   subset.add(node);
               }
  @@ -214,17 +217,56 @@
       {
           Iterator allNodes = nodes.entrySet().iterator();
           NodeSetImpl subset = new NodeSetImpl(resolveToPath, comparator);
  +        final Pattern pattern = getPattern(regex);
           while (allNodes.hasNext())
           {
               Map.Entry entry = (Map.Entry) allNodes.next();
               String key = (String) entry.getKey();
               Node node = (Node) entry.getValue();
  -            if (key.matches(regex) || node.getName().matches(regex))
  +            if (matches(pattern, key) || matches(pattern, node.getName()))
               {
                   subset.add(node);
               }
           }
           
           return subset;
  +    }
  +    
  +    /**
  +     * 
  +     * <p>
  +     * matches
  +     * </p>
  +     *
  +     * @param pattern
  +     * @param value
  +     * @return
  +     */
  +    protected final boolean matches(Pattern pattern, String value)
  +    {
  +        return pattern.matcher(value).matches();
  +    }
  +    
  +    /**
  +     * 
  +     * <p>
  +     * getPattern
  +     * </p>
  +     *
  +     * @param regex
  +     * @return
  +     */
  +    protected final Pattern getPattern(String regex)
  +    {        
  +        if(patternCache.containsKey(regex))
  +        {
  +            return (Pattern)patternCache.get(regex);
  +        }
  +        else
  +        {
  +            Pattern pattern = Pattern.compile(regex);
  +            patternCache.put(regex, pattern);
  +            return pattern;
  +        }       
       }
   }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to