[jboss-svn-commits] JBL Code SVN: r5294 - in labs/shotoku/trunk: shotoku-base/src/java/org/jboss/shotoku/tools shotoku-feeds shotoku-feeds/src shotoku-feeds/src/etc shotoku-feeds/src/etc/META-INF shotoku-feeds/src/java/org/jboss/shotoku/feeds shotoku-feeds/src/java/org/jboss/shotoku/feeds/comments shotoku-feeds/src/java/org/jboss/shotoku/feeds/data shotoku-feeds/src/java/org/jboss/shotoku/feeds/service shotoku-feeds/src/java/org/jboss/shotoku/feeds/tag shotoku-user/src/java/org/jboss/shotoku/user shotoku-user/src/java/org/jboss/shotoku/user/service
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Wed Jul 26 12:03:27 EDT 2006
Author: adamw
Date: 2006-07-26 12:03:22 -0400 (Wed, 26 Jul 2006)
New Revision: 5294
Added:
labs/shotoku/trunk/shotoku-feeds/src/etc/
labs/shotoku/trunk/shotoku-feeds/src/etc/META-INF/
labs/shotoku/trunk/shotoku-feeds/src/etc/META-INF/persistence.xml
labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/comments/CommentEntity.java
labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/data/CommentableFeed.java
Modified:
labs/shotoku/trunk/shotoku-base/src/java/org/jboss/shotoku/tools/Tools.java
labs/shotoku/trunk/shotoku-feeds/project.xml
labs/shotoku/trunk/shotoku-feeds/shotoku-feeds.iml
labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/FeedsDescriptor.java
labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/FeedsService.java
labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/comments/CommentsServlet.java
labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/data/ConcreteTagFeed.java
labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/data/Feed.java
labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/data/FileBasedFeed.java
labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/data/Rss2TagFeed.java
labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/data/TagFeed.java
labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/service/FeedsServiceImpl.java
labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/tag/ShotokuFeedTagHandler.java
labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/tag/TagFeedTagHandler.java
labs/shotoku/trunk/shotoku-user/src/java/org/jboss/shotoku/user/UserService.java
labs/shotoku/trunk/shotoku-user/src/java/org/jboss/shotoku/user/service/UserServiceImpl.java
Log:
http://jira.jboss.org/jira/browse/JBSHOTOKU-38
Modified: labs/shotoku/trunk/shotoku-base/src/java/org/jboss/shotoku/tools/Tools.java
===================================================================
--- labs/shotoku/trunk/shotoku-base/src/java/org/jboss/shotoku/tools/Tools.java 2006-07-26 14:26:52 UTC (rev 5293)
+++ labs/shotoku/trunk/shotoku-base/src/java/org/jboss/shotoku/tools/Tools.java 2006-07-26 16:03:22 UTC (rev 5294)
@@ -275,6 +275,20 @@
}
/**
+ * Converts the given object to a String in a null-safe way.
+ * Never returns a null.
+ * @param o Object to convert.
+ * @return Result of o.toString() or an emptys tring if o is null.
+ */
+ public static String toStringNotNull(Object o) {
+ if (o == null) {
+ return "";
+ }
+
+ return o.toString();
+ }
+
+ /**
* Checks if two objects are equal - either both null, or
* their equals method returns true.
* @param obj1 First object to compare.
Modified: labs/shotoku/trunk/shotoku-feeds/project.xml
===================================================================
--- labs/shotoku/trunk/shotoku-feeds/project.xml 2006-07-26 14:26:52 UTC (rev 5293)
+++ labs/shotoku/trunk/shotoku-feeds/project.xml 2006-07-26 16:03:22 UTC (rev 5294)
@@ -31,6 +31,12 @@
<dependency>
<groupId>shotoku</groupId>
+ <artifactId>shotoku-user</artifactId>
+ <jar>shotoku-user.jar</jar>
+ </dependency>
+
+ <dependency>
+ <groupId>shotoku</groupId>
<artifactId>shotoku-aop</artifactId>
<jar>shotoku-aop.jar</jar>
</dependency>
@@ -65,6 +71,27 @@
<artifactId>junit</artifactId>
<version>3.8.1</version>
</dependency>
+
+ <dependency>
+ <groupId>jboss</groupId>
+ <artifactId>ejb3-persistence</artifactId>
+ <jar>ejb3-persistence.jar</jar>
+ </dependency>
+ <dependency>
+ <groupId>jboss</groupId>
+ <artifactId>jboss-ejb3x</artifactId>
+ <jar>jboss-ejb3x.jar</jar>
+ </dependency>
+ <dependency>
+ <groupId>jboss</groupId>
+ <artifactId>jboss-j2ee</artifactId>
+ <jar>jboss-j2ee.jar</jar>
+ </dependency>
+ <dependency>
+ <groupId>jboss</groupId>
+ <artifactId>jboss-annotations-ejb3</artifactId>
+ <jar>jboss-annotations-ejb3.jar</jar>
+ </dependency>
</dependencies>
<build>
Modified: labs/shotoku/trunk/shotoku-feeds/shotoku-feeds.iml
===================================================================
--- labs/shotoku/trunk/shotoku-feeds/shotoku-feeds.iml 2006-07-26 14:26:52 UTC (rev 5293)
+++ labs/shotoku/trunk/shotoku-feeds/shotoku-feeds.iml 2006-07-26 16:03:22 UTC (rev 5294)
@@ -16,6 +16,7 @@
<orderEntry type="library" name="velocity" level="application" />
<orderEntry type="module" module-name="shotoku-tags" />
<orderEntry type="library" name="junit" level="application" />
+ <orderEntry type="module" module-name="shotoku-user" />
<orderEntryProperties />
</component>
</module>
Added: labs/shotoku/trunk/shotoku-feeds/src/etc/META-INF/persistence.xml
===================================================================
--- labs/shotoku/trunk/shotoku-feeds/src/etc/META-INF/persistence.xml 2006-07-26 14:26:52 UTC (rev 5293)
+++ labs/shotoku/trunk/shotoku-feeds/src/etc/META-INF/persistence.xml 2006-07-26 16:03:22 UTC (rev 5294)
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<persistence>
+ <persistence-unit name="feeds">
+ <jta-data-source>java:/LabsDS</jta-data-source>
+ <properties>
+ <property name="hibernate.hbm2ddl.auto" value="update"/>
+ <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
+ </properties>
+ </persistence-unit>
+
+ <persistence-unit name="feeds-noauto">
+ <jta-data-source>java:/LabsDS</jta-data-source>
+ <properties>
+ <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
+ </properties>
+ </persistence-unit>
+</persistence>
Modified: labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/FeedsDescriptor.java
===================================================================
--- labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/FeedsDescriptor.java 2006-07-26 14:26:52 UTC (rev 5293)
+++ labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/FeedsDescriptor.java 2006-07-26 16:03:22 UTC (rev 5294)
@@ -34,6 +34,7 @@
import org.jboss.shotoku.feeds.data.NormalFeed;
import org.jboss.shotoku.feeds.data.SpecialFeed;
import org.jboss.shotoku.feeds.data.Feed;
+import org.jboss.shotoku.feeds.data.CommentableFeed;
import org.jboss.shotoku.feeds.variables.VariableResolverManager;
import org.jboss.shotoku.feeds.tag.FeedTagHandler;
import org.jboss.shotoku.feeds.tag.FeedTagHandlerManager;
@@ -70,6 +71,12 @@
private Map<String, Map<String, SpecialFeed>> specialFeeds;
/**
+ * Commentable feeds: feed name prefix -> (feed type ->
+ * commentable feed).
+ */
+ private Map<String, Map<String, CommentableFeed>> commentableFeeds;
+
+ /**
* Properties: sets of attributes which can be used in
* feeds.
*/
@@ -115,6 +122,7 @@
// Creating the maps that will hold the feeds.
feeds = new HashMap<String, Map<String, NormalFeed>>();
specialFeeds = new HashMap<String, Map<String, SpecialFeed>>();
+ commentableFeeds = new HashMap<String, Map<String, CommentableFeed>>();
attributes = new HashMap<String, Map<String, Object>>();
// Looking for file containing feed definitons and filling the maps.
@@ -194,6 +202,25 @@
}
/**
+ * Adds a ready commentable feed of the given name and type.
+ * @param name
+ * @param type
+ * @param feed
+ */
+ public void addCommentableFeed(String name, String type,
+ CommentableFeed feed) {
+ Map<String, CommentableFeed> typesMap = commentableFeeds.get(name);
+ if (typesMap == null) {
+ typesMap = new HashMap<String, CommentableFeed>();
+ commentableFeeds.put(name, typesMap);
+ }
+
+ typesMap.put(type, feed);
+
+ addFeed(name, type, feed);
+ }
+
+ /**
* Adds a ready special feed of the given name and type.
* @param name
* @param type
@@ -263,6 +290,21 @@
}
/**
+ * Gets a commentable feed of the given type and name.
+ * @param name Name of the feed to get.
+ * @param type Type of the feed to get.
+ * @return Commentable feed with the given name and type.
+ */
+ public CommentableFeed getCommentableFeed(String name, String type) {
+ Map<String, CommentableFeed> feedTypes = commentableFeeds.get(name);
+ if (feedTypes == null) {
+ return null;
+ }
+
+ return feedTypes.get(type);
+ }
+
+ /**
* Gets a feed (any - special or normal) of the given type and name.
* @param name Name of the feed to get.
* @param type Type of the feed to get.
Modified: labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/FeedsService.java
===================================================================
--- labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/FeedsService.java 2006-07-26 14:26:52 UTC (rev 5293)
+++ labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/FeedsService.java 2006-07-26 16:03:22 UTC (rev 5294)
@@ -3,6 +3,8 @@
import org.jboss.shotoku.service.AdministratedService;
import org.jboss.shotoku.feeds.data.Feed;
import org.jboss.shotoku.feeds.comments.FeedDoesNotExistException;
+import org.jboss.shotoku.feeds.comments.CommentsNotAvialableException;
+import org.jboss.shotoku.feeds.comments.UnauthorizedToCommentException;
/**
* @author Adam Warski (adamw at aster.pl)
@@ -12,7 +14,9 @@
public void addComment(String feedId, String feedName, String feedElement,
String feedType, String username, String title,
- String content) throws FeedDoesNotExistException;
+ String content, String userIp)
+ throws FeedDoesNotExistException, CommentsNotAvialableException,
+ UnauthorizedToCommentException;
/*
* SERVICE MANAGEMENT METHODS
Added: labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/comments/CommentEntity.java
===================================================================
--- labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/comments/CommentEntity.java 2006-07-26 14:26:52 UTC (rev 5293)
+++ labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/comments/CommentEntity.java 2006-07-26 16:03:22 UTC (rev 5294)
@@ -0,0 +1,106 @@
+package org.jboss.shotoku.feeds.comments;
+
+import javax.persistence.*;
+
+/**
+ * @author Adam Warski (adamw at aster.pl)
+ */
+ at Entity
+ at Table(name = "ShotokuComments")
+public class CommentEntity {
+ private int id;
+ private String feedId;
+ private String feedName;
+ private String feedType;
+ private String feedElement;
+ private String username;
+ private String title;
+ private String content;
+
+ public CommentEntity() {
+ }
+
+ public CommentEntity(String feedId, String feedName, String feedType,
+ String feedElement, String username, String title,
+ String content) {
+ this.feedId = feedId;
+ this.feedName = feedName;
+ this.feedType = feedType;
+ this.feedElement = feedElement;
+ this.username = username;
+ this.title = title;
+ this.content = content;
+ }
+
+ @Id
+ @GeneratedValue
+ public int getId() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+
+ @Column(length = 32)
+ public String getFeedId() {
+ return feedId;
+ }
+
+ public void setFeedId(String feedId) {
+ this.feedId = feedId;
+ }
+
+ @Column(length = 128)
+ public String getFeedName() {
+ return feedName;
+ }
+
+ public void setFeedName(String feedName) {
+ this.feedName = feedName;
+ }
+
+ @Column(length = 8)
+ public String getFeedType() {
+ return feedType;
+ }
+
+ public void setFeedType(String feedType) {
+ this.feedType = feedType;
+ }
+
+ @Column(length = 256)
+ public String getFeedElement() {
+ return feedElement;
+ }
+
+ public void setFeedElement(String feedElement) {
+ this.feedElement = feedElement;
+ }
+
+ @Column(length = 32)
+ public String getUsername() {
+ return username;
+ }
+
+ public void setUsername(String username) {
+ this.username = username;
+ }
+
+ @Column(length = 256)
+ public String getTitle() {
+ return title;
+ }
+
+ public void setTitle(String title) {
+ this.title = title;
+ }
+
+ public String getContent() {
+ return content;
+ }
+
+ public void setContent(String content) {
+ this.content = content;
+ }
+}
Modified: labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/comments/CommentsServlet.java
===================================================================
--- labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/comments/CommentsServlet.java 2006-07-26 14:26:52 UTC (rev 5293)
+++ labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/comments/CommentsServlet.java 2006-07-26 16:03:22 UTC (rev 5294)
@@ -13,8 +13,11 @@
import javax.servlet.ServletException;
import javax.servlet.ServletConfig;
import java.io.IOException;
+import java.util.Enumeration;
/**
+ * A servlet which captures requests for adding comments to feeds. The
+ * requests are passed to FeedsService.
* @author Adam Warski (adamw at aster.pl)
*/
public class CommentsServlet extends HttpServlet {
@@ -26,6 +29,10 @@
HttpServletResponse response)
throws ServletException, IOException {
try {
+ Enumeration e = request.getSession().getAttributeNames();
+ System.out.println("Attributes:");
+
+
// Getting the comment parameters.
String feedId = request.getParameter("id");
String feedName = request.getParameter("name");
@@ -62,15 +69,16 @@
// Adding the comment.
FeedsTools.getService().addComment(feedId, feedName, feedType,
- feedElement, request.getRemoteUser(), title, description);
+ feedElement, request.getRemoteUser(), title, description,
+ request.getRemoteHost());
response.setStatus(200);
} catch (CommentsNotAvialableException e) {
- // TODO
+ response.sendError(404, e.getMessage());
} catch (UnauthorizedToCommentException e) {
- // TODO
+ response.sendError(403, e.getMessage());
} catch (FeedDoesNotExistException e) {
- // TODO
+ response.sendError(404, e.getMessage());
} catch (Exception e) {
response.sendError(400, e.getMessage());
}
Added: labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/data/CommentableFeed.java
===================================================================
--- labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/data/CommentableFeed.java 2006-07-26 14:26:52 UTC (rev 5293)
+++ labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/data/CommentableFeed.java 2006-07-26 16:03:22 UTC (rev 5294)
@@ -0,0 +1,120 @@
+package org.jboss.shotoku.feeds.data;
+
+import org.jboss.shotoku.NodeList;
+import org.jboss.shotoku.Node;
+import org.jboss.shotoku.tools.Tools;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.net.URL;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.Writer;
+import java.io.OutputStream;
+import java.util.List;
+import java.util.Arrays;
+import java.util.Map;
+
+/**
+ * @author Adam Warski (adamw at aster.pl)
+ */
+public class CommentableFeed implements NormalFeed {
+ private NormalFeed nf;
+
+ private boolean commentsEnabled;
+ private List<String> groupsAllowedToModerate;
+ private boolean commentsModerated;
+ private NodeList feedElements;
+
+ public CommentableFeed(NormalFeed nf, NodeList feedElements) {
+ this.nf = nf;
+ this.feedElements = feedElements;
+
+ commentsEnabled = Tools.isTrue(
+ Tools.toString(getAttributes().get("commentsEnabled")));
+ commentsModerated = Tools.isTrue(
+ Tools.toString(getAttributes().get("commentsModerated")));
+ groupsAllowedToModerate = Arrays.asList(
+ Tools.toStringNotNull(
+ getAttributes().get("moderators")).split("[,]"));
+ }
+
+ /*
+ * Comments methods.
+ */
+
+ public boolean getCommentsEnabled() {
+ return commentsEnabled;
+ }
+
+ public boolean getCommentsModerated() {
+ return commentsModerated;
+ }
+
+ public List<String> getGroupsAllowedToModerateComments() {
+ return groupsAllowedToModerate;
+ }
+
+ public Node getNodeForFeedElement(String feedElement) {
+ String path = Tools.normalizeSlashes(feedElement, false);
+ for (Node n : feedElements) {
+ if (n.getFullName().equals(path)) {
+ return n;
+ }
+ }
+
+ return null;
+ }
+
+ /*
+ * Delegating all non-comments methods.
+ */
+
+ public Map<String, Object> getAttributes() {
+ return nf.getAttributes();
+ }
+
+ public void generate(URL url) throws IOException {
+ nf.generate(url);
+ }
+
+ public void generate(InputStream is) throws IOException {
+ nf.generate(is);
+ }
+
+ public Writer getWriter() throws IOException {
+ return nf.getWriter();
+ }
+
+ public void generate(NormalFeed[] feeds, String title, String description, String author, String link) throws IllegalArgumentException, IOException {
+ nf.generate(feeds, title, description, author, link);
+ }
+
+ public InputStream getInputStream() {
+ return nf.getInputStream();
+ }
+
+ public void write(OutputStream os, HttpServletRequest request) throws IOException {
+ nf.write(os, request);
+ }
+
+ public void write(HttpServletResponse response, HttpServletRequest request) throws IOException {
+ nf.write(response, request);
+ }
+
+ public String getName() {
+ return nf.getName();
+ }
+
+ public String getDisplayName() {
+ return nf.getDisplayName();
+ }
+
+ public String getType() {
+ return nf.getType();
+ }
+
+ public void release() {
+ nf.release();
+ }
+}
Modified: labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/data/ConcreteTagFeed.java
===================================================================
--- labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/data/ConcreteTagFeed.java 2006-07-26 14:26:52 UTC (rev 5293)
+++ labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/data/ConcreteTagFeed.java 2006-07-26 16:03:22 UTC (rev 5294)
@@ -5,6 +5,7 @@
import java.io.OutputStream;
import java.io.IOException;
import java.util.List;
+import java.util.Map;
/**
* @author Adam Warski (adamw at aster.pl)
@@ -44,19 +45,7 @@
tagFeed.release();
}
- /*
- * Comments are not available for concretized feeds.
- */
-
- public boolean getCommentsEnabled() {
- return false;
+ public Map<String, Object> getAttributes() {
+ return tagFeed.getAttributes();
}
-
- public boolean getCommentsModerated() {
- return false;
- }
-
- public List<String> getGroupsAllowedToModerateComments() {
- return null;
- }
}
Modified: labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/data/Feed.java
===================================================================
--- labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/data/Feed.java 2006-07-26 14:26:52 UTC (rev 5293)
+++ labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/data/Feed.java 2006-07-26 16:03:22 UTC (rev 5294)
@@ -4,7 +4,7 @@
import javax.servlet.http.HttpServletRequest;
import java.io.OutputStream;
import java.io.IOException;
-import java.util.List;
+import java.util.Map;
/**
* A base interface for feeds.
@@ -50,26 +50,8 @@
public void release();
/**
- * Checks if comments are enabled for this feed. Should return true only if
- * this is a Shotoku feed.
- * @return True iff comments are enabled for this feed.
+ *
+ * @return Attributes of this feed.
*/
- public boolean getCommentsEnabled();
-
- /**
- * Checks if comments need to be approved by a moderator to be visible
- * publicly.
- * @return True iff comments need to be approved by a moderator to be
- * visible publicly.
- */
- public boolean getCommentsModerated();
-
- /**
- * Gets the groups that can moderate comments of elements of that feed.
- * Should return a non-empty and non-null list only when this is a
- * Shotoku feed.
- * @return A list of group names that are allowed to moderate Shotoku
- * comments of that feed's elements.
- */
- public List<String> getGroupsAllowedToModerateComments();
+ public Map<String, Object> getAttributes();
}
Modified: labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/data/FileBasedFeed.java
===================================================================
--- labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/data/FileBasedFeed.java 2006-07-26 14:26:52 UTC (rev 5293)
+++ labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/data/FileBasedFeed.java 2006-07-26 16:03:22 UTC (rev 5294)
@@ -36,8 +36,6 @@
import java.io.Writer;
import java.net.URL;
import java.util.Map;
-import java.util.List;
-import java.util.Arrays;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletRequest;
@@ -47,24 +45,15 @@
private String name;
private String displayName;
private String type;
+ private Map<String, Object> attributes;
- private boolean commentsEnabled;
- private List<String> groupsAllowedToModerate;
- private boolean commentsModerated;
-
public FileBasedFeed(String name, String displayName, String type,
File file, Map<String, Object> attributes) {
this.name = name;
this.displayName = displayName;
this.type = type;
this.file = file;
-
- commentsEnabled = Tools.isTrue(
- Tools.toString(attributes.get("commentsEnabled")));
- commentsModerated = Tools.isTrue(
- Tools.toString(attributes.get("commentsModerated")));
- groupsAllowedToModerate = Arrays.asList(
- Tools.toString(attributes.get("moderators")).split("[,]"));
+ this.attributes = attributes;
}
public void generate(URL url) throws IOException {
@@ -152,19 +141,7 @@
file.delete();
}
- /*
- * Comments.
- */
-
- public boolean getCommentsEnabled() {
- return commentsEnabled;
+ public Map<String, Object> getAttributes() {
+ return attributes;
}
-
- public boolean getCommentsModerated() {
- return commentsModerated;
- }
-
- public List<String> getGroupsAllowedToModerateComments() {
- return groupsAllowedToModerate;
- }
}
Modified: labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/data/Rss2TagFeed.java
===================================================================
--- labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/data/Rss2TagFeed.java 2006-07-26 14:26:52 UTC (rev 5293)
+++ labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/data/Rss2TagFeed.java 2006-07-26 16:03:22 UTC (rev 5294)
@@ -10,7 +10,7 @@
*/
public class Rss2TagFeed extends TagFeed {
public Rss2TagFeed(String name, String type,
- Map<String, String> attributes, VelocityContext vc) {
+ Map<String, Object> attributes, VelocityContext vc) {
super(name, type, attributes, vc);
}
Modified: labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/data/TagFeed.java
===================================================================
--- labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/data/TagFeed.java 2006-07-26 14:26:52 UTC (rev 5293)
+++ labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/data/TagFeed.java 2006-07-26 16:03:22 UTC (rev 5294)
@@ -2,6 +2,7 @@
import org.apache.velocity.VelocityContext;
import org.jboss.shotoku.ContentManager;
+import org.jboss.shotoku.tools.Tools;
import org.jboss.shotoku.tags.Tag;
import org.jboss.shotoku.tags.TagService;
import org.jboss.shotoku.tags.tools.TagTools;
@@ -23,7 +24,7 @@
public abstract class TagFeed implements SpecialFeed {
private String name;
private String type;
- Map<String, String> attributes;
+ Map<String, Object> attributes;
private VelocityContext vcOriginal;
private int limit;
@@ -31,18 +32,19 @@
private ContentManager cm;
public TagFeed(String name, String type,
- Map<String, String> attributes, VelocityContext vc) {
+ Map<String, Object> attributes, VelocityContext vc) {
this.name = name;
this.type = type;
this.attributes = attributes;
this.vcOriginal = vc;
nameLength = name.length();
- cm = ContentManager.getContentManager(attributes.get("id"),
- attributes.get("prefix"));
+ cm = ContentManager.getContentManager(
+ Tools.toString(attributes.get("id")),
+ Tools.toString(attributes.get("prefix")));
try {
- limit = Integer.parseInt(attributes.get("limit"));
+ limit = Integer.parseInt(Tools.toString(attributes.get("limit")));
} catch (NumberFormatException e) {
limit = 0;
}
@@ -104,7 +106,7 @@
String infoDataDecoded = infoTokens[1];
infoDataDecoded = URLDecoder.decode(infoDataDecoded, "UTF-8");
- String template = attributes.get("template");
+ String template = Tools.toString(attributes.get("template"));
List<Tag> tags;
TagService service = TagTools.getService();
@@ -219,19 +221,7 @@
}
- /*
- * No comments allowed on tag feeds.
- */
-
- public boolean getCommentsEnabled() {
- return false;
+ public Map<String, Object> getAttributes() {
+ return attributes;
}
-
- public boolean getCommentsModerated() {
- return false;
- }
-
- public List<String> getGroupsAllowedToModerateComments() {
- return null;
- }
}
Modified: labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/service/FeedsServiceImpl.java
===================================================================
--- labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/service/FeedsServiceImpl.java 2006-07-26 14:26:52 UTC (rev 5293)
+++ labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/service/FeedsServiceImpl.java 2006-07-26 16:03:22 UTC (rev 5294)
@@ -7,16 +7,26 @@
import org.jboss.shotoku.feeds.FeedsDescriptor;
import org.jboss.shotoku.feeds.FeedsConfigurationWatcher;
import org.jboss.shotoku.feeds.comments.FeedDoesNotExistException;
+import org.jboss.shotoku.feeds.comments.CommentsNotAvialableException;
+import org.jboss.shotoku.feeds.comments.UnauthorizedToCommentException;
+import org.jboss.shotoku.feeds.comments.CommentEntity;
import org.jboss.shotoku.feeds.data.Feed;
+import org.jboss.shotoku.feeds.data.CommentableFeed;
import org.jboss.shotoku.feeds.tools.FeedsConstants;
import org.jboss.shotoku.feeds.tools.FeedsTools;
import org.jboss.shotoku.service.AdministratedServiceImpl;
import org.jboss.shotoku.service.AdministratedService;
import org.jboss.shotoku.ContentManager;
+import org.jboss.shotoku.Node;
+import org.jboss.shotoku.user.UserNotFoundException;
+import org.jboss.shotoku.user.tools.UserConstants;
+import org.jboss.shotoku.tags.tools.UserTools;
import org.jboss.shotoku.tools.Constants;
import org.jboss.shotoku.aop.CacheItem;
import javax.ejb.Local;
+import javax.persistence.PersistenceContext;
+import javax.persistence.EntityManager;
import java.util.concurrent.ConcurrentHashMap;
/**
@@ -25,7 +35,7 @@
@Service(objectName = FeedsConstants.FEEDS_SERVICE_NAME)
@Local(FeedsServiceLocal.class)
@Management(FeedsService.class)
- at Depends(Constants.SHOTOKU_SERVICE_NAME)
+ at Depends({UserConstants.USER_SERVICE_NAME,Constants.SHOTOKU_SERVICE_NAME})
public class FeedsServiceImpl extends AdministratedServiceImpl
implements FeedsService, FeedsServiceLocal {
/*
@@ -39,7 +49,11 @@
private ConcurrentHashMap<String, FeedsDescriptor> fds;
public static final Object synchronizer = new Object();
- public Feed getFeed(String id, String name, String type) {
+ @SuppressWarnings({"UNUSED_SYMBOL"})
+ @PersistenceContext(unitName="feeds")
+ private EntityManager manager;
+
+ private FeedsDescriptor getFeedsDescriptor(String id) {
if (!fds.contains(id)) {
synchronized(synchronizer) {
if (!fds.contains(id)) {
@@ -48,13 +62,18 @@
}
}
- return fds.get(id).getFeed(name, type);
+ return fds.get(id);
}
+ public Feed getFeed(String id, String name, String type) {
+ return getFeedsDescriptor(id).getFeed(name, type);
+ }
+
public void addComment(String feedId, String feedName, String feedType,
String feedElement, String username,
- String title, String content)
- throws FeedDoesNotExistException {
+ String title, String content, String userIp)
+ throws FeedDoesNotExistException, CommentsNotAvialableException,
+ UnauthorizedToCommentException {
System.out.println("ADD COMMENT:");
System.out.println("feedId = " + feedId);
System.out.println("feedName = " + feedName);
@@ -64,11 +83,36 @@
System.out.println("title = " + title);
System.out.println("content = " + content);
- Feed feed = getFeed(feedId, feedName, feedType);
+ // Getting the feed and checking if it exists.
+ CommentableFeed feed = getFeedsDescriptor(feedId).getCommentableFeed(
+ feedName, feedType);
if (feed == null) {
throw new FeedDoesNotExistException();
}
+
+ // Checking if comments are enabled for this feed.
+ if (!feed.getCommentsEnabled()) {
+ throw new CommentsNotAvialableException();
+ }
+
+ // Checking if there is a user logged in and if it is a valid user.
+ try {
+ UserTools.getService().getUser(username);
+ } catch (UserNotFoundException e) {
+ throw new UnauthorizedToCommentException(e);
+ }
+
+ // Checking if the commented item exists in the content manager.
+ Node commentedElement = feed.getNodeForFeedElement(feedElement);
+
+ if (commentedElement == null) {
+ throw new FeedDoesNotExistException("Invalid feed element.");
+ }
+
+ // Saving the comment for later addition to Shotoku.
+ manager.persist(new CommentEntity(feedId, feedName, feedType,
+ feedElement, username, title, content));
}
/*
Modified: labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/tag/ShotokuFeedTagHandler.java
===================================================================
--- labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/tag/ShotokuFeedTagHandler.java 2006-07-26 14:26:52 UTC (rev 5293)
+++ labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/tag/ShotokuFeedTagHandler.java 2006-07-26 16:03:22 UTC (rev 5294)
@@ -7,6 +7,7 @@
import org.jboss.shotoku.tools.Tools;
import org.jboss.shotoku.feeds.tools.FeedsTools;
import org.jboss.shotoku.feeds.data.NormalFeed;
+import org.jboss.shotoku.feeds.data.CommentableFeed;
import org.jboss.shotoku.feeds.FeedFactory;
import org.jboss.shotoku.feeds.FeedsDescriptor;
import org.jboss.shotoku.feeds.tools.FeedsConstants;
@@ -127,6 +128,7 @@
FeedsTools.prepareVelocityContext(attributes, vc);
NodeList feedNodeChildren = getDefinition().getChildNodes();
+ org.jboss.shotoku.NodeList nodesNodeList = null;
for (int i = 0; i < feedNodeChildren.getLength(); i++) {
// For each search node, generating and performing the
// search, placing it under the demanded attribute in
@@ -146,6 +148,10 @@
vc.put(searchNameAttr, list);
+ if ("nodes".equals(searchNameAttr)) {
+ nodesNodeList = list;
+ }
+
// Calculating the age of the youngest node and putting it into the context.
long youngestNode = 0;
if (list.size() > 0) {
@@ -178,7 +184,8 @@
w.close();
// And add the feed.
- fd.addFeed(feedName, feedType, newFeed);
+ fd.addCommentableFeed(feedName, feedType,
+ new CommentableFeed(newFeed, nodesNodeList));
} catch (Exception e) {
log.error("Cannot merge template " + template + " for "
+ feedName + ".", e);
Modified: labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/tag/TagFeedTagHandler.java
===================================================================
--- labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/tag/TagFeedTagHandler.java 2006-07-26 14:26:52 UTC (rev 5293)
+++ labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/tag/TagFeedTagHandler.java 2006-07-26 16:03:22 UTC (rev 5294)
@@ -41,7 +41,8 @@
try {
fd.addSpecialFeed(feedName, feedType,
(SpecialFeed) feedClass.getConstructor(String.class,
- String.class, Map.class, VelocityContext.class).newInstance(feedName,
+ String.class, Map.class, VelocityContext.class).newInstance(
+ feedName,
feedType, attributes, vc));
} catch (Exception e) {
return false;
Modified: labs/shotoku/trunk/shotoku-user/src/java/org/jboss/shotoku/user/UserService.java
===================================================================
--- labs/shotoku/trunk/shotoku-user/src/java/org/jboss/shotoku/user/UserService.java 2006-07-26 14:26:52 UTC (rev 5293)
+++ labs/shotoku/trunk/shotoku-user/src/java/org/jboss/shotoku/user/UserService.java 2006-07-26 16:03:22 UTC (rev 5294)
@@ -1,5 +1,6 @@
package org.jboss.shotoku.user;
+import javax.servlet.http.HttpServletRequest;
import java.util.List;
/**
@@ -10,6 +11,7 @@
public Group getGroup(String groupName) throws GroupNotFoundException;
public List<User> getUsersInGroup(String groupName) throws GroupNotFoundException;
public List<Group> getGroupsOfUser(String userName) throws UserNotFoundException;
+ public String getUserName(HttpServletRequest request);
/*
* SERVICE MANAGEMENT METHODS
Modified: labs/shotoku/trunk/shotoku-user/src/java/org/jboss/shotoku/user/service/UserServiceImpl.java
===================================================================
--- labs/shotoku/trunk/shotoku-user/src/java/org/jboss/shotoku/user/service/UserServiceImpl.java 2006-07-26 14:26:52 UTC (rev 5293)
+++ labs/shotoku/trunk/shotoku-user/src/java/org/jboss/shotoku/user/service/UserServiceImpl.java 2006-07-26 16:03:22 UTC (rev 5294)
@@ -32,6 +32,7 @@
import org.apache.log4j.Logger;
import javax.ejb.Local;
+import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.ArrayList;
@@ -60,6 +61,10 @@
public User getUser(String userName) throws UserNotFoundException {
try {
+ if (userName == null) {
+ throw new UserNotFoundException("Null user name.");
+ }
+
return new JBossPortalUser(um.findUserByUserName(userName));
} catch (ModuleException e) {
throw new UserNotFoundException(e);
@@ -68,6 +73,10 @@
public Group getGroup(String groupName) throws GroupNotFoundException {
try {
+ if (groupName == null) {
+ throw new GroupNotFoundException("Null group name.");
+ }
+
return new JBossPortalGroup(rm.findRoleByName(groupName));
} catch (ModuleException e) {
throw new GroupNotFoundException(e);
@@ -106,6 +115,10 @@
}
}
+ public String getUserName(HttpServletRequest request) {
+ return null;
+ }
+
/*
* Service lifecycle management.
*/
More information about the jboss-svn-commits
mailing list