Update of
/var/cvs/contributions/CMSContainer_Portlets/portlets-newsletter/src/java/com/finalist/newsletter
In directory
james.mmbase.org:/tmp/cvs-serv25951/src/java/com/finalist/newsletter
Modified Files:
NewsletterCronJob.java
Log Message:
CMSC-747 Newsletter: user possibility to switch of newsletter during period
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-747
Index: NewsletterCronJob.java
===================================================================
RCS file:
/var/cvs/contributions/CMSContainer_Portlets/portlets-newsletter/src/java/com/finalist/newsletter/NewsletterCronJob.java,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -b -r1.11 -r1.12
--- NewsletterCronJob.java 16 Apr 2008 10:46:31 -0000 1.11
+++ NewsletterCronJob.java 18 Apr 2008 06:15:39 -0000 1.12
@@ -39,27 +39,27 @@
for (int i = 0; i < newsletters.size(); i++) {
Node newsletter = newsletters.getNode(i);
if (!Publish.isPublished(newsletter)) {
- Object schedule = newsletter.getValue("schedule");
- Date lastCreateDateTime = newsletter.getDateValue("lastcreate");
- if (schedule != null) {
- shouldPublish(newslettersToPublish, newsletter, schedule,
- lastCreateDateTime);
+ Object scheduleExpression = newsletter.getValue("schedule");
+ Date lastCreatedDateTime =
newsletter.getDateValue("lastcreateddate");
+ if (scheduleExpression != null) {
+ createPublication(newslettersToPublish, newsletter,
scheduleExpression,
+ lastCreatedDateTime);
}
}
}
return (newslettersToPublish);
}
- private void shouldPublish(List<Node> newslettersToPublish, Node newsletter,
- Object schedule, Date lastCreateDateTime) {
- String expression = (String)schedule;
+ private void createPublication(List<Node> newslettersToPublish, Node
newsletter,
+ Object scheduleExpression, Date lastCreatedDateTime) {
+ String expression = (String)scheduleExpression;
String[] expressions = expression.split("\\|");
- if(isShouldPublish(expressions,lastCreateDateTime)) {
+ if(isPublish(expressions,lastCreatedDateTime)) {
newslettersToPublish.add(newsletter);
}
}
- private boolean isShouldPublish(String[] expressions,Date
lastCreateDateTime) {
+ private boolean isPublish(String[] expressions,Date lastCreatedDateTime) {
boolean isPublish = false;
DateFormat df = new SimpleDateFormat("dd-MM-yyyy HH:mm");
Date minDate = null;
@@ -68,46 +68,46 @@
} catch (ParseException e) {
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();
+ Calendar calender = Calendar.getInstance();
+ //expressions[0] value: 1 once
+ if(expressions[0].equals("1")) {
+ String startDatetime = expressions[1]+"
"+expressions[2]+":"+expressions[3];
try {
- Date date = df.parse(datetime);
- if(now.after(date) && (lastCreateDateTime == null ||
DateUtils.isSameDay(minDate, lastCreateDateTime))) {
+ Date startDate = df.parse(startDatetime);
+ if(now.after(startDate) && (lastCreatedDateTime == null ||
DateUtils.isSameDay(minDate, lastCreatedDateTime))) {
isPublish = true;
}
}
catch (ParseException e) {
log.debug("--> Parse date Exception");
}
- }
+ }//expressions[0] : 2 daily
else if (expressions[0].equals("2")) {
- String datetime = expressions[1]+"
"+expressions[2]+":"+expressions[3];
- Date now = new Date();
- Calendar calender = Calendar.getInstance();
+ String startDatetime = expressions[1]+"
"+expressions[2]+":"+expressions[3];
+
try {
- Date date = df.parse(datetime);
- if(now.after(date)) {
+ Date startDate = df.parse(startDatetime);
+ if(now.after(startDate)) {
if(expressions[4].equals("0")) {
- isPublish = compareDate(lastCreateDateTime, isPublish,
+ isPublish = compareDate(lastCreatedDateTime, 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,
+ isPublish = compareDate(lastCreatedDateTime, 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)) {
+ if(lastCreatedDateTime == null ||
DateUtils.isSameDay(minDate, lastCreatedDateTime)) {
+ if(DateUtils.isSameDay(DateUtils.addDays(startDate,
interval),now)) {
isPublish = true;
}
}
else {
-
if(DateUtils.isSameDay(DateUtils.addDays(lastCreateDateTime, interval),now)) {
+
if(DateUtils.isSameDay(DateUtils.addDays(lastCreatedDateTime, interval),now)) {
isPublish = true;
}
}
@@ -117,28 +117,24 @@
catch (ParseException e) {
log.debug("--> Parse date Exception");
}
- }
+ }//expressions[0] : 3 weekly
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();
+ Calendar startTime = getStartCalendar(expressions);
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)) {
+ if(calender.after(startTime)) {
try {
- if(lastCreateDateTime == null ||
DateUtils.isSameDay(minDate, lastCreateDateTime)){
+ if(lastCreatedDateTime == null ||
DateUtils.isSameDay(minDate, lastCreatedDateTime)){
isPublish = true;
break;
}
else {
int interval = Integer.parseInt(expressions[3]);
- Date beCreate = DateUtils.addWeeks(lastCreateDateTime,
interval);
+ Date beCreate =
DateUtils.addWeeks(lastCreatedDateTime, interval);
if(DateUtils.isSameDay(new Date(),beCreate )) {
isPublish = true;
break;
@@ -151,28 +147,25 @@
}
}
}
- }
+ }//expressions[0] : 4 monthly
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();
+ Calendar startTime = getStartCalendar(expressions);
if(expressions[3].equals("0")) {
- String day = expressions[4];
+ String dayOfMonth = 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)){
+ if(calender.get(Calendar.DAY_OF_MONTH) ==
Integer.parseInt(dayOfMonth)) {
+ if(calender.after(startTime)) {
+ if(lastCreatedDateTime == null ||
DateUtils.isSameDay(minDate, lastCreatedDateTime)){
isPublish = true;
break;
}
else {
- if(!DateUtils.isSameDay(new
Date(),lastCreateDateTime )) {
+ if(!DateUtils.isSameDay(new
Date(),lastCreatedDateTime )) {
isPublish = true;
break;
}
@@ -183,22 +176,22 @@
}
}
else if(expressions[3].equals("1")) {
- String whichWeek = expressions[4];
+ String weekOfMonth = 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.WEEK_OF_MONTH) ==
Integer.parseInt(weekOfMonth)) {
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)){
+ if(calender.after(startTime)) {
+ if(lastCreatedDateTime == null ||
DateUtils.isSameDay(minDate, lastCreatedDateTime)){
isPublish = true;
break;
}
else {
- if(!DateUtils.isSameDay(new
Date(),lastCreateDateTime )) {
+ if(!DateUtils.isSameDay(new
Date(),lastCreatedDateTime )) {
isPublish = true;
break;
}
@@ -213,13 +206,20 @@
return isPublish;
}
- private boolean compareDate(Date lastCreateDateTime, boolean isPublish,
+ private Calendar getStartCalendar(String[] expressions) {
+ Calendar startCalendar = Calendar.getInstance();
+ startCalendar.set(Calendar.HOUR_OF_DAY,
Integer.parseInt(expressions[1]));
+ startCalendar.set(Calendar.MINUTE, Integer.parseInt(expressions[2]));
+ return startCalendar;
+ }
+
+ private boolean compareDate(Date lastCreatedDateTime, boolean isPublish,
Date minDate, Date now) {
- if(lastCreateDateTime == null || DateUtils.isSameDay(minDate,
lastCreateDateTime)) {
+ if(lastCreatedDateTime == null || DateUtils.isSameDay(minDate,
lastCreatedDateTime)) {
isPublish = true;
}
else {
- if(!DateUtils.isSameDay(now, lastCreateDateTime)) {
+ if(!DateUtils.isSameDay(now, lastCreatedDateTime)) {
isPublish = true;
}
}
@@ -235,7 +235,7 @@
List<Node> newslettersToPublish = getNewslettersToPublish();
for (int newsletterIterator = 0; newsletterIterator <
newslettersToPublish.size(); newsletterIterator++) {
Node newsletterNode = newslettersToPublish.get(newsletterIterator);
- newsletterNode.setDateValue("lastcreate", new Date());
+ newsletterNode.setDateValue("lastcreateddate", new Date());
newsletterNode.commit();
int newsletterNumber = newsletterNode.getNumber();
log.info("Running Newsletter CronJob for newsletter " +
newsletterNumber);
_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs