/*
 * The MIT License
 *
 *   Copyright (c) 2015, Mahmoud Ben Hassine (mahmoud@benhassine.fr)
 *
 *   Permission is hereby granted, free of charge, to any person obtaining a copy
 *   of this software and associated documentation files (the "Software"), to deal
 *   in the Software without restriction, including without limitation the rights
 *   to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 *   copies of the Software, and to permit persons to whom the Software is
 *   furnished to do so, subject to the following conditions:
 *
 *   The above copyright notice and this permission notice shall be included in
 *   all copies or substantial portions of the Software.
 *
 *   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 *   IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 *   FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 *   AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 *   LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 *   OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 *   THE SOFTWARE.
 */
package io.github.benas.jpopulator.randomizers;

import java.util.Random;

/**
 * A randomizer that generates numbers in string representation.
 *
 * @author Nikola Milivojevic (0dziga0@gmail.com)
 */
public class NumericStringRandomizer extends GenericStringRandomizer {

    /** The words. */
    private static String[] words = new String[1];
    
    /** The random. */
    private static Random random = new Random();

    /**
     * Instantiates a new numeric string randomizer.
     */
    public NumericStringRandomizer() {
        super(addNumbersToWords(null, null));
    }

    /**
     * Instantiates a new numeric string randomizer.
     *
     * @param minNumericValue the min numeric value
     * @param maxNumericValue the max numeric value
     */
    public NumericStringRandomizer(Integer minNumericValue, Integer maxNumericValue) {
        super(addNumbersToWords(minNumericValue, maxNumericValue));
    }

    /**
     * Adds the numbers to words.
     *
     * @param minNumericValue the min numeric value
     * @param maxNumericValue the max numeric value
     * @return the string[]
     */
    private static String[] addNumbersToWords(Integer minNumericValue, Integer maxNumericValue) {
        Integer randomNum;
        if (maxNumericValue != null && minNumericValue != null) {
            if (minNumericValue > maxNumericValue) {
                throw new IllegalArgumentException("min value must be lower than max value");
            } else {
                randomNum = random.nextInt(maxNumericValue - minNumericValue + 1) + minNumericValue;
            }
        } else {
            randomNum = random.nextInt();
        }
        words[0] = randomNum.toString();
        return words;
    }

}

@@ -1542,20 +1542,16 @@
 ing%5B1%5D;%0A
-    
 %0A    /**
@@ -1992,16 +1992,22 @@
 domizer(
+final 
 Integer 
@@ -2014,32 +2014,38 @@
 minNumericValue,
+ final
  Integer maxNume
@@ -2366,16 +2366,22 @@
 ToWords(
+final 
 Integer 
@@ -2396,16 +2396,22 @@
 icValue,
+ final
  Integer

remove trailing spaces make parameters final