in baremaps-core/src/main/java/org/apache/baremaps/storage/shapefile/internal/DbaseByteReader.java [104:143]
public void loadRow(DataRow row) {
// TODO: ignore deleted records
getByteBuffer().get(); // denotes whether deleted or current
// read first part of record
var check = nextRowAvailable();
for (DBaseFieldDescriptor fieldDescriptor : this.fieldsDescriptors) {
byte[] data = new byte[fieldDescriptor.getLength()];
getByteBuffer().get(data);
int length = data.length;
while (length != 0 && Byte.toUnsignedInt(data[length - 1]) <= ' ') {
length--;
}
String value = new String(data, 0, length);
// TODO: move somewhere else
Object object = switch (fieldDescriptor.getType()) {
case Character -> value;
case Number -> getNumber(fieldDescriptor, value);
case Currency -> Double.parseDouble(value.trim());
case Integer -> Integer.parseInt(value.trim());
case Double -> Double.parseDouble(value.trim());
case AutoIncrement -> Integer.parseInt(value.trim());
case Logical -> value;
case Date -> value;
case Memo -> value;
case FloatingPoint -> value;
case Picture -> value;
case VariField -> value;
case Variant -> value;
case TimeStamp -> value;
case DateTime -> value;
};
row.set(fieldDescriptor.getName(), object);
}
}