}
@Override
public void process(String input, Emitter<M> emitter) {
if (input != null && !input.isEmpty()) {
Builder b = msgInstance.newBuilderForType();
Iterator<String> iter = splitter.split(input).iterator();
boolean parseError = false;
for (FieldDescriptor fd : fields) {
if (iter.hasNext()) {
String value = iter.next();
if (value != null && !value.isEmpty()) {
Object parsedValue = null;
try {
switch (fd.getJavaType()) {
case STRING:
parsedValue = value;
break;
case INT:
parsedValue = Integer.valueOf(value);
break;
case LONG:
parsedValue = Long.valueOf(value);
break;
case FLOAT:
parsedValue = Float.valueOf(value);
break;
case DOUBLE:
parsedValue = Double.valueOf(value);
break;
case BOOLEAN:
parsedValue = Boolean.valueOf(value);
break;
case ENUM:
parsedValue = fd.getEnumType().findValueByName(value);
break;
}
b.setField(fd, parsedValue);
} catch (NumberFormatException nfe) {
increment(ParseErrors.NUMBER_FORMAT);
parseError = true;
break;
}
}
}
}
if (parseError) {
increment(ParseErrors.TOTAL);
} else {
emitter.emit((M) b.build());
}
}
}