package com.hqyg.disjob.console.cron;
import com.hqyg.disjob.console.cron.factors.DayOfMonthFactor;
import com.hqyg.disjob.console.cron.factors.DayOfWeekFactor;
import com.hqyg.disjob.console.cron.factors.MonthFactor;
import com.hqyg.disjob.console.cron.factors.TimeFactor;
import com.hqyg.disjob.console.util.CronExpression;
public class EjobCronExpression {
private TimeFactor secondFactor;
private TimeFactor minuteFactor;
private TimeFactor hourFactor;
private DayOfMonthFactor dayOfMonthFactor;
private MonthFactor monthFactor;
private DayOfWeekFactor weekOfMonthFactor;
private YearFactor yearFactor;
private String secondCron;
private String minuteCron;
private String hourCron;
private String dayOfMonthCron;
private String monthCron;
private String weekOfMonthCron;
private String yearCron;
private static final String BLANK = " ";
private static final String ASTERISK = "*";
private static final String Q_MARK = "?";
public EjobCronExpression(TimeFactor sf, TimeFactor mf, TimeFactor hf, DayOfMonthFactor dom, MonthFactor mf1,
DayOfWeekFactor weekOfMonthFactor) {
this.secondFactor = sf;
this.minuteFactor = mf;
this.hourFactor = hf;
this.dayOfMonthFactor = dom;
this.monthFactor = mf1;
this.weekOfMonthFactor = weekOfMonthFactor;
}
public EjobCronExpression(TimeFactor sf, TimeFactor mf, TimeFactor hf, DayOfMonthFactor dom, MonthFactor mf1,
DayOfWeekFactor weekOfMonthFactor, YearFactor yearFactor) {
this.secondFactor = sf;
this.minuteFactor = mf;
this.hourFactor = hf;
this.dayOfMonthFactor = dom;
this.monthFactor = mf1;
this.weekOfMonthFactor = weekOfMonthFactor;
this.yearFactor = yearFactor;
}
public String buid(){
buildSecondFactor();
buildMinuteFactor();
buildHourFactor();
buildDayOfMonthFactor();
buildMonthFactor();
buildWeekOfMonthFactor();
buildYearFactor();
return buidQuartzCronExpression();
}
private void buildYearFactor() {
if(yearFactor == null){
yearCron = null;
}else{
yearCron = yearFactor.build();
}
}
private void buildWeekOfMonthFactor() {
if(weekOfMonthFactor == null){
weekOfMonthCron = "*";
}else
weekOfMonthCron = weekOfMonthFactor.build();
}
private void buildMonthFactor() {
if(monthFactor == null){
monthCron = "*";
}else
monthCron = monthFactor.build();
}
private void buildDayOfMonthFactor() {
if(dayOfMonthFactor == null){
dayOfMonthCron = "*";
}else
dayOfMonthCron = dayOfMonthFactor.build();
}
private void buildHourFactor() {
if(hourFactor == null){
hourCron = "*";
}else
hourCron = hourFactor.build();
}
private void buildMinuteFactor() {
if(minuteFactor == null){
minuteCron = "*";
}else
minuteCron = minuteFactor.build();
}
private void buildSecondFactor() {
if(secondFactor == null){
secondCron = "*";
}else
secondCron = secondFactor.build();
}
private String buidQuartzCronExpression() {
if(dayOfMonthCron.equals(ASTERISK) && weekOfMonthCron.equals(ASTERISK)){
weekOfMonthCron = Q_MARK;
}
if(!dayOfMonthCron.equals(Q_MARK) && !weekOfMonthCron.equals(Q_MARK)){
if(dayOfMonthCron.equals(ASTERISK)){
dayOfMonthCron = Q_MARK;
}
if(weekOfMonthCron.equals(ASTERISK)){
weekOfMonthCron = Q_MARK;
}
}
StringBuffer stringbuffer = new StringBuffer()
.append(secondCron).append(BLANK)
.append(minuteCron).append(BLANK)
.append(hourCron).append(BLANK)
.append(dayOfMonthCron).append(BLANK)
.append(monthCron).append(BLANK)
.append(weekOfMonthCron);
String cronExpression;
if(yearCron != null){
cronExpression = stringbuffer.append(BLANK).append(yearCron).toString();
}else{
cronExpression = stringbuffer.toString();
}
if(CronExpression.isValidExpression(cronExpression)){
return cronExpression;
}else{
return "generated cronExpression isnot valid : " + cronExpression;
}
}
}