DescriptiveStats.java
/*
* This file is part of WattDepot.
*
* Copyright (C) 2015 Cam Moore
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.wattdepot.common.domainmodel;
import java.util.ArrayList;
import java.util.Date;
/**
* DescriptiveStats - A simple calculated historical min, average, and max for a depository, sensor, timestamp
* and number of samples.
*
* @author Cam Moore
*/
public class DescriptiveStats {
String depositoryId;
String sensorId;
Integer numSamples;
Double average;
Double minimum;
Double maximum;
Double lowerQuartile;
Double upperQuartile;
Date timestamp;
String windowWidth;
String valueType;
ArrayList<String> reportingSensors;
ArrayList<String> definedSensors;
ArrayList<String> missingSensors;
/**
* Default constructor. Initializes the ArrayLists.
*/
public DescriptiveStats() {
this.reportingSensors = new ArrayList<String>();
this.definedSensors = new ArrayList<String>();
this.missingSensors = new ArrayList<String>();
}
/**
* @return The reporting sensors as an ArrayList of SensorIds.
*/
public ArrayList<String> getReportingSensors() {
return reportingSensors;
}
/**
* Sets the reporting sensors.
* @param reportingSensors the new list of reporting sensors.
*/
public void setReportingSensors(ArrayList<String> reportingSensors) {
this.reportingSensors = reportingSensors;
}
/**
* Adds the given sensor id to the list of reporting sensors.
* @param sensorId the sensor id to add.
*/
public void addReportingSensor(String sensorId) {
if (!reportingSensors.contains(sensorId)) {
reportingSensors.add(sensorId);
}
}
/**
* @return the list of defined sensors.
*/
public ArrayList<String> getDefinedSensors() {
return definedSensors;
}
/**
* Sets the list of defined sensors.
* @param definedSensors the new list of defined sensors.
*/
public void setDefinedSensors(ArrayList<String> definedSensors) {
this.definedSensors = definedSensors;
}
/**
* Adds the sensor id to the list of defined sensors.
* @param sensorId the sensor id to add.
*/
public void addDefinedSensor(String sensorId) {
if (!definedSensors.contains(sensorId)) {
definedSensors.add(sensorId);
}
}
/**
* @return the list of missing sensors.
*/
public ArrayList<String> getMissingSensors() {
return missingSensors;
}
/**
* Sets the list of missing sensors.
* @param missingSensors the new list of missing sensors.
*/
public void setMissingSensors(ArrayList<String> missingSensors) {
this.missingSensors = missingSensors;
}
/**
* Adds the given sensor id to the list of missing sensors. Supports duplicates.
* @param sensorId the sensor id.
*/
public void addMissingSensor(String sensorId) {
this.missingSensors.add(sensorId);
}
/**
* @return The Depository id.
*/
public String getDepositoryId() {
return depositoryId;
}
/**
* Sets the depository id.
*
* @param depositoryId the new depository id.
*/
public void setDepositoryId(String depositoryId) {
this.depositoryId = depositoryId;
}
/**
* @return the sensor id.
*/
public String getSensorId() {
return sensorId;
}
/**
* Sets the sensor id.
*
* @param sensorId the new sensor id.
*/
public void setSensorId(String sensorId) {
this.sensorId = sensorId;
}
/**
* @return the number of weeks of data used to calculate the values.
*/
public Integer getNumSamples() {
return numSamples;
}
/**
* Sets the number of samples used.
*
* @param numSamples the new number of samples used.
*/
public void setNumSamples(Integer numSamples) {
this.numSamples = numSamples;
}
/**
* @return The average value of the samples.
*/
public Double getAverage() {
return average;
}
/**
* Sets the average value.
*
* @param average the new average value.
*/
public void setAverage(Double average) {
this.average = average;
}
/**
* @return the minimum sample value.
*/
public Double getMinimum() {
return minimum;
}
/**
* Sets the minimum value.
*
* @param minimum the new minimum value.
*/
public void setMinimum(Double minimum) {
this.minimum = minimum;
}
/**
* @return the maximum sample value.
*/
public Double getMaximum() {
return maximum;
}
/**
* Sets the maximum value.
*
* @param maximum the new maximum value.
*/
public void setMaximum(Double maximum) {
this.maximum = maximum;
}
/**
* @return the time of the historical values.
*/
public Date getTimestamp() {
return new Date(timestamp.getTime());
}
/**
* Sets the time of the historical values.
*
* @param timestamp the new time.
*/
public void setTimestamp(Date timestamp) {
this.timestamp = new Date(timestamp.getTime());
}
/**
* @return the width of the window, hourly or daily.
*/
public String getWindowWidth() {
return windowWidth;
}
/**
* Sets the window width.
*
* @param windowWidth the new window width.
*/
public void setWindowWidth(String windowWidth) {
this.windowWidth = windowWidth;
}
/**
* @return point or difference.
*/
public String getValueType() {
return valueType;
}
/**
* Sets the value type, point or difference.
*
* @param valueType the new value type.
*/
public void setValueType(String valueType) {
this.valueType = valueType;
}
/**
* @return the lower quartile.
*/
public Double getLowerQuartile() {
return lowerQuartile;
}
/**
* Sets the lower quartile.
*
* @param lowerQuartile the new lower quartile.
*/
public void setLowerQuartile(Double lowerQuartile) {
this.lowerQuartile = lowerQuartile;
}
/**
* @return the upper quartile.
*/
public Double getUpperQuartile() {
return upperQuartile;
}
/**
* Sets the upper quartile.
*
* @param upperQuartile the new upper quartile.
*/
public void setUpperQuartile(Double upperQuartile) {
this.upperQuartile = upperQuartile;
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (!(o instanceof DescriptiveStats)) {
return false;
}
DescriptiveStats that = (DescriptiveStats) o;
if (depositoryId != null ? !depositoryId.equals(that.depositoryId) : that.depositoryId != null) {
return false;
}
if (sensorId != null ? !sensorId.equals(that.sensorId) : that.sensorId != null) {
return false;
}
if (numSamples != null ? !numSamples.equals(that.numSamples) : that.numSamples != null) {
return false;
}
if (average != null ? !average.equals(that.average) : that.average != null) {
return false;
}
if (minimum != null ? !minimum.equals(that.minimum) : that.minimum != null) {
return false;
}
if (maximum != null ? !maximum.equals(that.maximum) : that.maximum != null) {
return false;
}
if (timestamp != null ? !timestamp.equals(that.timestamp) : that.timestamp != null) {
return false;
}
if (windowWidth != null ? !windowWidth.equals(that.windowWidth) : that.windowWidth != null) {
return false;
}
return !(valueType != null ? !valueType.equals(that.valueType) : that.valueType != null);
}
@Override
public int hashCode() {
int result = depositoryId != null ? depositoryId.hashCode() : 0;
result = 31 * result + (sensorId != null ? sensorId.hashCode() : 0);
result = 31 * result + (numSamples != null ? numSamples.hashCode() : 0);
result = 31 * result + (average != null ? average.hashCode() : 0);
result = 31 * result + (minimum != null ? minimum.hashCode() : 0);
result = 31 * result + (maximum != null ? maximum.hashCode() : 0);
result = 31 * result + (timestamp != null ? timestamp.hashCode() : 0);
result = 31 * result + (windowWidth != null ? windowWidth.hashCode() : 0);
result = 31 * result + (valueType != null ? valueType.hashCode() : 0);
return result;
}
@Override
public String toString() {
return "DescriptiveStats{" +
"depositoryId='" + depositoryId + '\'' +
", sensorId='" + sensorId + '\'' +
", numSamples=" + numSamples +
", average=" + average +
", minimum=" + minimum +
", maximum=" + maximum +
", timestamp=" + timestamp +
", windowWidth='" + windowWidth + '\'' +
", valueType='" + valueType + '\'' +
'}';
}
}