public Optional<Measure> toMeasure(@Nullable BatchReport.Measure batchMeasure, Metric metric) { Objects.requireNonNull(metric); if (batchMeasure == null) { return Optional.absent(); } Measure.NewMeasureBuilder builder = Measure.newMeasureBuilder(); String data = batchMeasure.hasStringValue() ? batchMeasure.getStringValue() : null; switch (metric.getType().getValueType()) { case INT: return toIntegerMeasure(builder, batchMeasure, data); case LONG: return toLongMeasure(builder, batchMeasure, data); case DOUBLE: return toDoubleMeasure(builder, batchMeasure, data); case BOOLEAN: return toBooleanMeasure(builder, batchMeasure, data); case STRING: return toStringMeasure(builder, batchMeasure); case LEVEL: return toLevelMeasure(builder, batchMeasure); case NO_VALUE: return toNoValueMeasure(builder, batchMeasure); default: throw new IllegalArgumentException( "Unsupported Measure.ValueType " + metric.getType().getValueType()); } }