package org.ggp.base.util.gdl.transforms.standalone; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.util.List; import org.ggp.base.util.files.FileUtils; import org.ggp.base.util.game.Game; import org.ggp.base.util.gdl.grammar.Gdl; import org.ggp.base.util.gdl.transforms.DeORer; import org.ggp.base.validator.StaticValidator; import org.ggp.base.validator.ValidatorException; /** * The standalone version of DeORer can be run as its own program. It * takes a .kif file as input and generates a new .kif file with the * modified output. The new filename is (original name)_DEORED.kif. * * The new file is not intended to be particularly legible; it is * intended mainly for use by other programs. * * @author Alex Landau * */ public class StandaloneDeORer { /** * @param args */ public static void main(String[] args) { if(args.length < 1 || !args[0].endsWith(".kif")) { System.out.println("Please enter the path of a .kif file as an argument."); return; } String filename = args[0]; Game theGame = Game.createEphemeralGame(Game.preprocessRulesheet(FileUtils.readFileAsString(new File(filename)))); if (theGame.getRules() == null || theGame.getRules().size() == 0) { System.err.println("Problem reading the file " + filename + " or parsing the GDL."); return; } try { new StaticValidator().checkValidity(theGame); } catch (ValidatorException e) { System.err.println("GDL validation error: " + e.toString()); return; } List<Gdl> transformedDescription = DeORer.run(theGame.getRules()); String newFilename = filename.substring(0, filename.lastIndexOf(".kif")) + "_DEORED.kif"; try (BufferedWriter out = new BufferedWriter(new FileWriter(new File(newFilename)))) { for(Gdl gdl : transformedDescription) { out.write(gdl.toString()); out.newLine(); } } catch (IOException e) { System.err.println("There was an error writing the translated GDL file " + newFilename + "."); e.printStackTrace(); } } }