in mr/src/main/java/org/elasticsearch/hadoop/util/WritableUtils.java [121:189]
public static Object fromWritable(Writable writable) {
if (writable == null) {
return null;
}
if (writable instanceof NullWritable) {
return null;
}
if (writable instanceof Text) {
return ((Text) writable).toString();
}
if (WritableCompatUtil.isShortWritable(writable)) {
return WritableCompatUtil.unwrap(writable);
}
if (writable instanceof IntWritable) {
return ((IntWritable) writable).get();
}
if (writable instanceof VLongWritable) {
return ((VLongWritable) writable).get();
}
if (writable instanceof VIntWritable) {
return ((VIntWritable) writable).get();
}
if (writable instanceof ByteWritable) {
return ((ByteWritable) writable).get();
}
if (writable instanceof DoubleWritable) {
return ((DoubleWritable) writable).get();
}
if (writable instanceof FloatWritable) {
return ((FloatWritable) writable).get();
}
if (writable instanceof BooleanWritable) {
return ((BooleanWritable) writable).get();
}
if (writable instanceof BytesWritable) {
return ((BytesWritable) writable).getBytes();
}
if (writable instanceof ArrayWritable) {
Writable[] writables = ((ArrayWritable) writable).get();
List<Object> list = new ArrayList<Object>(writables.length);
for (Writable wrt : writables) {
list.add(fromWritable(wrt));
}
return list;
}
if (writable instanceof AbstractMapWritable) {
// AbstractMap writable doesn't provide any generic signature so we force it
@SuppressWarnings("unchecked")
Map<Writable, Writable> smap = (Map<Writable, Writable>) writable;
Set<Writable> wkeys = smap.keySet();
Map<Object, Object> map = (writable instanceof SortedMapWritable ? new TreeMap<Object, Object>() : new LinkedHashMap<Object, Object>(wkeys.size()));
boolean isSet = true;
for (Writable wKey : wkeys) {
Writable wValue = smap.get(wKey);
if (!(wValue instanceof NullWritable)) {
isSet = false;
}
map.put(fromWritable(wKey), fromWritable(wValue));
}
if (isSet) {
return map.keySet();
}
return map;
}
// fall-back to bytearray
return org.apache.hadoop.io.WritableUtils.toByteArray(writable);
}