All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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