package de.anxietyprime.swajodel; import java.util.Date; import java.util.Optional; import java.util.Vector; public class JodelPost { // id of the post public Long id; // id of the author in db private Long authorID; // anonymized authorID public Long anonymousID; // title of the post public String title; // content of the post public String content; // date of the post public Date date; // location if the post public Location location; // list of all comments for the post public Vector comments = new Vector<>(); // the own reaction (null = none, true = positive, false = negative) public Optional reaction; // all other reactions public Reaction reactions; // anonymize function to recursively anonymize the posts public void anonymize(Optional> idCache) { // check if this is the first post in this process if (idCache.isEmpty()) { // create a new Vector as cache idCache = Optional.of(new Vector()); } // get the anonymized id as index in cached authorIDs int i = idCache.get().indexOf(this.authorID); // if the index is -1 the authorID has not been cached jet if (i == -1) { // set the current anonymousID as length of the cache (== next index) this.anonymousID = (long) idCache.get().size(); // push the current authorID to to cache idCache.get().add(this.authorID); } // the authorID has been anonymized once before, so we can get it from cache else this.anonymousID = (long) i; // recursively apply this algorithm for all comments, but include the idCache for (JodelPost comment : this.comments) { comment.anonymize(idCache); } } // add a comment if it is really a comment public boolean addComment(JodelPost post, long parent) { // check if the post is a direct comment if (parent == this.id) { // add the comment this.comments.add(post); // return success return true; } // recursively repeat this for all comments for (JodelPost comment : this.comments) { // return success if the post is a comment on a child if (comment.addComment(post, parent)) return true; } // return no success return false; } // constructor with private authorID public JodelPost(long authorID) { this.authorID = authorID; } }