package winter2008.a2.code;

import jret.util.random.*;
import java.util.EnumSet;
import jret.cluster.container.Cluster;
import jret.graph.container.Graph;
import jret.graph.container.GraphUnloaderToRSF;
import jret.util.random.impl.PowerLawGraphGenerator;

public class GraphGenerator { 
    
        private PowerLawGraphGenerator _rnd;
        private String _outputFileName;
        private int _numberOfEntities;
        private final double ALPHA = -2.5;
        public GraphGenerator (int numberOfEntities,int maxDegree, boolean isConnected ,String outputFileName) {
            
            EnumSet<GraphProperty> gp = EnumSet.of(GraphProperty.DIRECTED);
            EnumSet<EdgeDistributionProperty> ep = EnumSet.of(EdgeDistributionProperty.RANDOM);
            EnumSet<PostBuildProperty> bp =EnumSet.noneOf(PostBuildProperty.class);
            
            if (isConnected)
                bp = EnumSet.of(PostBuildProperty.STAR_GRAPH_CONNECTION);
            
             _rnd = new PowerLawGraphGenerator(gp, ep, bp, maxDegree,ALPHA);
             _outputFileName = outputFileName;
             _numberOfEntities = numberOfEntities;
    }
        
     public void createGraph() throws Exception{
         Cluster cluster = new Cluster(_numberOfEntities);
         Graph graph = _rnd.construct(cluster);
         new GraphUnloaderToRSF(graph, _outputFileName,false,"depend");
     }        
}