/*******************************************************************************
* Copyright (c) 2011 Oak Ridge National Laboratory.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
******************************************************************************/
package org.csstudio.data.values.internal;
import org.csstudio.data.values.IMinMaxDoubleValue;
import org.csstudio.data.values.INumericMetaData;
import org.csstudio.data.values.ISeverity;
import org.csstudio.data.values.ITimestamp;
import org.csstudio.data.values.Messages;
import org.eclipse.osgi.util.NLS;
/** Implementation of {@link IMinMaxDoubleValue}.
* @author Kay Kasemir
*/
public class MinMaxDoubleValue extends DoubleValue implements IMinMaxDoubleValue
{
private static final long serialVersionUID = 1L;
/** The minimum resp. maximum. */
final private double minimum, maximum;
/** Constructor from pieces. */
public MinMaxDoubleValue(final ITimestamp time, final ISeverity severity,
final String status, final INumericMetaData meta_data,
final Quality quality,
final double values[],
final double minimum,
final double maximum)
{
super(time, severity, status, meta_data, quality, values);
if (minimum <= maximum)
{
this.minimum = minimum;
this.maximum = maximum;
}
else
{
this.minimum = maximum;
this.maximum = minimum;
}
}
/** {@inheritDoc} */
@Override
final public double getMinimum()
{
return minimum;
}
/** {@inheritDoc} */
@Override
final public double getMaximum()
{
return maximum;
}
/** {@inheritDoc} */
@Override
final public String format(final Format how, final int precision)
{
if (getSeverity().hasValue())
return super.format(how, precision)
+ NLS.bind(Messages.MiniMaxiFormat,
new Double(minimum), new Double(maximum));
// else
return Messages.NoValue;
}
/** {@inheritDoc} */
@Override
final public boolean equals(final Object obj)
{
if (! (obj instanceof MinMaxDoubleValue))
return false;
final MinMaxDoubleValue rhs = (MinMaxDoubleValue) obj;
return Double.doubleToLongBits(minimum) ==
Double.doubleToLongBits(rhs.minimum) &&
Double.doubleToLongBits(maximum) ==
Double.doubleToLongBits(rhs.maximum) &&
super.equals(obj);
}
/** {@inheritDoc} */
@Override
final public int hashCode()
{
return super.hashCode() + (int) (minimum + maximum);
}
}