import java.io.*;
import java.util.*;

//This class contains everything needed to calculate the norm

class MembershipNorm
{
String edgelocation;
String clusterlocation;

 public static void main(String args[])
  {
	//Read edge and cluster lists
	EdgeReader edgereader = new EdgeReader("zachary.net");
	Map edges = edgereader.getUndirectedEdgeList();
System.out.println("Read edge file. Got undirected map.");
	ReadClusterList clusterreader = new ReadClusterList();
	Map clusterMapping = clusterreader.getClusterMap("out.txt");
System.out.println("Read cluster file. Got cluster map.");
	//Calculate membership Vectors
	MembershipCalculator mbrshpCalc = new MembershipCalculator();
	Map membershipVectors = mbrshpCalc.getMembershipInfo(edges, clusterMapping);
System.out.println("Calculating membership for given edge + cluster maps. Assumed correct from previous testing.");
	//Get norm of vectors
 	NormCalculator normCalc = new NormCalculator();
	Map membershipNorm = normCalc.getNorm(membershipVectors);
System.out.println("Calculated norm");
	//Print vertex and associated norm.
	try	{
      		//create file 
      		FileWriter fstream = new FileWriter("Membership Norm List.txt");
      		BufferedWriter out = new BufferedWriter(fstream);
		Set nodeSet = membershipNorm.keySet();
		Iterator nodeIterator = nodeSet.iterator();
    
    		//print node and associated norm
		while (nodeIterator.hasNext()) 
		{
      		Integer node = (Integer)nodeIterator.next();
      		Double norm = (Double)membershipNorm.get(node);
      		
		out.write(node + " " + norm + "\n");
System.out.println("Added following to file: " + node + " " + norm);
    		}
    	out.close();
    	}catch (Exception e){//Catch exception if any
    	System.err.println("Error: " + e.getMessage());
    	}
  }

/*

public MembershipNorm(String edgefile, String clusterfile)
{
	if (edgefile == null ) {
      throw new IllegalArgumentException("Cannot be null.");
    }
if (clusterfile == null ) {
      throw new IllegalArgumentException("Cannot be null.");
    }
    edgelocation = edgefile;
    clusterlocation = clusterfile
	calculateDirectedEdgeLists(); //calculate in and out map
	calculateUndirectedEdgeLists(); //calculate undirected map

}
*/

}