public static Count valueOfSuffix(String suffix) { for (Count count : Count.values()) { if (count.toString().toLowerCase().equals(suffix.toLowerCase())) { return count; } if (count.label.toLowerCase().equals(suffix.toLowerCase())) { return count; } if (count.name.toLowerCase().equals(suffix.toLowerCase())) { return count; } } return null; }
public static Optional<Double> convertDoubleCount(Count resultUnit, String spec) { Matcher e = numberExponentPattern.matcher(spec); if (e.matches()) { double base= Double.valueOf(e.group("number")); double exponent = Double.valueOf(e.group("exponent")); double value= Math.pow(base, exponent); spec = e.group("pre")+ String.valueOf(value) + e.group("post"); } Matcher m = numberFmtPattern.matcher(spec); if (m.matches()) { String numberpart = m.group("number"); double base = Double.valueOf(numberpart); String unitpart = m.group("unit"); if (unitpart != null) { Count specifierUnit = Count.valueOfSuffix(unitpart); if (specifierUnit == null) { throw new RuntimeException("Unable to recognized counts unit:" + unitpart); } double specifierScale = specifierUnit.getMultiplier(); double resultScale = resultUnit.getMultiplier(); double multiplier = (specifierScale / resultScale); base *= multiplier; } return Optional.of(base); } else { logger.error("Parsing error for specifier:'" + spec + "'"); return Optional.empty(); } }
public static Optional<Long> convertLongCount(Count resultUnit, String spec) { spec = longConversions(spec); Matcher m = numberFmtPattern.matcher(spec); if (m.matches()) { String numberpart = m.group("number"); long base = Long.valueOf(numberpart); String unitpart = m.group("unit"); if (unitpart != null) { Count specifierUnit = Count.valueOfSuffix(unitpart); if (specifierUnit == null) { throw new RuntimeException("Unable to recognize counts unit:" + unitpart); } double specifierScale = specifierUnit.getMultiplier(); double resultScale = resultUnit.getMultiplier(); double multiplier = (specifierScale / resultScale); base *= multiplier; } return Optional.of(base); } else { logger.error("Parsing error for specifier:'" + spec + "'"); return Optional.empty(); } }