[jboss-svn-commits] JBL Code SVN: r5369 - in labs/shotoku/trunk: shotoku-base/src/java/org/jboss/shotoku/tools shotoku-feeds shotoku-feeds/src/java/org/jboss/shotoku/feeds shotoku-feeds/src/java/org/jboss/shotoku/feeds/data shotoku-feeds/src/java/org/jboss/shotoku/feeds/data/model shotoku-feeds/src/java/org/jboss/shotoku/feeds/data/special shotoku-feeds/src/java/org/jboss/shotoku/feeds/service shotoku-feeds/src/java/org/jboss/shotoku/feeds/tag shotoku-feeds/src/java/org/jboss/shotoku/feeds/tools shotoku-feeds/src/java/org/jboss/shotoku/feeds/view shotoku-feeds/src/java/org/jboss/shotoku/feeds/view/getter shotoku-feeds/src/web/WEB-INF
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Mon Jul 31 17:06:37 EDT 2006
Author: adamw
Date: 2006-07-31 17:05:54 -0400 (Mon, 31 Jul 2006)
New Revision: 5369
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/ShotokuCommentableFeed.java
labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/data/model/DummyFeedEntries.java
labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/view/BasicBean.java
labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/view/FeedBean.java
labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/view/ViewConfigurationBean.java
labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/view/getter/
labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/view/getter/BlankFeedGetter.java
labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/view/getter/StandardFeedGetter.java
labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/view/getter/ViewFeedGetter.java
Removed:
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/CommentsService.java
labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/FeedFactory.java
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/data/AtomFeed.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/InformaBasedFeed.java
labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/data/RdfFeed.java
labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/data/RomeBasedFeed.java
labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/data/Rss2Feed.java
labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/data/special/CommentFeed.java
labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/data/special/ConcreteCommentFeed.java
labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/data/special/ConcreteTagFeed.java
labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/data/special/Rss2CommentFeed.java
labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/data/special/Rss2TagFeed.java
labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/data/special/TagFeed.java
labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/service/CommentsServiceImpl.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/AggregatedFeedTagHandler.java
labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/tag/RemoteFeedTagHandler.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/tools/FeedsConstants.java
labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/tools/VelocityContextAttributes.java
labs/shotoku/trunk/shotoku-feeds/src/web/WEB-INF/faces-config.xml
Log:
http://jira.jboss.org/jira/browse/JBSHOTOKU-36
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-31 21:00:05 UTC (rev 5368)
+++ labs/shotoku/trunk/shotoku-base/src/java/org/jboss/shotoku/tools/Tools.java 2006-07-31 21:05:54 UTC (rev 5369)
@@ -141,28 +141,28 @@
}
/**
- * Reads all attributes of the given node and returns them as a map. Only
- * signle-value attributes are supported.
- * @param root Node from which to read the attributes.
- * @return A map holding all attributes of the given node.
- */
- public static Map<String, String> getMapFromNodeAttributes(Node root) {
- Map<String, String> properties = new HashMap<String, String>();
- NamedNodeMap nnm = root.getAttributes();
+ * Reads all attributes of the given node and returns them as a map. Only
+ * signle-value attributes are supported.
+ * @param root Node from which to read the attributes.
+ * @return A map holding all attributes of the given node.
+ */
+ public static Map<String, String> getMapFromNodeAttributes(Node root) {
+ Map<String, String> properties = new HashMap<String, String>();
+ NamedNodeMap nnm = root.getAttributes();
- if (nnm != null) {
- Node n;
+ if (nnm != null) {
+ Node n;
- for (int i=0; i<nnm.getLength(); i++) {
- n = nnm.item(i);
- if (n.getNodeType() == Node.ATTRIBUTE_NODE) {
- properties.put(n.getNodeName(), Tools.unmarshallText(n));
- }
- }
- }
+ for (int i=0; i<nnm.getLength(); i++) {
+ n = nnm.item(i);
+ if (n.getNodeType() == Node.ATTRIBUTE_NODE) {
+ properties.put(n.getNodeName(), Tools.unmarshallText(n));
+ }
+ }
+ }
- return properties;
- }
+ return properties;
+ }
/**
* From the given string, removes unnecessary / in the middle and
@@ -332,6 +332,18 @@
}
/**
+ * Checks if the link is an outside link.
+ * @param link Link to check.
+ * @return True iff the given link is an outside link.
+ */
+ public static boolean isOutsideLink(String link) {
+ link = link.trim();
+ return link.startsWith("http:") || link.startsWith("ftp:")
+ || link.startsWith("https:") || link.startsWith("mailto:")
+ || link.startsWith("news:") || link.startsWith("file:");
+ }
+
+ /**
* Transferes all bytes from the given input stream to the given output
* stream.
*
@@ -424,7 +436,7 @@
public static String getFileString(File file) throws IOException {
return Charset.forName(
System.getProperty("file.encoding")).decode(
- getFileBytes(file)).toString();
+ getFileBytes(file)).toString();
}
/**
Modified: labs/shotoku/trunk/shotoku-feeds/project.xml
===================================================================
--- labs/shotoku/trunk/shotoku-feeds/project.xml 2006-07-31 21:00:05 UTC (rev 5368)
+++ labs/shotoku/trunk/shotoku-feeds/project.xml 2006-07-31 21:05:54 UTC (rev 5369)
@@ -93,6 +93,12 @@
<artifactId>jboss-annotations-ejb3</artifactId>
<jar>jboss-annotations-ejb3.jar</jar>
</dependency>
+
+ <dependency>
+ <groupId>myfaces</groupId>
+ <artifactId>myfaces-all</artifactId>
+ <version>1.1.1</version>
+ </dependency>
</dependencies>
<build>
Modified: labs/shotoku/trunk/shotoku-feeds/shotoku-feeds.iml
===================================================================
--- labs/shotoku/trunk/shotoku-feeds/shotoku-feeds.iml 2006-07-31 21:00:05 UTC (rev 5368)
+++ labs/shotoku/trunk/shotoku-feeds/shotoku-feeds.iml 2006-07-31 21:05:54 UTC (rev 5369)
@@ -17,6 +17,7 @@
<orderEntry type="module" module-name="shotoku-tags" />
<orderEntry type="library" name="junit" level="application" />
<orderEntry type="module" module-name="shotoku-user" />
+ <orderEntry type="library" name="myfaces" level="application" />
<orderEntryProperties />
</component>
</module>
Modified: labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/CommentsService.java
===================================================================
--- labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/CommentsService.java 2006-07-31 21:00:05 UTC (rev 5368)
+++ labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/CommentsService.java 2006-07-31 21:05:54 UTC (rev 5369)
@@ -18,7 +18,7 @@
throws FeedDoesNotExistException, CommentsNotAvialableException,
UnauthorizedToCommentException;
- public String getCommentFeedLink(String feedId, String feedName,
+ public String getCommentFeedLink(String feedName,
String feedElement, String feedType,
String type);
Modified: labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/FeedFactory.java
===================================================================
--- labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/FeedFactory.java 2006-07-31 21:00:05 UTC (rev 5368)
+++ labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/FeedFactory.java 2006-07-31 21:05:54 UTC (rev 5369)
@@ -71,8 +71,8 @@
* @param type Type of feed to create.
* @return A new instance of a feed of the given type.
*/
- public static NormalFeed getNewNormalFeed(String name, String displayName,
- String type,
+ public static NormalFeed getNewNormalFeed(String id, String name,
+ String displayName, String type,
Map<String, Object> attributes) {
Class feedClass = feedClasses.get(type);
if (feedClass == null) return null;
@@ -84,9 +84,9 @@
try {
File file = File.createTempFile("shotoku-feeds" + nextInt, type);
- return (NormalFeed) feedClass.getConstructor(
+ return (NormalFeed) feedClass.getConstructor(String.class,
String.class, String.class, String.class, File.class,
- Map.class).newInstance(name, displayName, type, file,
+ Map.class).newInstance(id, name, displayName, type, file,
attributes);
} catch (Exception e) {
return null;
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-31 21:00:05 UTC (rev 5368)
+++ labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/FeedsDescriptor.java 2006-07-31 21:05:54 UTC (rev 5369)
@@ -111,18 +111,14 @@
ContentManager.getProperty(FeedsConstants.CONFIGID, ""),
ContentManager.getProperty(FeedsConstants.CONFIGDIR, ""));
- // From the global Shotoku configuration, reading the config file
- // location in Shotoku repositories.
- Properties props = getProperties();
-
// From attributes read from Shotoku, getting the content manager
// configuration for this feeds id.
ContentManager cm = ContentManager.getContentManager(
- props.getProperty(id + FeedsConstants.FEEDID),
- props.getProperty(id + FeedsConstants.FEEDDIR)
+ getProperty(FeedsConstants.FEEDID),
+ getProperty(FeedsConstants.FEEDDIR)
);
- vrm = new VariableResolverManager(id, props);
+ vrm = new VariableResolverManager(id, getProperties());
feedTagHandlers = new HashMap<String, Map<String, FeedTagHandler>>();
// Creating the maps that will hold the feeds.
@@ -153,10 +149,14 @@
}
}
- public Properties getProperties() {
+ private Properties getProperties() {
return fcw.get(confKey);
}
+ public String getProperty(String name) {
+ return getProperties().getProperty(id + name);
+ }
+
private void addFeedDefinitions(org.jboss.shotoku.Node node) throws SAXException, IOException {
DOMParser parser = new DOMParser();
// Parse the descriptor at the given Shotoku node.
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-31 21:00:05 UTC (rev 5368)
+++ labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/FeedsService.java 2006-07-31 21:05:54 UTC (rev 5369)
@@ -8,6 +8,7 @@
* @author Adam Warski (adamw at aster.pl)
*/
public interface FeedsService extends AdministratedService {
+ public String getProperty(String id, String name);
public Feed getFeed(String id, String name, String type);
public CommentableFeed getCommentableFeed(String id, String name,
String type);
Modified: labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/data/AtomFeed.java
===================================================================
--- labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/data/AtomFeed.java 2006-07-31 21:00:05 UTC (rev 5368)
+++ labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/data/AtomFeed.java 2006-07-31 21:05:54 UTC (rev 5369)
@@ -28,9 +28,10 @@
import org.jboss.shotoku.feeds.tools.FeedsConstants;
public class AtomFeed extends RomeBasedFeed {
- public AtomFeed(String name, String displayName, String type, File file,
+ public AtomFeed(String id, String name, String displayName, String type,
+ File file,
Map<String, Object> attributes) {
- super(name, displayName, type, file, attributes);
+ super(id, name, displayName, type, file, attributes);
}
@Override
Deleted: 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-31 21:00:05 UTC (rev 5368)
+++ labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/data/CommentableFeed.java 2006-07-31 21:05:54 UTC (rev 5369)
@@ -1,125 +0,0 @@
-package org.jboss.shotoku.feeds.data;
-
-import org.jboss.shotoku.NodeList;
-import org.jboss.shotoku.Node;
-import org.jboss.shotoku.feeds.data.model.FeedEntries;
-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();
- }
-
- public FeedEntries getFeedEntries() {
- return nf.getFeedEntries();
- }
-}
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-31 21:00:05 UTC (rev 5368)
+++ labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/data/CommentableFeed.java 2006-07-31 21:05:54 UTC (rev 5369)
@@ -0,0 +1,21 @@
+package org.jboss.shotoku.feeds.data;
+
+import org.jboss.shotoku.feeds.comments.UnauthorizedToCommentException;
+import org.jboss.shotoku.feeds.comments.CommentsNotAvialableException;
+import org.jboss.shotoku.feeds.comments.FeedDoesNotExistException;
+
+import java.util.List;
+
+/**
+ * @author Adam Warski (adamw at aster.pl)
+ */
+public interface CommentableFeed extends NormalFeed {
+ public boolean getCommentsEnabled();
+ public boolean getCommentsModerated();
+ public List<String> getGroupsAllowedToModerateComments();
+ public boolean getFeedElementExists(String feedElement);
+ public void addComment(String feedElement, String username, String title,
+ String content, String userIp)
+ throws UnauthorizedToCommentException,
+ CommentsNotAvialableException, FeedDoesNotExistException;
+}
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-31 21:00:05 UTC (rev 5368)
+++ labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/data/Feed.java 2006-07-31 21:05:54 UTC (rev 5369)
@@ -46,6 +46,13 @@
*/
public String getType();
/**
+ * Gets the id of the feed configuration group in which this feed
+ * was defined.
+ * @return Id of the feed configuration group to which this feed
+ * belongs.
+ */
+ public String getId();
+ /**
* Called when this feed is no longer needed, so that any resources can
* be released (like temporary files).
*/
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-31 21:00:05 UTC (rev 5368)
+++ labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/data/FileBasedFeed.java 2006-07-31 21:05:54 UTC (rev 5369)
@@ -41,14 +41,16 @@
import javax.servlet.http.HttpServletRequest;
public abstract class FileBasedFeed implements NormalFeed {
+ private String id;
private File file;
private String name;
private String displayName;
private String type;
private Map<String, Object> attributes;
- public FileBasedFeed(String name, String displayName, String type,
- File file, Map<String, Object> attributes) {
+ public FileBasedFeed(String id, String name, String displayName,
+ String type, File file, Map<String, Object> attributes) {
+ this.id = id;
this.name = name;
this.displayName = displayName;
this.type = type;
@@ -137,6 +139,10 @@
return type;
}
+ public String getId() {
+ return id;
+ }
+
public void release() {
file.delete();
}
Modified: labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/data/InformaBasedFeed.java
===================================================================
--- labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/data/InformaBasedFeed.java 2006-07-31 21:00:05 UTC (rev 5368)
+++ labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/data/InformaBasedFeed.java 2006-07-31 21:05:54 UTC (rev 5369)
@@ -16,9 +16,10 @@
import org.jboss.shotoku.feeds.data.model.FeedEntry;
public abstract class InformaBasedFeed extends FileBasedFeed {
- public InformaBasedFeed(String name, String displayName, String type,
- File file, Map<String, Object> attributes) {
- super(name, displayName, type, file, attributes);
+ public InformaBasedFeed(String id, String name, String displayName,
+ String type, File file,
+ Map<String, Object> attributes) {
+ super(id, name, displayName, type, file, attributes);
}
protected abstract ChannelExporterIF getExporter() throws IOException;
Modified: labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/data/RdfFeed.java
===================================================================
--- labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/data/RdfFeed.java 2006-07-31 21:00:05 UTC (rev 5368)
+++ labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/data/RdfFeed.java 2006-07-31 21:05:54 UTC (rev 5369)
@@ -30,9 +30,9 @@
import org.jboss.shotoku.feeds.tools.FeedsConstants;
public class RdfFeed extends InformaBasedFeed {
- public RdfFeed(String name, String displayName, String type, File file,
+ public RdfFeed(String id, String name, String displayName, String type, File file,
Map<String, Object> attributes) {
- super(name, displayName, type, file, attributes);
+ super(id, name, displayName, type, file, attributes);
}
protected ChannelExporterIF getExporter() throws IOException {
Modified: labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/data/RomeBasedFeed.java
===================================================================
--- labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/data/RomeBasedFeed.java 2006-07-31 21:00:05 UTC (rev 5368)
+++ labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/data/RomeBasedFeed.java 2006-07-31 21:05:54 UTC (rev 5369)
@@ -37,9 +37,10 @@
import org.jboss.shotoku.feeds.rome.CommentRssModule;
public abstract class RomeBasedFeed extends FileBasedFeed {
- public RomeBasedFeed(String name, String displayName, String type,
- File file, Map<String, Object> attributes){
- super(name, displayName, type, file, attributes);
+ public RomeBasedFeed(String id, String name, String displayName,
+ String type, File file,
+ Map<String, Object> attributes){
+ super(id, name, displayName, type, file, attributes);
}
protected abstract void setFeedType(SyndFeed feed);
Modified: labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/data/Rss2Feed.java
===================================================================
--- labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/data/Rss2Feed.java 2006-07-31 21:00:05 UTC (rev 5368)
+++ labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/data/Rss2Feed.java 2006-07-31 21:05:54 UTC (rev 5369)
@@ -28,9 +28,9 @@
import org.jboss.shotoku.feeds.tools.FeedsConstants;
public class Rss2Feed extends RomeBasedFeed {
- public Rss2Feed(String name, String displayName, String type,
+ public Rss2Feed(String id, String name, String displayName, String type,
File file, Map<String, Object> attributes) {
- super(name, displayName, type, file, attributes);
+ super(id, name, displayName, type, file, attributes);
}
@Override
Copied: labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/data/ShotokuCommentableFeed.java (from rev 5347, 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-28 20:45:47 UTC (rev 5347)
+++ labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/data/ShotokuCommentableFeed.java 2006-07-31 21:05:54 UTC (rev 5369)
@@ -0,0 +1,159 @@
+package org.jboss.shotoku.feeds.data;
+
+import org.jboss.shotoku.NodeList;
+import org.jboss.shotoku.Node;
+import org.jboss.shotoku.feeds.data.model.FeedEntries;
+import org.jboss.shotoku.feeds.tools.FeedsTools;
+import org.jboss.shotoku.feeds.comments.UnauthorizedToCommentException;
+import org.jboss.shotoku.feeds.comments.CommentsNotAvialableException;
+import org.jboss.shotoku.feeds.comments.FeedDoesNotExistException;
+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 ShotokuCommentableFeed implements CommentableFeed {
+ private NormalFeed nf;
+
+ private boolean commentsEnabled;
+ private List<String> groupsAllowedToModerate;
+ private boolean commentsModerated;
+ private NodeList feedElements;
+
+ public ShotokuCommentableFeed(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 boolean getFeedElementExists(String feedElement) {
+ return getNodeForFeedElement(feedElement) != null;
+ }
+
+ public Node getNodeForFeedElement(String feedElement) {
+ String path = Tools.normalizeSlashes(feedElement, false);
+ for (Node n : feedElements) {
+ if (n.getFullName().equals(path)) {
+ return n;
+ }
+ }
+
+ return null;
+ }
+
+ public void addComment(String feedElement, String username, String title,
+ String content, String userIp)
+ throws UnauthorizedToCommentException,
+ CommentsNotAvialableException, FeedDoesNotExistException {
+ // It may be possible that the feed element is a full URL,
+ // so we have to cut off the unnecessary part.
+ if (Tools.isOutsideLink(feedElement)) {
+ try {
+ int i = feedElement.indexOf(':');
+ feedElement = feedElement.substring(i+3);
+ i = feedElement.indexOf('/');
+ feedElement = feedElement.substring(i+1);
+ } catch (IndexOutOfBoundsException e) {
+ throw new FeedDoesNotExistException("Invalid feed element.");
+ }
+ }
+
+ FeedsTools.getCommentsService().addComment(nf.getId(),
+ nf.getName(), feedElement, nf.getType(), username,
+ title, content, userIp);
+ }
+
+ /*
+ * 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();
+ }
+
+ public FeedEntries getFeedEntries() {
+ return nf.getFeedEntries();
+ }
+
+ public String getId() {
+ return nf.getId();
+ }
+}
Added: labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/data/model/DummyFeedEntries.java
===================================================================
--- labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/data/model/DummyFeedEntries.java 2006-07-31 21:00:05 UTC (rev 5368)
+++ labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/data/model/DummyFeedEntries.java 2006-07-31 21:05:54 UTC (rev 5369)
@@ -0,0 +1,14 @@
+package org.jboss.shotoku.feeds.data.model;
+
+import java.util.Date;
+import java.util.List;
+import java.util.ArrayList;
+
+/**
+ * @author Adam Warski (adamw at aster.pl)
+ */
+public class DummyFeedEntries extends FeedEntries {
+ public DummyFeedEntries() {
+ super("", "", "", null, "", new ArrayList<FeedEntry>());
+ }
+}
Modified: labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/data/special/CommentFeed.java
===================================================================
--- labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/data/special/CommentFeed.java 2006-07-31 21:00:05 UTC (rev 5368)
+++ labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/data/special/CommentFeed.java 2006-07-31 21:05:54 UTC (rev 5369)
@@ -2,9 +2,9 @@
import org.apache.velocity.VelocityContext;
import org.jboss.shotoku.ContentManager;
-import org.jboss.shotoku.Node;
import org.jboss.shotoku.NodeList;
import org.jboss.shotoku.Directory;
+import org.jboss.shotoku.Node;
import org.jboss.shotoku.search.Search;
import org.jboss.shotoku.search.DirectoryIncludeParameter;
import org.jboss.shotoku.search.DateSortParameter;
@@ -12,6 +12,7 @@
import org.jboss.shotoku.exceptions.ResourceDoesNotExist;
import org.jboss.shotoku.feeds.data.Feed;
import org.jboss.shotoku.feeds.data.CommentableFeed;
+import org.jboss.shotoku.feeds.data.ShotokuCommentableFeed;
import org.jboss.shotoku.feeds.data.model.FeedEntries;
import org.jboss.shotoku.feeds.tools.FeedsTools;
import org.jboss.shotoku.feeds.tools.NodesFeedsProperties;
@@ -31,6 +32,7 @@
* @author Adam Warski (adamw at aster.pl)
*/
public abstract class CommentFeed implements SpecialFeed {
+ private String id;
private String name;
private String type;
Map<String, Object> attributes;
@@ -39,8 +41,9 @@
private int nameLength;
private ContentManager cm;
- public CommentFeed(String name, String type,
+ public CommentFeed(String id, String name, String type,
Map<String, Object> attributes, VelocityContext vc) {
+ this.id = id;
this.name = name;
this.type = type;
this.attributes = attributes;
@@ -71,22 +74,24 @@
check(fullName.length() >= nameLength+1);
String info = fullName.substring(nameLength+1);
- String[] infoTokens = info.split("[/]");
- check(infoTokens.length == 4);
- String feedId = Tools.decodeURL(infoTokens[0]);
- String feedName = Tools.decodeURL(infoTokens[1]);
- String feedElement = Tools.decodeURL(infoTokens[2]);
- String feedType = Tools.decodeURL(infoTokens[3]);
+ int lastSlash = info.lastIndexOf('/');
+ check(lastSlash != -1);
+ String feedName = info.substring(0, lastSlash);
+ String feedElement = info.substring(lastSlash+1);
CommentableFeed feed = FeedsTools.getService().getCommentableFeed(
- feedId, feedName, feedType);
+ id, feedName, type);
check(feed != null);
//noinspection ConstantConditions
check(feed.getCommentsEnabled());
+ check(feed instanceof ShotokuCommentableFeed);
- Node commentedNode = feed.getNodeForFeedElement(feedElement);
+ //noinspection ConstantConditions
+ ShotokuCommentableFeed scf = (ShotokuCommentableFeed) feed;
+ Node commentedNode = scf.getNodeForFeedElement(feedElement);
+
check(commentedNode != null);
NodeList comments;
@@ -177,4 +182,8 @@
public FeedEntries getFeedEntries() {
throw new RuntimeException("Can't get entries of a special feed");
}
+
+ public String getId() {
+ return id;
+ }
}
Modified: labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/data/special/ConcreteCommentFeed.java
===================================================================
--- labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/data/special/ConcreteCommentFeed.java 2006-07-31 21:00:05 UTC (rev 5368)
+++ labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/data/special/ConcreteCommentFeed.java 2006-07-31 21:05:54 UTC (rev 5369)
@@ -54,4 +54,8 @@
public FeedEntries getFeedEntries() {
return commentFeed.getFeedEntries();
}
+
+ public String getId() {
+ return commentFeed.getId();
+ }
}
Modified: labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/data/special/ConcreteTagFeed.java
===================================================================
--- labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/data/special/ConcreteTagFeed.java 2006-07-31 21:00:05 UTC (rev 5368)
+++ labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/data/special/ConcreteTagFeed.java 2006-07-31 21:05:54 UTC (rev 5369)
@@ -54,4 +54,8 @@
public FeedEntries getFeedEntries() {
return tagFeed.getFeedEntries();
}
+
+ public String getId() {
+ return tagFeed.getId();
+ }
}
Modified: labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/data/special/Rss2CommentFeed.java
===================================================================
--- labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/data/special/Rss2CommentFeed.java 2006-07-31 21:00:05 UTC (rev 5368)
+++ labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/data/special/Rss2CommentFeed.java 2006-07-31 21:05:54 UTC (rev 5369)
@@ -9,9 +9,9 @@
* @author Adam Warski (adamw at aster.pl)
*/
public class Rss2CommentFeed extends CommentFeed {
- public Rss2CommentFeed(String name, String type,
+ public Rss2CommentFeed(String id, String name, String type,
Map<String, Object> attributes, VelocityContext vc) {
- super(name, type, attributes, vc);
+ super(id, name, type, attributes, vc);
}
public String getContentType() {
Modified: labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/data/special/Rss2TagFeed.java
===================================================================
--- labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/data/special/Rss2TagFeed.java 2006-07-31 21:00:05 UTC (rev 5368)
+++ labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/data/special/Rss2TagFeed.java 2006-07-31 21:05:54 UTC (rev 5369)
@@ -1,7 +1,6 @@
package org.jboss.shotoku.feeds.data.special;
import org.jboss.shotoku.feeds.tools.FeedsConstants;
-import org.jboss.shotoku.feeds.data.special.TagFeed;
import org.apache.velocity.VelocityContext;
import java.util.Map;
@@ -10,9 +9,9 @@
* @author Adam Warski (adamw at aster.pl)
*/
public class Rss2TagFeed extends TagFeed {
- public Rss2TagFeed(String name, String type,
+ public Rss2TagFeed(String id, String name, String type,
Map<String, Object> attributes, VelocityContext vc) {
- super(name, type, attributes, vc);
+ super(id, name, type, attributes, vc);
}
public String getContentType() {
Modified: labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/data/special/TagFeed.java
===================================================================
--- labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/data/special/TagFeed.java 2006-07-31 21:00:05 UTC (rev 5368)
+++ labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/data/special/TagFeed.java 2006-07-31 21:05:54 UTC (rev 5369)
@@ -26,6 +26,7 @@
* @author Adam Warski (adamw at aster.pl)
*/
public abstract class TagFeed implements SpecialFeed {
+ private String id;
private String name;
private String type;
Map<String, Object> attributes;
@@ -35,8 +36,9 @@
private int nameLength;
private ContentManager cm;
- public TagFeed(String name, String type,
+ public TagFeed(String id, String name, String type,
Map<String, Object> attributes, VelocityContext vc) {
+ this.id = id;
this.name = name;
this.type = type;
this.attributes = attributes;
@@ -233,4 +235,8 @@
public FeedEntries getFeedEntries() {
throw new RuntimeException("Can't get entries of a special feed");
}
+
+ public String getId() {
+ return id;
+ }
}
Modified: labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/service/CommentsServiceImpl.java
===================================================================
--- labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/service/CommentsServiceImpl.java 2006-07-31 21:00:05 UTC (rev 5368)
+++ labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/service/CommentsServiceImpl.java 2006-07-31 21:05:54 UTC (rev 5369)
@@ -12,6 +12,7 @@
import org.jboss.shotoku.feeds.comments.UnauthorizedToCommentException;
import org.jboss.shotoku.feeds.comments.CommentEntity;
import org.jboss.shotoku.feeds.data.CommentableFeed;
+import org.jboss.shotoku.feeds.data.ShotokuCommentableFeed;
import org.jboss.shotoku.user.tools.UserConstants;
import org.jboss.shotoku.user.UserNotFoundException;
import org.jboss.shotoku.tools.Constants;
@@ -91,9 +92,7 @@
}
// Checking if the commented item exists in the content manager.
- Node commentedElement = feed.getNodeForFeedElement(feedElement);
-
- if (commentedElement == null) {
+ if (!feed.getFeedElementExists(feedElement)) {
throw new FeedDoesNotExistException("Invalid feed element.");
}
@@ -107,14 +106,11 @@
}
}
- public String getCommentFeedLink(String feedId, String feedName,
+ public String getCommentFeedLink(String feedName,
String feedElement, String feedType,
String type) {
- return "/feeds/comment/" +
- Tools.encodeURL(feedId) + "/" +
- Tools.encodeURL(feedName) + "/" +
- Tools.encodeURL(feedElement) + "/" +
- Tools.encodeURL(feedType) + "/" + type;
+ return "/feeds/comments/" + feedName + "/" +
+ Tools.encodeURL(feedElement) + "/" + type;
}
private String getCommentsDirectoryName(Node commentedNode) {
@@ -193,12 +189,15 @@
ce.getFeedName(), ce.getFeedType());
// Checking if the feed exists.
- if (feed == null || !feed.getCommentsEnabled()) {
+ if (feed == null || !feed.getCommentsEnabled() ||
+ !(feed instanceof ShotokuCommentableFeed)) {
failedComments.add(ce);
continue;
}
- Node commentedElement = feed.getNodeForFeedElement(
+ ShotokuCommentableFeed scf = (ShotokuCommentableFeed) feed;
+
+ Node commentedElement = scf.getNodeForFeedElement(
ce.getFeedElement());
// Checking if the commented element exists.
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-31 21:00:05 UTC (rev 5368)
+++ labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/service/FeedsServiceImpl.java 2006-07-31 21:05:54 UTC (rev 5369)
@@ -52,6 +52,10 @@
return fds.get(id);
}
+ public String getProperty(String id, String name) {
+ return getFeedsDescriptor(id).getProperty(name);
+ }
+
public Feed getFeed(String id, String name, String type) {
return getFeedsDescriptor(id).getFeed(name, type);
}
Modified: labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/tag/AggregatedFeedTagHandler.java
===================================================================
--- labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/tag/AggregatedFeedTagHandler.java 2006-07-31 21:00:05 UTC (rev 5368)
+++ labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/tag/AggregatedFeedTagHandler.java 2006-07-31 21:05:54 UTC (rev 5369)
@@ -75,7 +75,7 @@
return false;
}
- NormalFeed feed = FeedFactory.getNewNormalFeed(feedName,
+ NormalFeed feed = FeedFactory.getNewNormalFeed(fd.getId(), feedName,
Tools.toString(attributes.get(FeedDefAttributes.DISP_NAME)),
feedType, attributes);
Modified: labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/tag/RemoteFeedTagHandler.java
===================================================================
--- labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/tag/RemoteFeedTagHandler.java 2006-07-31 21:00:05 UTC (rev 5368)
+++ labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/tag/RemoteFeedTagHandler.java 2006-07-31 21:05:54 UTC (rev 5369)
@@ -30,8 +30,8 @@
FeedDefAttributes.DISP_NAME));
try {
- NormalFeed feed = FeedFactory.getNewNormalFeed(feedName,
- displayName, feedType, getAttributes());
+ NormalFeed feed = FeedFactory.getNewNormalFeed(fd.getId(),
+ feedName, displayName, feedType, getAttributes());
feed.generate(new URL(address));
fd.addFeed(feedName, feedType, feed);
} catch (Exception e) {
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-31 21:00:05 UTC (rev 5368)
+++ labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/tag/ShotokuFeedTagHandler.java 2006-07-31 21:05:54 UTC (rev 5369)
@@ -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.ShotokuCommentableFeed;
import org.jboss.shotoku.feeds.data.CommentableFeed;
import org.jboss.shotoku.feeds.FeedFactory;
import org.jboss.shotoku.feeds.FeedsDescriptor;
@@ -172,17 +173,16 @@
String feedName = getFeedName();
String feedType = getFeedType();
- NormalFeed newFeed = FeedFactory.getNewNormalFeed(feedName,
+ NormalFeed newFeed = FeedFactory.getNewNormalFeed(fd.getId(), feedName,
displayName, feedType, attributes);
try {
vc.put(VelocityContextAttributes.LINK,
generateFeedLink(fd, true, feedName, feedType));
- CommentableFeed cf = new CommentableFeed(newFeed, nodesNodeList);
+ CommentableFeed cf =
+ new ShotokuCommentableFeed(newFeed, nodesNodeList);
if (cf.getCommentsEnabled()) {
- vc.put(VelocityContextAttributes.FEED_ID, fd.getId());
- vc.put(VelocityContextAttributes.FEED_TYPE, getFeedType());
vc.put(VelocityContextAttributes.COMMENTS_SERVICE,
FeedsTools.getCommentsService());
}
Modified: labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/tools/FeedsConstants.java
===================================================================
--- labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/tools/FeedsConstants.java 2006-07-31 21:00:05 UTC (rev 5368)
+++ labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/tools/FeedsConstants.java 2006-07-31 21:05:54 UTC (rev 5369)
@@ -56,6 +56,11 @@
*/
public static final String PROPERTY_INTERVAL = Constants.PROPERTIES_INTERNAL + ".feeds.service.interval";
+ /**
+ * Property name suffix, under which the fully qualified class name of a
+ * ViewFeedGetter implementation to use can be found.
+ */
+ public static final String VIEW_FEED_GETTER = ".view.getter";
/*
* Property name suffixes, under which content manager id and name
Modified: labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/tools/VelocityContextAttributes.java
===================================================================
--- labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/tools/VelocityContextAttributes.java 2006-07-31 21:00:05 UTC (rev 5368)
+++ labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/tools/VelocityContextAttributes.java 2006-07-31 21:05:54 UTC (rev 5369)
@@ -24,12 +24,12 @@
/**
* Generated feed id (id of feeds configuration).
*/
- public static final String FEED_ID = "feedId";
+ //public static final String FEED_ID = "feedId";
/**
* Generated feed type.
*/
- public static final String FEED_TYPE = "feedType";
+ //public static final String FEED_TYPE = "feedType";
/**
* Author of a feed.
Added: labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/view/BasicBean.java
===================================================================
--- labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/view/BasicBean.java 2006-07-31 21:00:05 UTC (rev 5368)
+++ labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/view/BasicBean.java 2006-07-31 21:05:54 UTC (rev 5369)
@@ -0,0 +1,14 @@
+package org.jboss.shotoku.feeds.view;
+
+import javax.faces.context.FacesContext;
+import javax.faces.application.FacesMessage;
+
+/**
+ * @author Adam Warski (adamw at aster.pl)
+ */
+public abstract class BasicBean {
+ protected void addMessage(String msg) {
+ FacesContext.getCurrentInstance().addMessage(null,
+ new FacesMessage(msg));
+ }
+}
Added: labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/view/FeedBean.java
===================================================================
--- labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/view/FeedBean.java 2006-07-31 21:00:05 UTC (rev 5368)
+++ labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/view/FeedBean.java 2006-07-31 21:05:54 UTC (rev 5369)
@@ -0,0 +1,126 @@
+package org.jboss.shotoku.feeds.view;
+
+import org.jboss.shotoku.feeds.data.Feed;
+import org.jboss.shotoku.feeds.data.CommentableFeed;
+import org.jboss.shotoku.feeds.data.model.FeedEntries;
+import org.jboss.shotoku.feeds.data.model.DummyFeedEntries;
+import org.jboss.shotoku.feeds.data.model.FeedEntry;
+import org.jboss.shotoku.feeds.tools.FeedsTools;
+
+import java.util.List;
+import java.util.Date;
+
+/**
+ * @author Adam Warski (adamw at aster.pl)
+ */
+public class FeedBean extends BasicBean {
+ private ViewConfigurationBean vcb;
+ private String name;
+ private String type;
+ private String entry;
+ private int from;
+
+ private void setFeedData() {
+ String fgName = vcb.getFeedGetter().getName();
+ if (fgName != null) { setName(fgName); }
+
+ String fgType = vcb.getFeedGetter().getType();
+ if (fgType != null) { setType(fgType); }
+
+ String fgEntry = vcb.getFeedGetter().getEntry();
+ if (fgEntry != null) { setEntry(fgEntry); }
+
+ Integer fgFrom = vcb.getFeedGetter().getFrom();
+ if (fgFrom != null) { setFrom(fgFrom); }
+ }
+
+ private Feed getFeed() {
+ setFeedData();
+ return FeedsTools.getService().getFeed(vcb.getFeedId(),
+ getName(), getType());
+ }
+
+ private CommentableFeed getCommentableFeed() {
+ setFeedData();
+ return FeedsTools.getService().getCommentableFeed(vcb.getFeedId(),
+ getName(), getType());
+ }
+
+ private FeedEntries getFeedEntries() {
+ Feed feed = getFeed();
+ if (feed == null) {
+ addMessage("The requested feed does not exist.");
+ return new DummyFeedEntries();
+ }
+
+ return feed.getFeedEntries();
+ }
+
+ public List<FeedEntry> getEntries() {
+ return getFeedEntries().getEntries();
+ }
+
+ public String getTitle() {
+ return getFeedEntries().getTitle();
+ }
+
+ public String getAuthor() {
+ return getFeedEntries().getAuthor();
+ }
+
+ public String getDescription() {
+ return getFeedEntries().getDescription();
+ }
+
+ public String getLink() {
+ return getFeedEntries().getLink();
+ }
+
+ public Date getCreated() {
+ return getFeedEntries().getCreated();
+ }
+
+ /*
+ * Getters and setters.
+ */
+
+ public ViewConfigurationBean getConfiguration() {
+ return vcb;
+ }
+
+ public void setConfiguration(ViewConfigurationBean vcb) {
+ this.vcb = vcb;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+
+ public String getEntry() {
+ return entry;
+ }
+
+ public void setEntry(String entry) {
+ this.entry = entry;
+ }
+
+ public int getFrom() {
+ return from;
+ }
+
+ public void setFrom(int from) {
+ this.from = from;
+ }
+}
Added: labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/view/ViewConfigurationBean.java
===================================================================
--- labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/view/ViewConfigurationBean.java 2006-07-31 21:00:05 UTC (rev 5368)
+++ labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/view/ViewConfigurationBean.java 2006-07-31 21:05:54 UTC (rev 5369)
@@ -0,0 +1,37 @@
+package org.jboss.shotoku.feeds.view;
+
+import org.jboss.shotoku.feeds.tools.FeedsConstants;
+import org.jboss.shotoku.feeds.tools.FeedsTools;
+import org.jboss.shotoku.feeds.FeedsDescriptor;
+import org.jboss.shotoku.feeds.view.getter.BlankFeedGetter;
+import org.jboss.shotoku.feeds.view.getter.ViewFeedGetter;
+import org.apache.log4j.Logger;
+
+/**
+ * @author Adam Warski (adamw at aster.pl)
+ */
+public class ViewConfigurationBean {
+ private static final Logger log = Logger.getLogger(FeedsDescriptor.class);
+
+ private ViewFeedGetter vfg;
+
+ public String getFeedId() {
+ return "default";
+ }
+
+ public ViewFeedGetter getFeedGetter() {
+ if (vfg == null) {
+ try {
+ vfg = (ViewFeedGetter) Class.forName(FeedsTools.getService().
+ getProperty(getFeedId(),
+ FeedsConstants.VIEW_FEED_GETTER
+ )).newInstance();
+ } catch (Exception e) {
+ log.error("View feed getter class not found.", e);
+ vfg = new BlankFeedGetter();
+ }
+ }
+
+ return vfg;
+ }
+}
Added: labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/view/getter/BlankFeedGetter.java
===================================================================
--- labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/view/getter/BlankFeedGetter.java 2006-07-31 21:00:05 UTC (rev 5368)
+++ labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/view/getter/BlankFeedGetter.java 2006-07-31 21:05:54 UTC (rev 5369)
@@ -0,0 +1,22 @@
+package org.jboss.shotoku.feeds.view.getter;
+
+/**
+ * @author Adam Warski (adamw at aster.pl)
+ */
+public class BlankFeedGetter implements ViewFeedGetter {
+ public String getName() {
+ return null;
+ }
+
+ public String getType() {
+ return null;
+ }
+
+ public String getEntry() {
+ return null;
+ }
+
+ public Integer getFrom() {
+ return 0;
+ }
+}
Added: labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/view/getter/StandardFeedGetter.java
===================================================================
--- labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/view/getter/StandardFeedGetter.java 2006-07-31 21:00:05 UTC (rev 5368)
+++ labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/view/getter/StandardFeedGetter.java 2006-07-31 21:05:54 UTC (rev 5369)
@@ -0,0 +1,35 @@
+package org.jboss.shotoku.feeds.view.getter;
+
+import javax.faces.context.FacesContext;
+import java.util.Map;
+
+/**
+ * @author Adam Warski (adamw at aster.pl)
+ */
+public class StandardFeedGetter implements ViewFeedGetter {
+ private Map<String, String> getParameters() {
+ //noinspection unchecked
+ return FacesContext.getCurrentInstance().
+ getExternalContext().getRequestParameterMap();
+ }
+
+ public String getName() {
+ return getParameters().get("name");
+ }
+
+ public String getType() {
+ return getParameters().get("type");
+ }
+
+ public String getEntry() {
+ return getParameters().get("entry");
+ }
+
+ public Integer getFrom() {
+ try {
+ return Integer.parseInt(getParameters().get("from"));
+ } catch (NumberFormatException e) {
+ return null;
+ }
+ }
+}
Added: labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/view/getter/ViewFeedGetter.java
===================================================================
--- labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/view/getter/ViewFeedGetter.java 2006-07-31 21:00:05 UTC (rev 5368)
+++ labs/shotoku/trunk/shotoku-feeds/src/java/org/jboss/shotoku/feeds/view/getter/ViewFeedGetter.java 2006-07-31 21:05:54 UTC (rev 5369)
@@ -0,0 +1,11 @@
+package org.jboss.shotoku.feeds.view.getter;
+
+/**
+ * @author Adam Warski (adamw at aster.pl)
+ */
+public interface ViewFeedGetter {
+ public String getName();
+ public String getType();
+ public String getEntry();
+ public Integer getFrom();
+}
Modified: labs/shotoku/trunk/shotoku-feeds/src/web/WEB-INF/faces-config.xml
===================================================================
--- labs/shotoku/trunk/shotoku-feeds/src/web/WEB-INF/faces-config.xml 2006-07-31 21:00:05 UTC (rev 5368)
+++ labs/shotoku/trunk/shotoku-feeds/src/web/WEB-INF/faces-config.xml 2006-07-31 21:05:54 UTC (rev 5369)
@@ -40,7 +40,23 @@
<to-view-id>/repo-access/shotoku-test/blog/main3.jsp</to-view-id>
</navigation-case>
</navigation-rule>
-
+
+ <managed-bean>
+ <managed-bean-name>configuration</managed-bean-name>
+ <managed-bean-class>org.jboss.shotoku.feeds.view.ViewConfigurationBean</managed-bean-class>
+ <managed-bean-scope>application</managed-bean-scope>
+ </managed-bean>
+
+ <managed-bean>
+ <managed-bean-name>feed</managed-bean-name>
+ <managed-bean-class>org.jboss.shotoku.feeds.view.FeedBean</managed-bean-class>
+ <managed-bean-scope>session</managed-bean-scope>
+ <managed-property>
+ <property-name>configuration</property-name>
+ <value>#{configuration}</value>
+ </managed-property>
+ </managed-bean>
+
<!--<navigation-rule>
<from-view-id>/repo-access/default/contributor/contributor.jsp</from-view-id>
<navigation-case>
More information about the jboss-svn-commits
mailing list