/** * 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.pva.adapters; import java.util.List; import org.epics.pvdata.pv.ByteArrayData; import org.epics.pvdata.pv.PVByteArray; import org.epics.pvdata.pv.PVField; import org.epics.pvdata.pv.PVStructure; import org.epics.pvdata.pv.PVUByteArray; import org.diirt.vtype.VByteArray; import org.diirt.vtype.VTypeToString; import org.diirt.util.array.ArrayByte; import org.diirt.util.array.ArrayInt; import org.diirt.util.array.ListByte; import org.diirt.util.array.ListInt; import org.diirt.vtype.ArrayDimensionDisplay; import org.diirt.vtype.ValueUtil; /** * @author msekoranja * */ public class PVFieldToVByteArray extends AlarmTimeDisplayExtractor implements VByteArray { private final ListInt size; private final ListByte list; public PVFieldToVByteArray(PVStructure pvField, boolean disconnected) { this("value", pvField, disconnected); } public PVFieldToVByteArray(String fieldName, PVStructure pvField, boolean disconnected) { this(pvField.getSubField(fieldName), pvField, disconnected); } public PVFieldToVByteArray(PVField field, PVStructure pvParent, boolean disconnected) { super(pvParent, disconnected); if (field instanceof PVByteArray) { PVByteArray valueField = (PVByteArray)field; ByteArrayData data = new ByteArrayData(); valueField.get(0, valueField.getLength(), data); this.size = new ArrayInt(data.data.length); this.list = new ArrayByte(data.data); } else if (field instanceof PVUByteArray) { PVUByteArray valueField = (PVUByteArray)field; ByteArrayData data = new ByteArrayData(); valueField.get(0, valueField.getLength(), data); this.size = new ArrayInt(data.data.length); this.list = new ArrayByte(data.data); } else { size = null; list = null; } } /* (non-Javadoc) * @see org.epics.pvmanager.data.Array#getSizes() */ @Override public ListInt getSizes() { return size; } /* (non-Javadoc) * @see org.epics.pvmanager.data.VByteArray#getData() */ @Override public ListByte getData() { return list; } @Override public String toString() { return VTypeToString.toString(this); } @Override public List<ArrayDimensionDisplay> getDimensionDisplay() { return ValueUtil.defaultArrayDisplay(this); } }