Skip to content
Snippets Groups Projects
Commit 9adee7bb authored by René Schöne's avatar René Schöne
Browse files

Removing unused attributes, and fixing non-relast variants.

- Access to SocialNetwork only need for non-relast
- Resolving model elements moved from attributes to map maintained in translator
- Let EMF only load model, and fail afterwards (as query + update is the same as in other variants)
parent 9552d8c0
Branches
No related tags found
1 merge request!1All4one relast
...@@ -89,10 +89,11 @@ build "jastadd-ttc18-xml" ...@@ -89,10 +89,11 @@ build "jastadd-ttc18-xml"
revert_namelookup revert_namelookup
# workaround for failing build # workaround for failing build
echo ">> Prepare building relast building"
sleep 1 sleep 1
./gradlew --console=plain preprocess jastadd build ./gradlew --console=plain preprocess jastadd build 2> /dev/null
sleep 1 sleep 1
./gradlew --console=plain preprocess jastadd build ./gradlew --console=plain preprocess jastadd build 2> /dev/null
# Build jastadd-ttc18-xml # Build jastadd-ttc18-xml
sed -i 's/LiveContestDriverEMF/LiveContestDriverXml/' solve/build.gradle sed -i 's/LiveContestDriverEMF/LiveContestDriverXml/' solve/build.gradle
......
...@@ -3,30 +3,6 @@ import java.util.HashMap; ...@@ -3,30 +3,6 @@ import java.util.HashMap;
aspect ModelNavigation { aspect ModelNavigation {
// ===================================================================================================================
// resolving
// ===================================================================================================================
syn User SocialNetwork.resolveUser(Long id) = userMap().get(id);
syn Map<Long, User> SocialNetwork.userMap() {
java.util.Map<Long, User> users = new HashMap<>();
for (User user : getUserList()) {
users.put(user.getId(), user);
}
return users;
}
syn Comment SocialNetwork.resolveComment(Long id) = commentMap().get(id);
syn Map<Long, Comment> SocialNetwork.commentMap() {
java.util.Map<Long, Comment> comments = new HashMap<>();
for (Comment comment : comments()) {
comments.put(comment.getId(), comment);
}
return comments;
}
syn java.util.List<Comment> SocialNetwork.comments() { syn java.util.List<Comment> SocialNetwork.comments() {
java.util.List<Comment> result = new java.util.ArrayList<>(); java.util.List<Comment> result = new java.util.ArrayList<>();
for (Post post : getPostList()) { for (Post post : getPostList()) {
...@@ -46,37 +22,6 @@ aspect ModelNavigation { ...@@ -46,37 +22,6 @@ aspect ModelNavigation {
} }
} }
syn Post SocialNetwork.resolvePost(Long id) = postMap().get(id);
syn Map<Long, Post> SocialNetwork.postMap() {
java.util.Map<Long, Post> posts = new HashMap<>();
for (Post post : getPostList()) {
posts.put(post.getId(), post);
}
return posts;
}
// ===================================================================================================================
// root access
// ===================================================================================================================
inh SocialNetwork ModelElement.socialNetwork();
// inh SocialNetwork User.socialNetwork();
eq SocialNetwork.getUser().socialNetwork() = this;
// inh SocialNetwork Post.socialNetwork();
eq SocialNetwork.getPost().socialNetwork() = this;
// eq CompositionListInsertion.getAddedElement().socialNetwork() = socialNetwork();
// eq Post.getComment(int i).socialNetwork() = socialNetwork();
// inh SocialNetwork Comment.socialNetwork();
eq Post.getComment().socialNetwork() = socialNetwork();
inh SocialNetwork ModelChange.socialNetwork();
eq ModelChangeSet.getModelChange().socialNetwork() = getSocialNetwork();
eq ModelChangeSet.getPendingNewElement().socialNetwork() = getSocialNetwork();
// =================================================================================================================== // ===================================================================================================================
// casting // casting
// =================================================================================================================== // ===================================================================================================================
...@@ -111,4 +56,15 @@ aspect ModelNavigation { ...@@ -111,4 +56,15 @@ aspect ModelNavigation {
syn Comment ModelElement.asComment() = null; syn Comment ModelElement.asComment() = null;
eq Comment.asComment() = this; eq Comment.asComment() = this;
// (un)cache instructions
uncache ModelElement.isSocialNetwork();
uncache ModelElement.isPost();
uncache ModelElement.isSubmission();
uncache ModelElement.isUser();
uncache ModelElement.isComment();
uncache ModelElement.asSocialNetwork();
uncache ModelElement.asPost();
uncache ModelElement.asSubmission();
uncache ModelElement.asUser();
uncache ModelElement.asComment();
} }
...@@ -27,6 +27,19 @@ aspect NameLookup { ...@@ -27,6 +27,19 @@ aspect NameLookup {
return result; return result;
} }
// ===================================================================================================================
// root access
// ===================================================================================================================
inh SocialNetwork ModelElement.socialNetwork();
eq SocialNetwork.getUser().socialNetwork() = this;
eq SocialNetwork.getPost().socialNetwork() = this;
eq Post.getComment().socialNetwork() = socialNetwork();
inh SocialNetwork ModelChange.socialNetwork();
eq ModelChangeSet.getModelChange().socialNetwork() = getSocialNetwork();
eq ModelChangeSet.getPendingNewElement().socialNetwork() = getSocialNetwork();
syn java.util.List<User> Comment.getLikedByList() = socialNetwork().getLikedByMap().get(this); syn java.util.List<User> Comment.getLikedByList() = socialNetwork().getLikedByMap().get(this);
syn Map<Comment, java.util.List<User>> SocialNetwork.getLikedByMap() { syn Map<Comment, java.util.List<User>> SocialNetwork.getLikedByMap() {
......
...@@ -11,9 +11,7 @@ aspect Queries { ...@@ -11,9 +11,7 @@ aspect Queries {
for (Comment otherComment : f.getLikes()) { for (Comment otherComment : f.getLikes()) {
if (otherComment == comment) { if (otherComment == comment) {
s.add(f); s.add(f);
for (User commentLikerFriend : f.getCommentLikerFriends(comment)) { s.addAll(f.getCommentLikerFriends(comment));
s.add(commentLikerFriend);
}
} }
} }
} }
...@@ -76,14 +74,8 @@ aspect Queries { ...@@ -76,14 +74,8 @@ aspect Queries {
return elements[0].getId() + "|" + elements[1].getId() + "|" + elements[2].getId(); return elements[0].getId() + "|" + elements[1].getId() + "|" + elements[2].getId();
} }
syn boolean Submission.hasBetterScoreThan(Submission other) = false; syn boolean Submission.hasBetterScoreThan(Submission other) {
eq Post.hasBetterScoreThan(Submission other) {
return other == null || this.score() > other.score() || return other == null || this.score() > other.score() ||
(this.score() == other.score() && this.getTimestamp() > other.getTimestamp()); (this.score() == other.score() && this.getTimestamp() > other.getTimestamp());
} }
eq Comment.hasBetterScoreThan(Submission other) {
return other == null || this.score() > other.score() ||
(this.score() == other.score() && this.getTimestamp() > other.getTimestamp());
}
} }
...@@ -72,4 +72,9 @@ public class LiveContestDriverEMF extends AbstractLiveContestDriver { ...@@ -72,4 +72,9 @@ public class LiveContestDriverEMF extends AbstractLiveContestDriver {
Changes.ModelChangeSet emfChanges = (Changes.ModelChangeSet) loadFile(String.format("change%02d.xmi", iteration)); Changes.ModelChangeSet emfChanges = (Changes.ModelChangeSet) loadFile(String.format("change%02d.xmi", iteration));
return translator.translateChangeSet(emfChanges); return translator.translateChangeSet(emfChanges);
} }
@Override
public void Initial() {
throw new RuntimeException();
}
} }
...@@ -19,12 +19,15 @@ import java.nio.file.Paths; ...@@ -19,12 +19,15 @@ import java.nio.file.Paths;
* @author jmey - Implementation of 2nd query * @author jmey - Implementation of 2nd query
*/ */
public class LiveContestDriverXml extends AbstractLiveContestDriver { public class LiveContestDriverXml extends AbstractLiveContestDriver {
public static void main(String[] args) { public static void main(String[] args) {
LiveContestDriverXml driver = new LiveContestDriverXml(); LiveContestDriverXml driver = new LiveContestDriverXml();
Path filename = Paths.get(String.format("events-xml-%s-%s.csv", driver.getChangeSet(), driver.getQuery())); Path filename = Paths.get(String.format("events-xml-%s-%s.csv", driver.getChangeSet(), driver.getQuery()));
driver.enableTracing(filename).mainImpl(); driver.enableTracing(filename).mainImpl();
} }
private XmlToJastaddTranslator translator = new XmlToJastaddTranslator();
@Override @Override
SocialNetwork LoadImpl() throws Exception { SocialNetwork LoadImpl() throws Exception {
JAXBContext jc = JAXBContext.newInstance(ParsedSocialNetwork.class); JAXBContext jc = JAXBContext.newInstance(ParsedSocialNetwork.class);
...@@ -33,7 +36,6 @@ public class LiveContestDriverXml extends AbstractLiveContestDriver { ...@@ -33,7 +36,6 @@ public class LiveContestDriverXml extends AbstractLiveContestDriver {
ParsedSocialNetwork parsedSocialNetwork = (ParsedSocialNetwork) unmarshaller.unmarshal(model1Content.toFile()); ParsedSocialNetwork parsedSocialNetwork = (ParsedSocialNetwork) unmarshaller.unmarshal(model1Content.toFile());
// logger.info("Users: {}, Posts: {}", // logger.info("Users: {}, Posts: {}",
// parsedSocialNetwork.users.size(), parsedSocialNetwork.posts.size()); // parsedSocialNetwork.users.size(), parsedSocialNetwork.posts.size());
XmlToJastaddTranslator translator = new XmlToJastaddTranslator();
return translator.translateSocialNetwork(parsedSocialNetwork); return translator.translateSocialNetwork(parsedSocialNetwork);
} }
...@@ -51,7 +53,6 @@ public class LiveContestDriverXml extends AbstractLiveContestDriver { ...@@ -51,7 +53,6 @@ public class LiveContestDriverXml extends AbstractLiveContestDriver {
// logger.debug("Parsing {}", modelContent); // logger.debug("Parsing {}", modelContent);
ParsedModelChangeSet parsedModelChangeSet = (ParsedModelChangeSet) unmarshaller.unmarshal(modelContent.toFile()); ParsedModelChangeSet parsedModelChangeSet = (ParsedModelChangeSet) unmarshaller.unmarshal(modelContent.toFile());
XmlToJastaddTranslator translator = new XmlToJastaddTranslator(); return translator.translateModelChangeSet(parsedModelChangeSet);
return translator.translateModelChangeSet(parsedModelChangeSet, getSolution().getSocialNetwork());
} }
} }
...@@ -21,8 +21,8 @@ public class Main { ...@@ -21,8 +21,8 @@ public class Main {
private static Logger logger = LogManager.getLogger(Main.class); private static Logger logger = LogManager.getLogger(Main.class);
private static boolean splitApply = true; private static boolean splitApply = true;
private static int changeSet = 2; private static int changeSet = 128;
private static int maxChanges = 5; private static int maxChanges = 20;
private static User mkUser(long id, SocialNetwork sn, Comment... likes) { private static User mkUser(long id, SocialNetwork sn, Comment... likes) {
User result = new User(); User result = new User();
...@@ -40,19 +40,9 @@ public class Main { ...@@ -40,19 +40,9 @@ public class Main {
} }
} }
private static Post findContainingPost(Comment comment) { private static Comment mkComment(long id, Submission parent) {
// this should actually be done with an inherited attribute, but attributes needs to be flushed for this
ASTNode parent = comment.getParent();
while (parent != null && !(parent instanceof Post)) {
parent = parent.getParent();
}
return (Post) parent;
}
private static Comment mkComment(@SuppressWarnings("SameParameterValue") long id, Submission parent) {
Comment comment = new Comment(); Comment comment = new Comment();
comment.setId(id); comment.setId(id);
// comment.setPost(findContainingPost(parent));
comment.setTimestamp(id); comment.setTimestamp(id);
parent.addComment(comment); parent.addComment(comment);
return comment; return comment;
...@@ -83,38 +73,6 @@ public class Main { ...@@ -83,38 +73,6 @@ public class Main {
report(sn, u1); report(sn, u1);
} }
// private static void testCS2() {
// SocialNetwork sn = SocialNetwork.createSocialNetwork();
//
// Post post = new Post();
// post.setId(123L);
// sn.addPost(post);
//
// Comment c725662 = mkComment(725662, post);
//
// User u4555 = mkUser(4555, sn, c725662);
// User u4755 = mkUser(4755, sn, c725662);
// User u1103 = mkUser(1103, sn, c725662);
// User u768 = mkUser(768, sn, c725662);
// User u1222 = mkUser(1222, sn, c725662);
// User u1050 = mkUser(1050, sn, c725662);
// User u3055 = mkUser(3055, sn, c725662);
// User u1077 = mkUser(1077, sn, c725662);
// User u1922 = mkUser(1922, sn, c725662);
//
//
//
// addFriends(u4555, u2608, u2783, u143, u4644, u2004, u1434, u2269, u1222, u1490);
// addFriends(u4755, u143, u2783);
// addFriends(u1103, u2783, u238, u143);
// addFriends(u768, u2783);
// addFriends(u1222, u2783, u4555);
// addFriends(u1050, u2783);
// addFriends(u3055, u2783);
// addFriends(u1077, u2783);
// addFriends(u1922, u2783);
// }
private static void report(SocialNetwork sn, User interestingUser) { private static void report(SocialNetwork sn, User interestingUser) {
sn.flushTreeCache(); sn.flushTreeCache();
...@@ -132,12 +90,8 @@ public class Main { ...@@ -132,12 +90,8 @@ public class Main {
public static void main(String[] args) throws Exception { public static void main(String[] args) throws Exception {
// test(); // test();
SocialNetwork socialNetwork = parseSocialNetwork(); XmlToJastaddTranslator translator = parseSocialNetwork();
// java.util.List<String> events = new ArrayList<>(); SocialNetwork socialNetwork = translator.getSocialNetwork();
// socialNetwork.trace().setReceiver((event, node, attribute, params, value) -> {
// String eventString = System.currentTimeMillis() + "," + event + "," + attribute;
// events.add(eventString);
// });
socialNetwork.enableTracing(); socialNetwork.enableTracing();
logger.info("Validity: {}", socialNetwork.isValid()); logger.info("Validity: {}", socialNetwork.isValid());
...@@ -147,10 +101,10 @@ public class Main { ...@@ -147,10 +101,10 @@ public class Main {
logger.info("Query1: {}", socialNetwork.query(1)); logger.info("Query1: {}", socialNetwork.query(1));
logger.info("Query2: {}", socialNetwork.query(2)); logger.info("Query2: {}", socialNetwork.query(2));
printQ2Scores(socialNetwork); // printQ2Scores(socialNetwork);
for (int index = 1; index <= maxChanges; index++) { for (int index = 1; index <= maxChanges; index++) {
ModelChangeSet modelChangeSet = parseChanges(socialNetwork, index); ModelChangeSet modelChangeSet = parseChanges(translator, index);
if (modelChangeSet == null) { if (modelChangeSet == null) {
logger.debug("Got null as modelChangeSet, skipping."); logger.debug("Got null as modelChangeSet, skipping.");
continue; continue;
...@@ -158,7 +112,7 @@ public class Main { ...@@ -158,7 +112,7 @@ public class Main {
logger.info("Validity after parsing of {} changes: {}", logger.info("Validity after parsing of {} changes: {}",
modelChangeSet.getNumModelChange(), socialNetwork.isValid()); modelChangeSet.getNumModelChange(), socialNetwork.isValid());
// // flush to get ids correct after parsing // flush to get ids correct after parsing
socialNetwork.flushTreeCache(); socialNetwork.flushTreeCache();
if (splitApply) { if (splitApply) {
...@@ -182,7 +136,7 @@ public class Main { ...@@ -182,7 +136,7 @@ public class Main {
logger.info("Query1 after change {}: {}", index, socialNetwork.query(1)); logger.info("Query1 after change {}: {}", index, socialNetwork.query(1));
logger.info("Query2 after change {}: {}", index, socialNetwork.query(2)); logger.info("Query2 after change {}: {}", index, socialNetwork.query(2));
printQ2Scores(socialNetwork); // printQ2Scores(socialNetwork);
} }
socialNetwork.writeTracingEvents(Paths.get("events.txt")); socialNetwork.writeTracingEvents(Paths.get("events.txt"));
} }
...@@ -200,7 +154,6 @@ public class Main { ...@@ -200,7 +154,6 @@ public class Main {
for (User user : comment.getLikedByList()) { for (User user : comment.getLikedByList()) {
logger.debug("{} and {}: {}", comment, user, user.getCommentLikerFriends(comment)); logger.debug("{} and {}: {}", comment, user, user.getCommentLikerFriends(comment));
logger.debug("{} friends: {}", user, printList(user.getFriends())); logger.debug("{} friends: {}", user, printList(user.getFriends()));
// check that commentLikers are all friends
} }
} }
} }
...@@ -219,7 +172,7 @@ public class Main { ...@@ -219,7 +172,7 @@ public class Main {
return sb.append("]").toString(); return sb.append("]").toString();
} }
private static SocialNetwork parseSocialNetwork() throws JAXBException, ParseException { private static XmlToJastaddTranslator parseSocialNetwork() throws JAXBException, ParseException {
JAXBContext jc = JAXBContext.newInstance(ParsedSocialNetwork.class); JAXBContext jc = JAXBContext.newInstance(ParsedSocialNetwork.class);
Unmarshaller unmarshaller = jc.createUnmarshaller(); Unmarshaller unmarshaller = jc.createUnmarshaller();
Path model1Content = Paths.get("src", "main", "resources", Integer.toString(changeSet), "initial.xmi"); Path model1Content = Paths.get("src", "main", "resources", Integer.toString(changeSet), "initial.xmi");
...@@ -227,10 +180,11 @@ public class Main { ...@@ -227,10 +180,11 @@ public class Main {
logger.info("Users: {}, Posts: {}", logger.info("Users: {}, Posts: {}",
parsedSocialNetwork.users.size(), parsedSocialNetwork.posts.size()); parsedSocialNetwork.users.size(), parsedSocialNetwork.posts.size());
XmlToJastaddTranslator translator = new XmlToJastaddTranslator(); XmlToJastaddTranslator translator = new XmlToJastaddTranslator();
return translator.translateSocialNetwork(parsedSocialNetwork); translator.translateSocialNetwork(parsedSocialNetwork);
return translator;
} }
private static ModelChangeSet parseChanges(SocialNetwork socialNetwork, int index) throws JAXBException, ParseException { private static ModelChangeSet parseChanges(XmlToJastaddTranslator translator, int index) throws JAXBException, ParseException {
String suffix = String.format("change%02d.xmi", index); String suffix = String.format("change%02d.xmi", index);
logger.info("Parsing changes {}", suffix); logger.info("Parsing changes {}", suffix);
JAXBContext jc = JAXBContext.newInstance(ParsedModelChangeSet.class); JAXBContext jc = JAXBContext.newInstance(ParsedModelChangeSet.class);
...@@ -243,7 +197,6 @@ public class Main { ...@@ -243,7 +197,6 @@ public class Main {
} }
ParsedModelChangeSet parsedModelChangeSet = (ParsedModelChangeSet) unmarshaller.unmarshal(modelContent.toFile()); ParsedModelChangeSet parsedModelChangeSet = (ParsedModelChangeSet) unmarshaller.unmarshal(modelContent.toFile());
XmlToJastaddTranslator translator = new XmlToJastaddTranslator(); return translator.translateModelChangeSet(parsedModelChangeSet);
return translator.translateModelChangeSet(parsedModelChangeSet, socialNetwork);
} }
} }
...@@ -28,8 +28,20 @@ public class XmlToJastaddTranslator { ...@@ -28,8 +28,20 @@ public class XmlToJastaddTranslator {
/** Created objects within changes when translating change sets */ /** Created objects within changes when translating change sets */
private Map<Long, ModelElement> createdObjects; private Map<Long, ModelElement> createdObjects;
/** Created users created initially and within changes */
private Map<Long, User> userMap = new HashMap<>();
/** Created submissions created initially and within changes */
private Map<Long, Submission> submissionMap = new HashMap<>();
private SocialNetwork socialNetwork;
public XmlToJastaddTranslator() { public XmlToJastaddTranslator() {
// empty for now // empty for now
socialNetwork = null;
}
public SocialNetwork getSocialNetwork() {
return socialNetwork;
} }
public SocialNetwork translateSocialNetwork(ParsedSocialNetwork parsedSocialNetwork) throws ParseException { public SocialNetwork translateSocialNetwork(ParsedSocialNetwork parsedSocialNetwork) throws ParseException {
...@@ -38,10 +50,7 @@ public class XmlToJastaddTranslator { ...@@ -38,10 +50,7 @@ public class XmlToJastaddTranslator {
Map<User, String> userLikes = new HashMap<>(); Map<User, String> userLikes = new HashMap<>();
Map<Comment, Long> commentPosts = new HashMap<>(); Map<Comment, Long> commentPosts = new HashMap<>();
Map<Long, User> userMap = new HashMap<>(); socialNetwork = SocialNetwork.createSocialNetwork();
Map<Long, Submission> submissionMap = new HashMap<>();
SocialNetwork result = SocialNetwork.createSocialNetwork();
for (ParsedUser parsedUser : parsedSocialNetwork.users) { for (ParsedUser parsedUser : parsedSocialNetwork.users) {
logger.trace("Parsing user id={}", parsedUser.id); logger.trace("Parsing user id={}", parsedUser.id);
User user = new User(); User user = new User();
...@@ -56,7 +65,7 @@ public class XmlToJastaddTranslator { ...@@ -56,7 +65,7 @@ public class XmlToJastaddTranslator {
if (parsedUser.likes != null) { if (parsedUser.likes != null) {
userLikes.put(user, parsedUser.likes); userLikes.put(user, parsedUser.likes);
} }
result.addUser(user); socialNetwork.addUser(user);
// FIXME remove manual user lookup // FIXME remove manual user lookup
userMap.put(user.getId(), user); userMap.put(user.getId(), user);
...@@ -68,7 +77,7 @@ public class XmlToJastaddTranslator { ...@@ -68,7 +77,7 @@ public class XmlToJastaddTranslator {
post.setTimestamp(convertTimestamp(parsedPost.timestamp)); post.setTimestamp(convertTimestamp(parsedPost.timestamp));
post.setContent(parsedPost.content); post.setContent(parsedPost.content);
addComments(parsedPost, post, commentPosts, submissionMap); addComments(parsedPost, post, commentPosts, submissionMap);
result.addPost(post); socialNetwork.addPost(post);
// FIXME remove manual submission lookup // FIXME remove manual submission lookup
submissionMap.put(post.getId(), post); submissionMap.put(post.getId(), post);
...@@ -103,7 +112,7 @@ public class XmlToJastaddTranslator { ...@@ -103,7 +112,7 @@ public class XmlToJastaddTranslator {
} }
} }
logger.info("Done translating"); logger.info("Done translating");
return result; return socialNetwork;
} }
private void addComments(ParsedSubmission parsedSubmission, Submission submission, private void addComments(ParsedSubmission parsedSubmission, Submission submission,
...@@ -140,7 +149,12 @@ public class XmlToJastaddTranslator { ...@@ -140,7 +149,12 @@ public class XmlToJastaddTranslator {
List<CompositionListInsertion> compositionListInsertions = new ArrayList<>(); List<CompositionListInsertion> compositionListInsertions = new ArrayList<>();
} }
public ModelChangeSet translateModelChangeSet(ParsedModelChangeSet parsedModelChangeSet, SocialNetwork socialNetwork) throws ParseException { public ModelChangeSet translateModelChangeSet(ParsedModelChangeSet parsedModelChangeSet) throws ParseException {
if (socialNetwork == null) {
logger.fatal("No previously parsed SocialNetwork found!");
return null;
}
forwardReferencesElements = new HashMap<>(); forwardReferencesElements = new HashMap<>();
forwardReferencesPaths = new HashMap<>(); forwardReferencesPaths = new HashMap<>();
createdObjects = new HashMap<>(); createdObjects = new HashMap<>();
...@@ -248,6 +262,7 @@ public class XmlToJastaddTranslator { ...@@ -248,6 +262,7 @@ public class XmlToJastaddTranslator {
return forwardReferencesElements.get(parsedModelElement); return forwardReferencesElements.get(parsedModelElement);
} }
ModelElement me; ModelElement me;
Long id = Long.valueOf(parsedModelElement.id.substring(parsedModelElement.id.lastIndexOf('#') + 1));
SocialNetwork socialNetwork = modelChangeSet.getSocialNetwork(); SocialNetwork socialNetwork = modelChangeSet.getSocialNetwork();
if (parsedModelElement instanceof ParsedUser) { if (parsedModelElement instanceof ParsedUser) {
ParsedUser parsedUser = (ParsedUser) parsedModelElement; ParsedUser parsedUser = (ParsedUser) parsedModelElement;
...@@ -261,6 +276,7 @@ public class XmlToJastaddTranslator { ...@@ -261,6 +276,7 @@ public class XmlToJastaddTranslator {
} }
// maybe set other fields? (submission is set, but refers to later introduced changes) // maybe set other fields? (submission is set, but refers to later introduced changes)
socialNetwork.addUser(user); socialNetwork.addUser(user);
userMap.put(id, user);
me = user; me = user;
} else if (parsedModelElement instanceof ParsedSubmission) { } else if (parsedModelElement instanceof ParsedSubmission) {
ParsedSubmission parsedSubmission = (ParsedSubmission) parsedModelElement; ParsedSubmission parsedSubmission = (ParsedSubmission) parsedModelElement;
...@@ -282,6 +298,8 @@ public class XmlToJastaddTranslator { ...@@ -282,6 +298,8 @@ public class XmlToJastaddTranslator {
} }
submission.setTimestamp(convertTimestamp(parsedSubmission.timestamp)); submission.setTimestamp(convertTimestamp(parsedSubmission.timestamp));
submission.setContent(parsedSubmission.content); submission.setContent(parsedSubmission.content);
// add map
submissionMap.put(id, submission);
// resolveModelElement user // resolveModelElement user
User submitter = resolveUser(parsedSubmission.submitter, modelChangeSet); User submitter = resolveUser(parsedSubmission.submitter, modelChangeSet);
submitter.addSubmission(submission); submitter.addSubmission(submission);
...@@ -303,7 +321,7 @@ public class XmlToJastaddTranslator { ...@@ -303,7 +321,7 @@ public class XmlToJastaddTranslator {
throw new RuntimeException("Unknown ModelElement " + parsedModelElement + throw new RuntimeException("Unknown ModelElement " + parsedModelElement +
" with id=" + parsedModelElement.id); " with id=" + parsedModelElement.id);
} }
me.setId(Long.valueOf(parsedModelElement.id.substring(parsedModelElement.id.lastIndexOf('#') + 1))); me.setId(id);
createdObjects.put(me.getId(), me); createdObjects.put(me.getId(), me);
return me; return me;
} }
...@@ -376,17 +394,16 @@ public class XmlToJastaddTranslator { ...@@ -376,17 +394,16 @@ public class XmlToJastaddTranslator {
logger.warn("Can not resolveModelElement " + path); logger.warn("Can not resolveModelElement " + path);
id = 0; id = 0;
} }
SocialNetwork socialNetwork = modelChangeSet.getSocialNetwork();
ModelElement result; ModelElement result;
switch (nonterminalName) { switch (nonterminalName) {
case "User": case "User":
result = socialNetwork.resolveUser(id); result = userMap.get(id);
break; break;
case "Comment": case "Comment":
result = socialNetwork.resolveComment(id); result = submissionMap.get(id);
break; break;
case "Post": case "Post":
result = socialNetwork.resolvePost(id); result = submissionMap.get(id);
break; break;
default: default:
throw new RuntimeException("Can not resolveModelElement a " + nonterminalName + " with " + path); throw new RuntimeException("Can not resolveModelElement a " + nonterminalName + " with " + path);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment