/**
* DataCleaner (community edition)
* Copyright (C) 2014 Neopost - Customer Information Management
*
* This copyrighted material is made available to anyone wishing to use, modify,
* copy, or redistribute it subject to the terms and conditions of the GNU
* Lesser General Public License, as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
* for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this distribution; if not, write to:
* Free Software Foundation, Inc.
* 51 Franklin Street, Fifth Floor
* Boston, MA 02110-1301 USA
*/
package org.datacleaner.monitor.scheduling.model;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.datacleaner.monitor.shared.model.JobIdentifier;
import org.datacleaner.monitor.shared.model.TenantIdentifier;
/**
* Represents information about a scheduled job execution.
*/
public class ScheduleDefinition implements Comparable<ScheduleDefinition>, Serializable {
private static final long serialVersionUID = 1L;
private TenantIdentifier _tenant;
private JobIdentifier _job;
private JobIdentifier _dependentJob;
private String _cronExpression;
private List<AlertDefinition> _alerts;
private String _groupName;
private VariableProviderDefinition _variableProvider;
private boolean _distributedExecution;
private String _dateForOneTimeSchedule;
private Map<String, String> _jobMetadataProperties;
private boolean _runOnHadoop;
private String _hotFolder;
private boolean _exportMetrics;
// no-args constructor
public ScheduleDefinition() {
}
public ScheduleDefinition(final TenantIdentifier tenant, final JobIdentifier job, final String groupName) {
_tenant = tenant;
_job = job;
_groupName = groupName;
}
public String getDateForOneTimeSchedule() {
return _dateForOneTimeSchedule;
}
public void setDateForOneTimeSchedule(final String dateForOneTimeSchedule) {
this._dateForOneTimeSchedule = dateForOneTimeSchedule;
}
public void setRunOnHadoop(final boolean runOnHadoop) {
_runOnHadoop = runOnHadoop;
}
public Boolean isRunOnHadoop() {
return _runOnHadoop;
}
public TenantIdentifier getTenant() {
return _tenant;
}
public void setTenant(final TenantIdentifier tenant) {
_tenant = tenant;
}
public JobIdentifier getJob() {
return _job;
}
public void setJob(final JobIdentifier job) {
_job = job;
}
public String getCronExpression() {
return _cronExpression;
}
public void setCronExpression(final String cronExpression) {
_cronExpression = cronExpression;
}
public String getGroupName() {
return _groupName;
}
public void setGroupName(final String groupName) {
_groupName = groupName;
}
public JobIdentifier getDependentJob() {
return _dependentJob;
}
public void setDependentJob(final JobIdentifier dependentJob) {
_dependentJob = dependentJob;
}
public List<AlertDefinition> getAlerts() {
if (_alerts == null) {
_alerts = new ArrayList<>();
}
return _alerts;
}
public void setAlerts(final List<AlertDefinition> alerts) {
_alerts = alerts;
}
public boolean isDistributedExecution() {
return _distributedExecution;
}
public void setDistributedExecution(final boolean distributedExecution) {
_distributedExecution = distributedExecution;
}
public TriggerType getTriggerType() {
if (_dependentJob != null) {
return TriggerType.DEPENDENT;
} else if (_cronExpression != null) {
return TriggerType.PERIODIC;
} else if (_dateForOneTimeSchedule != null) {
return TriggerType.ONETIME;
} else if (_hotFolder != null) {
return TriggerType.HOTFOLDER;
} else {
return TriggerType.MANUAL;
}
}
public VariableProviderDefinition getVariableProvider() {
return _variableProvider;
}
public void setVariableProvider(final VariableProviderDefinition variableProvider) {
_variableProvider = variableProvider;
}
public Map<String, String> getJobMetadataProperties() {
return _jobMetadataProperties;
}
public void setJobMetadataProperties(final Map<String, String> jobMetadataProperties) {
_jobMetadataProperties = jobMetadataProperties;
}
public String getHotFolder() {
return _hotFolder;
}
public void setHotFolder(final String hotFolder) {
_hotFolder = hotFolder;
}
public Boolean isExportMetrics() {
return _exportMetrics;
}
public void setExportMetrics(boolean exportMetrics) {
_exportMetrics = exportMetrics;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((_alerts == null) ? 0 : _alerts.hashCode());
result = prime * result + ((_cronExpression == null) ? 0 : _cronExpression.hashCode());
result = prime * result + ((_dateForOneTimeSchedule == null) ? 0 : _dateForOneTimeSchedule.hashCode());
result = prime * result + ((_groupName == null) ? 0 : _groupName.hashCode());
result = prime * result + ((_dependentJob == null) ? 0 : _dependentJob.hashCode());
result = prime * result + ((_job == null) ? 0 : _job.hashCode());
result = prime * result + ((_tenant == null) ? 0 : _tenant.hashCode());
result = prime * result + ((_variableProvider == null) ? 0 : _variableProvider.hashCode());
result = prime * result + ((_jobMetadataProperties == null) ? 0 : _jobMetadataProperties.hashCode());
return result;
}
@Override
public boolean equals(final Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final ScheduleDefinition other = (ScheduleDefinition) obj;
if (_alerts == null) {
if (other._alerts != null) {
return false;
}
} else if (!_alerts.equals(other._alerts)) {
return false;
}
if (_cronExpression == null) {
if (other._cronExpression != null) {
return false;
}
} else if (!_cronExpression.equals(other._cronExpression)) {
return false;
}
if (_dateForOneTimeSchedule == null) {
if (other._dateForOneTimeSchedule != null) {
return false;
}
} else if (!_dateForOneTimeSchedule.equals(other._dateForOneTimeSchedule)) {
return false;
}
if (_groupName == null) {
if (other._groupName != null) {
return false;
}
} else if (!_groupName.equals(other._groupName)) {
return false;
}
if (_dependentJob == null) {
if (other._dependentJob != null) {
return false;
}
} else if (!_dependentJob.equals(other._dependentJob)) {
return false;
}
if (_job == null) {
if (other._job != null) {
return false;
}
} else if (!_job.equals(other._job)) {
return false;
}
if (_tenant == null) {
if (other._tenant != null) {
return false;
}
} else if (!_tenant.equals(other._tenant)) {
return false;
}
if (_variableProvider == null) {
if (other._variableProvider != null) {
return false;
}
} else if (!_variableProvider.equals(other._variableProvider)) {
return false;
}
if (_jobMetadataProperties == null) {
if (other._jobMetadataProperties != null) {
return false;
}
} else if (!_jobMetadataProperties.equals(other._jobMetadataProperties)) {
return false;
}
return true;
}
@Override
public int compareTo(final ScheduleDefinition o) {
int diff = _job.compareTo(o.getJob());
if (diff == 0) {
diff = hashCode() - o.hashCode();
}
return diff;
}
@Override
public String toString() {
return "ScheduleDefinition[_tenant=" + _tenant + ", _job=" + _job + ", _dependentJob=" + _dependentJob
+ ", _cronExpression=" + _cronExpression + ", _alerts=" + _alerts + ", _groupName=" + _groupName
+ ", _variableProvider=" + _variableProvider + ", _distributedExecution=" + _distributedExecution
+ ", _dateForOneTimeSchedule=" + _dateForOneTimeSchedule + ", _jobMetadataProperties="
+ _jobMetadataProperties + "]";
}
}