ch.hortis.sonar.mvn.mc.BaseMetricCollector Maven / Gradle / Ivy
package ch.hortis.sonar.mvn.mc;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.text.ParseException;
import java.util.Locale;
public class BaseMetricCollector {
private DecimalFormatSymbols dfs;
private final DecimalFormat sonarFormat;
public BaseMetricCollector() {
dfs = new DecimalFormatSymbols( Locale.ENGLISH );
// , grouping separator and . decimal separator
sonarFormat = new DecimalFormat("#.###", dfs );
}
public double parseNumber( String number ) throws ParseException {
if ( number == null || number.trim().length() == 0 ) {
throw new ParseException( "'" + number + "' is not a number", 0 );
}
number = number.trim();
Character potentialGroupingSeparator = null;
Character potentialDecimalSeparator = null;
int potentialGroupingSeparatorCount = 0;
for ( Character decimal : number.toCharArray() ) {
if ( !Character.isDigit( decimal ) ) {
if ( potentialGroupingSeparator == null ) {
potentialGroupingSeparator = decimal;
potentialGroupingSeparatorCount++;
} else if ( potentialGroupingSeparator != null && decimal != potentialGroupingSeparator ) {
potentialDecimalSeparator = decimal;
} else {
potentialGroupingSeparatorCount++;
}
}
}
if ( ( potentialGroupingSeparator != null && potentialDecimalSeparator != null ) ||
( potentialGroupingSeparator != null && potentialGroupingSeparatorCount > 1 ) ||
( potentialGroupingSeparator != null && potentialGroupingSeparator == '\'' ) ) {
throw new ParseException( "'" + number + "' cannot be parsed due to grouping separators presence", 0 );
}
number = number.replace( ',' , '.' );
return sonarFormat.parse( number ).doubleValue();
}
public double scaleValue( double value ) {
return scaleValue( value, 2 );
}
public double scaleValue( double value, int decimals ) {
BigDecimal bd = new BigDecimal( value );
return bd.setScale( decimals, RoundingMode.HALF_UP ).doubleValue();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy