[Yanel-commits] rev 57256 - in public/yanel/trunk/src/impl/java/org/wyona/yanel/impl: . comments
michi at wyona.com
michi at wyona.com
Thu Mar 10 11:24:01 CET 2011
Author: michi
Date: 2011-03-10 11:24:00 +0100 (Thu, 10 Mar 2011)
New Revision: 57256
Added:
public/yanel/trunk/src/impl/java/org/wyona/yanel/impl/comments/
public/yanel/trunk/src/impl/java/org/wyona/yanel/impl/comments/CommentManagerV1Impl.java
Log:
comment manager implementation added
Added: public/yanel/trunk/src/impl/java/org/wyona/yanel/impl/comments/CommentManagerV1Impl.java
===================================================================
--- public/yanel/trunk/src/impl/java/org/wyona/yanel/impl/comments/CommentManagerV1Impl.java (rev 0)
+++ public/yanel/trunk/src/impl/java/org/wyona/yanel/impl/comments/CommentManagerV1Impl.java 2011-03-10 10:24:00 UTC (rev 57256)
@@ -0,0 +1,105 @@
+package org.wyona.yanel.impl.comments;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.log4j.Logger;
+
+import org.wyona.yanel.core.attributes.commentable.CommentManagerV1;
+import org.wyona.yanel.core.attributes.commentable.CommentStatusV1;
+import org.wyona.yanel.core.attributes.commentable.CommentV1;
+import org.wyona.yanel.core.attributes.commentable.CommentsV1;
+import org.wyona.yanel.core.map.Realm;
+
+import org.wyona.yarep.util.YarepXMLBindingUtil;
+
+/**
+ * Comment manager version 1 implementation
+ */
+public class CommentManagerV1Impl implements CommentManagerV1 {
+
+ private static Logger log = Logger.getLogger(CommentManagerV1Impl.class);
+ public static final String LOCK = ""; // used to synchronize concurrent access
+
+ //TODO Should be configurable
+ private static final String REPOSITORY_BASE_PATH = "/comments/";
+
+ /**
+ * @see org.wyona.yanel.core.attributes.commentable.CommentManagerV1#hasComments(Realm , String)
+ */
+ public boolean hasComments(Realm realm, String path) throws Exception {
+ if (realm.getRepository().existsNode(getAbsoluteYarepPathOfComment(path))) {
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * @see org.wyona.yanel.core.attributes.commentable.CommentManagerV1#getAllComments(Realm , String)
+ */
+ public CommentsV1 getAllComments(Realm realm, String path) throws Exception {
+ CommentsV1 result = null;
+ try {
+ if (path != null && !"/".equals(path)) {
+ if (path.startsWith("/")) {
+ path = path.substring(1);
+ }
+ result = YarepXMLBindingUtil.readJAXBDataObject(CommentsV1.class, realm.getRepository(), getAbsoluteYarepPathOfComment(path));
+ } else {
+ log.error("Invalid path received: "+path);
+ // TODO throw error?
+ }
+ } catch (Exception e) {
+ log.error("Error in retrieving all comments for "+path);
+ log.error(e,e);
+ }
+ return result;
+ }
+
+ @Override
+ public CommentsV1 getPublicComments(Realm realm, String path) throws Exception {
+ CommentsV1 comments = getAllComments(realm, path);
+ List<CommentV1> publicComments = new ArrayList<CommentV1>();
+ for (CommentV1 comment: comments.getComments()) {
+ if (comment.getCommentStatus() == CommentStatusV1.PUBLIC) {
+ publicComments.add(comment);
+ }
+ }
+ comments.setComments(publicComments);
+ return comments;
+ }
+
+ /**
+ * @see org.wyona.yanel.core.attributes.commentable#addComment(Realm, String, CommentV1)
+ */
+ public boolean addComment(Realm realm, String path, CommentV1 newComment) throws Exception {
+ boolean success = false;
+ if (path != null && !"/".equals(path)) {
+ if (path.startsWith("/")) {
+ path = path.substring(1);
+ }
+ synchronized (LOCK) {
+ String commentsPath = getAbsoluteYarepPathOfComment(path);
+ if (!realm.getRepository().existsNode(commentsPath)) {
+ log.warn("No comments node exists yet, hence create comments node ...");
+ CommentsV1 comments = new CommentsV1();
+ YarepXMLBindingUtil.writeJAXBDataObject(realm.getRepository(), comments, getAbsoluteYarepPathOfComment(path));
+ }
+ CommentsV1 comments = YarepXMLBindingUtil.readJAXBDataObject(CommentsV1.class, realm.getRepository(), getAbsoluteYarepPathOfComment(path));
+ comments.getComments().add(newComment);
+ YarepXMLBindingUtil.writeJAXBDataObject(realm.getRepository(), comments, getAbsoluteYarepPathOfComment(path));
+ }
+ } else {
+ log.error("Invalid path received: " + path);
+ }
+
+ return success;
+ }
+
+ /**
+ * Get repository path of comment
+ */
+ private String getAbsoluteYarepPathOfComment(String pathOfReferencedDoc) {
+ return REPOSITORY_BASE_PATH + pathOfReferencedDoc;
+ }
+}
More information about the Yanel-commits
mailing list