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]