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;
/**
* Currently, the make method does not do much error checking.
*
* @author Peter Cappello
*/
public class MasterGraphMakerStandard implements MasterGraphMaker
{
@Override
public void make(FileSystem fileSystem, int numWorkers)
{
try
{
BufferedReader bufferedReader = fileSystem.getFileInputStream();
String line;
if ((line = bufferedReader.readLine()) == null)
{
err.println("StandardMasterGraphMaker: Error: input file has no lines.");
exit(1);
}
int numV = Integer.parseInt(line);
// make worker input files
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++)
{
line = bufferedReader.readLine();
if (line == null)
{
err.println("Error: Stated |V| = " + numV + " less than actual lines in file. ");
throw new IOException();
}
// append line to output file
bufferedWriter.write(line);
bufferedWriter.newLine();
}
// close output file
bufferedWriter.close();
}
bufferedReader.close();
} catch (Exception exception)
{
err.println("StandardMasterGraphMaker.make: " + exception.getMessage());
exception.printStackTrace();
exit(1);
}
}
}