package org.solovyev.android.calculator.converter;
import android.support.annotation.NonNull;
import android.util.Log;
import com.google.common.base.Strings;
import jscl.JsclMathEngine;
import midpcalc.Real;
import org.solovyev.android.calculator.R;
import javax.annotation.Nonnull;
import javax.measure.unit.Unit;
final class Converter {
static int unitName(@Nonnull Unit unit, @Nonnull UnitDimension dimension) {
final String id = Strings.nullToEmpty(unit.toString());
switch (dimension) {
case TIME:
switch (id) {
case "s":
return R.string.cpp_units_time_seconds;
case "week":
return R.string.cpp_units_time_weeks;
case "day":
return R.string.cpp_units_time_days;
case "min":
return R.string.cpp_units_time_minutes;
case "year":
return R.string.cpp_units_time_years;
case "h":
return R.string.cpp_units_time_hours;
case "month":
return R.string.cpp_units_time_months;
}
break;
case AMOUNT_OF_SUBSTANCE:
switch (id) {
case "mol":
return R.string.cpp_units_aos_mol;
case "atom":
return R.string.cpp_units_aos_atoms;
}
break;
case ELECTRIC_CURRENT:
switch (id) {
case "A":
return R.string.cpp_units_ec_a;
case "Gi":
return R.string.cpp_units_ec_gi;
}
break;
case LENGTH:
switch (id) {
case "m":
return R.string.cpp_units_length_meters;
case "nmi":
return R.string.cpp_units_length_nautical_miles;
case "in":
return R.string.cpp_units_length_inches;
case "ua":
return R.string.cpp_units_length_astronomical_units;
case "Å":
return R.string.cpp_units_length_angstroms;
case "ly":
return R.string.cpp_units_length_light_years;
case "mi":
return R.string.cpp_units_length_miles;
case "yd":
return R.string.cpp_units_length_yards;
case "pixel":
return R.string.cpp_units_length_pixels;
case "ft":
return R.string.cpp_units_length_feet;
case "pc":
return R.string.cpp_units_length_parsecs;
case "pt":
return R.string.cpp_units_length_points;
}
break;
case MASS:
switch (id) {
case "kg":
return R.string.cpp_units_mass_kg;
case "lb":
return R.string.cpp_units_mass_lb;
case "oz":
return R.string.cpp_units_mass_oz;
case "t":
return R.string.cpp_units_mass_t;
case "ton_uk":
return R.string.cpp_units_mass_tons_uk;
case "ton_us":
return R.string.cpp_units_mass_tons_us;
}
break;
case TEMPERATURE:
// temperature unit ids are international
return 0;
}
Log.w("Converter", "Unit translation is missing for unit=" + id + " in dimension=" + dimension);
return 0;
}
@NonNull
public static Real parse(@NonNull String value) throws NumberFormatException {
return parse(value, 10);
}
@NonNull
public static Real parse(@NonNull String value, int base) throws NumberFormatException {
final String groupingSeparator = String.valueOf(JsclMathEngine.getInstance().getGroupingSeparator());
if (groupingSeparator.length() > 0) {
value = value.replace(groupingSeparator, "");
}
final Real real = new Real(value, base);
if (real.isNan()) {
throw new NumberFormatException();
}
return real;
}
}