throws IOException {
if(result == null || result.isEmpty())
return null;
T persistent = newPersistent();
StateManager stateManager = persistent.getStateManager();
for (String f : fields) {
HBaseColumn col = mapping.getColumn(f);
Field field = fieldMap.get(f);
Schema fieldSchema = field.schema();
switch(fieldSchema.getType()) {
case MAP:
NavigableMap<byte[], byte[]> qualMap =
result.getNoVersionMap().get(col.getFamily());
if (qualMap == null) {
continue;
}
Schema valueSchema = fieldSchema.getValueType();
Map map = new HashMap();
for (Entry<byte[], byte[]> e : qualMap.entrySet()) {
map.put(new Utf8(Bytes.toString(e.getKey())),
fromBytes(valueSchema, e.getValue()));
}
setField(persistent, field, map);
break;
case ARRAY:
qualMap = result.getFamilyMap(col.getFamily());
if (qualMap == null) {
continue;
}
valueSchema = fieldSchema.getElementType();
ArrayList arrayList = new ArrayList();
for (Entry<byte[], byte[]> e : qualMap.entrySet()) {
arrayList.add(fromBytes(valueSchema, e.getValue()));
}
ListGenericArray arr = new ListGenericArray(fieldSchema, arrayList);
setField(persistent, field, arr);
break;
default:
byte[] val =
result.getValue(col.getFamily(), col.getQualifier());
if (val == null) {
continue;
}
setField(persistent, field, val);
break;
}
}
stateManager.clearDirty(persistent);
return persistent;
}