XYInterpolatedValue.java

package org.wattdepot.common.domainmodel;

import java.util.Date;

/**
 * Two value InterpolatedValue.
 * @author Cam Moore.
 */
public class XYInterpolatedValue extends InterpolatedValue {
  /** The id of the sensor making the measurement. */
  private String ySensorId;
  /** The value of the measurement. */
  private Double yValue;
  /** The type of the measurement. */
  private MeasurementType yMeasurementType;

  /**
   * Default constructor.
   */
  public XYInterpolatedValue() {
    super();
  }

  /**
   * Creates a new XYInterpolatedValue.
   * @param xSensorId The x SensorId.
   * @param xValue The x value.
   * @param xMeasurementType The x measurement type.
   * @param date The time of both values.
   * @param ySensorId The y SensorId.
   * @param yValue The y value.
   * @param yMeasurementType The y measurement type.
   */
  public XYInterpolatedValue(String xSensorId, Double xValue, MeasurementType xMeasurementType, Date date,
                             String ySensorId, Double yValue, MeasurementType yMeasurementType) {
    super(xSensorId, xValue, xMeasurementType, date);
    this.ySensorId = ySensorId;
    this.yValue = yValue;
    this.yMeasurementType = yMeasurementType;
  }

  /**
   * Creates a new XYInterpolatedValue.
   * @param xSensorId The x SensorId.
   * @param xValue The x value.
   * @param xMeasurementType The x measurement type.
   * @param startDate The start time of both values.
   * @param endDate The end time of both values.
   * @param ySensorId The y SensorId.
   * @param yValue The y value.
   * @param yMeasurementType The y measurement type.
   */
  public XYInterpolatedValue(String xSensorId, Double xValue, MeasurementType xMeasurementType, Date startDate,
                             Date endDate, String ySensorId, Double yValue, MeasurementType yMeasurementType) {
    super(xSensorId, xValue, xMeasurementType, startDate, endDate);
    this.ySensorId = ySensorId;
    this.yValue = yValue;
    this.yMeasurementType = yMeasurementType;
  }

  /**
   * Create a new XYInterpolatedValue from the two Interpolated values.
   * @param x The X value.
   * @param y The Y value.
   */
  public XYInterpolatedValue(InterpolatedValue x, InterpolatedValue y) {
    super(x.getSensorId(), x.getValue(), x.getMeasurementType(), x.getStart(), x.getEnd());
    if (!x.getStart().equals(y.getStart()) ||
      !x.getEnd().equals(y.getEnd())) {
      throw new IllegalArgumentException("X and Y don't have the same start and end times.");
    }
    this.ySensorId = y.getSensorId();
    this.yValue = y.getValue();
    this.yMeasurementType = y.getMeasurementType();

  }

  @Override
  public boolean equals(Object o) {
    if (this == o) {
      return true;
    }
    if (o == null || getClass() != o.getClass()) {
      return false;
    }
    if (!super.equals(o)) {
      return false;
    }

    XYInterpolatedValue that = (XYInterpolatedValue) o;

    if (ySensorId != null ? !ySensorId.equals(that.ySensorId) : that.ySensorId != null) {
      return false;
    }
    if (yValue != null ? !yValue.equals(that.yValue) : that.yValue != null) {
      return false;
    }
    return !(yMeasurementType != null ? !yMeasurementType.equals(that.yMeasurementType) : that.yMeasurementType != null);

  }

  @Override
  public int hashCode() {
    int result = super.hashCode();
    result = 31 * result + (ySensorId != null ? ySensorId.hashCode() : 0);
    result = 31 * result + (yValue != null ? yValue.hashCode() : 0);
    result = 31 * result + (yMeasurementType != null ? yMeasurementType.hashCode() : 0);
    return result;
  }

  /**
   * @return The Y SensorId.
   */
  public String getYSensorId() {
    return ySensorId;
  }

  /**
   * Sets the Y SensorID.
   * @param ySensorId The new Y SensorId.
   */
  public void setYSensorId(String ySensorId) {
    this.ySensorId = ySensorId;
  }

  /**
   * @return The Y value.
   */
  public Double getYValue() {
    return yValue;
  }

  /**
   * Sets the Y value.
   * @param yValue The new Y value.
   */
  public void setYValue(Double yValue) {
    this.yValue = yValue;
  }

  /**
   * @return The Y MeasurementType.
   */
  public MeasurementType getYMeasurementType() {
    return yMeasurementType;
  }

  /**
   * Sets the Y MeasurementType.
   * @param yMeasurementType The new Y MeasurementType.
   */
  public void setYMeasurementType(MeasurementType yMeasurementType) {
    this.yMeasurementType = yMeasurementType;
  }

  /**
   * @return The X SensorId.
   */
  public String getXSensorId() {
    return getSensorId();
  }

  /**
   * Sets the X SensorId.
   * @param xSensorId The new X SensorId.
   */
  public void setXSensorId(String xSensorId) {
    this.setSensorId(xSensorId);
  }

  /**
   * @return The X value.
   */
  public Double getXValue() {
    return getValue();
  }

  /**
   * Sets the X value.
   * @param xValue The new X value.
   */
  public void setXValue(Double xValue) {
    this.setValue(xValue);
  }

  /**
   * @return The X MeasurementType.
   */
  public MeasurementType getXMeasurementType() {
    return getMeasurementType();
  }

  /**
   * Sets the X MeasurementType.
   * @param xMeasurementType The new X MeasurementType.
   */
  public void setXMeasurementType(MeasurementType xMeasurementType) {
    this.setMeasurementType(xMeasurementType);
  }
}