/** * 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.DBR_LABELS_Enum; import gov.aps.jca.dbr.DBR_TIME_Enum; import java.util.Arrays; import java.util.List; import org.diirt.vtype.VEnum; import org.diirt.vtype.VTypeToString; /** * * @author carcassi */ class VEnumFromDbr extends VMetadata<DBR_TIME_Enum> implements VEnum { private final DBR_LABELS_Enum metadata; public VEnumFromDbr(DBR_TIME_Enum dbrValue, DBR_LABELS_Enum metadata, JCAConnectionPayload connPayload) { super(dbrValue, connPayload); this.metadata = metadata; } @Override public String getValue() { // There are pathological cases in which CA returns no labels. // In those cases, we return the integer value converted to String. if (metadata.getLabels() == null) { return Integer.toString(getIndex()); } // There are also pathologica cases in which the labels // are less than the actual value if (getIndex() >= metadata.getLabels().length || getIndex() < 0) { return Integer.toString(getIndex()); } return getLabels().get(getIndex()); } @Override public int getIndex() { return dbrValue.getEnumValue()[0]; } @Override public List<String> getLabels() { if (metadata.getLabels() == null) throw new RuntimeException("Metadata returned no labels"); return Arrays.asList(metadata.getLabels()); } @Override public String toString() { return VTypeToString.toString(this); } }