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

Modified Files:
        NewsletterCronJob.java 
Log Message:
CMSC-811


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


Index: NewsletterCronJob.java
===================================================================
RCS file: 
/var/cvs/contributions/CMSContainer_Portlets/portlets-newsletter/src/java/com/finalist/newsletter/NewsletterCronJob.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -b -r1.9 -r1.10
--- NewsletterCronJob.java      15 Apr 2008 07:03:53 -0000      1.9
+++ NewsletterCronJob.java      16 Apr 2008 10:44:53 -0000      1.10
@@ -1,10 +1,17 @@
 package com.finalist.newsletter;
 
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
 import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Calendar;
+import java.util.Date;
 import java.util.List;
 
 import net.sf.mmapps.modules.cloudprovider.CloudProviderFactory;
 
+import org.apache.commons.lang.time.DateUtils;
 import org.mmbase.applications.crontab.CronEntry;
 import org.mmbase.applications.crontab.CronJob;
 import org.mmbase.bridge.Cloud;
@@ -12,7 +19,6 @@
 import org.mmbase.bridge.NodeList;
 import org.mmbase.bridge.NodeManager;
 import org.mmbase.bridge.NodeQuery;
-import org.mmbase.bridge.util.SearchUtil;
 import org.mmbase.util.logging.Logger;
 import org.mmbase.util.logging.Logging;
 
@@ -32,18 +38,192 @@
       List<Node> newslettersToPublish = new ArrayList<Node>();
       for (int i = 0; i < newsletters.size(); i++) {
          Node newsletter = newsletters.getNode(i);
-         if (Publish.isPublished(newsletter)) {
-            long publishInterval = newsletter.getLongValue("publishinterval");
-            if (publishInterval > 0) {
-               int newsletterNumber = newsletter.getNumber();
-               boolean isPaused = NewsletterUtil.isPaused(newsletterNumber);
-               if (isPaused == false) {
+         if (!Publish.isPublished(newsletter)) {
+            Object schedule = newsletter.getValue("schedule");
+            Date lastCreateDateTime = newsletter.getDateValue("lastcreate");
+            if (schedule != null) {
+               shouldPublish(newslettersToPublish, newsletter, schedule,
+                     lastCreateDateTime);
+            } 
+         } 
+      }
+      return (newslettersToPublish);
+   }
+
+   private void shouldPublish(List<Node> newslettersToPublish, Node newsletter,
+         Object schedule, Date lastCreateDateTime) {
+      String expression = (String)schedule;
+      String[] expressions = expression.split("\\|");
+      if(isShouldPublish(expressions,lastCreateDateTime)) {
                   newslettersToPublish.add(newsletter);
                }
             }
+   
+   private boolean isShouldPublish(String[] expressions,Date 
lastCreateDateTime) {
+      boolean isPublish = false;
+      DateFormat df = new SimpleDateFormat("dd-MM-yyyy HH:mm");
+      Date minDate =  null;
+      try {
+         minDate =  df.parse("01-01-1970 00:00");
+      } catch (ParseException e1) {
+         log.debug("--> parse date Exception");;
          }
+      //only once  pattern :
+      if(expressions[0].equals("1")) { 
+         String datetime = expressions[1]+" 
"+expressions[2]+":"+expressions[3];
+         Date now = new Date();
+         try {
+            Date date = df.parse(datetime);
+            if(now.after(date) && (lastCreateDateTime == null || 
DateUtils.isSameDay(minDate, lastCreateDateTime))) {
+               isPublish = true;
       }
-      return (newslettersToPublish);
+         } 
+         catch (ParseException e) {
+            log.debug("--> parse date Exception");
+         }
+      }
+      else if (expressions[0].equals("2")) {
+         String datetime = expressions[1]+" 
"+expressions[2]+":"+expressions[3];
+         Date now = new Date();
+         Calendar calender = Calendar.getInstance();
+         try {
+            Date date = df.parse(datetime);
+            if(now.after(date)) {
+               if(expressions[4].equals("0")) {
+                  isPublish = compareDate(lastCreateDateTime, isPublish,
+                        minDate, now);
+               }
+               else if(expressions[4].equals("1")) {
+                  if(calender.get(Calendar.DAY_OF_WEEK) != Calendar.SATURDAY 
&& calender.get(Calendar.DAY_OF_WEEK) != Calendar.SUNDAY) {
+                     isPublish = compareDate(lastCreateDateTime, isPublish,
+                           minDate, now);
+                  }
+               }
+               else if(expressions[4].equals("2")) {
+                  int interval = Integer.parseInt(expressions[5]);
+                  if(lastCreateDateTime == null || 
DateUtils.isSameDay(minDate, lastCreateDateTime)) {
+                     if(DateUtils.isSameDay(DateUtils.addDays(date, 
interval),now)) {
+                        isPublish = true;
+                     }
+                  }
+                  else {
+                     
if(DateUtils.isSameDay(DateUtils.addDays(lastCreateDateTime, interval),now)) {
+                        isPublish = true;
+                     }
+                  }
+               }
+            }
+         } 
+         catch (ParseException e) {
+            log.debug("--> parse date Exception");
+         }
+      }
+      else if(expressions[0].equals("3")) {
+         Calendar createTime = Calendar.getInstance();
+         createTime.set(Calendar.HOUR_OF_DAY, 
Integer.parseInt(expressions[1]));
+         createTime.set(Calendar.MINUTE, Integer.parseInt(expressions[2]));
+         
+         Calendar calender = Calendar.getInstance();
+         char[] weeks = expressions[4].toCharArray();
+       
+         for(int j = 0 ; j < weeks.length; j++) {
+
+            String week = String.valueOf(weeks[j]);
+            if((calender.get(Calendar.DAY_OF_WEEK) != 1 && 
calender.get(Calendar.DAY_OF_WEEK) == (Integer.parseInt(week)+1)) || 
(calender.get(Calendar.DAY_OF_WEEK) == 1 && Integer.parseInt(week) == 7)) {
+               if(calender.after(createTime)) {
+                  try {
+                     if(lastCreateDateTime == null || 
DateUtils.isSameDay(minDate, lastCreateDateTime)){
+                        isPublish = true;
+                        break;
+                     }
+                     else {
+                        int interval = Integer.parseInt(expressions[3]);
+                        Date beCreate = DateUtils.addWeeks(lastCreateDateTime, 
interval);
+                        if(DateUtils.isSameDay(new Date(),beCreate )) {
+                           isPublish = true;
+                           break; 
+                        }
+                     }
+                  }
+                  catch (NumberFormatException e) {
+                     log.debug("-->NumberFormatException "+e.getMessage());
+                  } 
+               }
+            }
+         }
+      }
+      else if(expressions[0].equals("4")) {
+         Calendar createTime = Calendar.getInstance();
+         createTime.set(Calendar.HOUR_OF_DAY, 
Integer.parseInt(expressions[1]));
+         createTime.set(Calendar.MINUTE, Integer.parseInt(expressions[2]));
+         Calendar calender = Calendar.getInstance();
+         if(expressions[3].equals("0")) {
+            String day = expressions[4];
+            char[] months = expressions[5].toCharArray();
+            for(int j = 0 ; j < months.length ; j++) {
+               String month = String.valueOf(months[j]);
+               System.out.println("month="+month);
+               System.out.println(Arrays.toString(months));
+               if(!month.equals("a") && !month.equals("b") && 
(Integer.parseInt(month) == calender.get(Calendar.MONTH)) || (month.equals("b") 
&& calender.get(Calendar.MONTH) == 11) || (month.equals("a") && 
calender.get(Calendar.MONTH) == 10)) {
+                  if(calender.get(Calendar.DAY_OF_MONTH) == 
Integer.parseInt(day)) {
+                     if(calender.after(createTime)) {
+                           if(lastCreateDateTime == null || 
DateUtils.isSameDay(minDate, lastCreateDateTime)){
+                              isPublish = true;
+                              break;
+                           }
+                           else {
+                              if(!DateUtils.isSameDay(new 
Date(),lastCreateDateTime )) {
+                                 isPublish = true;
+                                 break; 
+                              }
+                           }
+                     }
+                  }
+               }
+            }
+         }
+         else if(expressions[3].equals("1")) {
+            String whichWeek = expressions[4];
+            String week = expressions[5];
+            
+            char[] months = expressions[6].toCharArray();
+            for(int j = 0 ; j < months.length ; j++) {
+               String month = String.valueOf(months[j]);
+               if(!month.equals("a") && !month.equals("b") && 
(Integer.parseInt(month) == calender.get(Calendar.MONTH)) || (month.equals("a") 
&& calender.get(Calendar.MONTH) == 10) || (month.equals("b") && 
calender.get(Calendar.MONTH) == 11)) {
+                  if(calender.get(Calendar.WEEK_OF_MONTH) == 
Integer.parseInt(whichWeek)) {
+                     if(calender.get(Calendar.DAY_OF_WEEK)!= 1 && 
calender.get(Calendar.DAY_OF_WEEK)== (Integer.parseInt(week)+1)) {
+                        if(calender.after(createTime)) {
+                              if(lastCreateDateTime == null || 
DateUtils.isSameDay(minDate, lastCreateDateTime)){
+                                 isPublish = true;
+                                 break;
+                              }
+                              else {
+                                 if(!DateUtils.isSameDay(new 
Date(),lastCreateDateTime )) {
+                                    isPublish = true;
+                                    break; 
+                                 }
+                              }
+                        }
+                     }
+                  }
+               }
+            }
+         }
+      }
+      return isPublish;
+   }
+
+   private boolean compareDate(Date lastCreateDateTime, boolean isPublish,
+         Date minDate, Date now) {
+      if(lastCreateDateTime == null || DateUtils.isSameDay(minDate, 
lastCreateDateTime)) {
+         isPublish = true;
+      }
+      else  {
+         if(!DateUtils.isSameDay(now, lastCreateDateTime)) {
+            isPublish = true;
+         }
+      }
+      return isPublish;
    }
 
    public void init(CronEntry arg0) {
@@ -55,8 +235,11 @@
       List<Node> newslettersToPublish = getNewslettersToPublish();
       for (int newsletterIterator = 0; newsletterIterator < 
newslettersToPublish.size(); newsletterIterator++) {
          Node newsletterNode = newslettersToPublish.get(newsletterIterator);
+         newsletterNode.setDateValue("lastcreate", new Date());
+         newsletterNode.commit();
          int newsletterNumber = newsletterNode.getNumber();
          log.info("Running Newsletter CronJob for newsletter " + 
newsletterNumber);
+         //NewsletterPublicationUtil.createPublication(newsletterNumber, true);
          Node publicationNode = 
NewsletterPublicationUtil.createPublication(newsletterNumber, true);
          Publish.publish(publicationNode);
       }
@@ -65,4 +248,6 @@
    public void stop() {
       log.info("Stopping Newsletter CronJob");
    }
+   
+   
 }
\ No newline at end of file
_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs

Reply via email to