package io.vivarium.scripts; import java.io.IOException; import java.util.LinkedList; import java.util.List; import org.apache.commons.cli.CommandLine; import org.apache.commons.cli.Option; import io.vivarium.audit.ActionFrequencyRecord; import io.vivarium.graphing.BaseGraph; import io.vivarium.graphing.GenerationalActionGraph; import io.vivarium.serialization.FileIO; import io.vivarium.serialization.Format; public class GraphGenerationalActionGraph extends CommonsScript { private static final String OUTPUT_FILE = "output"; private static final String INPUT_FILE = "input"; public GraphGenerationalActionGraph(String[] args) { super(args); } @Override protected List<Option> getScriptSpecificOptions() { LinkedList<Option> options = new LinkedList<>(); options.add(Option .builder("o") .required(true) .longOpt(OUTPUT_FILE) .hasArg(true) .argName("FILE") .desc("file to save graph to") .build()); options.add(Option .builder("i") .required(true) .longOpt(INPUT_FILE) .hasArg(true) .argName("FILE") .desc("vivarium save file to load.") .build()); return options; } @Override protected void run(CommandLine commandLine) { // Parse & validate arguments ActionFrequencyRecord record = null; String inputFile = commandLine.getOptionValue(INPUT_FILE); record = FileIO.loadObjectCollection(inputFile, Format.JSON).getFirst(ActionFrequencyRecord.class); if (record == null) { String extendedMessage = "file " + inputFile + " does not contain an action frequency record."; throw new IllegalStateException(extendedMessage); } String outputFile = commandLine.getOptionValue(OUTPUT_FILE); // Save a graph to the output file based on the record run(record, outputFile); } public void run(ActionFrequencyRecord record, String outputFileName) { BaseGraph graph = new GenerationalActionGraph(record); try { graph.saveImage(outputFileName, "png", 800, 800); } catch (IOException e) { String extendedMessage = "file " + outputFileName + " could not be written."; throw new IllegalStateException(extendedMessage, e); } } @Override protected String getExtraArgString() { return ""; } @Override protected String getUsageHeader() { return "A tool for selecting or sampling creatures in world files."; } public static void main(String[] args) { new GraphGenerationalActionGraph(args); } }