/*
* RHQ Management Platform
* Copyright (C) 2005-2013 Red Hat, Inc.
* All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License, version 2, as
* published by the Free Software Foundation, and/or the GNU Lesser
* General Public License, version 2.1, also 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 General Public License and the GNU Lesser General Public License
* for more details.
*
* You should have received a copy of the GNU General Public License
* and the GNU Lesser General Public License along with this program;
* if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package org.rhq.core.pc.measurement;
import org.rhq.core.domain.measurement.MeasurementScheduleRequest;
/**
* This is an object that has a natural ordering by when a measurement next needs to be collected as well as by its
* resource. Requests for the same resource that have the same measurement Implementation notes: This class has a
* natural ordering to it used by the measurement manager in order to track the next collection time. This ordering
* includes distinctive information that should be unnecessary, but is because the {@link java.util.PriorityQueue}
* requires that IFF a.compareTo(b) == 0 Then a.equals(b). This is unfortunate and slows us up some.
*
* @author Greg Hinkle
*/
public class ScheduledMeasurementInfo extends MeasurementScheduleRequest implements
Comparable<ScheduledMeasurementInfo> {
private int resourceId;
private long nextCollection;
public ScheduledMeasurementInfo(MeasurementScheduleRequest scheduleRequest, Integer resourceId) {
super(scheduleRequest);
this.resourceId = resourceId;
}
public int getResourceId() {
return resourceId;
}
public long getNextCollection() {
return nextCollection;
}
public void setNextCollection(long nextCollection) {
this.nextCollection = nextCollection;
}
public int compareTo(ScheduledMeasurementInfo o) {
int n = (nextCollection < o.getNextCollection()) ? -1 : ((nextCollection == o.getNextCollection()) ? 0 : 1);
if (n != 0) {
return n;
}
n = (resourceId < o.getResourceId()) ? -1 : ((resourceId == o.getResourceId()) ? 0 : 1);
if (n != 0) {
return n;
}
n = getName().compareTo(o.getName());
if (n != 0) {
return n;
}
return (getScheduleId()-o.getScheduleId());
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if ((o == null) || (getClass() != o.getClass())) {
return false;
}
ScheduledMeasurementInfo that = (ScheduledMeasurementInfo) o;
if (getScheduleId() != that.getScheduleId()) {
return false;
}
if (resourceId != that.resourceId) {
return false;
}
if (!getName().equals(that.getName())) {
return false;
}
return true;
}
@Override
public int hashCode() {
int result;
result = resourceId;
result = (31 * result) + getName().hashCode();
result = (31 * result) + getScheduleId();
return result;
}
@Override
public String toString() {
return "ScheduledMeasurementInfo[res=" + resourceId + ", name=" + getName() + ", sched=" + getScheduleId() + "]";
}
}