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

Modified Files:
        NewsletterSubscriptionCAOImpl.java 
Log Message:
CMSC-818 improve code,implement pause all.


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


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.15
retrieving revision 1.16
diff -u -b -r1.15 -r1.16
--- NewsletterSubscriptionCAOImpl.java  29 Apr 2008 01:37:04 -0000      1.15
+++ NewsletterSubscriptionCAOImpl.java  3 May 2008 14:40:59 -0000       1.16
@@ -23,18 +23,19 @@
 import com.finalist.newsletter.cao.NewsletterSubscriptionCAO;
 import com.finalist.newsletter.domain.Subscription;
 import com.finalist.newsletter.domain.Term;
+import com.finalist.newsletter.domain.Newsletter;
 import com.finalist.newsletter.services.CommunityModuleAdapter;
 import static com.finalist.newsletter.domain.Subscription.STATUS;
 
 public class NewsletterSubscriptionCAOImpl implements 
NewsletterSubscriptionCAO {
 
-       private static Log log = LogFactory
-                       .getLog(NewsletterSubscriptionCAOImpl.class);
+   private static Log log = 
LogFactory.getLog(NewsletterSubscriptionCAOImpl.class);
 
        private Cloud cloud;
 
        public NewsletterSubscriptionCAOImpl() {
        }
+
        public NewsletterSubscriptionCAOImpl(Cloud cloud) {
                this.cloud = cloud;
        }
@@ -78,7 +79,7 @@
        }
 
        public void modifySubscriptionStauts(Subscription subscription) {
-      log.debug("Modify subscription status"+subscription.getId()+" to 
"+subscription.getStatus());
+      log.debug("Modify subscription status " + subscription.getId() + " to " 
+ subscription.getStatus());
       String stauts = subscription.getStatus().toString();
 
       Node record = cloud.getNode(subscription.getId());
@@ -86,7 +87,6 @@
                record.commit();
 
                if ("INACTIVE".equals(stauts)) {
-                       record.setStringValue("format", "html");
                        record.deleteRelations("termed");
                        record.commit();
                        }
@@ -102,7 +102,7 @@
                record.commit();
        }
 
-       public void addSubscriptionTerm(Subscription subscription,int termId) {
+   public void addSubscriptionTerm(Subscription subscription, int termId) {
                        int recordId = subscription.getId();
                        Node record = cloud.getNode(recordId);
                        Node term = cloud.getNode(termId);
@@ -112,7 +112,7 @@
                        record.createRelation(term, insrel).commit();
        }
 
-       public void removeSubscriptionTerm(Subscription subscription,int 
termId) {
+   public void removeSubscriptionTerm(Subscription subscription, int termId) {
                        int recordId = subscription.getId();
                        Node record = cloud.getNode(recordId);
 
@@ -131,48 +131,38 @@
 
        public Subscription getSubscription(int newsletterId, int userId) {
                log.debug("getSubscriptionrecord that newsletterId=" + 
newsletterId);
-               NodeManager recordManager = 
cloud.getNodeManager("subscriptionrecord");
-               NodeManager newsletterManager = 
cloud.getNodeManager("newsletter");
 
-               Query query = cloud.createQuery();
-               Step parameterStep = query.addStep(recordManager);
-               RelationStep relationStep = 
query.addRelationStep(newsletterManager,
-                               "newslettered", "DESTINATION");
-               Step newsletterStep = relationStep.getNext();
-
-               query.addField(parameterStep, 
recordManager.getField("subscriber"));
-               query.addField(newsletterStep, 
newsletterManager.getField("number"));
-
-               SearchUtil.addEqualConstraint(query, recordManager
-                               .getField("subscriber"), 
Integer.toString(userId));
-               SearchUtil.addEqualConstraint(query, newsletterManager
-                               .getField("number"), newsletterId);
+      Node subscriptionNode = null;
+      List<Node> records = 
cloud.getNode(newsletterId).getRelatedNodes("subscriptionrecord");
+      for (Node record : records) {
+         if 
(record.getStringValue("subscriber").equals(Integer.toString(userId))) {
+            subscriptionNode = record;
+            break;
+         }
+      }
+
 
-               List<Node> subscriptionList = query.getList();
+      if (null != subscriptionNode) {
                Subscription subscription = new Subscription();
-               if (0 != subscriptionList.size()) {
-                       Node subscriptionNode = subscriptionList.get(0);
-                       int subscriptionId = 
subscriptionNode.getIntValue("subscriptionrecord.number");
-                       log.debug("Get subscription successful");
+         int subscriptionId = subscriptionNode.getIntValue("number");
 
-                       subscription.setId(subscriptionId);
-                       
subscription.setMimeType(subscriptionNode.getStringValue("subscriptionrecord.format"));
-                       
subscription.setStatus(STATUS.valueOf(subscriptionNode.getStringValue("subscriptionrecord.status")));
-                       List<Node> terms =  
cloud.getNode(subscriptionId).getRelatedNodes("term");
 
-                       Iterator termIt = terms.iterator();
-                       for(int i=0;i<terms.size();i++){
+         subscription.setId(subscriptionId);
+         subscription.setMimeType(subscriptionNode.getStringValue("format"));
+         
subscription.setStatus(STATUS.valueOf(subscriptionNode.getStringValue("status")));
+         List<Node> terms = subscriptionNode.getRelatedNodes("term");
+         log.debug("Get subscription successful and get " + terms.size() + " 
term with it");
+         for (Node termNode : terms) {
                                Term term = new Term();
-                               Node termNode = (Node) termIt.next();
                                term.setId(termNode.getNumber());
                                term.setName(termNode.getStringValue("name"));
                                term.setSubscription(true);
                                subscription.getTerms().add(term);
                        }
                        return subscription;
-               } else {
-                       log.debug("Get subscription failed,user " + userId
-                                       + " may not subscripbe " + 
newsletterId);
+      }
+      else {
+         log.debug("Get subscription failed,user " + userId + " may not 
subscripbe " + newsletterId);
                        return null;
                }
        }
@@ -193,11 +183,10 @@
    }
 
 
-
    public List<Subscription> getSubscription(int newsletterId) {
 
       List<Node> records = 
cloud.getNode(newsletterId).getRelatedNodes("subscriptionrecord");
-      log.debug("Get subscriptions of newsletter:"+newsletterId+" and get 
"+records.size()+" records in all");
+      log.debug("Get subscriptions of newsletter:" + newsletterId + " and get 
" + records.size() + " records in all");
       List<Subscription> subscribers = new ArrayList<Subscription>();
       for (Node record : records) {
          String status = record.getStringValue("status");
@@ -209,7 +198,7 @@
       return subscribers;
    }
 
-   private Subscription convertFromNode(Node node){
+   private Subscription convertFromNode(Node node) {
       Subscription subscription = new Subscription();
       subscription.setId(node.getIntValue("number"));
       subscription.setMimeType(node.getStringValue("format"));
@@ -219,4 +208,58 @@
       return subscription;
    }
 
+   public void createSubscription(int userId, int newsletterId) {
+      log.debug("Create subscription user:" + userId + " newsletter:" + 
newsletterId);
+
+      NodeManager recordManager = cloud.getNodeManager("subscriptionrecord");
+      Node newsletter = cloud.getNode(newsletterId);
+
+      Node recordNode = recordManager.createNode();
+      recordNode.setStringValue("status", 
Subscription.STATUS.ACTIVE.toString());
+      recordNode.setStringValue("subscriber", Integer.toString(userId));
+      recordNode.setStringValue("format", "text/html");
+      recordNode.commit();
+
+      RelationManager insrel = cloud.getRelationManager("subscriptionrecord", 
"newsletter", "newslettered");
+      recordNode.createRelation(newsletter, insrel).commit();
+
+   }
+
+   public Subscription getSubscriptionById(int id) {
+      Node subscriptionNode = cloud.getNode(id);
+      Subscription subscription = convertFromNode(subscriptionNode);
+      List<Node> newsletterNodes = 
subscriptionNode.getRelatedNodes("newsletter");
+
+      Newsletter newsletter = new Newsletter();
+      newsletter.setTitle(newsletterNodes.get(0).getStringValue("subject"));
+      subscription.setNewsletter(newsletter);
+
+      return subscription; 
+   }
+
+   public void updateSubscription(Subscription subscription) {
+      Node node = cloud.getNode(subscription.getId());
+      node.setStringValue("status",subscription.getStatus().toString());
+      node.setDateValue("pausetill",subscription.getPausedTill());
+      node.commit();
+
+   }
+
+   public List<Subscription> getSubscriptionByUserIdAndStatus(int 
userId,STATUS status) {
+
+      NodeManager recordManager = cloud.getNodeManager("subscriptionrecord");
+
+      Query query = recordManager.createQuery();
+      
SearchUtil.addEqualConstraint(query,recordManager.getField("status"),status.toString());
+      
SearchUtil.addEqualConstraint(query,recordManager.getField("subscriber"),Integer.toString(userId));
+
+      List<Node> subscriptions = query.getList();
+
+      List<Subscription> subs = new ArrayList<Subscription>();
+      for(Node node :subscriptions){
+         subs.add(convertFromNode(node));
+      }
+
+      return subs;
+   }
 }
_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs

Reply via email to