private static void setValueAccordingToType(ScannerReport.Measure.Builder builder, DefaultMeasure<?> measure) { Serializable value = measure.value(); Metric<?> metric = measure.metric(); if (Boolean.class.equals(metric.valueType())) { builder.setBooleanValue(BoolValue.newBuilder().setValue(((Boolean) value).booleanValue())); } else if (Integer.class.equals(metric.valueType())) { builder.setIntValue(IntValue.newBuilder().setValue(((Number) value).intValue())); } else if (Double.class.equals(metric.valueType())) { builder.setDoubleValue(DoubleValue.newBuilder().setValue(((Number) value).doubleValue())); } else if (String.class.equals(metric.valueType())) { builder.setStringValue(StringValue.newBuilder().setValue((String) value)); } else if (Long.class.equals(metric.valueType())) { builder.setLongValue(LongValue.newBuilder().setValue(((Number) value).longValue())); } else { throw new UnsupportedOperationException("Unsupported type :" + metric.valueType()); } }
private static void setValueAccordingToType(ScannerReport.Measure.Builder builder, DefaultMeasure<?> measure) { Serializable value = measure.value(); Metric<?> metric = measure.metric(); if (Boolean.class.equals(metric.valueType())) { builder.setBooleanValue(BoolValue.newBuilder().setValue(((Boolean) value).booleanValue())); } else if (Integer.class.equals(metric.valueType())) { builder.setIntValue(IntValue.newBuilder().setValue(((Number) value).intValue())); } else if (Double.class.equals(metric.valueType())) { builder.setDoubleValue(DoubleValue.newBuilder().setValue(((Number) value).doubleValue())); } else if (String.class.equals(metric.valueType())) { builder.setStringValue(StringValue.newBuilder().setValue((String) value)); } else if (Long.class.equals(metric.valueType())) { builder.setLongValue(LongValue.newBuilder().setValue(((Number) value).longValue())); } else { throw new UnsupportedOperationException("Unsupported type :" + metric.valueType()); } }
private static Optional<Measure> toDoubleMeasure(Measure.NewMeasureBuilder builder, ScannerReport.Measure batchMeasure) { if (batchMeasure.getValueCase() == ValueCase.VALUE_NOT_SET) { return toNoValueMeasure(builder, batchMeasure); } return of(builder.create(batchMeasure.getDoubleValue().getValue(), // Decimals are not truncated in scanner report, so an arbitrary decimal scale is applied when reading values from report org.sonar.api.measures.Metric.MAX_DECIMAL_SCALE, trimToNull(batchMeasure.getDoubleValue().getData()))); }
@Test public void write_measures() { assertThat(underTest.hasComponentData(FileStructure.Domain.MEASURES, 1)).isFalse(); ScannerReport.Measure measure = ScannerReport.Measure.newBuilder() .setDoubleValue(DoubleValue.newBuilder().setValue(2.5d).setData("text-value")) .build(); underTest.writeComponentMeasures(1, asList(measure)); assertThat(underTest.hasComponentData(FileStructure.Domain.MEASURES, 1)).isTrue(); File file = underTest.getFileStructure().fileFor(FileStructure.Domain.MEASURES, 1); assertThat(file).exists().isFile(); try (CloseableIterator<ScannerReport.Measure> read = Protobuf.readStream(file, ScannerReport.Measure.parser())) { assertThat(Iterators.size(read)).isEqualTo(1); } }
@DataProvider public static Object[][] all_types_batch_measure_builders() { return new Object[][] { {ScannerReport.Measure.newBuilder().setBooleanValue(BoolValue.newBuilder().setValue(true)), SOME_BOOLEAN_METRIC}, {ScannerReport.Measure.newBuilder().setIntValue(IntValue.newBuilder().setValue(1)), SOME_INT_METRIC}, {ScannerReport.Measure.newBuilder().setLongValue(LongValue.newBuilder().setValue(1)), SOME_LONG_METRIC}, {ScannerReport.Measure.newBuilder().setDoubleValue(DoubleValue.newBuilder().setValue(1)), SOME_DOUBLE_METRIC}, {ScannerReport.Measure.newBuilder().setStringValue(StringValue.newBuilder().setValue("1")), SOME_STRING_METRIC}, {ScannerReport.Measure.newBuilder().setStringValue(StringValue.newBuilder().setValue(Measure.Level.OK.name())), SOME_LEVEL_METRIC} }; } }
private static Optional<Measure> toDoubleMeasure(Measure.NewMeasureBuilder builder, ScannerReport.Measure batchMeasure) { if (batchMeasure.getValueCase() == ValueCase.VALUE_NOT_SET) { return toNoValueMeasure(builder, batchMeasure); } return of(builder.create(batchMeasure.getDoubleValue().getValue(), // Decimals are not truncated in scanner report, so an arbitrary decimal scale is applied when reading values from report org.sonar.api.measures.Metric.MAX_DECIMAL_SCALE, trimToNull(batchMeasure.getDoubleValue().getData()))); }
@Test public void toMeasure_maps_data_and_alert_properties_in_dto_for_Double_Metric() { ScannerReport.Measure batchMeasure = ScannerReport.Measure.newBuilder() .setDoubleValue(DoubleValue.newBuilder().setValue(10.6395d).setData(SOME_DATA)) .build(); Optional<Measure> measure = underTest.toMeasure(batchMeasure, SOME_DOUBLE_METRIC); assertThat(measure.isPresent()).isTrue(); assertThat(measure.get().getValueType()).isEqualTo(Measure.ValueType.DOUBLE); assertThat(measure.get().getDoubleValue()).isEqualTo(10.6395d); assertThat(measure.get().getData()).isEqualTo(SOME_DATA); }