Update of 
/var/cvs/contributions/CMSContainer_Modules/rssfeed/src/java/com/finalist/cmsc/rssfeed
In directory 
james.mmbase.org:/tmp/cvs-serv27028/rssfeed/src/java/com/finalist/cmsc/rssfeed

Modified Files:
        RssFeedNavigationItemManager.java 
        RssFeedNavigationRenderer.java 
Log Message:
CMSC-755 Navigation code refactored to use navigationitem


See also: 
http://cvs.mmbase.org/viewcvs/contributions/CMSContainer_Modules/rssfeed/src/java/com/finalist/cmsc/rssfeed
See also: http://www.mmbase.org/jira/browse/CMSC-755


Index: RssFeedNavigationItemManager.java
===================================================================
RCS file: 
/var/cvs/contributions/CMSContainer_Modules/rssfeed/src/java/com/finalist/cmsc/rssfeed/RssFeedNavigationItemManager.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -b -r1.3 -r1.4
--- RssFeedNavigationItemManager.java   16 Jan 2008 12:42:52 -0000      1.3
+++ RssFeedNavigationItemManager.java   28 Jan 2008 21:16:09 -0000      1.4
@@ -1,5 +1,7 @@
 package com.finalist.cmsc.rssfeed;
 
+import java.util.List;
+
 import net.sf.mmapps.commons.beans.MMBaseNodeMapper;
 
 import org.mmbase.bridge.Cloud;
@@ -39,8 +41,17 @@
             return null;
         }
         
-        RssFeed rssFeed = null;
-        rssFeed = (RssFeed) MMBaseNodeMapper.copyNode(node, RssFeed.class);
+        RssFeed rssFeed = MMBaseNodeMapper.copyNode(node, RssFeed.class);
+
+        List<String> types = RssFeedUtil.getAllowedTypes(node);
+        for (String type : types) {
+            rssFeed.addContenttype(type);
+        }
+
+        Node contentChannel = RssFeedUtil.getContentChannel(node);
+        if (contentChannel != null) {
+            rssFeed.setContentChannel(contentChannel.getNumber());
+        }
 
         return rssFeed;
        }


Index: RssFeedNavigationRenderer.java
===================================================================
RCS file: 
/var/cvs/contributions/CMSContainer_Modules/rssfeed/src/java/com/finalist/cmsc/rssfeed/RssFeedNavigationRenderer.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- RssFeedNavigationRenderer.java      18 Jan 2008 20:14:19 -0000      1.4
+++ RssFeedNavigationRenderer.java      28 Jan 2008 21:16:17 -0000      1.5
@@ -11,6 +11,7 @@
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
+import net.sf.mmapps.commons.util.HttpUtil;
 import net.sf.mmapps.commons.util.XmlUtil;
 import net.sf.mmapps.modules.cloudprovider.CloudProviderFactory;
 
@@ -21,14 +22,17 @@
 import org.mmbase.bridge.NodeIterator;
 import org.mmbase.bridge.NodeList;
 import org.mmbase.bridge.NodeQuery;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
 
 import com.finalist.cmsc.beans.om.NavigationItem;
 import com.finalist.cmsc.mmbase.ResourcesUtil;
 import com.finalist.cmsc.navigation.NavigationItemRenderer;
+import com.finalist.cmsc.navigation.ServerUtil;
 import com.finalist.cmsc.repository.ContentElementUtil;
 import com.finalist.cmsc.repository.RepositoryUtil;
 import com.finalist.cmsc.rssfeed.beans.om.RssFeed;
-import com.finalist.util.version.VersionUtil;
+import com.finalist.cmsc.services.sitemanagement.SiteManagement;
 
 public class RssFeedNavigationRenderer implements NavigationItemRenderer {
 
@@ -45,73 +49,45 @@
 
          response.setHeader("Content-Type", "application/xml+rss; 
charset=UTF-8");
 
-         StringBuffer output = new StringBuffer();
-         output.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
-         output.append("<rss version=\"2.0\">\n");
-         output.append("<channel>");
-         output.append("<title>");
-         output.append(xmlEscape(rssFeed.getTitle()));
-         output.append("</title>");
-         output.append("<link>");
-         output.append(xmlEscape(getServerDocRoot(request)));
-         output.append("</link>");
-         output.append("<language>");
-         output.append(xmlEscape(rssFeed.getLanguage()));
-         output.append("</language>");
-         output.append("<description>");
-         output.append(xmlEscape(rssFeed.getDescription()));
-         output.append("</description>");
-         output.append("<copyright>");
-         output.append(xmlEscape(rssFeed.getCopyright()));
-         output.append("</copyright>");
-         output.append("<managingEditor>");
-         output.append(xmlEscape(rssFeed.getEmail_managing_editor()));
-         output.append("</managingEditor>");
-         output.append("<webMaster>");
-         output.append(xmlEscape(rssFeed.getEmail_webmaster()));
-         output.append("</webMaster>");
-         output.append("<generator>");
-         output.append("CMS Container RssFeed module " + 
VersionUtil.getCmscVersion(servletConfig.getServletContext()));
-         output.append("</generator>");
-         output.append("<docs>");
-         output.append("http://blogs.law.harvard.edu/tech/rss";);
-         output.append("</docs>");
+         Document doc = XmlUtil.createDocument();
+         Element rss = XmlUtil.createRoot(doc, "rss");
+         XmlUtil.createAttribute(rss, "version", "2.0");
+         Element channel = XmlUtil.createChild(rss, "channel");
+         XmlUtil.createChildText(channel, "title", rssFeed.getTitle());
+         XmlUtil.createChildText(channel, "link", getSiteUrl(request, 
rssFeed));
+         XmlUtil.createChildText(channel, "language", rssFeed.getLanguage());
+         XmlUtil.createChildText(channel, "description", 
rssFeed.getDescription());
+         XmlUtil.createChildText(channel, "copyright", rssFeed.getCopyright());
+         XmlUtil.createChildText(channel, "managingEditor", 
rssFeed.getEmail_managing_editor());
+         XmlUtil.createChildText(channel, "webMaster", 
rssFeed.getEmail_webmaster());
+         XmlUtil.createChildText(channel, "generator", "CMS Container 
RssFeed");
+         XmlUtil.createChildText(channel, "docs", 
"http://www.rssboard.org/rss-specification";);
 
-         Cloud cloud = CloudProviderFactory.getCloudProvider().getCloud();
-         Node node = cloud.getNode(rssFeed.getId());
-         
-         List<String> contentTypesList = new ArrayList<String>();
-         NodeList contentTypes = node.getRelatedNodes("typedef");
-         for (NodeIterator ni = contentTypes.nodeIterator(); ni.hasNext();) {
-            contentTypesList.add(ni.nextNode().getStringValue("name"));
-         }
+         List<String> contentTypesList = rssFeed.getContenttypes();
+         int contentChannelNumber = rssFeed.getContentChannel(); 
 
          boolean useLifecycle = true;
          int maxNumber = rssFeed.getMaximum();
          if (maxNumber <= 0) maxNumber = -1;
 
          Date lastChange = null;
-         NodeList contentChannels = node.getRelatedNodes("contentchannel");
-         StringBuffer imageOutput = null;
          boolean first = true;
 
-         if (contentChannels.size() > 0) {
-            Node contentChannel = contentChannels.getNode(0);
+         if (contentChannelNumber > 0) {
+            Cloud cloud = CloudProviderFactory.getCloudProvider().getCloud();
+            Node contentChannel = cloud.getNode(contentChannelNumber);
 
             NodeQuery query = 
RepositoryUtil.createLinkedContentQuery(contentChannel, contentTypesList,
                   ContentElementUtil.PUBLISHDATE_FIELD, "down", useLifecycle, 
null, 0, maxNumber, -1, -1, -1);
             NodeList results = query.getNodeManager().getList(query);
             for (NodeIterator ni = results.nodeIterator(); ni.hasNext();) {
                Node resultNode = ni.nextNode();
-               output.append("<item>");
-               output.append("<title>");
-               output.append(xmlEscape(resultNode.getStringValue("title")));
-               output.append("</title>");
+               Element itemE = XmlUtil.createChild(channel, "item");
+               XmlUtil.createChildText(itemE, "title", 
resultNode.getStringValue("title"));
 
                String uniqueUrl = makeAbsolute(getContentUrl(resultNode), 
request);
-               output.append("<link>");
-               output.append(xmlEscape(uniqueUrl));
-               output.append("</link>");
+               XmlUtil.createChildText(itemE, "link", uniqueUrl);
+               
                String description = null;
                if (resultNode.getNodeManager().hasField("intro")) {
                   description = resultNode.getStringValue("intro");
@@ -125,61 +101,40 @@
                if (description != null) {
                   description = description.replaceAll("<.*?>", "");
                }
-               output.append("<description>");
-               output.append(xmlEscape(description));
-               output.append("</description>");
-               output.append("<pubDate>");
-               
output.append(formatRFC822Date.format(resultNode.getDateValue("publishdate")));
-               output.append("</pubDate>");
-               output.append("<guid>");
-               output.append(xmlEscape(uniqueUrl));
-               output.append("</guid>");
+               XmlUtil.createChildText(itemE, "description", description);
+               XmlUtil.createChildText(itemE, "pubDate", 
formatRFC822Date.format(resultNode.getDateValue("publishdate")));
+               XmlUtil.createChildText(itemE, "guid", uniqueUrl);
 
+               if (first) {
                NodeList images = resultNode.getRelatedNodes("images", 
"imagerel", null);
-               if (first && images.size() > 0) {
+                   if (images.size() > 0) {
                   Node image = images.getNode(0);
                   List<String> arguments = new ArrayList<String>();
                   arguments.add("160x100");
                   int iCacheNodeNumber = image.getFunctionValue("cache", 
arguments).toInt();
                   String imageUrl = image.getFunctionValue("servletpath", 
null).toString() + iCacheNodeNumber;
 
-                  imageOutput = new StringBuffer();
-                  imageOutput.append("<image>");
-                  imageOutput.append("<url>");
-                  imageOutput.append(xmlEscape(imageUrl));
-                  imageOutput.append("</url>");
-                  imageOutput.append("<title/>");
-                  imageOutput.append("<link>");
-                  imageOutput.append(xmlEscape(uniqueUrl));
-                  imageOutput.append("</link>");
-                  imageOutput.append("</image>");
+                      Element imageE = XmlUtil.createChild(channel, "image");
+                      XmlUtil.createChildText(imageE, "url", imageUrl);
+                      XmlUtil.createChild(imageE, "title");
+                      XmlUtil.createChildText(imageE, "link", uniqueUrl);
                }
-
-               output.append("</item>");
+               }
+               first = false;
 
                Date change = resultNode.getDateValue("lastmodifieddate");
                if (lastChange == null || change.getTime() > 
lastChange.getTime()) {
                   lastChange = change;
                }
-
-               first = false;
-            }
          }
-
-         if (imageOutput != null) {
-            output.append(imageOutput);
          }
 
          if (lastChange != null) {
-            output.append("<lastBuildDate>");
-            output.append(formatRFC822Date.format(lastChange));
-            output.append("</lastBuildDate>");
+             XmlUtil.createChildText(channel, "lastBuildDate", 
formatRFC822Date.format(lastChange));
          }
 
-         output.append("</channel>");
-         output.append("</rss>");
          try {
-            response.getOutputStream().write(output.toString().getBytes());
+            response.getWriter().write(XmlUtil.serializeDocument(doc));
          }
          catch (IOException e) {
             log.error(e);
@@ -191,36 +146,25 @@
       }
    }
 
-
-   private String xmlEscape(String uniqueUrl) {
-      if (uniqueUrl == null) {
-         return "";
+   private String getSiteUrl(HttpServletRequest request, RssFeed rss) {
+       if (ServerUtil.useServerName()) {
+           return getServerDocRoot(request);
       }
       else {
-         return XmlUtil.xmlEscape(uniqueUrl);
+           String site = SiteManagement.getSite(rss);
+           return getServerDocRoot(request) + site; 
       }
    }
 
-
    private String getServerDocRoot(HttpServletRequest request) {
-      StringBuffer s = new StringBuffer();
-      
s.append(request.getScheme()).append("://").append(request.getServerName());
-
-      int serverPort = request.getServerPort();
-      if (serverPort != 80 && serverPort != 443) {
-         s.append(':').append(Integer.toString(serverPort));
-      }
-      s.append('/');
-      return s.toString();
+       return HttpUtil.getWebappUri(request);
    }
 
-
    private String getContentUrl(Node node) {
       return ResourcesUtil.getServletPathWithAssociation("content", 
"/content/*", node.getStringValue("number"), node
             .getStringValue("title"));
    }
 
-
    private String makeAbsolute(String url, HttpServletRequest request) {
       String webapp = getServerDocRoot(request);
       if (url.startsWith("/")) {
_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs

Reply via email to