Author: billyxie
Date: 2009-06-08 10:36:30 +0200 (Mon, 08 Jun 2009)
New Revision: 35807

Added:
   
CMSContainer/trunk/CMSContainer_Modules/rssfeed/src/webapp/editors/config/contentchannel/search_rssfeed_related_collectionchannel.xml
Modified:
   
CMSContainer/trunk/CMSContainer_Modules/rssfeed/config/applications/rssfeed.xml
   
CMSContainer/trunk/CMSContainer_Modules/rssfeed/src/java/com/finalist/cmsc/rssfeed/RssFeedNavigationItemManager.java
   
CMSContainer/trunk/CMSContainer_Modules/rssfeed/src/java/com/finalist/cmsc/rssfeed/RssFeedNavigationRenderer.java
   
CMSContainer/trunk/CMSContainer_Modules/rssfeed/src/java/com/finalist/cmsc/rssfeed/beans/om/RssFeed.java
   
CMSContainer/trunk/CMSContainer_Modules/rssfeed/src/java/com/finalist/cmsc/rssfeed/util/RssFeedUtil.java
   
CMSContainer/trunk/CMSContainer_Modules/rssfeed/src/webapp/editors/config/contentchannel/search_rssfeed_related_contentchannel.xml
   
CMSContainer/trunk/CMSContainer_Modules/rssfeed/src/webapp/editors/config/rssfeed/edit_rssfeed.xml
   
CMSContainer/trunk/CMSContainer_Modules/rssfeed/src/webapp/editors/config/rssfeed/load_rssfeed.xml
Log:
CMSC-1150 - Cannot create RSS feed on collectionchannel / multiple channels

Modified: 
CMSContainer/trunk/CMSContainer_Modules/rssfeed/config/applications/rssfeed.xml
===================================================================
--- 
CMSContainer/trunk/CMSContainer_Modules/rssfeed/config/applications/rssfeed.xml 
    2009-06-06 19:09:21 UTC (rev 35806)
+++ 
CMSContainer/trunk/CMSContainer_Modules/rssfeed/config/applications/rssfeed.xml 
    2009-06-08 08:36:30 UTC (rev 35807)
@@ -17,6 +17,7 @@
    <allowedrelationlist>
       <relation from="page" to="rssfeed" type="navrel" />
       <relation from="rssfeed" to="contentchannel" type="related" />
+      <relation from="rssfeed" to="collectionchannel" type="related" />
       <relation from="rssfeed" to="typedef" type="allowrel" />
       <relation from="mmbasegroups" to="rssfeed" type="rolerel" />
    </allowedrelationlist>

Modified: 
CMSContainer/trunk/CMSContainer_Modules/rssfeed/src/java/com/finalist/cmsc/rssfeed/RssFeedNavigationItemManager.java
===================================================================
--- 
CMSContainer/trunk/CMSContainer_Modules/rssfeed/src/java/com/finalist/cmsc/rssfeed/RssFeedNavigationItemManager.java
        2009-06-06 19:09:21 UTC (rev 35806)
+++ 
CMSContainer/trunk/CMSContainer_Modules/rssfeed/src/java/com/finalist/cmsc/rssfeed/RssFeedNavigationItemManager.java
        2009-06-08 08:36:30 UTC (rev 35807)
@@ -4,12 +4,15 @@
 
 import org.mmbase.bridge.Cloud;
 import org.mmbase.bridge.Node;
+import org.mmbase.bridge.NodeList;
 import org.mmbase.util.logging.Logger;
 import org.mmbase.util.logging.Logging;
 
 import com.finalist.cmsc.beans.MMBaseNodeMapper;
 import com.finalist.cmsc.beans.om.NavigationItem;
-import com.finalist.cmsc.navigation.*;
+import com.finalist.cmsc.navigation.NavigationItemManager;
+import com.finalist.cmsc.navigation.NavigationItemRenderer;
+import com.finalist.cmsc.navigation.NavigationTreeItemRenderer;
 import com.finalist.cmsc.rssfeed.beans.om.RssFeed;
 import com.finalist.cmsc.rssfeed.publish.RssFeedPublisher;
 import com.finalist.cmsc.rssfeed.tree.RssFeedTreeItemRenderer;
@@ -67,10 +70,15 @@
          rssFeed.addContenttype(type);
       }
 
-      Node contentChannel = RssFeedUtil.getContentChannel(node);
-      if (contentChannel != null) {
-         rssFeed.setContentChannel(contentChannel.getNumber());
+      NodeList contentChannels = RssFeedUtil.getContentChannels(node);
+      if (contentChannels != null) {
+         rssFeed.setContentChannels(contentChannels);
       }
+      
+      NodeList collectionChannels = RssFeedUtil.getCollectionChannels(node);
+      if (collectionChannels != null) {
+         rssFeed.setCollectionChannels(collectionChannels);
+      }
 
       return rssFeed;
    }

Modified: 
CMSContainer/trunk/CMSContainer_Modules/rssfeed/src/java/com/finalist/cmsc/rssfeed/RssFeedNavigationRenderer.java
===================================================================
--- 
CMSContainer/trunk/CMSContainer_Modules/rssfeed/src/java/com/finalist/cmsc/rssfeed/RssFeedNavigationRenderer.java
   2009-06-06 19:09:21 UTC (rev 35806)
+++ 
CMSContainer/trunk/CMSContainer_Modules/rssfeed/src/java/com/finalist/cmsc/rssfeed/RssFeedNavigationRenderer.java
   2009-06-08 08:36:30 UTC (rev 35807)
@@ -2,7 +2,12 @@
 
 import java.io.IOException;
 import java.text.SimpleDateFormat;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Locale;
+import java.util.Set;
 
 import javax.servlet.ServletConfig;
 import javax.servlet.http.HttpServletRequest;
@@ -12,7 +17,11 @@
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.mmbase.bridge.*;
+import org.mmbase.bridge.Cloud;
+import org.mmbase.bridge.Node;
+import org.mmbase.bridge.NodeIterator;
+import org.mmbase.bridge.NodeList;
+import org.mmbase.bridge.NodeQuery;
 import org.mmbase.bridge.util.SearchUtil;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
@@ -23,8 +32,11 @@
 import com.finalist.cmsc.repository.ContentElementUtil;
 import com.finalist.cmsc.repository.RepositoryUtil;
 import com.finalist.cmsc.rssfeed.beans.om.RssFeed;
+import com.finalist.cmsc.rssfeed.util.RssFeedUtil;
 import com.finalist.cmsc.services.sitemanagement.SiteManagement;
-import com.finalist.cmsc.util.*;
+import com.finalist.cmsc.util.HttpUtil;
+import com.finalist.cmsc.util.ServerUtil;
+import com.finalist.cmsc.util.XmlUtil;
 
 public class RssFeedNavigationRenderer implements NavigationItemRenderer {
 
@@ -62,7 +74,15 @@
          XmlUtil.createChildText(channel, "docs", 
"http://www.rssboard.org/rss-specification";);
 
          List<String> contentTypesList = rssFeed.getContenttypes();
-         int contentChannelNumber = rssFeed.getContentChannel();
+         List<Node> contentChannels = rssFeed.getContentChannels();
+         List<Node> collectionChannels = rssFeed.getCollectionChannels();
+         Set<Node> contentChannelSet = new HashSet<Node>();
+         contentChannelSet.addAll(contentChannels);
+         for(Node collectionChannel : collectionChannels){
+                
contentChannelSet.addAll(RssFeedUtil.getChildrenChannels(collectionChannel));
+         }
+         
+         Cloud cloud = CloudProviderFactory.getCloudProvider().getCloud();
 
          int maxAgeInDays = rssFeed.getMax_age_in_days();
          
@@ -75,64 +95,9 @@
          Date lastChange = null;
          boolean first = true;
 
-         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);
-            //Add constraint: max age in days
-            if (maxAgeInDays > 0) {
-               SearchUtil.addDayConstraint(query, 
cloud.getNodeManager(RepositoryUtil.CONTENTELEMENT), 
ContentElementUtil.PUBLISHDATE_FIELD, "-" + maxAgeInDays);
-            }
-            NodeList results = query.getNodeManager().getList(query);
-            for (NodeIterator ni = results.nodeIterator(); ni.hasNext();) {
-               Node resultNode = ni.nextNode();
-               Element itemE = XmlUtil.createChild(channel, "item");
-               XmlUtil.createChildText(itemE, "title", 
resultNode.getStringValue("title"));
-
-               String uniqueUrl = makeAbsolute(getContentUrl(resultNode), 
request);
-               XmlUtil.createChildText(itemE, "link", uniqueUrl);
-
-               String description = null;
-               if (resultNode.getNodeManager().hasField("intro")) {
-                  description = resultNode.getStringValue("intro");
-               }
-               if ((description == null || description.length() == 0) && 
resultNode.getNodeManager().hasField("body")) {
-                  description = resultNode.getStringValue("body");
-                  if (description.indexOf("<br/>") != -1) {
-                     description = description.substring(0, 
description.indexOf("<br/>"));
-                  }
-               }
-               if (description != null) {
-                  description = description.replaceAll("<.*?>", "");
-               }
-               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 (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;
-
-                      Element imageE = XmlUtil.createChild(channel, "image");
-                      XmlUtil.createChildText(imageE, "url", imageUrl);
-                      XmlUtil.createChild(imageE, "title");
-                      XmlUtil.createChildText(imageE, "link", uniqueUrl);
-                   }
-               }
-               first = false;
-
-               Date change = resultNode.getDateValue("lastmodifieddate");
-               if (lastChange == null || change.getTime() > 
lastChange.getTime()) {
-                  lastChange = change;
-               }
-            }
+         for(Node node : contentChannelSet){
+                lastChange = buildItemsPerChannel(request, node, channel, 
contentTypesList,
+                               maxAgeInDays, useLifecycle, maxNumber, 
lastChange, first);
          }
 
          if (lastChange != null) {
@@ -152,6 +117,72 @@
       }
    }
 
+
+private Date buildItemsPerChannel(HttpServletRequest request, Node node, 
Element channel,
+               List<String> contentTypesList, int maxAgeInDays, boolean 
useLifecycle,
+               int maxNumber, Date lastChange, boolean first) {
+       if (node.getNumber() > 0) {
+           Cloud cloud = CloudProviderFactory.getCloudProvider().getCloud();
+           Node contentChannel = cloud.getNode(node.getNumber());
+
+           NodeQuery query = 
RepositoryUtil.createLinkedContentQuery(contentChannel, contentTypesList,
+                 ContentElementUtil.PUBLISHDATE_FIELD, "down", useLifecycle, 
null, 0, maxNumber, -1, -1, -1);
+           //Add constraint: max age in days
+           if (maxAgeInDays > 0) {
+              SearchUtil.addDayConstraint(query, 
cloud.getNodeManager(RepositoryUtil.CONTENTELEMENT), 
ContentElementUtil.PUBLISHDATE_FIELD, "-" + maxAgeInDays);
+           }
+           NodeList results = query.getNodeManager().getList(query);
+           for (NodeIterator ni = results.nodeIterator(); ni.hasNext();) {
+              Node resultNode = ni.nextNode();
+              Element itemE = XmlUtil.createChild(channel, "item");
+              XmlUtil.createChildText(itemE, "title", 
resultNode.getStringValue("title"));
+
+              String uniqueUrl = makeAbsolute(getContentUrl(resultNode), 
request);
+              XmlUtil.createChildText(itemE, "link", uniqueUrl);
+
+              String description = null;
+              if (resultNode.getNodeManager().hasField("intro")) {
+                 description = resultNode.getStringValue("intro");
+              }
+              if ((description == null || description.length() == 0) && 
resultNode.getNodeManager().hasField("body")) {
+                 description = resultNode.getStringValue("body");
+                 if (description.indexOf("<br/>") != -1) {
+                    description = description.substring(0, 
description.indexOf("<br/>"));
+                 }
+              }
+              if (description != null) {
+                 description = description.replaceAll("<.*?>", "");
+              }
+              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 (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;
+
+                     Element imageE = XmlUtil.createChild(channel, "image");
+                     XmlUtil.createChildText(imageE, "url", imageUrl);
+                     XmlUtil.createChild(imageE, "title");
+                     XmlUtil.createChildText(imageE, "link", uniqueUrl);
+                  }
+              }
+              first = false;
+
+              Date change = resultNode.getDateValue("lastmodifieddate");
+              if (lastChange == null || change.getTime() > 
lastChange.getTime()) {
+                 lastChange = change;
+              }
+           }
+        }
+       return lastChange;
+}
+
    private String getSiteUrl(HttpServletRequest request, RssFeed rss) {
        if (ServerUtil.useServerName()) {
            return getServerDocRoot(request);

Modified: 
CMSContainer/trunk/CMSContainer_Modules/rssfeed/src/java/com/finalist/cmsc/rssfeed/beans/om/RssFeed.java
===================================================================
--- 
CMSContainer/trunk/CMSContainer_Modules/rssfeed/src/java/com/finalist/cmsc/rssfeed/beans/om/RssFeed.java
    2009-06-06 19:09:21 UTC (rev 35806)
+++ 
CMSContainer/trunk/CMSContainer_Modules/rssfeed/src/java/com/finalist/cmsc/rssfeed/beans/om/RssFeed.java
    2009-06-08 08:36:30 UTC (rev 35807)
@@ -1,7 +1,13 @@
 package com.finalist.cmsc.rssfeed.beans.om;
 
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
 
+import net.sf.mmapps.modules.cloudprovider.CloudProviderFactory;
+
+import org.mmbase.bridge.NodeList;
+
 import com.finalist.cmsc.beans.om.NavigationItem;
 
 @SuppressWarnings("serial")
@@ -16,7 +22,8 @@
     private String email_webmaster;
 
     private List<String> contenttypes = new ArrayList<String>();
-    private int contentChannel = -1;
+    private NodeList contentChannels = 
CloudProviderFactory.getCloudProvider().getCloud().createNodeList();
+    private NodeList collectionChannels = 
CloudProviderFactory.getCloudProvider().getCloud().createNodeList();
     
     public int getMaximum() {
         return maximum;
@@ -76,18 +83,26 @@
     
     public List<String> getContenttypes() {
         return Collections.unmodifiableList(contenttypes);
-     }
+    }
 
-     public void addContenttype(String contenttypes) {
+    public void addContenttype(String contenttypes) {
         this.contenttypes.add(contenttypes);
-     }
-
-    public int getContentChannel() {
-        return contentChannel;
     }
-    
-    public void setContentChannel(int contentChannel) {
-        this.contentChannel = contentChannel;
-    }
 
+       public NodeList getContentChannels() {
+               return contentChannels;
+       }
+
+    public void setContentChannels(NodeList contentChannels) {
+               this.contentChannels = contentChannels;
+       }
+
+       public NodeList getCollectionChannels() {
+               return collectionChannels;
+       }
+
+       public void setCollectionChannels(NodeList collectionChannels) {
+               this.collectionChannels = collectionChannels;
+       }
+
 }

Modified: 
CMSContainer/trunk/CMSContainer_Modules/rssfeed/src/java/com/finalist/cmsc/rssfeed/util/RssFeedUtil.java
===================================================================
--- 
CMSContainer/trunk/CMSContainer_Modules/rssfeed/src/java/com/finalist/cmsc/rssfeed/util/RssFeedUtil.java
    2009-06-06 19:09:21 UTC (rev 35806)
+++ 
CMSContainer/trunk/CMSContainer_Modules/rssfeed/src/java/com/finalist/cmsc/rssfeed/util/RssFeedUtil.java
    2009-06-08 08:36:30 UTC (rev 35807)
@@ -1,6 +1,8 @@
 package com.finalist.cmsc.rssfeed.util;
 
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
 
 import org.mmbase.bridge.Node;
 import org.mmbase.bridge.NodeList;
@@ -33,8 +35,16 @@
        return types;
     }
 
-    public static Node getContentChannel(Node node) {
-        return SearchUtil.findRelatedNode(node, RepositoryUtil.CONTENTCHANNEL, 
"related");
+    public static NodeList getContentChannels(Node node) {
+       return SearchUtil.findRelatedNodeList(node, 
RepositoryUtil.CONTENTCHANNEL, "related");
     }
-
+    
+    public static NodeList getCollectionChannels(Node node) {
+       return SearchUtil.findRelatedNodeList(node, 
RepositoryUtil.COLLECTIONCHANNEL, "related");
+    }
+    
+    public static NodeList getChildrenChannels(Node node) {
+       return SearchUtil.findRelatedNodeList(node, 
RepositoryUtil.CONTENTCHANNEL, "collectionrel");
+    }
+    
 }

Added: 
CMSContainer/trunk/CMSContainer_Modules/rssfeed/src/webapp/editors/config/contentchannel/search_rssfeed_related_collectionchannel.xml
===================================================================
--- 
CMSContainer/trunk/CMSContainer_Modules/rssfeed/src/webapp/editors/config/contentchannel/search_rssfeed_related_collectionchannel.xml
                               (rev 0)
+++ 
CMSContainer/trunk/CMSContainer_Modules/rssfeed/src/webapp/editors/config/contentchannel/search_rssfeed_related_collectionchannel.xml
       2009-06-08 08:36:30 UTC (rev 35807)
@@ -0,0 +1,42 @@
+<?xml version="1.0"?>
+<!DOCTYPE list PUBLIC "-//MMBase/DTD editwizard 1.0//EN" 
"http://www.mmbase.org/dtd/wizard-schema_1_0.dtd";>
+<list role="related" destination="collectionchannel" minoccurs="0" 
maxoccurs="*">
+   <title xml:lang="nl">Collection channel</title>
+   <title xml:lang="en">Collection channel</title>
+   <title xml:lang="zh">内容频道</title>
+
+   <item>
+      <field ftype="data" name="pathfragment">
+         <prompt xml:lang="en">URL-fragment</prompt>
+         <prompt xml:lang="nl">URL-fragment</prompt>
+         <prompt xml:lang="zh">URL-片段</prompt>
+      </field>
+      <field ftype="data" name="name">
+         <prompt xml:lang="en">Name</prompt>
+         <prompt xml:lang="nl">Naam</prompt>
+         <prompt xml:lang="zh">名称</prompt>
+      </field>
+   </item>
+
+   <command name="search" nodepath="collectionchannel" age="-1" 
fields="pathfragment,name">
+      <prompt xml:lang="en">Search collectionchannel</prompt>
+      <prompt xml:lang="nl">Zoek rubriek</prompt>
+      <prompt xml:lang="zh">查找集合频道</prompt>
+      <search-filter>
+         <name xml:lang="en">URL-fragment contains</name>
+         <name xml:lang="nl">URL-fragment bevat</name>
+         <name xml:lang="zh">URL-片段 包含</name>
+         <search-fields>[pathfragment]</search-fields>
+      </search-filter>
+      <search-filter>
+         <name xml:lang="en">Name contains</name>
+         <name xml:lang="nl">Naam bevat</name>
+         <name xml:lang="zh">名称 包含</name>
+         <search-fields>[name]</search-fields>
+      </search-filter>
+   </command>
+
+   <action type="create">
+      <relation destinationtype="collectionchannel" role="related"></relation>
+   </action>
+</list>
\ No newline at end of file

Modified: 
CMSContainer/trunk/CMSContainer_Modules/rssfeed/src/webapp/editors/config/contentchannel/search_rssfeed_related_contentchannel.xml
===================================================================
--- 
CMSContainer/trunk/CMSContainer_Modules/rssfeed/src/webapp/editors/config/contentchannel/search_rssfeed_related_contentchannel.xml
  2009-06-06 19:09:21 UTC (rev 35806)
+++ 
CMSContainer/trunk/CMSContainer_Modules/rssfeed/src/webapp/editors/config/contentchannel/search_rssfeed_related_contentchannel.xml
  2009-06-08 08:36:30 UTC (rev 35807)
@@ -1,6 +1,6 @@
 <?xml version="1.0"?>
 <!DOCTYPE list PUBLIC "-//MMBase/DTD editwizard 1.0//EN" 
"http://www.mmbase.org/dtd/wizard-schema_1_0.dtd";>
-<list role="related" destination="contentchannel" minoccurs="1" maxoccurs="1">
+<list role="related" destination="contentchannel" minoccurs="0" maxoccurs="*">
    <title xml:lang="nl">Rubriek</title>
    <title xml:lang="en">Content channel</title>
    <title xml:lang="zh">内容频道</title>

Modified: 
CMSContainer/trunk/CMSContainer_Modules/rssfeed/src/webapp/editors/config/rssfeed/edit_rssfeed.xml
===================================================================
--- 
CMSContainer/trunk/CMSContainer_Modules/rssfeed/src/webapp/editors/config/rssfeed/edit_rssfeed.xml
  2009-06-06 19:09:21 UTC (rev 35806)
+++ 
CMSContainer/trunk/CMSContainer_Modules/rssfeed/src/webapp/editors/config/rssfeed/edit_rssfeed.xml
  2009-06-08 08:36:30 UTC (rev 35807)
@@ -65,5 +65,6 @@
       <optionlist select="boolean" />
    </field>
    <list 
include="config/contentchannel/search_rssfeed_related_contentchannel.xml" />
-    <list include="config/typedef/search_site_allowrel_typedef.xml" />
+   <list 
include="config/collectionchannel/search_rssfeed_related_collectionchannel.xml" 
/>
+   <list include="config/typedef/search_site_allowrel_typedef.xml" />
 </form-schema>
\ No newline at end of file

Modified: 
CMSContainer/trunk/CMSContainer_Modules/rssfeed/src/webapp/editors/config/rssfeed/load_rssfeed.xml
===================================================================
--- 
CMSContainer/trunk/CMSContainer_Modules/rssfeed/src/webapp/editors/config/rssfeed/load_rssfeed.xml
  2009-06-06 19:09:21 UTC (rev 35806)
+++ 
CMSContainer/trunk/CMSContainer_Modules/rssfeed/src/webapp/editors/config/rssfeed/load_rssfeed.xml
  2009-06-08 08:36:30 UTC (rev 35807)
@@ -22,5 +22,6 @@
        <field name="email_webmaster" />
        
        <relation destination="contentchannel" role="related" />
+       <relation destination="collectionchannel" role="related" />
        <relation destination="typedef" role="allowrel" />
 </action>
\ No newline at end of file

_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs

Reply via email to