package rocks.inspectit.shared.cs.storage.label; import java.text.NumberFormat; import javax.persistence.Entity; import javax.validation.constraints.NotNull; import rocks.inspectit.shared.cs.storage.label.type.AbstractStorageLabelType; /** * Label that has a {@link Number} as a value. * * @author Ivan Senic * */ @Entity public class NumberStorageLabel extends AbstractStorageLabel<Number> { /** * Generated UID. */ private static final long serialVersionUID = 7550228008433561954L; /** * Label value. */ @NotNull private Number numberValue; /** * Default constructor. */ public NumberStorageLabel() { } /** * Secondary constructor. * * @param numberValue * Label value. * @param storageLabelType * Label type. */ public NumberStorageLabel(Number numberValue, AbstractStorageLabelType<Number> storageLabelType) { super(storageLabelType); this.numberValue = numberValue; } /** * {@inheritDoc} */ @Override public Number getValue() { return numberValue; } /** * {@inheritDoc} */ @Override public void setValue(Number value) { numberValue = value; } /** * {@inheritDoc} */ @Override public String getFormatedValue() { return NumberFormat.getInstance().format(numberValue); } /** * Gets {@link #numberValue}. * * @return {@link #numberValue} */ public Number getNumberValue() { return numberValue; } /** * Sets {@link #numberValue}. * * @param numberValue * New value for {@link #numberValue} */ public void setNumberValue(Number numberValue) { this.numberValue = numberValue; } /** * {@inheritDoc} */ @Override public int hashCode() { final int prime = 31; int result = super.hashCode(); result = (prime * result) + ((numberValue == null) ? 0 : numberValue.hashCode()); return result; } /** * {@inheritDoc} */ @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (!super.equals(obj)) { return false; } if (getClass() != obj.getClass()) { return false; } NumberStorageLabel other = (NumberStorageLabel) obj; if (numberValue == null) { if (other.numberValue != null) { return false; } } else if (!numberValue.equals(other.numberValue)) { return false; } return true; } /** * {@inheritDoc} */ @Override public int compareTo(AbstractStorageLabel<?> other) { int typeCompare = storageLabelType.compareTo(other.getStorageLabelType()); if (0 != typeCompare) { return typeCompare; } else { if (!NumberStorageLabel.class.isAssignableFrom(other.getClass())) { return super.compareTo(other); } else { NumberStorageLabel otherLabel = (NumberStorageLabel) other; double res = numberValue.doubleValue() - otherLabel.numberValue.doubleValue(); if (res > 0) { return 1; } else if (res < 0) { return -1; } else { return 0; } } } } }