Update of 
/var/cvs/contributions/CMSContainer_Portlets/portlets-newsletter/src/java/com/finalist/newsletter/util
In directory 
james.mmbase.org:/tmp/cvs-serv32137/src/java/com/finalist/newsletter/util

Modified Files:
        NewsletterUtil.java 
Added Files:
        NewsletterTermUtil.java 
Log Message:
CMSC-990,Redesign Newsletter: Subscribers & Terms tabs      improve terms 
management


See also: 
http://cvs.mmbase.org/viewcvs/contributions/CMSContainer_Portlets/portlets-newsletter/src/java/com/finalist/newsletter/util
See also: http://www.mmbase.org/jira/browse/CMSC-990


NewsletterTermUtil.java is new



Index: NewsletterUtil.java
===================================================================
RCS file: 
/var/cvs/contributions/CMSContainer_Portlets/portlets-newsletter/src/java/com/finalist/newsletter/util/NewsletterUtil.java,v
retrieving revision 1.35
retrieving revision 1.36
diff -u -b -r1.35 -r1.36
--- NewsletterUtil.java 21 Jun 2008 13:08:14 -0000      1.35
+++ NewsletterUtil.java 17 Jul 2008 03:04:50 -0000      1.36
@@ -1,6 +1,12 @@
 package com.finalist.newsletter.util;
 
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.ResourceBundle;
+import java.util.Set;
+import java.util.SortedSet;
+import java.util.TreeSet;
 
 import net.sf.mmapps.commons.beans.MMBaseNodeMapper;
 import net.sf.mmapps.commons.bridge.RelationUtil;
@@ -9,10 +15,18 @@
 import org.apache.commons.lang.StringUtils;
 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.NodeList;
+import org.mmbase.bridge.NodeManager;
+import org.mmbase.bridge.NodeQuery;
+import org.mmbase.bridge.RelationList;
 import org.mmbase.bridge.util.Queries;
 import org.mmbase.bridge.util.SearchUtil;
+import org.mmbase.storage.search.FieldValueConstraint;
+import org.mmbase.storage.search.RelationStep;
 import org.mmbase.storage.search.Step;
+import org.mmbase.storage.search.StepField;
 
 import com.finalist.cmsc.beans.om.ContentElement;
 import com.finalist.cmsc.mmbase.PropertiesUtil;
@@ -65,7 +79,7 @@
 
       Cloud cloud = CloudProviderFactory.getCloudProvider().getAdminCloud();
       Node newsletterNode = cloud.getNode(number);
-      deleteNewsletterTermsForNewsletter(newsletterNode);
+     // deleteNewsletterTermsForNewsletter(newsletterNode);
       deleteNewsletterLogForNewsletter(number);
    }
 
@@ -171,7 +185,7 @@
       return (null);
    }
 
-   public static List<ContentElement> getArticlesByNewsletter(String 
termNumbers, int offset, int elementsPerPage, String orderBy, String direction) 
{
+   public static List<ContentElement> getArticlesByNewsletter(int 
itemNumber,String termNumbers, int offset, int elementsPerPage, String orderBy, 
String direction) {
 
       String[] numbers = termNumbers.split(",");
       SortedSet<Integer> sort = new TreeSet<Integer>();
@@ -181,40 +195,30 @@
       if (sort.size() == 0) {
          return (null);
       }
-      return getArticles(offset, elementsPerPage, orderBy, direction, sort);
+      return getArticles(itemNumber,offset, elementsPerPage, orderBy, 
direction, sort);
    }
 
    public static List<ContentElement> getArticlesByNewsletter(int 
newsletterNumber, int offset, int elementsPerPage, String orderBy, String 
direction) {
       if (newsletterNumber > 0) {
-         Cloud cloud = CloudProviderFactory.getCloudProvider().getCloud();
-         Node newsletterNode = cloud.getNode(newsletterNumber);
-         NodeManager termNodeManager = cloud.getNodeManager("term");
-         NodeList terms = newsletterNode.getRelatedNodes(termNodeManager);
-
-         SortedSet<Integer> sort = new TreeSet<Integer>();
-         for (int i = 0; i < terms.size(); i++) {
-            Node term = terms.getNode(i);
-            sort.add(new Integer(term.getNumber()));
-         }
-         if (sort.size() == 0) {
-            return (null);
-         }
-         return getArticles(offset, elementsPerPage, orderBy, direction, sort);
+         return getArticles(offset, elementsPerPage, orderBy, direction, 
newsletterNumber);
       }
       return (null);
    }
 
-   public static List<ContentElement> getArticles(int offset, int 
elementsPerPage, String orderBy, String direction, SortedSet<Integer> sort) {
+   public static List<ContentElement> getArticles(int offset, int 
elementsPerPage, String orderBy, String direction, int number) {
       List<ContentElement> articles = new ArrayList<ContentElement>();
       Cloud cloud = CloudProviderFactory.getCloudProvider().getCloud();
 
-      NodeManager termNodeManager = cloud.getNodeManager("term");
+      NodeManager newsletterNodeManager = cloud.getNodeManager("newsletter");
       NodeManager articleNodeManager = cloud.getNodeManager("article");
       NodeQuery query = cloud.createNodeQuery();
       Step parameterStep = query.addStep(articleNodeManager);
       query.setNodeStep(parameterStep);
-      query.addRelationStep(termNodeManager, null, null);
-      SearchUtil.addInConstraint(query, termNodeManager.getField("number"), 
sort);
+      RelationStep relationStep = query.addRelationStep(newsletterNodeManager, 
null, null);
+      Step step = relationStep.getNext();
+      StepField stepField = query.createStepField(step, 
newsletterNodeManager.getField("number"));
+      FieldValueConstraint constraint = query.createConstraint(stepField, 
number);
+      SearchUtil.addConstraint(query, constraint);
       Queries.addSortOrders(query, orderBy, direction);
       query.setOffset(offset);
       query.setMaxNumber(elementsPerPage);
@@ -230,21 +234,91 @@
 
    }
 
-   public static int countArticles(SortedSet<Integer> sort) {
+   public static List<ContentElement> getArticles(int newsletterNumber,int 
offset, int elementsPerPage, String orderBy, String direction, 
SortedSet<Integer> sort) {
+      List<ContentElement> articles = new ArrayList<ContentElement>();
+      
+      List<Node> relatedArticles = 
getArticles(newsletterNumber,sort,orderBy,direction);
+      if(relatedArticles == null) {
+         return null;
+      }
+      if(relatedArticles.size() > offset) {
+         int totalCount = 0 ;
+         if(offset+elementsPerPage >= relatedArticles.size()) {
+            totalCount = relatedArticles.size();
+         }
+         else {
+            totalCount = offset+elementsPerPage;
+         }
+         for(int i = offset ; i < totalCount ; i++) {
+            Node articleNode = relatedArticles.get(i);
+            ContentElement element = MMBaseNodeMapper.copyNode(articleNode, 
ContentElement.class);
+            articles.add(element);
+         }
+      }
+      return (articles);
+
+   }
+   public static int countArticles(int newsletterNumber,SortedSet<Integer> 
sort) {
+      
+      List<Node> articles = getArticles(newsletterNumber,sort,null,null);
+      return articles == null?0:articles.size();
+   }
+   
+   public static List<Node> getArticles(int 
newsletterNumber,SortedSet<Integer> sort,String orderBy, String direction){
       Cloud cloud = CloudProviderFactory.getCloudProvider().getCloud();
+      NodeManager articleNodeManager = cloud.getNodeManager("article");
+      
+      NodeManager newsletterNodeManager = cloud.getNodeManager("newsletter");
+      NodeQuery articleQuery = cloud.createNodeQuery();
+      Step articleStep = articleQuery.addStep(articleNodeManager);
+      articleQuery.setNodeStep(articleStep);
+      RelationStep relationStep = 
articleQuery.addRelationStep(newsletterNodeManager, null, null);
+      Step step = relationStep.getNext();
+      StepField stepField = articleQuery.createStepField(step, 
newsletterNodeManager.getField("number"));
+      FieldValueConstraint constraint = 
articleQuery.createConstraint(stepField, newsletterNumber);
+      SearchUtil.addConstraint(articleQuery, constraint);
+      Queries.addSortOrders(articleQuery, orderBy, direction);
 
+      NodeList articleNodes = articleQuery.getList();
       NodeManager termNodeManager = cloud.getNodeManager("term");
-      NodeManager articleNodeManager = cloud.getNodeManager("article");
+
       NodeQuery query = cloud.createNodeQuery();
       Step parameterStep = query.addStep(articleNodeManager);
       query.setNodeStep(parameterStep);
-      query.addRelationStep(termNodeManager, null, null);
+      query.addRelationStep(termNodeManager, "newslettercontent", 
SearchUtil.DESTINATION);
       SearchUtil.addInConstraint(query, termNodeManager.getField("number"), 
sort);
+      NodeList termRelatedArticles  = query.getList();
+      
+      List<Node> articles = new ArrayList<Node>(); 
+      
+      if(articleNodes != null ){
+         for(int i = 0 ; i < articleNodes.size() ; i++) {
+            Node article = articleNodes.getNode(i);
+            if(termRelatedArticles == null){
+               return null;
+            }
+            for(int j = 0 ; j < termRelatedArticles.size() ; j++) {
+              Node termRelatedArticle = termRelatedArticles.getNode(j);
+              if(termRelatedArticle.getNumber() == article.getNumber()) {
+                 articles.add(article);
+                 break;
+              }
+            } 
+         }
+      }
+      return articles;
 
-      return Queries.count(query);
    }
 
-   public static int countArticlesByNewsletter(String termNumbers) {
+   public static int countArticles(int number) {
+      Cloud cloud = CloudProviderFactory.getCloudProvider().getCloud();
+      NodeManager articleNodeManager = cloud.getNodeManager("article");
+      Node newsletterNode = cloud.getNode(number);
+      int count = 
newsletterNode.countRelatedNodes(articleNodeManager,"newslettercontent", 
"source");
+    
+      return count;
+   }
+   public static int countArticlesByNewsletter(int itemNumber,String 
termNumbers) {
 
       String[] numbers = termNumbers.split(",");
       SortedSet<Integer> sort = new TreeSet<Integer>();
@@ -254,26 +328,12 @@
       if (sort.size() == 0) {
          return (0);
       }
-      return countArticles(sort);
+      return countArticles(itemNumber,sort);
    }
 
    public static int countArticlesByNewsletter(int newsletterNumber) {
       if (newsletterNumber > 0) {
-         Cloud cloud = CloudProviderFactory.getCloudProvider().getCloud();
-         Node newsletterNode = cloud.getNode(newsletterNumber);
-
-         NodeManager termNodeManager = cloud.getNodeManager("term");
-         NodeList terms = newsletterNode.getRelatedNodes(termNodeManager);
-         SortedSet<Integer> sort = new TreeSet<Integer>();
-         for (int i = 0; i < terms.size(); i++) {
-            Node term = terms.getNode(i);
-            sort.add(new Integer(term.getNumber()));
-         }
-         if (sort.size() == 0) {
-            return (0);
-         }
-//         NodeQuery  query =  
Queries.createRelatedNodesQuery(term,articleNodeManager,null,null);
-         return countArticles(sort);
+         return countArticles(newsletterNumber);
       }
       return (0);
    }
_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs

Reply via email to