// Path: src/main/java/org/neo4j/neode/interfaces/SetNumberOfNodes.java
// public interface SetNumberOfNodes
// {
//     SetRelationshipInfo numberOfTargetNodes( int numberOfNodes );
// 
//     SetRelationshipInfo numberOfTargetNodes( Range numberOfNodes );
// 
//     SetRelationshipInfo numberOfTargetNodes( Range numberOfNodes, ProbabilityDistribution probabilityDistribution );
// }
// 
// Path: src/main/java/org/neo4j/neode/interfaces/SetRelationshipConstraints.java
// public interface SetRelationshipConstraints
// {
//     TargetNodesStrategy relationshipConstraints( Range cardinality,
//                                                  ProbabilityDistribution probabilityDistribution,
//                                                  RelationshipUniqueness relationshipUniqueness );
// 
//     TargetNodesStrategy relationshipConstraints( Range cardinality,
//                                                  RelationshipUniqueness relationshipUniqueness );
// 
//     TargetNodesStrategy relationshipConstraints( Range cardinality,
//                                                  ProbabilityDistribution probabilityDistribution );
// 
//     TargetNodesStrategy relationshipConstraints( Range cardinality );
// 
//     TargetNodesStrategy relationshipConstraints( ProbabilityDistribution probabilityDistribution,
//                                                  RelationshipUniqueness relationshipUniqueness );
// 
//     TargetNodesStrategy relationshipConstraints( RelationshipUniqueness relationshipUniqueness );
// 
//     TargetNodesStrategy relationshipConstraints( ProbabilityDistribution probabilityDistribution );
// 
//     TargetNodesStrategy exactlyOneRelationship();
// 
// }
// 
// Path: src/main/java/org/neo4j/neode/interfaces/SetRelationshipInfo.java
// public interface SetRelationshipInfo
// {
//     SetRelationshipConstraints relationship( RelationshipSpecification relationshipSpecification, Direction direction );
// 
//     SetRelationshipConstraints relationship( RelationshipSpecification relationshipSpecification );
// }
// 
// 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/probabilities/ProbabilityDistribution.java
// public static ProbabilityDistribution flatDistribution()
// {
//     return new FlatProbabilityDistributionUnique();
// }


import org.neo4j.graphdb.Direction;
import org.neo4j.neode.interfaces.SetNumberOfNodes;
import org.neo4j.neode.interfaces.SetRelationshipConstraints;
import org.neo4j.neode.interfaces.SetRelationshipInfo;
import org.neo4j.neode.probabilities.ProbabilityDistribution;
import static org.neo4j.neode.probabilities.ProbabilityDistribution.flatDistribution;
/*
 * Copyright (C) 2012 Neo Technology
 * All rights reserved
 */
package org.neo4j.neode;




public class TargetNodesStrategyBuilder implements SetNumberOfNodes, SetRelationshipInfo, SetRelationshipConstraints
{
    private final TargetNodesSource targetNodesSource;
    private Range nodeRange;
    private ProbabilityDistribution targetNodesProbabilityDistribution;
    private RelationshipInfo relationshipInfo;

    TargetNodesStrategyBuilder( TargetNodesSource targetNodesSource )
    {
        this.targetNodesSource = targetNodesSource;
    }

    @Override
    public SetRelationshipInfo numberOfTargetNodes( int numberOfNodes )
    {
        nodeRange = Range.exactly( numberOfNodes );
        this.targetNodesProbabilityDistribution = flatDistribution();
        return this;
    }

    @Override
    public SetRelationshipInfo numberOfTargetNodes( Range numberOfNodes )
    {
        nodeRange = numberOfNodes;
        this.targetNodesProbabilityDistribution = flatDistribution();
        return this;
    }

    @Override
// Path: src/main/java/org/neo4j/neode/interfaces/SetNumberOfNodes.java
// public interface SetNumberOfNodes
// {
//     SetRelationshipInfo numberOfTargetNodes( int numberOfNodes );
// 
//     SetRelationshipInfo numberOfTargetNodes( Range numberOfNodes );
// 
//     SetRelationshipInfo numberOfTargetNodes( Range numberOfNodes, ProbabilityDistribution probabilityDistribution );
// }
// 
// Path: src/main/java/org/neo4j/neode/interfaces/SetRelationshipConstraints.java
// public interface SetRelationshipConstraints
// {
//     TargetNodesStrategy relationshipConstraints( Range cardinality,
//                                                  ProbabilityDistribution probabilityDistribution,
//                                                  RelationshipUniqueness relationshipUniqueness );
// 
//     TargetNodesStrategy relationshipConstraints( Range cardinality,
//                                                  RelationshipUniqueness relationshipUniqueness );
// 
//     TargetNodesStrategy relationshipConstraints( Range cardinality,
//                                                  ProbabilityDistribution probabilityDistribution );
// 
//     TargetNodesStrategy relationshipConstraints( Range cardinality );
// 
//     TargetNodesStrategy relationshipConstraints( ProbabilityDistribution probabilityDistribution,
//                                                  RelationshipUniqueness relationshipUniqueness );
// 
//     TargetNodesStrategy relationshipConstraints( RelationshipUniqueness relationshipUniqueness );
// 
//     TargetNodesStrategy relationshipConstraints( ProbabilityDistribution probabilityDistribution );
// 
//     TargetNodesStrategy exactlyOneRelationship();
// 
// }
// 
// Path: src/main/java/org/neo4j/neode/interfaces/SetRelationshipInfo.java
// public interface SetRelationshipInfo
// {
//     SetRelationshipConstraints relationship( RelationshipSpecification relationshipSpecification, Direction direction );
// 
//     SetRelationshipConstraints relationship( RelationshipSpecification relationshipSpecification );
// }
// 
// 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/probabilities/ProbabilityDistribution.java
// public static ProbabilityDistribution flatDistribution()
// {
//     return new FlatProbabilityDistributionUnique();
// }


// Path: src/main/java/org/neo4j/neode/TargetNodesStrategyBuilder.java
import org.neo4j.graphdb.Direction;
import org.neo4j.neode.interfaces.SetNumberOfNodes;
import org.neo4j.neode.interfaces.SetRelationshipConstraints;
import org.neo4j.neode.interfaces.SetRelationshipInfo;
import org.neo4j.neode.probabilities.ProbabilityDistribution;
import static org.neo4j.neode.probabilities.ProbabilityDistribution.flatDistribution;

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




public class TargetNodesStrategyBuilder implements SetNumberOfNodes, SetRelationshipInfo, SetRelationshipConstraints
{
    private final TargetNodesSource targetNodesSource;
    private Range nodeRange;
    private ProbabilityDistribution targetNodesProbabilityDistribution;
    private RelationshipInfo relationshipInfo;

    TargetNodesStrategyBuilder( TargetNodesSource targetNodesSource )
    {
        this.targetNodesSource = targetNodesSource;
    }

    @Override
    public SetRelationshipInfo numberOfTargetNodes( int numberOfNodes )
    {
        nodeRange = Range.exactly( numberOfNodes );
        this.targetNodesProbabilityDistribution = flatDistribution();
        return this;
    }

    @Override
    public SetRelationshipInfo numberOfTargetNodes( Range numberOfNodes )
    {
        nodeRange = numberOfNodes;
        this.targetNodesProbabilityDistribution = flatDistribution();
        return this;
    }

    @Override
    public SetRelationshipInfo numberOfTargetNodes( Range numberOfNodes, ProbabilityDistribution