// Path: src/main/java/org/neo4j/neode/Range.java
// public class Range
// {
//     public static Range minMax( int min, int max )
//     {
//         return new Range( min, max );
//     }
// 
//     public static Range exactly( int count )
//     {
//         return new Range( count, count );
//     }
// 
//     private final int min;
//     private final int max;
// 
//     private Range( int min, int max )
//     {
//         if ( min < 0 )
//         {
//             throw new IllegalArgumentException( "Min must be greater or equal to 0" );
//         }
// 
//         if ( max < min )
//         {
//             throw new IllegalArgumentException( "Max must be greater or equal to min" );
//         }
// 
//         this.min = min;
//         this.max = max;
//     }
// 
//     public int min()
//     {
//         return min;
//     }
// 
//     public int max()
//     {
//         return max;
//     }
// 
//     public int difference()
//     {
//         return max - min;
//     }
// 
//     public boolean isInRange( int value )
//     {
//         return value >= min() && value <= max;
//     }
// 
//     public int getRandom( ProbabilityDistribution probabilityDistribution )
//     {
//         if ( difference() == 0 )
//         {
//             return min();
//         }
//         return probabilityDistribution.generateSingle( this );
//     }
// 
//     @Override
//     public String toString()
//     {
//         return "Range{" +
//                 "min=" + min +
//                 ", max=" + max +
//                 '}';
//     }
// 
//     @Override
//     public boolean equals( Object o )
//     {
//         if ( this == o )
//         {
//             return true;
//         }
//         if ( o == null || getClass() != o.getClass() )
//         {
//             return false;
//         }
// 
//         Range range = (Range) o;
// 
//         return max == range.max && min == range.min;
//     }
// 
//     @Override
//     public int hashCode()
//     {
//         int result = min;
//         result = 31 * result + max;
//         return result;
//     }
// }
// 
// Path: src/main/java/org/neo4j/neode/probabilities/ProbabilityDistribution.java
// public abstract class ProbabilityDistribution
// {
//     private static final Random RANDOM_INSTANCE = new Random();
// 
//     public static ProbabilityDistribution flatDistribution()
//     {
//         return new FlatProbabilityDistributionUnique();
//     }
// 
//     public static ProbabilityDistribution normalDistribution()
//     {
//         return new NormalProbabilityDistributionUnique();
//     }
// 
//     private final Random random;
// 
//     protected ProbabilityDistribution()
//     {
//         this.random = RANDOM_INSTANCE;
//     }
// 
//     public abstract List<Integer> generateList( Range sizeRange, Range range );
// 
//     public abstract List<Integer> generateList( int size, Range range );
// 
//     public abstract int generateSingle( Range range );
// 
//     public abstract String description();
// 
//     protected final Random random()
//     {
//         return random;
//     }
// }


import org.neo4j.neode.probabilities.ProbabilityDistribution;
import org.neo4j.graphdb.PropertyContainer;
import org.neo4j.neode.Range;
/*
 * Copyright (C) 2012 Neo Technology
 * All rights reserved
 */
package org.neo4j.neode.properties;


public abstract class PropertyValueGenerator
{
    public static PropertyValueGenerator counterBased()
    {
        return new CounterBasedStringPropertyValueGenerator();
    }

    public static PropertyValueGenerator iterationBased()
    {
        return new IterationBasedStringPropertyValueGenerator();
    }

    public static PropertyValueGenerator idBased()
    {
        return new IdBasedStringPropertyValueGenerator();
    }

    public static PropertyValueGenerator integerRange( int min, int max,
                                                       ProbabilityDistribution probabilityDistribution )
    {
// Path: src/main/java/org/neo4j/neode/Range.java
// public class Range
// {
//     public static Range minMax( int min, int max )
//     {
//         return new Range( min, max );
//     }
// 
//     public static Range exactly( int count )
//     {
//         return new Range( count, count );
//     }
// 
//     private final int min;
//     private final int max;
// 
//     private Range( int min, int max )
//     {
//         if ( min < 0 )
//         {
//             throw new IllegalArgumentException( "Min must be greater or equal to 0" );
//         }
// 
//         if ( max < min )
//         {
//             throw new IllegalArgumentException( "Max must be greater or equal to min" );
//         }
// 
//         this.min = min;
//         this.max = max;
//     }
// 
//     public int min()
//     {
//         return min;
//     }
// 
//     public int max()
//     {
//         return max;
//     }
// 
//     public int difference()
//     {
//         return max - min;
//     }
// 
//     public boolean isInRange( int value )
//     {
//         return value >= min() && value <= max;
//     }
// 
//     public int getRandom( ProbabilityDistribution probabilityDistribution )
//     {
//         if ( difference() == 0 )
//         {
//             return min();
//         }
//         return probabilityDistribution.generateSingle( this );
//     }
// 
//     @Override
//     public String toString()
//     {
//         return "Range{" +
//                 "min=" + min +
//                 ", max=" + max +
//                 '}';
//     }
// 
//     @Override
//     public boolean equals( Object o )
//     {
//         if ( this == o )
//         {
//             return true;
//         }
//         if ( o == null || getClass() != o.getClass() )
//         {
//             return false;
//         }
// 
//         Range range = (Range) o;
// 
//         return max == range.max && min == range.min;
//     }
// 
//     @Override
//     public int hashCode()
//     {
//         int result = min;
//         result = 31 * result + max;
//         return result;
//     }
// }
// 
// Path: src/main/java/org/neo4j/neode/probabilities/ProbabilityDistribution.java
// public abstract class ProbabilityDistribution
// {
//     private static final Random RANDOM_INSTANCE = new Random();
// 
//     public static ProbabilityDistribution flatDistribution()
//     {
//         return new FlatProbabilityDistributionUnique();
//     }
// 
//     public static ProbabilityDistribution normalDistribution()
//     {
//         return new NormalProbabilityDistributionUnique();
//     }
// 
//     private final Random random;
// 
//     protected ProbabilityDistribution()
//     {
//         this.random = RANDOM_INSTANCE;
//     }
// 
//     public abstract List<Integer> generateList( Range sizeRange, Range range );
// 
//     public abstract List<Integer> generateList( int size, Range range );
// 
//     public abstract int generateSingle( Range range );
// 
//     public abstract String description();
// 
//     protected final Random random()
//     {
//         return random;
//     }
// }


// Path: src/main/java/org/neo4j/neode/properties/PropertyValueGenerator.java
import org.neo4j.neode.probabilities.ProbabilityDistribution;
import org.neo4j.graphdb.PropertyContainer;
import org.neo4j.neode.Range;

/*
 * Copyright (C) 2012 Neo Technology
 * All rights reserved
 */
package org.neo4j.neode.properties;


public abstract class PropertyValueGenerator
{
    public static PropertyValueGenerator counterBased()
    {
        return new CounterBasedStringPropertyValueGenerator();
    }

    public static PropertyValueGenerator iterationBased()
    {
        return new IterationBasedStringPropertyValueGenerator();
    }

    public static PropertyValueGenerator idBased()
    {
        return new IdBasedStringPropertyValueGenerator();
    }

    public static PropertyValueGenerator integerRange( int min, int max,
                                                       ProbabilityDistribution probabilityDistribution )
    {
        return new RangeBasedIntegerPropertyValueGenerator( Range.minMax( min, max ), probabilityDistribution );