/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ro.nextreports.server.domain;
import org.jcrom.annotations.JcrProperty;
import ro.nextreports.server.schedule.ScheduleConstants;
import java.util.Date;
import ro.nextreports.engine.util.DateUtil;
/**
* Created by IntelliJ IDEA.
* User: mihai.panaitescu
* Date: May 20, 2008
* Time: 12:10:11 PM
*/
public class SchedulerTime extends EntityFragment {
private static final long serialVersionUID = 1L;
@JcrProperty
private Date startActivationDate;
@JcrProperty
private Date endActivationDate;
@JcrProperty
private String type;
// ONCE TYPE
@JcrProperty
private Date runDate;
// MINUTELY & HOURLY TYPE
@JcrProperty
private String hours;
@JcrProperty
private int gap;
@JcrProperty
private String days;
@JcrProperty
private String months;
@JcrProperty
private int minute;
// DAILY
@JcrProperty
private String daysOfWeek;
// MONTHLY
@JcrProperty
private int dayNo;
@JcrProperty
private int monthlyType;
@JcrProperty
private boolean advanced;
public SchedulerTime() {
super();
setName("time");
}
public Date getStartActivationDate() {
return startActivationDate;
}
public void setStartActivationDate(Date startActivationDate) {
this.startActivationDate = startActivationDate;
}
public Date getEndActivationDate() {
return endActivationDate;
}
public void setEndActivationDate(Date endActivationDate) {
this.endActivationDate = endActivationDate;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public Date getRunDate() {
return runDate;
}
public void setRunDate(Date runDate) {
this.runDate = runDate;
}
public String getHours() {
return hours;
}
public void setHours(String hours) {
this.hours = hours;
}
public int getGap() {
return gap;
}
public void setGap(int gap) {
this.gap = gap;
}
public String getDays() {
return days;
}
public void setDays(String days) {
this.days = days;
}
public String getMonths() {
return months;
}
public void setMonths(String months) {
this.months = months;
}
public int getMinute() {
return minute;
}
public void setMinute(int minute) {
this.minute = minute;
}
public String getDaysOfWeek() {
return daysOfWeek;
}
public void setDaysOfWeek(String daysOfWeek) {
this.daysOfWeek = daysOfWeek;
}
public int getDayNo() {
return dayNo;
}
public void setDayNo(int dayNo) {
this.dayNo = dayNo;
}
public int getMonthlyType() {
return monthlyType;
}
public void setMonthlyType(int monthlyType) {
this.monthlyType = monthlyType;
}
public boolean getAdvanced() {
return advanced;
}
public void setAdvanced(boolean advanced) {
this.advanced = advanced;
}
public String getCronEntry() {
if (ScheduleConstants.ONCE_TYPE.equals(type)) {
return createCron("0",
String.valueOf(DateUtil.getMinute(runDate)),
String.valueOf(DateUtil.getHour(runDate)),
String.valueOf(DateUtil.getDayOfMonth(runDate)),
String.valueOf(DateUtil.getMonth(runDate) + 1),
"?");
} else if (ScheduleConstants.MINUTELY_TYPE.equals(type)) {
String minute = "*";
if (gap > 1) {
minute = minute + "/" + gap;
}
return createCron("0", minute, hours, days, months, "?");
} else if (ScheduleConstants.HOURLY_TYPE.equals(type)) {
String hour = hours;
if (gap > 1) {
hour = hours + "/" + gap;
}
return createCron("0", String.valueOf(minute), hour, days, months, "?");
} else if (ScheduleConstants.DAILY_TYPE.equals(type)) {
String dow = daysOfWeek;
String d = days;
if ("*".equals(days) && "*".equals(daysOfWeek)) {
dow = "?";
}
if (!"*".equals(days)) {
dow = "?";
}
if (!"*".equals(daysOfWeek) && !"?".equals(daysOfWeek)) {
d = "?";
}
return createCron("0", String.valueOf(minute), hours, d, "*", dow);
} else if (ScheduleConstants.WEEKLY_TYPE.equals(type)) {
String dow = daysOfWeek;
String d = days;
if ("*".equals(days) && "*".equals(daysOfWeek)) {
dow = "?";
}
if (!"*".equals(days)) {
dow = "?";
}
if (!"*".equals(daysOfWeek) && !"?".equals(daysOfWeek)) {
d = "?";
}
return createCron("0", String.valueOf(minute), hours, d, "*", dow);
} else if (ScheduleConstants.MONTHLY_TYPE.equals(type)) {
if (monthlyType == ScheduleConstants.MONTHLY_LAST_DAY_TYPE) {
return createCron("0", String.valueOf(minute), hours, "L", "*", "?");
} else if (monthlyType == ScheduleConstants.MONTHLY_DAY_OF_WEEK_TYPE) {
String dayOfWeek = daysOfWeek;
if (dayNo == 5) {
dayOfWeek = dayOfWeek + "L";
} else {
dayOfWeek = dayOfWeek + "#" + dayNo;
}
return createCron("0", String.valueOf(minute), hours, "?", "*", dayOfWeek);
} else if (monthlyType == ScheduleConstants.MONTHLY_GENERAL_TYPE) {
String dow = daysOfWeek;
String d = days;
if ("*".equals(days) && "*".equals(daysOfWeek)) {
dow = "?";
}
if (!"*".equals(days)) {
dow = "?";
}
if (!"*".equals(daysOfWeek) && !"?".equals(daysOfWeek)) {
d = "?";
}
String m = String.valueOf(minute);
if (gap != 0) {
m = "*/" + gap;
}
return createCron("0", m, hours, d, months, dow);
}
}
return null;
}
@Override
public String toString() {
StringBuffer buffer = new StringBuffer();
buffer.append("SchedulerTime[");
buffer.append("name = ").append(name);
buffer.append(", advanced = ").append(advanced);
buffer.append(", path = ").append(path);
buffer.append(", dayNo = ").append(dayNo);
buffer.append(", days = ").append(days);
buffer.append(", daysOfWeek = ").append(daysOfWeek);
buffer.append(", endActivationDate = ").append(endActivationDate);
buffer.append(", gap = ").append(gap);
buffer.append(", hours = ").append(hours);
buffer.append(", minute = ").append(minute);
buffer.append(", monthlyType = ").append(monthlyType);
buffer.append(", months = ").append(months);
buffer.append(", runDate = ").append(runDate);
buffer.append(", startActivationDate = ").append(startActivationDate);
buffer.append(", type = ").append(type);
buffer.append("]");
return buffer.toString();
}
private String createCron(String second, String minute, String hour, String dayOfMonth, String month, String dayOfWeek) {
StringBuilder sb = new StringBuilder();
sb.append(second).append(" ").
append(minute).append(" ").
append(hour).append(" ").
append(dayOfMonth).append(" ").
append(month).append(" ").
append(dayOfWeek);
return sb.toString();
}
}