diff --git a/cp-to-solution.sh b/cp-to-solution.sh index e8541d33df1b247834110733c9f2baf331c13918..8625927f807872d5fa71c35ef3ee60f26cd33647 100755 --- a/cp-to-solution.sh +++ b/cp-to-solution.sh @@ -62,6 +62,31 @@ function build() { build_incremental $@ } +function prepare_namelookup() { + # deactivate preprocess + sed -i 's|^jastadd.dependsOn preprocess|//jastadd.dependsOn preprocess|g' solve/build.gradle + # remove generated AST and helper files, activate namelookup AST and helper jadd files + ( cd solve/src/main/jastadd && + rm SocialNetworkGen.ast SocialNetworkGen.jadd && + mv Refs.jadd.unused Refs.jadd && + mv SocialNetworkNamelookup.ast.unused SocialNetworkNamelookup.ast ) +} + +function revert_namelookup() { + # activate preprocess + sed -i 's|//jastadd.dependsOn preprocess|jastadd.dependsOn preprocess|g' solve/build.gradle + # deactivate normal AST and helper jadd files + ( cd solve/src/main/jastadd && + mv Refs.jadd Refs.jadd.unused && + mv SocialNetworkNamelookup.ast SocialNetworkNamelookup.ast.unused ) +} + +prepare_namelookup +# Build jastadd-ttc18-xml (namelookup) +sed -i 's/LiveContestDriverEMF/LiveContestDriverXml/' solve/build.gradle +build "jastadd-ttc18-xml" + +revert_namelookup # Build jastadd-ttc18-xml sed -i 's/LiveContestDriverEMF/LiveContestDriverXml/' solve/build.gradle build "jastadd-ttc18-relast-xml" diff --git a/solve/build.gradle b/solve/build.gradle index e230dc084de1d3b7fe532d77d8a8cdbf744b1024..a5b601bf4775dc25cd744db87afebf29b6d62b15 100644 --- a/solve/build.gradle +++ b/solve/build.gradle @@ -67,7 +67,7 @@ task jastadd(type: JavaExec) { "--package=de.tudresden.inf.st.ttc18live.jastadd.model", "--o=src/gen/java", "--tracing", - ] + fileTree("./src/main/jastadd/").matching {exclude "*.relast"} + ] + fileTree("./src/main/jastadd/").matching {exclude "*.relast"}.matching {exclude "*.unused"} doFirst { print("Calling jastadd2.jar " + fileTree("./src/main/jastadd/") + '\n') diff --git a/solve/src/main/jastadd/Refs.jadd.unused b/solve/src/main/jastadd/Refs.jadd.unused new file mode 100644 index 0000000000000000000000000000000000000000..53a7768d4d04d734a6c57cd51b5a56a09032b531 --- /dev/null +++ b/solve/src/main/jastadd/Refs.jadd.unused @@ -0,0 +1,38 @@ +aspect NameLookup { + syn java.util.List<User> User.getFriends() { + java.util.List<User> result = new java.util.ArrayList<>(); + for (UserRef userRef : getFriendRefList()) { + result.add(userRef.getUser()); + } + return result; + } + + syn java.util.List<User> Comment.getLikedByList() = socialNetwork().getLikedByMap().get(this); + + syn Map<Comment, java.util.List<User>> SocialNetwork.getLikedByMap() { + Map<Comment, java.util.List<User>> result = new HashMap(); + for (Comment comment : comments()) { + result.put(comment, new java.util.ArrayList<>()); + } + for (User user : getUserList()) { + for (CommentRef commentRef : user.getLikes()) { + result.get(commentRef.getComment()).add(user); + } + } + return result; + } + + public void User.addSubmission(Submission s) { + this.addSubmissionRef(new SubmissionRef(s)); + } + + public void User.addFriend(User s) { + this.addFriendRef(new UserRef(s)); + s.addFriendRef(new UserRef(this)); + } + + public void User.addLike(Comment s) { + this.addLikeRef(new CommentRef(s)); + } + +} diff --git a/solve/src/main/jastadd/SocialNetworkNamelookup.ast.unused b/solve/src/main/jastadd/SocialNetworkNamelookup.ast.unused new file mode 100644 index 0000000000000000000000000000000000000000..7156eecedeb105486a211cd46c3833b203cdb889 --- /dev/null +++ b/solve/src/main/jastadd/SocialNetworkNamelookup.ast.unused @@ -0,0 +1,12 @@ +abstract ModelElement ::= <Id:Long> ; +SocialNetwork : ModelElement ::= User* Post* ; + +User:ModelElement ::= <Name:String> ; + +abstract Submission : ModelElement ::= <Timestamp:Long> <Content:String> Comment* ; +Comment : Submission ::= ; +Post : Submission ::= ; + +rel User.Friend* -> User ; +rel User.Submission* -> Submission ; +rel User.Like* <-> Comment.LikedBy* ;