/**
* 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 org.apache.ambari.server.state.scheduler;
import org.codehaus.jackson.annotate.JsonIgnore;
import org.codehaus.jackson.annotate.JsonProperty;
import org.codehaus.jackson.map.annotate.JsonSerialize;
public class Schedule {
private String minutes;
private String hours;
private String daysOfMonth;
private String month;
private String dayOfWeek;
private String year;
private String startTime;
private String endTime;
@JsonSerialize(include = JsonSerialize.Inclusion.NON_EMPTY)
@JsonProperty("minutes")
public String getMinutes() {
return minutes;
}
public void setMinutes(String minutes) {
this.minutes = minutes;
}
@JsonSerialize(include = JsonSerialize.Inclusion.NON_EMPTY)
@JsonProperty("hours")
public String getHours() {
return hours;
}
public void setHours(String hours) {
this.hours = hours;
}
@JsonSerialize(include = JsonSerialize.Inclusion.NON_EMPTY)
@JsonProperty("days_of_month")
public String getDaysOfMonth() {
return daysOfMonth;
}
public void setDaysOfMonth(String daysOfMonth) {
this.daysOfMonth = daysOfMonth;
}
@JsonSerialize(include = JsonSerialize.Inclusion.NON_EMPTY)
@JsonProperty("month")
public String getMonth() {
return month;
}
public void setMonth(String month) {
this.month = month;
}
@JsonSerialize(include = JsonSerialize.Inclusion.NON_EMPTY)
@JsonProperty("day_of_week")
public String getDayOfWeek() {
return dayOfWeek;
}
public void setDayOfWeek(String dayOfWeek) {
this.dayOfWeek = dayOfWeek;
}
@JsonSerialize(include = JsonSerialize.Inclusion.NON_EMPTY)
@JsonProperty("year")
public String getYear() {
return year;
}
public void setYear(String year) {
this.year = year;
}
@JsonSerialize(include = JsonSerialize.Inclusion.NON_EMPTY)
@JsonProperty("start_time")
public String getStartTime() {
return startTime;
}
public void setStartTime(String startTime) {
this.startTime = startTime;
}
@JsonSerialize(include = JsonSerialize.Inclusion.NON_EMPTY)
@JsonProperty("end_time")
public String getEndTime() {
return endTime;
}
public void setEndTime(String endTime) {
this.endTime = endTime;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Schedule schedule = (Schedule) o;
if (dayOfWeek != null ? !dayOfWeek.equals(schedule.dayOfWeek) : schedule.dayOfWeek != null)
return false;
if (daysOfMonth != null ? !daysOfMonth.equals(schedule.daysOfMonth) : schedule.daysOfMonth != null)
return false;
if (endTime != null ? !endTime.equals(schedule.endTime) : schedule.endTime != null)
return false;
if (hours != null ? !hours.equals(schedule.hours) : schedule.hours != null)
return false;
if (minutes != null ? !minutes.equals(schedule.minutes) : schedule.minutes != null)
return false;
if (month != null ? !month.equals(schedule.month) : schedule.month != null)
return false;
if (startTime != null ? !startTime.equals(schedule.startTime) : schedule.startTime != null)
return false;
if (year != null ? !year.equals(schedule.year) : schedule.year != null)
return false;
return true;
}
/**
* Return empty if schedule has non usable fields.
* @return
*/
@JsonIgnore
public boolean isEmpty() {
return (minutes == null || minutes.isEmpty())
&& (hours == null || hours.isEmpty())
&& (dayOfWeek == null || dayOfWeek.isEmpty())
&& (daysOfMonth == null || daysOfMonth.isEmpty())
&& (month == null || month.isEmpty())
&& (year == null || year.isEmpty())
&& (startTime == null || startTime.isEmpty())
&& (endTime == null || endTime.isEmpty());
}
/**
* Return a cron expression from the schedule fields.
* Example: "0 0 12 * * ?"
* @return
*/
@JsonIgnore
public String getScheduleExpression() {
StringBuilder expression = new StringBuilder();
expression.append("0"); // seconds
expression.append(" ");
expression.append(minutes);
expression.append(" ");
expression.append(hours);
expression.append(" ");
expression.append(daysOfMonth);
expression.append(" ");
expression.append(month);
expression.append(" ");
expression.append(dayOfWeek);
if (year != null && !year.isEmpty()) {
expression.append(" ");
expression.append(year);
}
return expression.toString();
}
@Override
public int hashCode() {
int result = minutes != null ? minutes.hashCode() : 0;
result = 31 * result + (hours != null ? hours.hashCode() : 0);
result = 31 * result + (daysOfMonth != null ? daysOfMonth.hashCode() : 0);
result = 31 * result + (month != null ? month.hashCode() : 0);
result = 31 * result + (dayOfWeek != null ? dayOfWeek.hashCode() : 0);
result = 31 * result + (year != null ? year.hashCode() : 0);
result = 31 * result + (startTime != null ? startTime.hashCode() : 0);
result = 31 * result + (endTime != null ? endTime.hashCode() : 0);
return result;
}
@Override
public String toString() {
return "Schedule {" +
"minutes='" + minutes + '\'' +
", hours='" + hours + '\'' +
", days_of_month='" + daysOfMonth + '\'' +
", month='" + month + '\'' +
", day_of_week='" + dayOfWeek + '\'' +
", year='" + year + '\'' +
", startTime='" + startTime + '\'' +
", endTime='" + endTime + '\'' +
'}';
}
}