/** * Copyright (C) 2010-14 diirt developers. See COPYRIGHT.TXT * All rights reserved. Use is subject to license terms. See LICENSE.TXT */ package org.diirt.support.ca; import gov.aps.jca.dbr.CTRL; import gov.aps.jca.dbr.PRECISION; import gov.aps.jca.dbr.TIME; import java.text.NumberFormat; import org.diirt.util.text.NumberFormats; import org.diirt.vtype.Display; /** * * @author carcassi */ class VNumberMetadata<TValue extends TIME, TMetadata extends CTRL> extends VMetadata<TValue> implements Display { private final TMetadata metadata; private final boolean honorZeroPrecision; VNumberMetadata(TValue dbrValue, TMetadata metadata, JCAConnectionPayload connPayload) { super(dbrValue, connPayload); this.metadata = metadata; this.honorZeroPrecision = connPayload.getJcaDataSource().isHonorZeroPrecision(); } @Override public Double getLowerDisplayLimit() { return (Double) metadata.getLowerDispLimit(); } @Override public Double getLowerCtrlLimit() { return (Double) metadata.getLowerCtrlLimit(); } @Override public Double getLowerAlarmLimit() { return (Double) metadata.getLowerAlarmLimit(); } @Override public Double getLowerWarningLimit() { return (Double) metadata.getLowerWarningLimit(); } @Override public String getUnits() { return metadata.getUnits(); } @Override public NumberFormat getFormat() { int precision = -1; if (metadata instanceof PRECISION) { precision = ((PRECISION) metadata).getPrecision(); } // If precision is 0 or less, we assume full precision if (precision < 0) { return NumberFormats.toStringFormat(); } else if (precision == 0) { if (honorZeroPrecision) { return NumberFormats.format(0); } else { return NumberFormats.toStringFormat(); } } else { return NumberFormats.format(precision); } } @Override public Double getUpperWarningLimit() { return (Double) metadata.getUpperWarningLimit(); } @Override public Double getUpperAlarmLimit() { return (Double) metadata.getUpperAlarmLimit(); } @Override public Double getUpperCtrlLimit() { return (Double) metadata.getUpperCtrlLimit(); } @Override public Double getUpperDisplayLimit() { return (Double) metadata.getUpperDispLimit(); } }