/**
* Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.engine.calcnode;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;
import org.threeten.bp.Instant;
import com.opengamma.id.UniqueId;
/**
* A description of a job to be executed by a calculation node.
* <p>
* Providers of jobs pass over a full {@link CalculationJob} including a specification. The specification is returned
* with the results as the correlation identifier between the result and the job.
*/
public final class CalculationJobSpecification {
/**
* The cycle identifier.
*/
private final UniqueId _viewCycleId;
/**
* The calculation configuration name, unique within a given cycle identifier. This combined with the cycle identifier uniquely identifies the cache being used for the job.
*/
private final String _calcConfigName;
/**
* The valuation time for the job.
*/
private final Instant _valuationTime;
/**
* The unique job identifier within the system.
*/
private final long _jobId;
public CalculationJobSpecification(final UniqueId viewCycleId, final String calcConfigName, final Instant valuationTime, final long jobId) {
// TODO kirk 2009-09-25 -- Check Inputs
_viewCycleId = viewCycleId;
_calcConfigName = calcConfigName;
_valuationTime = valuationTime;
_jobId = jobId;
}
public CalculationJobSpecification withJobId(final long jobId) {
return new CalculationJobSpecification(getViewCycleId(), getCalcConfigName(), getValuationTime(), jobId);
}
/**
* @return the unique identifier of the view cycle
*/
public UniqueId getViewCycleId() {
return _viewCycleId;
}
/**
* @return the calculation configuration name
*/
public String getCalcConfigName() {
return _calcConfigName;
}
/**
* @return the cycle valuation time
*/
public Instant getValuationTime() {
return _valuationTime;
}
/**
* @return the jobId
*/
public long getJobId() {
return _jobId;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + _calcConfigName.hashCode();
result = prime * result + (int) (_jobId ^ (_jobId >>> 32));
result = prime * result + _viewCycleId.hashCode();
result = prime * result + _valuationTime.hashCode();
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (!(obj instanceof CalculationJobSpecification)) {
return false;
}
CalculationJobSpecification other = (CalculationJobSpecification) obj;
if (_jobId != other._jobId) {
return false;
}
if (!_viewCycleId.equals(other._viewCycleId)) {
return false;
}
if (!_calcConfigName.equals(other._calcConfigName)) {
return false;
}
if (!_valuationTime.equals(other._valuationTime)) {
return false;
}
return true;
}
@Override
public String toString() {
return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE);
}
}