sebb        2004/05/29 17:30:52

  Modified:    src/functions/org/apache/jmeter/functions Tag: rel-2_0
                        RegexFunction.java
  Log:
  Bug 29202: synchronized execute(); made most instance fields into method fields
  
  Revision  Changes    Path
  No                   revision
  No                   revision
  1.20.2.2  +23 -28    
jakarta-jmeter/src/functions/org/apache/jmeter/functions/RegexFunction.java
  
  Index: RegexFunction.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-jmeter/src/functions/org/apache/jmeter/functions/RegexFunction.java,v
  retrieving revision 1.20.2.1
  retrieving revision 1.20.2.2
  diff -u -r1.20.2.1 -r1.20.2.2
  --- RegexFunction.java        20 May 2004 12:56:26 -0000      1.20.2.1
  +++ RegexFunction.java        30 May 2004 00:30:51 -0000      1.20.2.2
  @@ -42,9 +42,6 @@
   import org.apache.oro.text.regex.Perl5Matcher;
   import org.apache.oro.text.regex.Util;
   
  -/**
  - * @author mstover
  - */
   public class RegexFunction extends AbstractFunction implements Serializable
   {
       transient private static Logger log = LoggingManager.getLoggerForClass();
  @@ -52,16 +49,14 @@
       public static final String RAND = "RAND";
       public static final String KEY = "__regexFunction";
   
  -    Object[] values;
  +    private Object[] values;//Parameters are stored here
  +    
       private static Random rand = new Random();
  -    private static List desc = new LinkedList();
  -    Pattern searchPattern;
  -    Object[] template;
  -    String valueIndex, defaultValue, between;
  +    private static final List desc = new LinkedList();
  +
       private static PatternCacheLRU patternCache =
           new PatternCacheLRU(1000, new Perl5Compiler());
  -    Pattern templatePattern;
  -    private String name;
  +    private Pattern templatePattern;// initialised to the regex \$(\d+)\$
   
       private static ThreadLocal localMatcher = new ThreadLocal()
       {
  @@ -82,18 +77,21 @@
   
       public RegexFunction()
       {
  -        valueIndex = between = name = "";
           templatePattern = patternCache.getPattern("\\$(\\d+)\\$", 
Perl5Compiler.READ_ONLY_MASK);
       }
   
  -    public String execute(SampleResult previousResult, Sampler currentSampler)
  +    public synchronized String execute(SampleResult previousResult, Sampler 
currentSampler)
           throws InvalidVariableException
       {
  +     String valueIndex="", defaultValue="", between="";
  +     String name="";
  +     Pattern searchPattern;
  +     Object [] tmplt;
           try
           {
               searchPattern =
                   patternCache.getPattern(((CompoundVariable) values[0]).execute(), 
Perl5Compiler.READ_ONLY_MASK);
  -            generateTemplate(((CompoundVariable) values[1]).execute());
  +            tmplt = generateTemplate(((CompoundVariable) values[1]).execute());
   
               if (values.length > 2)
               {
  @@ -181,7 +179,7 @@
                   {
                       first = false;
                   }
  -                value.append(generateResult((MatchResult) it.next()));
  +                value.append(generateResult((MatchResult) it.next(),name, tmplt));
               }
               return value.toString();
           }
  @@ -190,7 +188,7 @@
               MatchResult result =
                   (MatchResult) collectAllMatches.get(
                       rand.nextInt(collectAllMatches.size()));
  -            return generateResult(result);
  +            return generateResult(result,name, tmplt);
           }
           else
           {
  @@ -198,7 +196,7 @@
               {
                   int index = Integer.parseInt(valueIndex) - 1;
                   MatchResult result = (MatchResult) collectAllMatches.get(index);
  -                return generateResult(result);
  +                return generateResult(result,name, tmplt);
               }
               catch (NumberFormatException e)
               {
  @@ -206,7 +204,7 @@
                   MatchResult result =
                       (MatchResult) collectAllMatches.get(
                           (int) (collectAllMatches.size() * ratio + .5) - 1);
  -                return generateResult(result);
  +                return generateResult(result,name, tmplt);
               }
               catch (IndexOutOfBoundsException e)
               {
  @@ -216,14 +214,14 @@
   
       }
   
  -    private void saveGroups(MatchResult result)
  +    private void saveGroups(MatchResult result, String namep)
       {
           if (result != null)
           {
               JMeterVariables vars = getVariables();
               for (int x = 0; x < result.groups(); x++)
               {
  -                vars.put(name + "_g" + x, result.group(x));
  +                vars.put(namep + "_g" + x, result.group(x));
               }
           }
       }
  @@ -233,9 +231,9 @@
           return desc;
       }
   
  -    private String generateResult(MatchResult match)
  +    private String generateResult(MatchResult match, String namep, Object[] 
template)
       {
  -        saveGroups(match);
  +        saveGroups(match, namep);
           StringBuffer result = new StringBuffer();
           for (int a = 0; a < template.length; a++)
           {
  @@ -249,7 +247,7 @@
               }
           }
           JMeterVariables vars = getVariables();
  -        vars.put(name, result.toString());
  +        vars.put(namep, result.toString());
           return result.toString();
       }
   
  @@ -266,12 +264,9 @@
           {
               throw new InvalidVariableException();
           }
  -
  -        //  defaultValue = URLDecoder.decode(parameters);
  -        defaultValue = "";
       }
   
  -    private void generateTemplate(String rawTemplate)
  +    private Object[] generateTemplate(String rawTemplate)
       {
           List pieces = new ArrayList();
           List combined = new LinkedList();
  @@ -304,7 +299,7 @@
           {
               combined.add(new Integer(matcher.getMatch().group(1)));
           }
  -        template = combined.toArray();
  +        return combined.toArray();
       }
   
       private boolean isFirstElementGroup(String rawData)
  
  
  

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

Reply via email to