From 263d085885df024dca9250cc03c807912b0a7662 Mon Sep 17 00:00:00 2001
From: Matthew Swift <matthew.swift@forgerock.com>
Date: Tue, 24 Apr 2012 22:33:21 +0000
Subject: [PATCH] Reformat to comply with new Checkstyle rules.

---
 opendj3/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/DataSource.java |  895 ++++++++++++++++++++++++-----------------------------------
 1 files changed, 361 insertions(+), 534 deletions(-)

diff --git a/opendj3/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/DataSource.java b/opendj3/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/DataSource.java
index 659998f..9d1b38e 100644
--- a/opendj3/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/DataSource.java
+++ b/opendj3/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/DataSource.java
@@ -6,17 +6,16 @@
  * (the "License").  You may not use this file except in compliance
  * with the License.
  *
- * You can obtain a copy of the license at
- * trunk/opendj3/legal-notices/CDDLv1_0.txt
+ * You can obtain a copy of the license at legal-notices/CDDLv1_0.txt
  * or http://forgerock.org/license/CDDLv1.0.html.
  * See the License for the specific language governing permissions
  * and limitations under the License.
  *
  * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at
- * trunk/opendj3/legal-notices/CDDLv1_0.txt.  If applicable,
- * add the following below this CDDL HEADER, with the fields enclosed
- * by brackets "[]" replaced with your own identifying information:
+ * file and include the License file at legal-notices/CDDLv1_0.txt.
+ * If applicable, add the following below this CDDL HEADER, with the
+ * fields enclosed by brackets "[]" replaced with your own identifying
+ * information:
  *      Portions Copyright [yyyy] [name of copyright owner]
  *
  * CDDL HEADER END
@@ -27,564 +26,392 @@
 
 package com.forgerock.opendj.ldap.tools;
 
-
-
 import java.io.BufferedReader;
 import java.io.FileReader;
 import java.io.IOException;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Random;
+import java.util.Set;
+
+import org.forgerock.i18n.LocalizableMessage;
 
 import com.forgerock.opendj.util.StaticUtils;
 import com.forgerock.opendj.util.Validator;
 
-import org.forgerock.i18n.LocalizableMessage;
-
-
 /**
  * A source of data for performance tools.
  */
-final class DataSource
-{
-  private static interface IDataSource
-  {
-    public IDataSource duplicate();
+final class DataSource {
+    private static interface IDataSource {
+        public IDataSource duplicate();
 
-
-
-    public Object getData();
-  }
-
-
-
-  private static class IncrementLineFileDataSource implements IDataSource
-  {
-    private final List<String> lines;
-    private int next;
-
-
-
-    public IncrementLineFileDataSource(final String file) throws IOException
-    {
-      lines = new ArrayList<String>();
-      final BufferedReader in = new BufferedReader(new FileReader(file));
-      try
-      {
-        String line;
-        while ((line = in.readLine()) != null)
-        {
-          lines.add(line);
-        }
-      }
-      finally
-      {
-        in.close();
-      }
+        public Object getData();
     }
 
+    private static class IncrementLineFileDataSource implements IDataSource {
+        private final List<String> lines;
+        private int next;
 
-
-    private IncrementLineFileDataSource(final List<String> lines)
-    {
-      this.lines = lines;
-    }
-
-
-
-    public IDataSource duplicate()
-    {
-      return new IncrementLineFileDataSource(lines);
-    }
-
-
-
-    public Object getData()
-    {
-      if (next == lines.size())
-      {
-        next = 0;
-      }
-
-      return lines.get(next++);
-    }
-
-    public static LocalizableMessage getUsage()
-    {
-      return LocalizableMessage.raw(
-        "\"inc({filename})\" Consecutive, incremental line from file");
-    }
-  }
-
-
-
-  private static class IncrementNumberDataSource implements IDataSource
-  {
-    private final int low;
-    private int next;
-    private final int high;
-
-
-
-    public IncrementNumberDataSource(final int low, final int high)
-    {
-      this.low = this.next = low;
-      this.high = high;
-    }
-
-
-
-    public IDataSource duplicate()
-    {
-      return new IncrementNumberDataSource(low, high);
-    }
-
-
-
-    public Object getData()
-    {
-      if (next == high)
-      {
-        next = low;
-        return high;
-      }
-
-      return next++;
-    }
-
-    public static LocalizableMessage getUsage()
-    {
-      return LocalizableMessage.raw(
-        "\"inc({min},{max})\" Consecutive, incremental number");
-    }
-  }
-
-
-
-  private static class RandomLineFileDataSource implements IDataSource
-  {
-    private final List<String> lines;
-    private final Random random;
-
-
-
-    public RandomLineFileDataSource(final long seed, final String file)
-        throws IOException
-    {
-      lines = new ArrayList<String>();
-      random = new Random(seed);
-      final BufferedReader in = new BufferedReader(new FileReader(file));
-      try
-      {
-        String line;
-        while ((line = in.readLine()) != null)
-        {
-          lines.add(line);
-        }
-      }
-      finally
-      {
-        in.close();
-      }
-    }
-
-
-
-    public IDataSource duplicate()
-    {
-      return this;
-    }
-
-
-
-    public Object getData()
-    {
-      return lines.get(random.nextInt(lines.size()));
-    }
-
-    public static LocalizableMessage getUsage()
-    {
-      return LocalizableMessage.raw(
-        "\"rand({filename})\" Random line from file");
-    }
-  }
-
-
-
-  private static class RandomNumberDataSource implements IDataSource
-  {
-    private final Random random;
-    private final int offset;
-    private final int range;
-
-
-
-    public RandomNumberDataSource(final long seed, final int low, final int high)
-    {
-      random = new Random(seed);
-      offset = low;
-      range = high - low;
-    }
-
-
-
-    public IDataSource duplicate()
-    {
-      // There is no state info so threads can just share one instance.
-      return this;
-    }
-
-
-
-    public Object getData()
-    {
-      return random.nextInt(range) + offset;
-    }
-
-    public static LocalizableMessage getUsage()
-    {
-      return LocalizableMessage.raw(
-          "\"rand({min},{max})\" Random number");
-    }
-  }
-
-
-
-  private static final class RandomStringDataSource implements IDataSource
-  {
-    private final Random random;
-    private final int length;
-    private final Character[] charSet;
-
-
-
-    private RandomStringDataSource(final int seed, final int length,
-        final String charSet)
-    {
-      this.length = length;
-      final Set<Character> chars = new HashSet<Character>();
-      for (int i = 0; i < charSet.length(); i++)
-      {
-        final char c = charSet.charAt(i);
-        if (c == '[')
-        {
-          i += 1;
-          final char start = charSet.charAt(i);
-          i += 2;
-          final char end = charSet.charAt(i);
-          i += 1;
-          for (int j = start; j <= end; j++)
-          {
-            chars.add((char) j);
-          }
-        }
-        else
-        {
-          chars.add(c);
-        }
-      }
-      this.charSet = chars.toArray(new Character[chars.size()]);
-      this.random = new Random(seed);
-    }
-
-
-
-    public IDataSource duplicate()
-    {
-      return this;
-    }
-
-
-
-    public Object getData()
-    {
-      final char[] str = new char[length];
-      for (int i = 0; i < length; i++)
-      {
-        str[i] = charSet[random.nextInt(charSet.length)];
-      }
-      return new String(str);
-    }
-
-    public static LocalizableMessage getUsage()
-    {
-      return LocalizableMessage.raw(
-        "\"randstr({length},<charSet>)\" Random string of specified " +
-            "length and optionally from characters in " +
-            "the charSet string. A range of character " +
-            "can be specified with [start-end] charSet notation. " +
-            "If no charSet is specified, the default charSet of " +
-            "[A-Z][a-z][0-9] will be used");
-    }
-  }
-
-
-
-  private static final class StaticDataSource implements IDataSource
-  {
-    private final Object data;
-
-
-
-    private StaticDataSource(final Object data)
-    {
-      this.data = data;
-    }
-
-
-
-    public IDataSource duplicate()
-    {
-      // There is no state info so threads can just share one instance.
-      return this;
-    }
-
-
-
-    public Object getData()
-    {
-      return data;
-    }
-  }
-
-
-
-  /**
-   * Returns Generated data from the specified data sources. Generated data will
-   * be placed in the specified data array. If the data array is null or smaller
-   * than the number of data sources, one will be allocated.
-   *
-   * @param dataSources
-   *          Data sources that will generate arguments referenced by the format
-   *          specifiers in the format string.
-   * @param data
-   *          The array where genereated data will be placed to format the
-   *          string.
-   * @return A formatted string
-   */
-  public static Object[] generateData(final DataSource[] dataSources,
-      Object[] data)
-  {
-    if (data == null || data.length < dataSources.length)
-    {
-      data = new Object[dataSources.length];
-    }
-    for (int i = 0; i < dataSources.length; i++)
-    {
-      data[i] = dataSources[i].getData();
-    }
-    return data;
-  }
-
-
-
-  /**
-   * Parses a list of source definitions into an array of data source objects. A
-   * data source is defined as follows: - rand({min},{max}) generates a random
-   * integer between the min and max. - rand({filename}) retrieves a random line
-   * from a file. - inc({min},{max}) returns incremental integer between the min
-   * and max. - inc({filename}) retrieves lines in order from a file. - {number}
-   * always return the integer as given. - {string} always return the string as
-   * given.
-   *
-   * @param sources
-   *          The list of source definitions to parse.
-   * @return The array of parsed data sources.
-   * @throws ArgumentException
-   *           If an exception occurs while parsing.
-   */
-  public static DataSource[] parse(final List<String> sources)
-      throws ArgumentException
-  {
-    Validator.ensureNotNull(sources);
-    final DataSource[] dataSources = new DataSource[sources.size()];
-    for (int i = 0; i < sources.size(); i++)
-    {
-      final String dataSourceDef = sources.get(i);
-      if (dataSourceDef.startsWith("rand(") && dataSourceDef.endsWith(")"))
-      {
-        final int lparenPos = dataSourceDef.indexOf("(");
-        final int commaPos = dataSourceDef.indexOf(",");
-        final int rparenPos = dataSourceDef.indexOf(")");
-
-        if (commaPos < 0)
-        {
-          try
-          {
-            // This is a file name
-            dataSources[i] = new DataSource(new RandomLineFileDataSource(0,
-                dataSourceDef.substring(lparenPos + 1, rparenPos)));
-          }
-          catch(IOException ioe)
-          {
-            throw new ArgumentException(LocalizableMessage.raw(
-                "Error opening file %s: %s",
-                dataSourceDef.substring(lparenPos + 1, rparenPos),
-                ioe.getMessage()), ioe);
-          }
-          catch(Exception e)
-          {
-            throw new ArgumentException(LocalizableMessage.raw(
-                "Error parsing value generator: %s", e.getMessage()), e);
-          }
-        }
-        else
-        {
-          try
-          {
-            // This range of integers
-            final int low = Integer.parseInt(dataSourceDef.substring(
-                lparenPos + 1, commaPos));
-            final int high = Integer.parseInt(dataSourceDef.substring(
-                commaPos + 1, rparenPos));
-            dataSources[i] = new DataSource(new RandomNumberDataSource(Thread
-                .currentThread().getId(), low, high));
-          }
-          catch(Exception e)
-          {
-            throw new ArgumentException(LocalizableMessage.raw(
-                "Error parsing value generator: %s", e.getMessage()), e);
-          }
+        public IncrementLineFileDataSource(final String file) throws IOException {
+            lines = new ArrayList<String>();
+            final BufferedReader in = new BufferedReader(new FileReader(file));
+            try {
+                String line;
+                while ((line = in.readLine()) != null) {
+                    lines.add(line);
+                }
+            } finally {
+                in.close();
+            }
         }
 
-      }
-      else if (dataSourceDef.startsWith("randstr(")
-          && dataSourceDef.endsWith(")"))
-      {
-        final int lparenPos = dataSourceDef.indexOf("(");
-        final int commaPos = dataSourceDef.indexOf(",");
-        final int rparenPos = dataSourceDef.indexOf(")");
-        int length;
-        String charSet;
-        try
-        {
-          if (commaPos < 0)
-          {
-            length = Integer.parseInt(dataSourceDef.substring(lparenPos + 1,
-                rparenPos));
-            charSet = "[A-Z][a-z][0-9]";
-          }
-          else
-          {
-            // length and charSet
-            length = Integer.parseInt(dataSourceDef.substring(lparenPos + 1,
-                commaPos));
-            charSet = dataSourceDef.substring(commaPos + 1, rparenPos);
-          }
-          dataSources[i] = new DataSource(new RandomStringDataSource(0, length,
-              charSet));
+        private IncrementLineFileDataSource(final List<String> lines) {
+            this.lines = lines;
         }
-        catch(Exception e)
-        {
-          throw new ArgumentException(LocalizableMessage.raw(
-              "Error parsing value generator: %s", e.getMessage()), e);
+
+        public IDataSource duplicate() {
+            return new IncrementLineFileDataSource(lines);
         }
-      }
-      else if (dataSourceDef.startsWith("inc(") && dataSourceDef.endsWith(")"))
-      {
-        final int lparenPos = dataSourceDef.indexOf("(");
-        final int commaPos = dataSourceDef.indexOf(",");
-        final int rparenPos = dataSourceDef.indexOf(")");
-        if (commaPos < 0)
-        {
-          try
-          {
-            // This is a file name
-            dataSources[i] = new DataSource(new IncrementLineFileDataSource(
-                dataSourceDef.substring(lparenPos + 1, rparenPos)));
-          }
-          catch(IOException ioe)
-          {
-            throw new ArgumentException(LocalizableMessage.raw(
-                "Error opening file %s: %s",
-                dataSourceDef.substring(lparenPos + 1, rparenPos),
-                ioe.getMessage()), ioe);
-          }
-          catch(Exception e)
-          {
-            throw new ArgumentException(LocalizableMessage.raw(
-                "Error parsing value generator: %s", e.getMessage()), e);
-          }
+
+        public Object getData() {
+            if (next == lines.size()) {
+                next = 0;
+            }
+
+            return lines.get(next++);
         }
-        else
-        {
-          try
-          {
-            final int low = Integer.parseInt(dataSourceDef.substring(
-                lparenPos + 1, commaPos));
-            final int high = Integer.parseInt(dataSourceDef.substring(
-                commaPos + 1, rparenPos));
-            dataSources[i] = new DataSource(new IncrementNumberDataSource(low,
-                high));
-          }
-          catch(Exception e)
-          {
-            throw new ArgumentException(LocalizableMessage.raw(
-                "Error parsing value generator: %s", e.getMessage()), e);
-          }
+
+        public static LocalizableMessage getUsage() {
+            return LocalizableMessage
+                    .raw("\"inc({filename})\" Consecutive, incremental line from file");
         }
-      }
-      else
-      {
-        try
-        {
-          dataSources[i] = new DataSource(new StaticDataSource(Integer
-              .parseInt(dataSourceDef)));
-        }
-        catch (final NumberFormatException nfe)
-        {
-          dataSources[i] = new DataSource(new StaticDataSource(dataSourceDef));
-        }
-      }
     }
 
-    return dataSources;
-  }
+    private static class IncrementNumberDataSource implements IDataSource {
+        private final int low;
+        private int next;
+        private final int high;
 
+        public IncrementNumberDataSource(final int low, final int high) {
+            this.low = this.next = low;
+            this.high = high;
+        }
 
-  public static LocalizableMessage getUsage()
-  {
-    StringBuilder builder = new StringBuilder();
-    builder.append(IncrementLineFileDataSource.getUsage());
-    builder.append(StaticUtils.EOL);
-    builder.append(IncrementNumberDataSource.getUsage());
-    builder.append(StaticUtils.EOL);
-    builder.append(RandomLineFileDataSource.getUsage());
-    builder.append(StaticUtils.EOL);
-    builder.append(RandomNumberDataSource.getUsage());
-    builder.append(StaticUtils.EOL);
-    builder.append(RandomStringDataSource.getUsage());
-    return LocalizableMessage.raw(builder.toString());
-  }
+        public IDataSource duplicate() {
+            return new IncrementNumberDataSource(low, high);
+        }
 
+        public Object getData() {
+            if (next == high) {
+                next = low;
+                return high;
+            }
 
+            return next++;
+        }
 
-  private final IDataSource impl;
-
-
-
-  private DataSource(final IDataSource impl)
-  {
-    this.impl = impl;
-  }
-
-
-
-  public DataSource duplicate()
-  {
-    final IDataSource dup = impl.duplicate();
-    if (dup == impl)
-    {
-      return this;
+        public static LocalizableMessage getUsage() {
+            return LocalizableMessage.raw("\"inc({min},{max})\" Consecutive, incremental number");
+        }
     }
-    else
-    {
-      return new DataSource(dup);
+
+    private static class RandomLineFileDataSource implements IDataSource {
+        private final List<String> lines;
+        private final Random random;
+
+        public RandomLineFileDataSource(final long seed, final String file) throws IOException {
+            lines = new ArrayList<String>();
+            random = new Random(seed);
+            final BufferedReader in = new BufferedReader(new FileReader(file));
+            try {
+                String line;
+                while ((line = in.readLine()) != null) {
+                    lines.add(line);
+                }
+            } finally {
+                in.close();
+            }
+        }
+
+        public IDataSource duplicate() {
+            return this;
+        }
+
+        public Object getData() {
+            return lines.get(random.nextInt(lines.size()));
+        }
+
+        public static LocalizableMessage getUsage() {
+            return LocalizableMessage.raw("\"rand({filename})\" Random line from file");
+        }
     }
-  }
 
+    private static class RandomNumberDataSource implements IDataSource {
+        private final Random random;
+        private final int offset;
+        private final int range;
 
+        public RandomNumberDataSource(final long seed, final int low, final int high) {
+            random = new Random(seed);
+            offset = low;
+            range = high - low;
+        }
 
-  public Object getData()
-  {
-    return impl.getData();
-  }
+        public IDataSource duplicate() {
+            // There is no state info so threads can just share one instance.
+            return this;
+        }
+
+        public Object getData() {
+            return random.nextInt(range) + offset;
+        }
+
+        public static LocalizableMessage getUsage() {
+            return LocalizableMessage.raw("\"rand({min},{max})\" Random number");
+        }
+    }
+
+    private static final class RandomStringDataSource implements IDataSource {
+        private final Random random;
+        private final int length;
+        private final Character[] charSet;
+
+        private RandomStringDataSource(final int seed, final int length, final String charSet) {
+            this.length = length;
+            final Set<Character> chars = new HashSet<Character>();
+            for (int i = 0; i < charSet.length(); i++) {
+                final char c = charSet.charAt(i);
+                if (c == '[') {
+                    i += 1;
+                    final char start = charSet.charAt(i);
+                    i += 2;
+                    final char end = charSet.charAt(i);
+                    i += 1;
+                    for (int j = start; j <= end; j++) {
+                        chars.add((char) j);
+                    }
+                } else {
+                    chars.add(c);
+                }
+            }
+            this.charSet = chars.toArray(new Character[chars.size()]);
+            this.random = new Random(seed);
+        }
+
+        public IDataSource duplicate() {
+            return this;
+        }
+
+        public Object getData() {
+            final char[] str = new char[length];
+            for (int i = 0; i < length; i++) {
+                str[i] = charSet[random.nextInt(charSet.length)];
+            }
+            return new String(str);
+        }
+
+        public static LocalizableMessage getUsage() {
+            return LocalizableMessage
+                    .raw("\"randstr({length},<charSet>)\" Random string of specified "
+                            + "length and optionally from characters in "
+                            + "the charSet string. A range of character "
+                            + "can be specified with [start-end] charSet notation. "
+                            + "If no charSet is specified, the default charSet of "
+                            + "[A-Z][a-z][0-9] will be used");
+        }
+    }
+
+    private static final class StaticDataSource implements IDataSource {
+        private final Object data;
+
+        private StaticDataSource(final Object data) {
+            this.data = data;
+        }
+
+        public IDataSource duplicate() {
+            // There is no state info so threads can just share one instance.
+            return this;
+        }
+
+        public Object getData() {
+            return data;
+        }
+    }
+
+    /**
+     * Returns Generated data from the specified data sources. Generated data
+     * will be placed in the specified data array. If the data array is null or
+     * smaller than the number of data sources, one will be allocated.
+     *
+     * @param dataSources
+     *            Data sources that will generate arguments referenced by the
+     *            format specifiers in the format string.
+     * @param data
+     *            The array where genereated data will be placed to format the
+     *            string.
+     * @return A formatted string
+     */
+    public static Object[] generateData(final DataSource[] dataSources, Object[] data) {
+        if (data == null || data.length < dataSources.length) {
+            data = new Object[dataSources.length];
+        }
+        for (int i = 0; i < dataSources.length; i++) {
+            data[i] = dataSources[i].getData();
+        }
+        return data;
+    }
+
+    /**
+     * Parses a list of source definitions into an array of data source objects.
+     * A data source is defined as follows: - rand({min},{max}) generates a
+     * random integer between the min and max. - rand({filename}) retrieves a
+     * random line from a file. - inc({min},{max}) returns incremental integer
+     * between the min and max. - inc({filename}) retrieves lines in order from
+     * a file. - {number} always return the integer as given. - {string} always
+     * return the string as given.
+     *
+     * @param sources
+     *            The list of source definitions to parse.
+     * @return The array of parsed data sources.
+     * @throws ArgumentException
+     *             If an exception occurs while parsing.
+     */
+    public static DataSource[] parse(final List<String> sources) throws ArgumentException {
+        Validator.ensureNotNull(sources);
+        final DataSource[] dataSources = new DataSource[sources.size()];
+        for (int i = 0; i < sources.size(); i++) {
+            final String dataSourceDef = sources.get(i);
+            if (dataSourceDef.startsWith("rand(") && dataSourceDef.endsWith(")")) {
+                final int lparenPos = dataSourceDef.indexOf("(");
+                final int commaPos = dataSourceDef.indexOf(",");
+                final int rparenPos = dataSourceDef.indexOf(")");
+
+                if (commaPos < 0) {
+                    try {
+                        // This is a file name
+                        dataSources[i] =
+                                new DataSource(new RandomLineFileDataSource(0, dataSourceDef
+                                        .substring(lparenPos + 1, rparenPos)));
+                    } catch (IOException ioe) {
+                        throw new ArgumentException(LocalizableMessage.raw(
+                                "Error opening file %s: %s", dataSourceDef.substring(lparenPos + 1,
+                                        rparenPos), ioe.getMessage()), ioe);
+                    } catch (Exception e) {
+                        throw new ArgumentException(LocalizableMessage.raw(
+                                "Error parsing value generator: %s", e.getMessage()), e);
+                    }
+                } else {
+                    try {
+                        // This range of integers
+                        final int low =
+                                Integer.parseInt(dataSourceDef.substring(lparenPos + 1, commaPos));
+                        final int high =
+                                Integer.parseInt(dataSourceDef.substring(commaPos + 1, rparenPos));
+                        dataSources[i] =
+                                new DataSource(new RandomNumberDataSource(Thread.currentThread()
+                                        .getId(), low, high));
+                    } catch (Exception e) {
+                        throw new ArgumentException(LocalizableMessage.raw(
+                                "Error parsing value generator: %s", e.getMessage()), e);
+                    }
+                }
+
+            } else if (dataSourceDef.startsWith("randstr(") && dataSourceDef.endsWith(")")) {
+                final int lparenPos = dataSourceDef.indexOf("(");
+                final int commaPos = dataSourceDef.indexOf(",");
+                final int rparenPos = dataSourceDef.indexOf(")");
+                int length;
+                String charSet;
+                try {
+                    if (commaPos < 0) {
+                        length =
+                                Integer.parseInt(dataSourceDef.substring(lparenPos + 1, rparenPos));
+                        charSet = "[A-Z][a-z][0-9]";
+                    } else {
+                        // length and charSet
+                        length = Integer.parseInt(dataSourceDef.substring(lparenPos + 1, commaPos));
+                        charSet = dataSourceDef.substring(commaPos + 1, rparenPos);
+                    }
+                    dataSources[i] = new DataSource(new RandomStringDataSource(0, length, charSet));
+                } catch (Exception e) {
+                    throw new ArgumentException(LocalizableMessage.raw(
+                            "Error parsing value generator: %s", e.getMessage()), e);
+                }
+            } else if (dataSourceDef.startsWith("inc(") && dataSourceDef.endsWith(")")) {
+                final int lparenPos = dataSourceDef.indexOf("(");
+                final int commaPos = dataSourceDef.indexOf(",");
+                final int rparenPos = dataSourceDef.indexOf(")");
+                if (commaPos < 0) {
+                    try {
+                        // This is a file name
+                        dataSources[i] =
+                                new DataSource(new IncrementLineFileDataSource(dataSourceDef
+                                        .substring(lparenPos + 1, rparenPos)));
+                    } catch (IOException ioe) {
+                        throw new ArgumentException(LocalizableMessage.raw(
+                                "Error opening file %s: %s", dataSourceDef.substring(lparenPos + 1,
+                                        rparenPos), ioe.getMessage()), ioe);
+                    } catch (Exception e) {
+                        throw new ArgumentException(LocalizableMessage.raw(
+                                "Error parsing value generator: %s", e.getMessage()), e);
+                    }
+                } else {
+                    try {
+                        final int low =
+                                Integer.parseInt(dataSourceDef.substring(lparenPos + 1, commaPos));
+                        final int high =
+                                Integer.parseInt(dataSourceDef.substring(commaPos + 1, rparenPos));
+                        dataSources[i] = new DataSource(new IncrementNumberDataSource(low, high));
+                    } catch (Exception e) {
+                        throw new ArgumentException(LocalizableMessage.raw(
+                                "Error parsing value generator: %s", e.getMessage()), e);
+                    }
+                }
+            } else {
+                try {
+                    dataSources[i] =
+                            new DataSource(new StaticDataSource(Integer.parseInt(dataSourceDef)));
+                } catch (final NumberFormatException nfe) {
+                    dataSources[i] = new DataSource(new StaticDataSource(dataSourceDef));
+                }
+            }
+        }
+
+        return dataSources;
+    }
+
+    public static LocalizableMessage getUsage() {
+        StringBuilder builder = new StringBuilder();
+        builder.append(IncrementLineFileDataSource.getUsage());
+        builder.append(StaticUtils.EOL);
+        builder.append(IncrementNumberDataSource.getUsage());
+        builder.append(StaticUtils.EOL);
+        builder.append(RandomLineFileDataSource.getUsage());
+        builder.append(StaticUtils.EOL);
+        builder.append(RandomNumberDataSource.getUsage());
+        builder.append(StaticUtils.EOL);
+        builder.append(RandomStringDataSource.getUsage());
+        return LocalizableMessage.raw(builder.toString());
+    }
+
+    private final IDataSource impl;
+
+    private DataSource(final IDataSource impl) {
+        this.impl = impl;
+    }
+
+    public DataSource duplicate() {
+        final IDataSource dup = impl.duplicate();
+        if (dup == impl) {
+            return this;
+        } else {
+            return new DataSource(dup);
+        }
+    }
+
+    public Object getData() {
+        return impl.getData();
+    }
 }

--
Gitblit v1.10.0