import agg.util.XMLHelper; import agg.xt_basis.CompletionStrategySelector; import agg.xt_basis.DefaultGraTraImpl; import agg.xt_basis.GraGra; import agg.xt_basis.GraTra; import agg.xt_basis.GraTraEvent; import agg.xt_basis.GraTraEventListener; import agg.xt_basis.LayeredGraTraImpl; import agg.xt_basis.MorphCompletionStrategy; import agg.xt_basis.PriorityGraTraImpl; import agg.xt_basis.RuleSequencesGraTraImpl; public class ConferenceScheduleTest implements GraTraEventListener { private static XMLHelper h; private static GraGra gragra; // private static GraGra impGraGra; // private static Graph impGraph; // private static Graph impTypeGraph; private static GraTra gratra; private int msgGraTra; private static boolean layered = false, ruleSequence = false, priority = false;; private static boolean didTransformation = false; private static String fileName; // private static String impFileName; private static String outputFileName; // private static String error; private static boolean writeLogFile = false; public ConferenceScheduleTest(String filename) { fileName = filename; System.out.println("File name: " + fileName); /* load gragra */ gragra = load(fileName); if (gragra != null) { //gragra.getLevelOfTypeGraphCheck(); // do transform transform(gragra, this); if (didTransformation) { // save gragra // String out = "_out.ggx"; // save(gragra, out); // System.out.println("Output file: " + outputFileName); } else System.out.println("Grammar: " + gragra.getName() + " could not perform any transformations!"); } else System.out.println("Grammar: " + filename + " FAILED!"); } public static void main(String[] args) { String vers = System.getProperty("java.version"); if (vers.compareTo("1.4.2") < 0) { System.out.println("WARNING : Swing must be run with the " + "1.4.2 version of the JVM."); } if (args.length == 1) { if ((args[0]).compareToIgnoreCase("-logfile") != 0) { new ConferenceScheduleTest(args[0]); writeLogFile = false; } } else { warning(); return; } } static void warning() { System.out.println("Execution failed. No grammar given."); } public static GraGra load(String fName) { // System.out.println(fileName.endsWith(".ggx")); if (fName.endsWith(".ggx")) { h = new XMLHelper(); if (h.read_from_xml(fName)) { // create a gragra GraGra gra = new GraGra(false); h.getTopObject(gra); gra.setFileName(fName); return gra; } return null; } return null; } public static void transform(GraGra grammar, GraTraEventListener l) { if (grammar == null) return; /* * test: there is a one way to set transformation options Vector gto = * new Vector(); gto.add("layered"); gto.add("CSP"); * gto.add("injective"); gto.add("dangling"); * gragra.setGraTraOptions(gto); */ // create trafo // System.out.println(gragra.getGraTraOptions().toString()); if (grammar.getGraTraOptions().contains("priority")) { gratra = new PriorityGraTraImpl(); priority = true; System.out.println("Transformation by rule priority ..."); } else if (grammar.getGraTraOptions().contains("layered")) { gratra = new LayeredGraTraImpl(); layered = true; System.out.println("Layered transformation ..."); } else if (grammar.getGraTraOptions().contains("ruleSequence")) { gratra = new RuleSequencesGraTraImpl(); ruleSequence = true; System.out.println("Transformation by rule sequences ..."); } else { gratra = new DefaultGraTraImpl(); System.out.println("Transformation non-deterministically ..."); } gratra.addGraTraListener(l); gratra.setGraGra(grammar); gratra.setHostGraph(grammar.getGraph()); gratra.enableWriteLogFile(writeLogFile); MorphCompletionStrategy strategy = CompletionStrategySelector .getDefault(); // strategy = new Completion_NAC(new Completion_InjCSP()); if (grammar.getGraTraOptions().isEmpty()) { grammar.setGraTraOptions(strategy); gratra.setCompletionStrategy(strategy); } else { if (grammar.getGraTraOptions().contains("showGraphAfterStep")) grammar.getGraTraOptions().remove("showGraphAfterStep"); gratra.setGraTraOptions(grammar.getGraTraOptions()); System.out.println("Options: " + grammar.getGraTraOptions()); System.out.println(); } grammar.destroyAllMatches(); if (layered) { long startTime = System.currentTimeMillis(); int nruns = 500; for (int i=0; i<nruns; i++) { ((LayeredGraTraImpl) gratra).transform(); } long endTime = System.currentTimeMillis(); long time = endTime - startTime; System.out.println("500 runs, time: "+time+" average run: "+(time/nruns)+"ms"); } else if (priority) { ((PriorityGraTraImpl) gratra).transform(); } else if (ruleSequence) { ((RuleSequencesGraTraImpl) gratra).transform(); } else { ((DefaultGraTraImpl) gratra).transform(); /* test gragra.setStartGraph(gragra.getGraph().copy()); int nruns = 10; for (int i=0; i<nruns; i++) { System.out.println(i+". transformation run "); ((DefaultGraTraImpl) gratra).transform(); gragra.resetGraph(); gratra.setHostGraph(grammar.getGraph()); } */ } } public static void save(GraGra gra, String outFileName) { // System.out.println("Output into: "+outFileName); if (outFileName.equals("")) outputFileName = gra.getName() + "_out.ggx"; else if (outFileName.equals("_out.ggx")) outputFileName = fileName.substring(0, fileName.length() - 4) + "_out.ggx"; else if (outFileName.indexOf(".ggx") == -1) outputFileName = outFileName.concat(".ggx"); else if (outFileName.equals(fileName)) outputFileName = fileName.substring(0, fileName.length() - 4) + "_out.ggx"; else { outputFileName = outFileName; } // System.out.println("save :: Output into: "+outputFileName); if (outputFileName.endsWith(".ggx")) { XMLHelper xmlh = new XMLHelper(); xmlh.addTopObject(gra); xmlh.save_to_xml(outputFileName); } } /** Implements GraTraEventListener.graTraEventOccurred */ public void graTraEventOccurred(GraTraEvent event) { // System.out.println("AGGBasicAppl.graTraEventOccurred // "+event.getMessage()); // Match match = event.getMatch(); // String ruleName = "Rule"; // if (match != null) // ruleName = match.getRule().getName(); this.msgGraTra = event.getMessage(); if (this.msgGraTra == GraTraEvent.TRANSFORM_FINISHED) { gratra.stop(); didTransformation = gratra.transformationDone(); // System.out.println("GraTraEvent message : TRANSFORM_FINISHED"); } else if ((this.msgGraTra == GraTraEvent.INPUT_PARAMETER_NOT_SET)) { System.out.println("GraTraEvent message : PARAMETER NOT SET!"); } /* * else if((msgGraTra == GraTraEvent.STEP_COMPLETED)) { // * System.out.println("Rule : "+ruleName+" ==> STEP DONE" ); } * * else if (msgGraTra == GraTraEvent.NO_COMPLETION) { * //System.out.println("Rule : "+ ruleName+" ==> NO_COMPLETION"); } * else if (msgGraTra == GraTraEvent.CANNOT_TRANSFORM){ * //System.out.println("Rule : "+ ruleName+" ==> CANNOT_TRANSFORM"); } */ } }