package io.vivarium.scripts;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.Option;
import io.vivarium.audit.AuditBlueprint;
import io.vivarium.audit.AuditType;
import io.vivarium.serialization.FileIO;
import io.vivarium.serialization.Format;
import io.vivarium.serialization.SerializationEngine;
public class CreateAuditBlueprint extends CommonsScript
{
private static final String OUTPUT_FILE = "output";
private static final String AUDIT_TYPE = "type";
public CreateAuditBlueprint(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 to audit blueprint to")
.build());
options.add(Option
.builder("t")
.required(true)
.longOpt(AUDIT_TYPE)
.hasArg(true)
.argName("TYPE")
.desc("type of audit blueprint to create")
.build());
return options;
}
@Override
protected void run(CommandLine commandLine)
{
Map<String, Object> extraOptions = this.extraArgsAsMap(commandLine);
// Determine the correct type
String auditTypeString = commandLine.getOptionValue(AUDIT_TYPE);
AuditType auditType = null;
try
{
auditType = AuditType.valueOf(auditTypeString);
}
catch (Exception e)
{
System.out.println("Unable to decode type " + auditTypeString + ". Legal values are "
+ Arrays.toString(AuditType.values()));
return;
}
// Build the audit blueprint
AuditBlueprint auditBlueprint = auditType.makeAuditBlueprint();
new SerializationEngine().deserialize(auditBlueprint, extraOptions);
// Save the audit blueprint
String outputFile = commandLine.getOptionValue(OUTPUT_FILE);
FileIO.saveSerializer(auditBlueprint, outputFile, Format.JSON);
}
@Override
protected String getUsageHeader()
{
return "A tool for creating audit blueprints.";
}
@Override
protected String getExtraArgString()
{
return " [key value [key value ...]]";
}
public static void main(String[] args)
{
new CreateAuditBlueprint(args);
}
}