package edu.ucsb.jpregel.system;
import api.MasterGraphMaker;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import static java.lang.System.err;
import static java.lang.System.exit;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
*
* @author Pete Cappello
*/
public class MasterGraphMakerG1 implements MasterGraphMaker
{
@Override
public void make(FileSystem fileSystem, int numWorkers)
{
BufferedReader bufferedReader = null;
String line = null;
try
{
bufferedReader = fileSystem.getFileInputStream();
if ((line = bufferedReader.readLine()) == null)
{
err.println("WorkerFileWriter1: Error: input file has no lines.");
exit(1);
}
} catch (IOException ex)
{
System.out.println("Error reading lines from file" + ex.getLocalizedMessage());
}
int numV = Integer.parseInt(line);
int vertexNum = 1;
for (int fileNum = 1; fileNum <= numWorkers; fileNum++)
{
BufferedWriter bufferedWriter = fileSystem.getWorkerInputFileOutputStream(fileNum);
int linesPerFile = numV / numWorkers;
if (fileNum <= numV % numWorkers)
{
linesPerFile++;
}
for (int lineNum = 0; lineNum < linesPerFile; lineNum++)
{
// create line for vertex whose number is vertexNum
StringBuilder string = new StringBuilder();
string.append(vertexNum).append(' ');
for (int targetVertexNum = vertexNum + 1; targetVertexNum <= numV; targetVertexNum++)
{
string.append(targetVertexNum).append(' ');
int value = (targetVertexNum == vertexNum + 1) ? -1 : 1;
string.append(value).append(' ');
}
String lines = new String(string);
try
{
// append line to output file
bufferedWriter.write(lines);
bufferedWriter.newLine();
} catch (IOException ex)
{
System.out.println("Error writing lines to file: " + ex.getLocalizedMessage());
}
vertexNum++;
}
try
{
bufferedWriter.close();
} catch (IOException ex)
{
Logger.getLogger(MasterGraphMakerG1.class.getName()).log(Level.SEVERE, null, ex);
}
}
try
{
bufferedReader.close();
} catch (IOException ex)
{
System.out.println("Error closing bufferedReader: " + ex.getMessage());
}
}
}