Author: sebb
Date: Sun Jan 31 11:02:40 2010
New Revision: 904998

URL: http://svn.apache.org/viewvc?rev=904998&view=rev
Log:
Simplify initTemplate() by doing our own splitting
[using amended version of ORO split() code]

Modified:
    
jakarta/jmeter/trunk/src/components/org/apache/jmeter/extractor/RegexExtractor.java

Modified: 
jakarta/jmeter/trunk/src/components/org/apache/jmeter/extractor/RegexExtractor.java
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/components/org/apache/jmeter/extractor/RegexExtractor.java?rev=904998&r1=904997&r2=904998&view=diff
==============================================================================
--- 
jakarta/jmeter/trunk/src/components/org/apache/jmeter/extractor/RegexExtractor.java
 (original)
+++ 
jakarta/jmeter/trunk/src/components/org/apache/jmeter/extractor/RegexExtractor.java
 Sun Jan 31 11:02:40 2010
@@ -20,8 +20,6 @@
 
 import java.io.Serializable;
 import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.LinkedList;
 import java.util.List;
 
 import org.apache.commons.lang.StringEscapeUtils;
@@ -41,7 +39,6 @@
 import org.apache.oro.text.regex.PatternMatcherInput;
 import org.apache.oro.text.regex.Perl5Compiler;
 import org.apache.oro.text.regex.Perl5Matcher;
-import org.apache.oro.text.regex.Util;
 
 // @see org.apache.jmeter.extractor.TestRegexExtractor for unit tests
 
@@ -83,7 +80,7 @@
 
     private static final String UNDERSCORE = "_";  // $NON-NLS-1$
 
-    private Object[] template = null;
+    private List<Object> template;
 
     /**
      * Parses the response data using regular expressions and saving the 
results
@@ -287,14 +284,14 @@
 
     private String generateResult(MatchResult match) {
         StringBuilder result = new StringBuilder();
-        for (int a = 0; a < template.length; a++) {
+        for (Object obj : template) {
             if (log.isDebugEnabled()) {
-                log.debug("RegexExtractor: Template piece #" + a + " = " + 
template[a] + " " +template[a].getClass().getSimpleName());
+                log.debug("RegexExtractor: Template piece " + obj + " (" + 
obj.getClass().getSimpleName() + ")");
             }
-            if (template[a] instanceof String) {
-                result.append(template[a]);
+            if (obj instanceof Integer) {
+                result.append(match.group(((Integer) obj).intValue()));
             } else {
-                result.append(match.group(((Integer) template[a]).intValue()));
+                result.append(obj);
             }
         }
         if (log.isDebugEnabled()) {
@@ -307,9 +304,8 @@
         if (template != null) {
             return;
         }
-        List<String> pieces = new ArrayList<String>();
         // Contains Strings and Integers
-        List<Object> combined = new LinkedList<Object>();
+        List<Object> combined = new ArrayList<Object>();
         String rawTemplate = getTemplate();
         PatternMatcher matcher = JMeterUtils.getMatcher();
         Pattern templatePattern = 
JMeterUtils.getPatternCache().getPattern("\\$(\\d+)\\$"  // $NON-NLS-1$
@@ -319,55 +315,29 @@
             log.debug("Pattern = " + templatePattern.getPattern());
             log.debug("template = " + rawTemplate);
         }
-        Util.split(pieces, matcher, templatePattern, rawTemplate);
-        PatternMatcherInput input = new PatternMatcherInput(rawTemplate);
-        boolean startsWith = isFirstElementGroup(rawTemplate);
-        if (log.isDebugEnabled()) {
-            log.debug("template split into " + pieces.size() + " pieces, 
starts with = " + startsWith);
-        }
-        if (startsWith) {
-            String dropped = pieces.remove(0);// Remove initial empty entry
-            if (log.isDebugEnabled()) {
-                log.debug("Dropped leading: '"+dropped+"'");
-            }            
-        }
-        Iterator<String> iter = pieces.iterator();
-        while (iter.hasNext()) {
-            final String next = iter.next();
-            boolean matchExists = matcher.contains(input, templatePattern);
-            if (startsWith) {
-                if (matchExists) {
-                    combined.add(new Integer(matcher.getMatch().group(1)));
-                }
-                if (next.length() > 0) {
-                    combined.add(next);
-                }
-            } else {
-                if (next.length() > 0) {
-                    combined.add(next);
-                }
-                if (matchExists) {
-                    combined.add(new Integer(matcher.getMatch().group(1)));
-                }
+        int beginOffset = 0;
+        MatchResult currentResult;
+        PatternMatcherInput pinput = new PatternMatcherInput(rawTemplate);
+        while(matcher.contains(pinput, templatePattern)) {
+            currentResult = matcher.getMatch();
+            final int beginMatch = currentResult.beginOffset(0);
+            if (beginMatch > beginOffset) { // string is not empty
+                combined.add(rawTemplate.substring(beginOffset, beginMatch));
             }
+            combined.add(new Integer(currentResult.group(1)));// add match as 
Integer
+            beginOffset = currentResult.endOffset(0);
         }
-        if (matcher.contains(input, templatePattern)) {
-            log.debug("Template does end with template pattern");
-            combined.add(new Integer(matcher.getMatch().group(1)));
-        }
-        template = combined.toArray();
-    }
-
-    private boolean isFirstElementGroup(String rawData) {
-        try {
-            Pattern pattern = 
JMeterUtils.getPatternCache().getPattern("^\\$\\d+\\$" // $NON-NLS-1$
-                    , Perl5Compiler.READ_ONLY_MASK
-                    & Perl5Compiler.SINGLELINE_MASK);
-            return (JMeterUtils.getMatcher()).contains(rawData, pattern);
-        } catch (RuntimeException e) {
-            log.error("", e);
-            return false;
+        
+        if (beginOffset < rawTemplate.length()) { // trailing string is not 
empty
+            combined.add(rawTemplate.substring(beginOffset, 
rawTemplate.length()));
+        }
+        if (log.isDebugEnabled()){
+            log.debug("Template item count: "+combined.size());
+            for(Object o : combined){
+                log.debug(o.getClass().getSimpleName()+" '"+o.toString()+"'");
+            }
         }
+        template = combined;
     }
 
     /**



---------------------------------------------------------------------
To unsubscribe, e-mail: jmeter-dev-unsubscr...@jakarta.apache.org
For additional commands, e-mail: jmeter-dev-h...@jakarta.apache.org

Reply via email to