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

Modified Files:
        NewsletterCAOImpl.java NewsletterPublicationCAOImpl.java 
        NewsletterSubscriptionCAOImpl.java 
Log Message:
cmsc-979,990 newsletter mangement (block by cmsc-217)


See also: 
http://cvs.mmbase.org/viewcvs/contributions/CMSContainer_Portlets/portlets-newsletter/src/java/com/finalist/newsletter/cao/impl


Index: NewsletterCAOImpl.java
===================================================================
RCS file: 
/var/cvs/contributions/CMSContainer_Portlets/portlets-newsletter/src/java/com/finalist/newsletter/cao/impl/NewsletterCAOImpl.java,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -b -r1.16 -r1.17
--- NewsletterCAOImpl.java      21 Jul 2008 12:52:40 -0000      1.16
+++ NewsletterCAOImpl.java      24 Jul 2008 09:04:16 -0000      1.17
@@ -1,13 +1,20 @@
 package com.finalist.newsletter.cao.impl;
 
-import java.util.*;
+import java.util.ArrayList;
+import java.util.List;
 
 import net.sf.mmapps.commons.beans.MMBaseNodeMapper;
 
 import org.apache.commons.lang.StringUtils;
-import org.mmbase.bridge.*;
+import org.mmbase.bridge.Node;
+import org.mmbase.bridge.NodeList;
+import org.mmbase.bridge.NodeManager;
+import org.mmbase.bridge.NodeQuery;
+import org.mmbase.bridge.util.Queries;
 import org.mmbase.bridge.util.SearchUtil;
-import org.mmbase.storage.search.*;
+import org.mmbase.storage.search.Constraint;
+import org.mmbase.storage.search.RelationStep;
+import org.mmbase.storage.search.Step;
 import org.mmbase.util.logging.Logger;
 import org.mmbase.util.logging.Logging;
 
@@ -22,16 +29,12 @@
    public NewsletterCAOImpl() {
    }
 
-   public NewsletterCAOImpl(Cloud cloud) {
-      this.cloud = cloud;
-   }
-
    public List<Term> getALLTerm() {
       NodeQuery query = cloud.createNodeQuery();
       Step step = query.addStep(cloud.getNodeManager("term"));
       query.setNodeStep(step);
       NodeList list = query.getList();
-      return MMBaseNodeMapper.convertList(list, Term.class);
+               return list;
    }
 
    public List<Newsletter> getNewsletterByConstraint(String property, String 
constraintType, String value) {
@@ -49,13 +52,13 @@
    }
 
    public int getNewsletterIdBySubscription(int id) {
-      log.debug("Get newsletter by subsription "+id);
+               log.debug("Get newsletter by subsription " + id);
       Node subscriptionNode = cloud.getNode(id);
       NodeList nodes = subscriptionNode.getRelatedNodes("newsletter");
 
-      if(nodes.size()>0){
+               if (nodes.size() > 0) {
          return nodes.getNode(0).getNumber();
-      }else{
+               } else {
          return -1;
       }
    }
@@ -67,13 +70,30 @@
    public Newsletter getNewsletterById(int id) {
       Node newsletterNode = cloud.getNode(id);
 
-
+               // <<<<<<< NewsletterCAOImpl.java
+               // Newsletter newsletter = convertFromNode(newsletterNode);
+               //      
+               // List<Node> terms = newsletterNode.getRelatedNodes("term");
+               // log.debug("get newsletter by id:" + id + ",and get " + 
terms.size() +
+               // " terms with it.");
+               // Iterator termsIt = terms.iterator();
+               //
+               // for (int i = 0; i < terms.size(); i++) {
+               // Term term = new Term();
+               // Node termNode = (Node) termsIt.next();
+               // term.setId(termNode.getNumber());
+               // term.setName(termNode.getStringValue("name"));
+               // term.setSubscription(false);
+               // newsletter.getTerms().add(term);
+               // }
+               // =======
       Newsletter newsletter = convertFromNode(newsletterNode);
 
       NodeList terms = newsletterNode.getRelatedNodes("term");
       log.debug("get newsletter by id:" + id + ",and get " + terms.size() + " 
terms with it.");
       List<Term> termList = MMBaseNodeMapper.convertList(terms, Term.class);
       newsletter.getTerms().addAll(termList);
+               // >>>>>>> 1.16
 
       return newsletter;
    }
@@ -89,30 +109,89 @@
       return newsletter;
    }
 
-       public Set<Term> getNewsletterTermsByName(int newsletterId, String 
name, int pagesize, int offset) {
+       public List<Term> getNewsletterTermsByName(int newsletterId, String 
name, int pagesize, int offset, String order, String direction) {
 
                NodeManager termNodeManager = cloud.getNodeManager("term");
                NodeManager newsletterNodeManager = 
cloud.getNodeManager("newsletter");
+
                NodeQuery query = cloud.createNodeQuery();
+               // <<<<<<< NewsletterCAOImpl.java
 
-               Step termStep = query.addStep(termNodeManager);
-               query.setNodeStep(termStep);
+               Step newsletterStep = query.addStep(newsletterNodeManager);
+               query.setNodeStep(newsletterStep);
+               Constraint idConstraint = 
SearchUtil.createEqualConstraint(query, 
newsletterNodeManager.getField("number"), newsletterId);
+               SearchUtil.addConstraint(query, idConstraint);
 
-               if(StringUtils.isNotBlank(name)){
-                       Constraint nameConstrant 
=SearchUtil.createLikeConstraint(query,
-                                       termNodeManager.getField("name"), "%" + 
name + "%" );
-                       SearchUtil.addConstraint(query, nameConstrant);
+               RelationStep relationStep = 
query.addRelationStep(termNodeManager, "posrel", "destination");
+               Step termStep = relationStep.getNext();
+               // =======
+               //
+               // Step termStep = query.addStep(termNodeManager);
+               // >>>>>>> 1.16
+               query.setNodeStep(termStep);
+               // <<<<<<< NewsletterCAOImpl.java
+               if (StringUtils.isNotBlank(name)) {
+                       SearchUtil.addLikeConstraint(query, 
termNodeManager.getField("name"), name);
+               }
+               query.setMaxNumber(pagesize);
+               query.setOffset(offset);
+               String orderBy = "number";
+               if (!"number".equals(order.trim()))
+                       orderBy = order.trim();
+               Queries.addSortOrders(query, orderBy, direction);
+               List<Node> nodeList = query.getList();
+               List<Term> terms = new ArrayList<Term>();
+               for (Node termNode : nodeList) {
+                       int tmpNum = termNode.getNumber();
+                       String tmpName = termNode.getStringValue("name");
+                       Term term = new Term();
+                       term.setId(tmpNum);
+                       term.setName(tmpName);
+                       terms.add(term);
+                       // =======
+                       //
+                       // if(StringUtils.isNotBlank(name)){
+                       // Constraint nameConstrant 
=SearchUtil.createLikeConstraint(query,
+                       // termNodeManager.getField("name"), "%" + name + "%" );
+                       // SearchUtil.addConstraint(query, nameConstrant);
+                       // >>>>>>> 1.16
+               }
+               // <<<<<<< NewsletterCAOImpl.java
+               return terms;
                }
 
-               RelationStep rStep = 
query.addRelationStep(newsletterNodeManager, "posrel", "destination");
-               Constraint idConstraint = 
SearchUtil.createEqualConstraint(query,
-                               newsletterNodeManager.getField("number"), 
newsletterId);
+       public int getNewsletterTermsCountByName(int newsletterId, String name) 
{
+               NodeManager termNodeManager = cloud.getNodeManager("term");
+               NodeManager newsletterNodeManager = 
cloud.getNodeManager("newsletter");
+
+               NodeQuery query = cloud.createNodeQuery();
+
+               Step newsletterStep = query.addStep(newsletterNodeManager);
+               query.setNodeStep(newsletterStep);
+               Constraint idConstraint = 
SearchUtil.createEqualConstraint(query, 
newsletterNodeManager.getField("number"), newsletterId);
+               // =======
+               //
+               // RelationStep rStep = 
query.addRelationStep(newsletterNodeManager,
+               // "posrel", "destination");
+               // Constraint idConstraint = 
SearchUtil.createEqualConstraint(query,
+               // newsletterNodeManager.getField("number"), newsletterId);
+               // >>>>>>> 1.16
                SearchUtil.addConstraint(query, idConstraint);
+               // <<<<<<< NewsletterCAOImpl.java
 
-               System.out.println(query.toSql());
-               NodeList nodeList = query.getList();
-               System.out.println(nodeList.toString());
-               return new HashSet<Term>();
+               RelationStep relationStep = 
query.addRelationStep(termNodeManager, "posrel", "destination");
+               Step termStep = relationStep.getNext();
+               query.setNodeStep(termStep);
+               if (StringUtils.isNotBlank(name)) {
+                       SearchUtil.addLikeConstraint(query, 
termNodeManager.getField("name"), name);
+               }
+               return query.getList().size();
+               // =======
+               //
+               // System.out.println(query.toSql());
+               // NodeList nodeList = query.getList();
+               // System.out.println(nodeList.toString());
+               // return new HashSet<Term>();
+               // >>>>>>> 1.16
        }
-
 }


Index: NewsletterPublicationCAOImpl.java
===================================================================
RCS file: 
/var/cvs/contributions/CMSContainer_Portlets/portlets-newsletter/src/java/com/finalist/newsletter/cao/impl/NewsletterPublicationCAOImpl.java,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -b -r1.15 -r1.16
--- NewsletterPublicationCAOImpl.java   21 Jul 2008 12:52:40 -0000      1.15
+++ NewsletterPublicationCAOImpl.java   24 Jul 2008 09:04:16 -0000      1.16
@@ -6,6 +6,7 @@
 
 import org.apache.commons.lang.time.DateFormatUtils;
 import org.mmbase.bridge.*;
+import org.mmbase.bridge.util.Queries;
 import org.mmbase.bridge.util.SearchUtil;
 import org.mmbase.storage.search.*;
 import org.mmbase.storage.search.implementation.*;
@@ -168,7 +169,55 @@
 
    }
 
-   public Set<Publication> getPublicationsByNewsletterAndPeriod(int 
newsletterId, String title, String subject, Date startDate, Date endDate, int 
pagesize, int offset){
+//   public Set<Publication> getPublicationsByNewsletterAndPeriod(int 
newsletterId, String title, String subject, Date startDate, Date endDate, int 
pagesize, int offset){
+//        NodeManager manager = cloud.getNodeManager("newsletterpublication");
+//        Node newsletterNode = cloud.getNode(newsletterId);
+//
+//        NodeQuery nodeQuery = 
SearchUtil.createRelatedNodeListQuery(newsletterNode, "newsletterpublication", 
"related");
+//        Step step = nodeQuery.getNodeStep();
+//
+//        StepField fieldSubject = nodeQuery.addField(step, 
manager.getField("subject"));
+//        StepField fieldTitle = nodeQuery.addField(step, 
manager.getField("title"));
+//        StepField fieldDate = nodeQuery.addField(step, 
manager.getField("creationdate"));
+//
+//        BasicFieldValueConstraint constraintTitle = new 
BasicFieldValueConstraint(fieldTitle, "%" + title + "%");
+//        constraintTitle.setOperator(FieldCompareConstraint.LIKE);
+//        BasicFieldValueConstraint constraintSubject = new 
BasicFieldValueConstraint(fieldSubject, "%" + subject + "%");
+//        constraintSubject.setOperator(FieldCompareConstraint.LIKE);
+//
+//        BasicCompositeConstraint constraints = new 
BasicCompositeConstraint(2);
+//        if (startDate != null){
+//                BasicFieldValueBetweenConstraint constraintDate= new 
BasicFieldValueBetweenConstraint(fieldDate, startDate, endDate);
+//                constraints.addChild(constraintDate);
+//        }
+//        else{
+//                     BasicFieldValueConstraint constraintDate =new 
BasicFieldValueConstraint(fieldDate, endDate);
+//                     constraintDate.setOperator(FieldCompareConstraint.LESS);
+//                     constraints.addChild(constraintDate);
+//        }
+//
+//        constraints.addChild(constraintTitle);
+//        constraints.addChild(constraintSubject);
+//        nodeQuery.setOffset(offset);
+//        nodeQuery.setMaxNumber(pagesize);
+//        nodeQuery.setConstraint(constraints);
+//        List<Node> list = nodeQuery.getList();
+//        Set<Publication> publications = convertPublicationsToMap(list);
+//        return publications;
+//   }
+   private List<Publication> convertPublicationsToMap(List<Node> 
publicationNodes) {
+          List<Publication> publications = new ArrayList<Publication>();
+               // private Set<Publication> convertPublicationsToMap(List<Node>
+               // publicationNodes) {
+               // Set<Publication> publications = new HashSet<Publication>();
+               // >>>>>>> 1.15
+          for (Node publicationNode : publicationNodes) {
+                  publications.add(convertFromNode(publicationNode));
+          }
+          return publications;
+       }
+
+       public int getPublicationCountForEdit(int newsletterId, String title, 
String subject, Date startDate, Date endDate){
           NodeManager manager = cloud.getNodeManager("newsletterpublication");
           Node newsletterNode = cloud.getNode(newsletterId);
 
@@ -188,8 +237,7 @@
           if (startDate != null){
                   BasicFieldValueBetweenConstraint constraintDate= new 
BasicFieldValueBetweenConstraint(fieldDate, startDate, endDate);
                   constraints.addChild(constraintDate);
-          }
-          else{
+               } else {
                        BasicFieldValueConstraint constraintDate =new 
BasicFieldValueConstraint(fieldDate, endDate);
                        constraintDate.setOperator(FieldCompareConstraint.LESS);
                        constraints.addChild(constraintDate);
@@ -197,23 +245,12 @@
 
           constraints.addChild(constraintTitle);
           constraints.addChild(constraintSubject);
-          nodeQuery.setOffset(offset);
-          nodeQuery.setMaxNumber(pagesize);
           nodeQuery.setConstraint(constraints);
-          List<Node> list = nodeQuery.getList();
-          Set<Publication> publications = convertPublicationsToMap(list);
-          return publications;
-   }
-
-       private Set<Publication> convertPublicationsToMap(List<Node> 
publicationNodes) {
-          Set<Publication> publications = new HashSet<Publication>();
-          for (Node publicationNode : publicationNodes) {
-                  publications.add(convertFromNode(publicationNode));
-          }
-          return publications;
+                  return nodeQuery.getList().size();
        }
 
-       public int getPublicationCountForEdit(int newsletterId, String title, 
String subject, Date startDate, Date endDate){
+       public List<Publication> getPublicationsByNewsletterAndPeriod(int 
newsletterId, String title, String subject, Date startDate, Date endDate,
+                       int pagesize, int offset, String order, String 
direction) {
                NodeManager manager = 
cloud.getNodeManager("newsletterpublication");
                   Node newsletterNode = cloud.getNode(newsletterId);
 
@@ -230,18 +267,28 @@
                   constraintSubject.setOperator(FieldCompareConstraint.LIKE);
 
                   BasicCompositeConstraint constraints = new 
BasicCompositeConstraint(2);
-                  if (startDate != null){
-                          BasicFieldValueBetweenConstraint constraintDate= new 
BasicFieldValueBetweenConstraint(fieldDate, startDate, endDate);
+               if (startDate != null) {
+                       BasicFieldValueBetweenConstraint constraintDate = new 
BasicFieldValueBetweenConstraint(fieldDate, startDate, endDate);
                           constraints.addChild(constraintDate);
-                  }
-                  else{
-                               BasicFieldValueConstraint constraintDate =new 
BasicFieldValueConstraint(fieldDate, endDate);
+               } else {
+                       BasicFieldValueConstraint constraintDate = new 
BasicFieldValueConstraint(fieldDate, endDate);
                                
constraintDate.setOperator(FieldCompareConstraint.LESS);
                                constraints.addChild(constraintDate);
                   }
 
                   constraints.addChild(constraintTitle);
                   constraints.addChild(constraintSubject);
-                  return nodeQuery.getList().size();
+               nodeQuery.setOffset(offset);
+               nodeQuery.setMaxNumber(pagesize);
+               nodeQuery.setConstraint(constraints);
+               String orderBy = "number";
+               if (!"number".equals(order.trim()))
+                       orderBy = order.trim();
+               Queries.addSortOrders(nodeQuery, orderBy, direction);
+               List<Node> list = nodeQuery.getList();
+               List<Publication> publications = convertPublicationsToMap(list);
+               return publications;
        }
+
+       
 }


Index: NewsletterSubscriptionCAOImpl.java
===================================================================
RCS file: 
/var/cvs/contributions/CMSContainer_Portlets/portlets-newsletter/src/java/com/finalist/newsletter/cao/impl/NewsletterSubscriptionCAOImpl.java,v
retrieving revision 1.23
retrieving revision 1.24
diff -u -b -r1.23 -r1.24
--- NewsletterSubscriptionCAOImpl.java  21 Jul 2008 12:52:40 -0000      1.23
+++ NewsletterSubscriptionCAOImpl.java  24 Jul 2008 09:04:16 -0000      1.24
@@ -2,18 +2,37 @@
 
 import static 
com.finalist.newsletter.util.NewsletterSubscriptionUtil.convertFromNode;
 
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
 
+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.Field;
+import org.mmbase.bridge.Node;
+import org.mmbase.bridge.NodeManager;
+import org.mmbase.bridge.NodeQuery;
+import org.mmbase.bridge.Query;
+import org.mmbase.bridge.RelationManager;
 import org.mmbase.bridge.util.SearchUtil;
 import org.mmbase.storage.search.Constraint;
+import org.mmbase.storage.search.FieldCompareConstraint;
+import org.mmbase.storage.search.RelationStep;
 import org.mmbase.storage.search.Step;
+import org.mmbase.storage.search.StepField;
+import org.mmbase.storage.search.implementation.BasicCompositeConstraint;
+import org.mmbase.storage.search.implementation.BasicFieldValueConstraint;
 
 import com.finalist.newsletter.cao.AbstractCAO;
 import com.finalist.newsletter.cao.NewsletterSubscriptionCAO;
-import com.finalist.newsletter.domain.*;
+import com.finalist.newsletter.domain.Newsletter;
+import com.finalist.newsletter.domain.Subscription;
+import com.finalist.newsletter.domain.Term;
 import com.finalist.newsletter.domain.Subscription.STATUS;
 import com.finalist.newsletter.util.DateUtil;
 
@@ -21,7 +40,6 @@
 
    private static Log log = 
LogFactory.getLog(NewsletterSubscriptionCAOImpl.class);
 
-
    public NewsletterSubscriptionCAOImpl() {
    }
 
@@ -29,6 +47,10 @@
       this.cloud = cloud;
    }
 
+       public void setCloud(Cloud cloud) {
+               this.cloud = cloud;
+       }
+
    public List<Node> querySubcriptionByUser(int userId) {
 
       NodeManager recordManager = cloud.getNodeManager("subscriptionrecord");
@@ -40,18 +62,15 @@
       query.setNodeStep(theStep);
 
       Field field = recordManager.getField(subscriber);
-      Constraint titleConstraint = SearchUtil.createEqualConstraint(query,
-            field, Integer.toString(userId));
+               Constraint titleConstraint = 
SearchUtil.createEqualConstraint(query, field, Integer.toString(userId));
       SearchUtil.addConstraint(query, titleConstraint);
       return query.getList();
    }
 
    public void addSubscriptionRecord(Subscription subscription, int userId) {
       String nodeType = "subscriptionrecord";
-      NodeManager subscriptionrecordNodeManager = cloud
-            .getNodeManager(nodeType);
-      Node subscriptionrecordNode = subscriptionrecordNodeManager
-            .createNode();
+               NodeManager subscriptionrecordNodeManager = 
cloud.getNodeManager(nodeType);
+               Node subscriptionrecordNode = 
subscriptionrecordNodeManager.createNode();
 
       subscriptionrecordNode.setIntValue("subscriber", userId);
       subscriptionrecordNode.setStringValue("status", 
subscription.getStatus().toString());
@@ -61,8 +80,7 @@
       // add Relation to newsletter
       int nodeNumber = subscription.getNewsletter().getId();
       Node newsletternode = cloud.getNode(nodeNumber);
-      RelationManager insrel = cloud.getRelationManager("subscriptionrecord",
-            "newsletter", "newslettered");
+               RelationManager insrel = 
cloud.getRelationManager("subscriptionrecord", "newsletter", "newslettered");
       subscriptionrecordNode.createRelation(newsletternode, insrel).commit();
       subscription.setId(subscriptionrecordNode.getNumber());
    }
@@ -88,18 +106,6 @@
       record.commit();
    }
 
-   public Set<Node> getRecordByNewsletterAndName(int newsletterId, String 
termName) {
-      return null;
-   }
-
-   public Set<Node> getNewslettersByScriptionRecord(int authenticationId) {
-      return null;
-   }
-
-   public Set<Node> getTermsByScriptionRecord(int authenticationId) {
-      return null;
-   }
-
    public void modifySubscriptionFormat(Subscription subscription) {
       int recordId = subscription.getId();
       Node record = cloud.getNode(recordId);
@@ -114,8 +120,7 @@
       Node record = cloud.getNode(recordId);
       Node term = cloud.getNode(termId);
 
-      RelationManager insrel = cloud.getRelationManager(
-            "subscriptionrecord", "term", "termed");
+               RelationManager insrel = 
cloud.getRelationManager("subscriptionrecord", "term", "termed");
       record.createRelation(term, insrel).commit();
    }
 
@@ -129,8 +134,7 @@
       for (int i = 0; i < terms.size(); i++) {
          Node term = (Node) termsit.next();
          if (termId != term.getNumber()) {
-            RelationManager insrel = cloud.getRelationManager(
-                  "subscriptionrecord", "term", "termed");
+                               RelationManager insrel = 
cloud.getRelationManager("subscriptionrecord", "term", "termed");
             record.createRelation(term, insrel).commit();
          }
       }
@@ -148,12 +152,10 @@
          }
       }
 
-
       if (null != subscriptionNode) {
          Subscription subscription = new Subscription();
          int subscriptionId = subscriptionNode.getIntValue("number");
 
-
          subscription.setId(subscriptionId);
          subscription.setMimeType(subscriptionNode.getStringValue("format"));
          
subscription.setStatus(STATUS.valueOf(subscriptionNode.getStringValue("status")));
@@ -168,8 +170,7 @@
             subscription.getTerms().add(term);
          }
          return subscription;
-      }
-      else {
+               } else {
          log.debug("Get subscription failed,user " + userId + " may not 
subscripbe " + newsletterId);
          return null;
       }
@@ -191,7 +192,6 @@
       return terms;
    }
 
-
    public List<Subscription> getSubscription(int newsletterId) {
 
       List<Node> records = 
cloud.getNode(newsletterId).getRelatedNodes("subscriptionrecord");
@@ -207,7 +207,6 @@
       return subscribers;
    }
 
-
    public void createSubscription(int userId, int newsletterId) {
       log.debug("Create subscription user:" + userId + " newsletter:" + 
newsletterId);
 
@@ -275,11 +274,72 @@
       return list;
    }
 
+       public Set<Node> getRecordByNewsletterAndName(int newsletterId, String 
termName) {
+               NodeManager manager = cloud.getNodeManager("term");
+               Node newsletterNode = cloud.getNode(newsletterId);
+               NodeQuery nodeQuery = 
SearchUtil.createRelatedNodeListQuery(newsletterNode, "term", "posrel");
+
+               if (StringUtils.isNotBlank(termName)) {
+                       Step step = nodeQuery.getNodeStep();
+                       StepField fieldName = nodeQuery.addField(step, 
manager.getField("name"));
+                       BasicFieldValueConstraint constraintTitle = new 
BasicFieldValueConstraint(fieldName, "%" + termName + "%");
+                       
constraintTitle.setOperator(FieldCompareConstraint.LIKE);
+                       BasicCompositeConstraint constraints = new 
BasicCompositeConstraint(2);
+                       constraints.addChild(constraintTitle);
+                       nodeQuery.setConstraint(constraints);
+               }
+               List<Node> list = nodeQuery.getList();
+               Set results = new HashSet<Node>();
+               List<Node> recordList = null;
+
+               for (Node termNode : list) {
+                       recordList = 
termNode.getRelatedNodes("subscriptionrecord", "termed", "source");
+                       for (Node recordNode : recordList) {
+                               if (recordNode != null) {
+                                       results.add(recordNode);
+                               }
+                       }
+               }
+               return results;
+       }
+
+       public Set<Node> getNewslettersByScriptionRecord(int authenticationId) {
+               NodeManager recordManager = 
cloud.getNodeManager("subscriptionrecord");
+               Query query = recordManager.createQuery();
+               SearchUtil.addEqualConstraint(query, 
recordManager.getField("subscriber"), Integer.toString(authenticationId));
+               List<Node> subscriptions = query.getList();
+               Set<Node> newsletters = new HashSet<Node>();
+               for (Node subscription : subscriptions) {
+                       List<Node> tmpNewsletters = 
subscription.getRelatedNodes("newsletter", "newslettered", "source");
+                       for (Node newsletter : tmpNewsletters) {
+                               if (newsletter != null)
+                                       newsletters.add(newsletter);
+                       }
+               }
+               return newsletters;
+       }
+
+       public Set<Node> getTermsByScriptionRecord(int authenticationId) {
+               NodeManager recordManager = 
cloud.getNodeManager("subscriptionrecord");
+               Query query = recordManager.createQuery();
+               SearchUtil.addEqualConstraint(query, 
recordManager.getField("subscriber"), Integer.toString(authenticationId));
+               List<Node> subscriptions = query.getList();
+               Set<Node> terms = new HashSet<Node>();
+               for (Node subscription : subscriptions) {
+                       List<Node> tmpTerms = 
subscription.getRelatedNodes("term", "termed", "destination");
+                       for (Node term : tmpTerms) {
+                               if (term != null)
+                                       terms.add(term);
+                       }
+               }
+               return terms;
+       }
+
    public void updateLastBounce(int subscriptionId) {
-      //todo test.
+               // todo test.
       Node subscription = getSubscriptionNodeById(subscriptionId);
-      
subscription.setIntValue("count_bounces",subscription.getIntValue("count_bounces"));
-      subscription.setDateValue("last_bounce",new 
Date(System.currentTimeMillis()));
+               subscription.setIntValue("count_bounces", 
subscription.getIntValue("count_bounces"));
+               subscription.setDateValue("last_bounce", new 
Date(System.currentTimeMillis()));
       subscription.commit();
    }
 
@@ -305,4 +365,35 @@
 
       return subscriptionNode;
    }
+
+       public List<Node> getSubscriptionsByTerms(int newsletterId, String 
terms) {
+               NodeManager termNodeManager = cloud.getNodeManager("term");
+               NodeManager newsletterNodeManager = 
cloud.getNodeManager("newsletter");
+               NodeManager subscriptionNodeManger = 
cloud.getNodeManager("subscriptionrecord");
+
+               NodeQuery query = cloud.createNodeQuery();
+               Step termStep = query.addStep(termNodeManager);
+               query.setNodeStep(termStep);
+
+               if (StringUtils.isNotBlank(terms)) {
+                       String nameLikeStr = null;
+                       String[] tmpTerms = terms.split(" ");
+                       for (String termName : tmpTerms) {
+                               SearchUtil.addLikeConstraint(query, 
termNodeManager.getField("name"), termName);
+                       }
+               }
+
+               RelationStep newsletterRelStep = 
query.addRelationStep(newsletterNodeManager, "posrel", "source");
+               Step newsletterStep = newsletterRelStep.getNext();
+               query.setNodeStep(newsletterStep);
+               SearchUtil.addEqualConstraint(query, 
newsletterNodeManager.getField("number"), newsletterId);
+
+               RelationStep subscriptionRelStep = 
query.addRelationStep(subscriptionNodeManger, "newslettered", "destination");
+               Step subscriptionStep = subscriptionRelStep.getNext();
+               query.setNodeStep(subscriptionStep);
+               List<Node> subscriptions = query.getList();
+
+               return subscriptions;
+       }
+
 }
_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs

Reply via email to