Author: sebb
Date: Fri Apr 28 17:18:11 2006
New Revision: 398043

URL: http://svn.apache.org/viewcvs?rev=398043&view=rev
Log:
Allow Counter value to be formatted

Modified:
    
jakarta/jmeter/branches/rel-2-1/src/components/org/apache/jmeter/modifiers/CounterConfig.java
    
jakarta/jmeter/branches/rel-2-1/src/components/org/apache/jmeter/modifiers/gui/CounterConfigGui.java
    
jakarta/jmeter/branches/rel-2-1/src/core/org/apache/jmeter/resources/messages.properties
    jakarta/jmeter/branches/rel-2-1/xdocs/changes.xml
    jakarta/jmeter/branches/rel-2-1/xdocs/images/screenshots/counter.png
    jakarta/jmeter/branches/rel-2-1/xdocs/usermanual/component_reference.xml

Modified: 
jakarta/jmeter/branches/rel-2-1/src/components/org/apache/jmeter/modifiers/CounterConfig.java
URL: 
http://svn.apache.org/viewcvs/jakarta/jmeter/branches/rel-2-1/src/components/org/apache/jmeter/modifiers/CounterConfig.java?rev=398043&r1=398042&r2=398043&view=diff
==============================================================================
--- 
jakarta/jmeter/branches/rel-2-1/src/components/org/apache/jmeter/modifiers/CounterConfig.java
 (original)
+++ 
jakarta/jmeter/branches/rel-2-1/src/components/org/apache/jmeter/modifiers/CounterConfig.java
 Fri Apr 28 17:18:11 2006
@@ -18,6 +18,7 @@
 package org.apache.jmeter.modifiers;
 
 import java.io.Serializable;
+import java.text.DecimalFormat;
 
 import org.apache.jmeter.engine.event.LoopIterationEvent;
 import org.apache.jmeter.engine.event.LoopIterationListener;
@@ -27,26 +28,34 @@
 import org.apache.jmeter.testelement.property.LongProperty;
 import org.apache.jmeter.threads.JMeterContextService;
 import org.apache.jmeter.threads.JMeterVariables;
-import org.apache.jorphan.logging.LoggingManager;
-import org.apache.log.Logger;
 
 /**
- * @version $Revision$
+ * Provides a counter per-thread/user or globally
+ * The long value can be 
  */
 public class CounterConfig extends AbstractTestElement implements 
Serializable, LoopIterationListener, NoThreadClone {
-       private static Logger log = LoggingManager.getLoggerForClass();
 
-       public final static String START = "CounterConfig.start";
+       public final static String START = "CounterConfig.start"; // $NON-NLS-1$
 
-       public final static String END = "CounterConfig.end";
+       public final static String END = "CounterConfig.end"; // $NON-NLS-1$
 
-       public final static String INCREMENT = "CounterConfig.incr";
+       public final static String INCREMENT = "CounterConfig.incr"; // 
$NON-NLS-1$
 
-       public final static String PER_USER = "CounterConfig.per_user";
+       private final static String FORMAT = "CounterConfig.format"; // 
$NON-NLS-1$
 
-       public final static String VAR_NAME = "CounterConfig.name";
+    public final static String PER_USER = "CounterConfig.per_user"; // 
$NON-NLS-1$
 
-       private long globalCounter = -1;
+       public final static String VAR_NAME = "CounterConfig.name"; // 
$NON-NLS-1$
+
+       // This class is not cloned per thread, so this is shared
+       private long globalCounter = Long.MIN_VALUE;
+    
+    // Used for per-thread/user numbers
+    private ThreadLocal perTheadNumber = new ThreadLocal() {
+        protected synchronized Object initialValue() {
+            return new Long(getStart());
+        }
+    };
 
        /**
         * @see LoopIterationListener#iterationStart(LoopIterationEvent)
@@ -56,30 +65,36 @@
                JMeterVariables variables = 
JMeterContextService.getContext().getVariables();
                long start = getStart(), end = getEnd(), increment = 
getIncrement();
                if (!isPerUser()) {
-                       if (globalCounter == -1 || globalCounter > end) {
+                       if (globalCounter == Long.MIN_VALUE || globalCounter > 
end) {
                                globalCounter = start;
                        }
-                       variables.put(getVarName(), 
Long.toString(globalCounter));
+                       variables.put(getVarName(), 
formatNumber(globalCounter));
                        globalCounter += increment;
                } else {
-                       String value = variables.get(getVarName());
-                       if (value == null) {
-                               variables.put(getVarName(), 
Long.toString(start));
-                       } else {
-                               try {
-                                       long current = Long.parseLong(value);
-                                       current += increment;
-                                       if (current > end) {
-                                               current = start;
-                                       }
-                                       variables.put(getVarName(), 
Long.toString(current));
-                               } catch (NumberFormatException e) {
-                                       log.info("Bad number in Counter 
config", e);
-                               }
-                       }
+            long current = ((Long) perTheadNumber.get()).longValue();
+            variables.put(getVarName(), formatNumber(current));
+            current += increment;
+            if (current > end) {
+                current = start;
+            }
+            perTheadNumber.set(new Long(current));
                }
        }
 
+    // Use format to create number; if it fails, use the default
+    private String formatNumber(long value){
+        String format = getFormat();
+        if (format != null && format.length() > 0) {
+            try {
+                DecimalFormat myFormatter = new DecimalFormat(format);
+                return myFormatter.format(value);
+            } catch (NumberFormatException ignored) {
+            } catch (IllegalArgumentException ignored) {
+            }
+        }
+        return Long.toString(value);
+    }
+    
        public void setStart(long start) {
                setProperty(new LongProperty(START, start));
        }
@@ -131,4 +146,12 @@
        public String getVarName() {
                return getPropertyAsString(VAR_NAME);
        }
+
+    public void setFormat(String format) {
+        setProperty(FORMAT, format);
+    }
+
+    public String getFormat() {
+        return getPropertyAsString(FORMAT);
+    }
 }

Modified: 
jakarta/jmeter/branches/rel-2-1/src/components/org/apache/jmeter/modifiers/gui/CounterConfigGui.java
URL: 
http://svn.apache.org/viewcvs/jakarta/jmeter/branches/rel-2-1/src/components/org/apache/jmeter/modifiers/gui/CounterConfigGui.java?rev=398043&r1=398042&r2=398043&view=diff
==============================================================================
--- 
jakarta/jmeter/branches/rel-2-1/src/components/org/apache/jmeter/modifiers/gui/CounterConfigGui.java
 (original)
+++ 
jakarta/jmeter/branches/rel-2-1/src/components/org/apache/jmeter/modifiers/gui/CounterConfigGui.java
 Fri Apr 28 17:18:11 2006
@@ -1,6 +1,5 @@
-// $Header$
 /*
- * Copyright 2002-2004 The Apache Software Foundation.
+ * Copyright 2002-2004,2006 The Apache Software Foundation.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -31,7 +30,7 @@
  * @version $Revision$ on $Date$
  */
 public class CounterConfigGui extends AbstractPreProcessorGui {
-       private JLabeledTextField startField, incrField, endField, varNameField;
+       private JLabeledTextField startField, incrField, endField, 
varNameField, formatField;
 
        private JCheckBox perUserField;
 
@@ -68,6 +67,7 @@
                        }
                        config.setIncrement(incrField.getText());
                        config.setVarName(varNameField.getText());
+            config.setFormat(formatField.getText());
                        config.setIsPerUser(perUserField.isSelected());
                }
                super.configureTestElement(c);
@@ -79,6 +79,7 @@
                
startField.setText(config.getPropertyAsString(CounterConfig.START));
                endField.setText(config.getPropertyAsString(CounterConfig.END));
                
incrField.setText(config.getPropertyAsString(CounterConfig.INCREMENT));
+        formatField.setText(config.getFormat());
                varNameField.setText(config.getVarName());
                perUserField.setSelected(config.isPerUser());
        }
@@ -93,12 +94,14 @@
                incrField = new 
JLabeledTextField(JMeterUtils.getResString("increment"));
                endField = new 
JLabeledTextField(JMeterUtils.getResString("max"));
                varNameField = new 
JLabeledTextField(JMeterUtils.getResString("var_name"));
+        formatField = new 
JLabeledTextField(JMeterUtils.getResString("format"));
                perUserField = new 
JCheckBox(JMeterUtils.getResString("counter_per_user"));
 
                add(makeTitlePanel());
                add(startField);
                add(incrField);
                add(endField);
+        add(formatField);
                add(varNameField);
                add(perUserField);
        }

Modified: 
jakarta/jmeter/branches/rel-2-1/src/core/org/apache/jmeter/resources/messages.properties
URL: 
http://svn.apache.org/viewcvs/jakarta/jmeter/branches/rel-2-1/src/core/org/apache/jmeter/resources/messages.properties?rev=398043&r1=398042&r2=398043&view=diff
==============================================================================
--- 
jakarta/jmeter/branches/rel-2-1/src/core/org/apache/jmeter/resources/messages.properties
 (original)
+++ 
jakarta/jmeter/branches/rel-2-1/src/core/org/apache/jmeter/resources/messages.properties
 Fri Apr 28 17:18:11 2006
@@ -188,6 +188,7 @@
 foreach_input=Input variable prefix
 foreach_output=Output variable name
 foreach_use_separator=Add "_" before number ?
+format=Number format
 fr=French
 ftp_sample_title=FTP Request Defaults
 ftp_testing_title=FTP Request

Modified: jakarta/jmeter/branches/rel-2-1/xdocs/changes.xml
URL: 
http://svn.apache.org/viewcvs/jakarta/jmeter/branches/rel-2-1/xdocs/changes.xml?rev=398043&r1=398042&r2=398043&view=diff
==============================================================================
--- jakarta/jmeter/branches/rel-2-1/xdocs/changes.xml (original)
+++ jakarta/jmeter/branches/rel-2-1/xdocs/changes.xml Fri Apr 28 17:18:11 2006
@@ -84,6 +84,7 @@
 <li>Bug 26136 - allow configuration of local address</li>
 <li>Expand tree by default when loading a test plan - can be disabled by 
setting property onload.expandtree=false</li>
 <li>Bug 11843 - URL Rewriter can now cache the session id</li>
+<li>Counter Pre-Processor now supports formatted numbers</li>
 </ul>
 
 <h4>Bug fixes:</h4>

Modified: jakarta/jmeter/branches/rel-2-1/xdocs/images/screenshots/counter.png
URL: 
http://svn.apache.org/viewcvs/jakarta/jmeter/branches/rel-2-1/xdocs/images/screenshots/counter.png?rev=398043&r1=398042&r2=398043&view=diff
==============================================================================
Binary files - no diff available.

Modified: 
jakarta/jmeter/branches/rel-2-1/xdocs/usermanual/component_reference.xml
URL: 
http://svn.apache.org/viewcvs/jakarta/jmeter/branches/rel-2-1/xdocs/usermanual/component_reference.xml?rev=398043&r1=398042&r2=398043&view=diff
==============================================================================
--- jakarta/jmeter/branches/rel-2-1/xdocs/usermanual/component_reference.xml 
(original)
+++ jakarta/jmeter/branches/rel-2-1/xdocs/usermanual/component_reference.xml 
Fri Apr 28 17:18:11 2006
@@ -2657,6 +2657,11 @@
         <property name="Increment" required="Yes">How much to increment the 
counter by after each
         iteration.</property>
         <property name="Maximum" required="Yes">If the counter exceeds the 
maximum, then it is reset to the Start value.</property>
+        <property name="Format" required="No">Optional format, e.g. 000 will 
format as 001, 002 etc. 
+        This is passed to DecimalFormat, so any valid formats can be used.
+        If there is a problem interpreting the format, then it is ignored.
+       [The default format is generated using Long.toString()]
+        </property>
         <property name="Reference Name" required="Yes">This controls how you 
refer to this value in other elements.  Syntax is
         as in <a href="functions.html">user-defined values</a>: 
<code>$(reference_name}</code>.</property>
         <property name="Track Counter Independently for each User" 
required="No">In other words, is this a global counter, or does each user get 
their



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

Reply via email to