diff --git a/solve/build.gradle b/solve/build.gradle index d267d6c126704d718b587de0ef44d55b9334f2bb..453bc94084d8bab418368d1226eac20bb459a5b0 100644 --- a/solve/build.gradle +++ b/solve/build.gradle @@ -52,7 +52,7 @@ task jastadd(type: JavaExec) { "--incremental=param,debug", "--package=de.tudresden.inf.st.ttc18live.jastadd.model", "--o=src/gen/java", - "--tracing=api", + "--tracing", ] + fileTree("./src/main/jastadd/") doFirst { @@ -60,7 +60,7 @@ task jastadd(type: JavaExec) { delete fileTree('src/gen/java/') } - inputs.files fileTree("./solve/src/main/jastadd/") + inputs.files fileTree("./solve/src/main/jastadd/") + file("libs/jastadd2.jar") outputs.files file("src/gen/java/ASTNode.java") } diff --git a/solve/libs/jastadd2.jar b/solve/libs/jastadd2.jar index bb6b93ec6a845b0ca7c5b8b091288fe60cf2bd90..6d774ba8ebfc5e9189e1feae9d9e8ac04cf723f9 100644 Binary files a/solve/libs/jastadd2.jar and b/solve/libs/jastadd2.jar differ diff --git a/solve/src/main/jastadd/Printing.jrag b/solve/src/main/jastadd/Printing.jrag index 7d5860de077c6a70e189bc3e464b91eef90abbda..4a49a9bc69714c4ec12494416b1a7c43cba0f49f 100644 --- a/solve/src/main/jastadd/Printing.jrag +++ b/solve/src/main/jastadd/Printing.jrag @@ -26,12 +26,12 @@ aspect Printing { return "CompositionListInsertion (affected = " + (getAffectedElement() == null ? "null" : getAffectedElement().getId()) + ", feature = " + getFeature() + ", index = " + getIndex() + ", addedElement = " + getAddedElement() + ")"; } - syn String ModelChange.toString() = print(); - eq ChangeTransaction.toString() = "ChangeTransaction@" + Integer.toHexString(hashCode()); +// syn String ModelChange.toString() = print(); +// eq ChangeTransaction.toString() = "ChangeTransaction@" + Integer.toHexString(hashCode()); - syn String ModelElement.toString(); - eq SocialNetwork.toString() = "SocialNetwork" + getId(); - eq User.toString() = "User-" + getId(); - eq Post.toString() = "Post-" + getId(); - eq Comment.toString() = "Comment-" + getId(); +// syn String ModelElement.toString(); +// eq SocialNetwork.toString() = "SocialNetwork" + getId(); +// eq User.toString() = "User-" + getId(); +// eq Post.toString() = "Post-" + getId(); +// eq Comment.toString() = "Comment-" + getId(); } diff --git a/solve/src/main/jastadd/Tracing.jadd b/solve/src/main/jastadd/Tracing.jadd new file mode 100644 index 0000000000000000000000000000000000000000..a00b6e0fec500e1c025ec13811206ffd8da594a7 --- /dev/null +++ b/solve/src/main/jastadd/Tracing.jadd @@ -0,0 +1,21 @@ +aspect Tracing { + + private java.util.List<String> SocialNetwork.events = new java.util.ArrayList<>(); + + public void SocialNetwork.enableTracing() { + this.trace().setReceiver((event, node, attribute, params, value) -> { + String eventString = System.currentTimeMillis() + "," + event + "," + attribute; + events.add(eventString); + }); + } + + public void SocialNetwork.insertCustomEvent(String event, String text) { + String eventString = System.currentTimeMillis() + "," + event.replace(",", "_") + "," + text.replace(",", "_"); + events.add(eventString); + } + + public void SocialNetwork.writeTracingEvents(java.nio.file.Path destination) throws java.io.IOException { + java.nio.file.Files.write(destination, events); + } + +} diff --git a/solve/src/main/java/de/tudresden/inf/st/ttc18live/AbstractLiveContestDriver.java b/solve/src/main/java/de/tudresden/inf/st/ttc18live/AbstractLiveContestDriver.java index 9708a7e7628ce78727704c13a5473f7075a51bc9..816121b63b26c3c11efe4e673d2555d382c01424 100644 --- a/solve/src/main/java/de/tudresden/inf/st/ttc18live/AbstractLiveContestDriver.java +++ b/solve/src/main/java/de/tudresden/inf/st/ttc18live/AbstractLiveContestDriver.java @@ -87,6 +87,7 @@ public abstract class AbstractLiveContestDriver { stopwatch = System.nanoTime(); SocialNetwork socialNetwork = LoadImpl(); + socialNetwork.enableTracing(); solution.setSocialNetwork(socialNetwork); stopwatch = System.nanoTime() - stopwatch; @@ -96,6 +97,7 @@ public abstract class AbstractLiveContestDriver { abstract SocialNetwork LoadImpl() throws Exception; public void Initial() { + solution.getSocialNetwork().insertCustomEvent("TTC_INITIAL", ChangeSet); stopwatch = System.nanoTime(); String result = solution.Initial(); stopwatch = System.nanoTime() - stopwatch; @@ -106,8 +108,11 @@ public abstract class AbstractLiveContestDriver { private void Update(int iteration) throws Exception { System.err.print(iteration + " "); + String size_iteration = ChangeSet + Integer.toString(iteration); + solution.getSocialNetwork().insertCustomEvent("TTC_TRANSFORMATION", size_iteration); ModelChangeSet modelChangeSet = UpdateImpl(iteration); + solution.getSocialNetwork().insertCustomEvent("TTC_RECHECK", size_iteration); stopwatch = System.nanoTime(); String result = solution.Update(modelChangeSet); stopwatch = System.nanoTime() - stopwatch; diff --git a/solve/src/main/java/de/tudresden/inf/st/ttc18live/LiveContestDriverEMF.java b/solve/src/main/java/de/tudresden/inf/st/ttc18live/LiveContestDriverEMF.java index 492a3d1d145f6f16ff87521492e3bce96937f73a..08036a81bc10065e8a07ed26d47d4c30ba93bb63 100644 --- a/solve/src/main/java/de/tudresden/inf/st/ttc18live/LiveContestDriverEMF.java +++ b/solve/src/main/java/de/tudresden/inf/st/ttc18live/LiveContestDriverEMF.java @@ -16,6 +16,7 @@ import org.eclipse.emf.ecore.xmi.impl.XMLParserPoolImpl; import java.io.IOException; +import java.nio.file.Paths; import java.util.HashMap; import java.util.Map; @@ -27,8 +28,9 @@ import java.util.Map; */ public class LiveContestDriverEMF extends AbstractLiveContestDriver { - public static void main(String[] args) { + public static void main(String[] args) throws IOException { new LiveContestDriverEMF().mainImpl(); + getSolution().getSocialNetwork().writeTracingEvents(Paths.get("events-emf.csv")); } private static ResourceSet repository; diff --git a/solve/src/main/java/de/tudresden/inf/st/ttc18live/LiveContestDriverXml.java b/solve/src/main/java/de/tudresden/inf/st/ttc18live/LiveContestDriverXml.java index d62e10b985e9c923f401c2f3289dc09490e1ae9c..ca14762c4fff4fdb62daded4545b35ce84ff838b 100644 --- a/solve/src/main/java/de/tudresden/inf/st/ttc18live/LiveContestDriverXml.java +++ b/solve/src/main/java/de/tudresden/inf/st/ttc18live/LiveContestDriverXml.java @@ -8,6 +8,7 @@ import de.tudresden.inf.st.ttc18live.translator.XmlToJastaddTranslator; import javax.xml.bind.JAXBContext; import javax.xml.bind.Unmarshaller; +import java.io.IOException; import java.nio.file.Path; import java.nio.file.Paths; @@ -18,8 +19,9 @@ import java.nio.file.Paths; * @author jmey - Implementation of 2nd query */ public class LiveContestDriverXml extends AbstractLiveContestDriver { - public static void main(String[] args) { + public static void main(String[] args) throws IOException { new LiveContestDriverXml().mainImpl(); + getSolution().getSocialNetwork().writeTracingEvents(Paths.get("events-xml.csv")); } @Override diff --git a/solve/src/main/java/de/tudresden/inf/st/ttc18live/Main.java b/solve/src/main/java/de/tudresden/inf/st/ttc18live/Main.java index f8cc432542bf554ba34ad70f58e87532cf154931..5e3a801c94c2c41b59ffb604810ccd8c1fa7e03f 100644 --- a/solve/src/main/java/de/tudresden/inf/st/ttc18live/Main.java +++ b/solve/src/main/java/de/tudresden/inf/st/ttc18live/Main.java @@ -10,9 +10,12 @@ import org.apache.logging.log4j.Logger; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Unmarshaller; +import java.io.IOException; +import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.text.ParseException; +import java.util.ArrayList; import java.util.stream.Collectors; @SuppressWarnings("FieldCanBeLocal") @@ -21,7 +24,7 @@ public class Main { private static boolean splitApply = true; private static int changeSet = 2; - private static int maxChanges = 20; + private static int maxChanges = 5; private static User mkUser(long id, SocialNetwork sn, Comment... likes) { User result = new User(); @@ -130,9 +133,15 @@ public class Main { System.exit(0); } - public static void main(String[] args) throws JAXBException, ParseException { + public static void main(String[] args) throws Exception { // test(); SocialNetwork socialNetwork = parseSocialNetwork(); +// java.util.List<String> events = new ArrayList<>(); +// socialNetwork.trace().setReceiver((event, node, attribute, params, value) -> { +// String eventString = System.currentTimeMillis() + "," + event + "," + attribute; +// events.add(eventString); +// }); + socialNetwork.enableTracing(); logger.info("Validity: {}", socialNetwork.isValid()); // JsonSerializer.write(socialNetwork, "serializedModelOne"); @@ -160,15 +169,15 @@ public class Main { for (ModelChange change : modelChangeSet.getModelChangeList()) { change.apply(); // flush to update for changes - modelChangeSet.flushTreeCache(); - socialNetwork.flushTreeCache(); +// modelChangeSet.flushTreeCache(); +// socialNetwork.flushTreeCache(); // and validate socialNetwork.isValid(); } } else { modelChangeSet.apply(); // flush to update for changes - socialNetwork.flushTreeCache(); +// socialNetwork.flushTreeCache(); } logger.info("Validity after application of changes: {}", socialNetwork.isValid()); @@ -178,6 +187,7 @@ public class Main { printQ2Scores(socialNetwork); } + socialNetwork.writeTracingEvents(Paths.get("events.txt")); } private static void printQ2Scores(SocialNetwork socialNetwork) {