/**
* Copyright (C) 2014 Envidatec GmbH <info@envidatec.com>
*
* This file is part of JEApplication.
*
* JECommons is free software: you can redistribute it and/or modify it under
* the terms of the GNU General Public License as published by the Free Software
* Foundation in version 3.
*
* JECommons is distributed in the hope that it will be useful, but WITHOUT ANY
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
* A PARTICULAR PURPOSE. See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along with
* JECommons. If not, see <http://www.gnu.org/licenses/>.
*
* JECommons is part of the OpenJEVis project, further project information are
* published at <http://www.OpenJEVis.org/>.
*/
package org.jevis.commons.unit;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import javax.measure.quantity.*;
import javax.measure.unit.NonSI;
import javax.measure.unit.SI;
import javax.measure.unit.Unit;
import org.jevis.api.JEVisUnit;
import org.jscience.economics.money.Money;
/**
* This Class helps with the handling of JScince Lib. This class in not final an
* may be chaned in the future.
*
* @author fs
*/
public class UnitManager {
private final static UnitManager unitManager = new UnitManager();
private List<Unit> prefixes;
private List<String> prefixes2;
private List<Unit> quantities;
private List<JEVisUnit> _quantitiesJunit;
private List<Unit> nonSI;
private List<JEVisUnit> _nonSIJunit;
private List<Unit> si;
private List<JEVisUnit> _siJunit;
private List<Unit> additonalUnits;
private HashMap<Unit, String> names;
private HashMap<JEVisUnit, String> _namesJUnit;
private HashMap<Unit, String> dimNames;
private HashMap<JEVisUnit, String> _dimNamesJUnit;
public interface PrefixName {
//TODO: remove this
public static String ZETTA = "Zetta";
public static String EXA = "Exa";
public static String PETA = "Peta";
public static String TERA = "Tera";
public static String GIGA = "Giga";
public static String MEGA = "Mega";
public static String KILO = "Kilo";
public static String HECTO = "Hecto";
public static String DEKA = "Deka";
public static String DECI = "Deci";
public static String CENTI = "Centi";
public static String MILLI = "Milli";
public static String MICRO = "Micro";
public static String NANO = "Nano";
public static String PICO = "Pico";
public static String FEMTO = "Femto";
public static String ATTO = "Atto";
public static String ZEPTO = "Zepto";
public static String YOCTO = "Yocto";
public static String NONE = "None";
}
/* A private Constructor prevents any other
* class from instantiating.
*/
private UnitManager() {
}
public static UnitManager getInstance() {
return unitManager;
}
public List<JEVisUnit> getQuantitiesJunit() {
if (_quantitiesJunit != null) {
return _quantitiesJunit;
}
_quantitiesJunit = new ArrayList<>();
for (Unit unit : getQuantities()) {
_quantitiesJunit.add(new JEVisUnitImp(unit));
}
return _quantitiesJunit;
}
public List<Unit> getQuantities() {
if (quantities != null) {
return quantities;
}
quantities = new ArrayList<>();
quantities.add(Money.BASE_UNIT);
quantities.add(Acceleration.UNIT);
quantities.add(AmountOfSubstance.UNIT);
quantities.add(Angle.UNIT);
quantities.add(AngularAcceleration.UNIT);
quantities.add(AngularVelocity.UNIT);
quantities.add(Area.UNIT);
quantities.add(CatalyticActivity.UNIT);
quantities.add(DataAmount.UNIT);
quantities.add(DataRate.UNIT);
quantities.add(Dimensionless.UNIT);
quantities.add(Duration.UNIT);
quantities.add(DynamicViscosity.UNIT);
quantities.add(ElectricCapacitance.UNIT);
quantities.add(ElectricCharge.UNIT);
quantities.add(ElectricConductance.UNIT);
quantities.add(ElectricCurrent.UNIT);
quantities.add(ElectricInductance.UNIT);
quantities.add(ElectricPotential.UNIT);
quantities.add(ElectricResistance.UNIT);
quantities.add(Energy.UNIT);
quantities.add(Force.UNIT);
quantities.add(Frequency.UNIT);
quantities.add(Illuminance.UNIT);
quantities.add(KinematicViscosity.UNIT);
quantities.add(Length.UNIT);
quantities.add(LuminousFlux.UNIT);
quantities.add(LuminousIntensity.UNIT);
quantities.add(MagneticFlux.UNIT);
quantities.add(MagneticFluxDensity.UNIT);
quantities.add(Mass.UNIT);
quantities.add(MassFlowRate.UNIT);
quantities.add(Power.UNIT);
quantities.add(Pressure.UNIT);
quantities.add(RadiationDoseAbsorbed.UNIT);
quantities.add(RadiationDoseEffective.UNIT);
quantities.add(RadioactiveActivity.UNIT);
quantities.add(SolidAngle.UNIT);
quantities.add(Temperature.UNIT);
quantities.add(Torque.UNIT);
quantities.add(Velocity.UNIT);
quantities.add(Volume.UNIT);
quantities.add(VolumetricDensity.UNIT);
quantities.add(VolumetricFlowRate.UNIT);
return quantities;
}
/**
* returns an new unit with the given Prefix
*
* @param pre
* @param unit
* @return
*/
public Unit getWithPrefix(String pre, Unit unit) {
if (pre.equals(PrefixName.ATTO)) {
return SI.ATTO(unit);
} else if (pre.equals(PrefixName.CENTI)) {
return SI.CENTI(unit);
} else if (pre.equals(PrefixName.DECI)) {
return SI.DECI(unit);
} else if (pre.equals(PrefixName.DEKA)) {
return SI.DEKA(unit);
} else if (pre.equals(PrefixName.EXA)) {
return SI.EXA(unit);
} else if (pre.equals(PrefixName.FEMTO)) {
return SI.FEMTO(unit);
} else if (pre.equals(PrefixName.GIGA)) {
return SI.GIGA(unit);
} else if (pre.equals(PrefixName.HECTO)) {
return SI.HECTO(unit);
} else if (pre.equals(PrefixName.KILO)) {
return SI.KILO(unit);
} else if (pre.equals(PrefixName.MEGA)) {
return SI.MEGA(unit);
} else if (pre.equals(PrefixName.MICRO)) {
return SI.MICRO(unit);
} else if (pre.equals(PrefixName.MILLI)) {
return SI.MILLI(unit);
} else if (pre.equals(PrefixName.NANO)) {
return SI.NANO(unit);
} else if (pre.equals(PrefixName.PETA)) {
return SI.PETA(unit);
} else if (pre.equals(PrefixName.PICO)) {
return SI.PICO(unit);
} else if (pre.equals(PrefixName.YOCTO)) {
return SI.YOCTO(unit);
} else if (pre.equals(PrefixName.ZEPTO)) {
return SI.ZEPTO(unit);
} else if (pre.equals(PrefixName.ZETTA)) {
return SI.ZETTA(unit);
} else {
return unit;
}
}
/**
* This funktion will change in the future
*
* @return
*/
public List<String> getPrefixes() {
if (prefixes2 != null) {
return prefixes2;
}
prefixes2 = new ArrayList<>();
prefixes2.add("");
prefixes2.add(PrefixName.ZETTA);
prefixes2.add(PrefixName.EXA);
prefixes2.add(PrefixName.PETA);
prefixes2.add(PrefixName.TERA);
prefixes2.add(PrefixName.GIGA);
prefixes2.add(PrefixName.MEGA);
prefixes2.add(PrefixName.KILO);
prefixes2.add(PrefixName.HECTO);
prefixes2.add(PrefixName.DEKA);
prefixes2.add(PrefixName.DECI);
prefixes2.add(PrefixName.CENTI);
prefixes2.add(PrefixName.MILLI);
prefixes2.add(PrefixName.MICRO);
prefixes2.add(PrefixName.NANO);
prefixes2.add(PrefixName.PICO);
prefixes2.add(PrefixName.FEMTO);
prefixes2.add(PrefixName.ATTO);
prefixes2.add(PrefixName.ZEPTO);
prefixes2.add(PrefixName.YOCTO);
return prefixes2;
}
/**
* Returns an String representaion of the Prefix
*
* @param prefix
* @return
*/
public String getPrefixChar(JEVisUnit.Prefix prefix) {
switch (prefix) {
case ATTO:
return "a";
case CENTI:
return "c";
case DECI:
return "d";
case DEKA:
return "da";
case EXA:
return "E";
case FEMTO:
return "f";
case GIGA:
return "G";
case HECTO:
return "h";
case KILO:
return "k";
case MEGA:
return "M";
case MICRO:
return "µ";
case MILLI:
return "m";
case NANO:
return "n";
case PETA:
return "P";
case PICO:
return "P";
case TERA:
return "T";
case YOCTO:
return "y";
case ZEPTO:
return "Z";
case ZETTA:
return "Z";
case NONE:
return "";
default:
throw new AssertionError();
}
}
//TODO is this still in use?
public String getPrefixChar(String prefix) {
switch (prefix) {
case PrefixName.ATTO:
return "a";
case PrefixName.CENTI:
return "c";
case PrefixName.DECI:
return "d";
case PrefixName.DEKA:
return "da";
case PrefixName.EXA:
return "E";
case PrefixName.FEMTO:
return "f";
case PrefixName.GIGA:
return "G";
case PrefixName.HECTO:
return "h";
case PrefixName.KILO:
return "k";
case PrefixName.MEGA:
return "m";
case PrefixName.MICRO:
return "µ";
case PrefixName.MILLI:
return "m";
case PrefixName.NANO:
return "n";
case PrefixName.PETA:
return "P";
case PrefixName.PICO:
return "P";
case PrefixName.TERA:
return "T";
case PrefixName.YOCTO:
return "y";
case PrefixName.ZEPTO:
return "Z";
case PrefixName.ZETTA:
return "Z";
default:
throw new AssertionError();
}
}
public JEVisUnit.Prefix getPrefix(String name, Locale locale) {
// System.out.println("getPrefix: " + name);
if (name == null || name.isEmpty()) {
System.out.println("emty Prefix = none");
return JEVisUnit.Prefix.NONE;
}
switch (name) {
case PrefixName.ATTO:
return JEVisUnit.Prefix.ATTO;
case PrefixName.CENTI:
return JEVisUnit.Prefix.CENTI;
case PrefixName.DECI:
return JEVisUnit.Prefix.DECI;
case PrefixName.DEKA:
return JEVisUnit.Prefix.DEKA;
case PrefixName.EXA:
return JEVisUnit.Prefix.EXA;
case PrefixName.FEMTO:
return JEVisUnit.Prefix.FEMTO;
case PrefixName.GIGA:
return JEVisUnit.Prefix.GIGA;
case PrefixName.HECTO:
return JEVisUnit.Prefix.HECTO;
case PrefixName.KILO:
return JEVisUnit.Prefix.KILO;
case PrefixName.MEGA:
return JEVisUnit.Prefix.MEGA;
case PrefixName.MICRO:
return JEVisUnit.Prefix.MICRO;
case PrefixName.MILLI:
return JEVisUnit.Prefix.MILLI;
case PrefixName.NANO:
return JEVisUnit.Prefix.NANO;
case PrefixName.PETA:
return JEVisUnit.Prefix.PETA;
case PrefixName.PICO:
return JEVisUnit.Prefix.PICO;
case PrefixName.TERA:
return JEVisUnit.Prefix.TERA;
case PrefixName.YOCTO:
return JEVisUnit.Prefix.YOCTO;
case PrefixName.ZEPTO:
return JEVisUnit.Prefix.ZEPTO;
case PrefixName.ZETTA:
return JEVisUnit.Prefix.ZETTA;
case PrefixName.NONE:
return JEVisUnit.Prefix.NONE;
default:
System.out.println("unkown Prefix: " + name);
return JEVisUnit.Prefix.NONE;
}
}
/**
* Returns the long name of the prefix for the given locale
*
* @param prefix
* @param locale
* @return
*/
public String getPrefixName(JEVisUnit.Prefix prefix, Locale locale) {
switch (prefix) {
case ATTO:
return PrefixName.ATTO;
case CENTI:
return PrefixName.CENTI;
case DECI:
return PrefixName.DECI;
case DEKA:
return PrefixName.DEKA;
case EXA:
return PrefixName.EXA;
case FEMTO:
return PrefixName.FEMTO;
case GIGA:
return PrefixName.GIGA;
case HECTO:
return PrefixName.HECTO;
case KILO:
return PrefixName.KILO;
case MEGA:
return PrefixName.MEGA;
case MICRO:
return PrefixName.MICRO;
case MILLI:
return PrefixName.MILLI;
case NANO:
return PrefixName.NANO;
case PETA:
return PrefixName.PETA;
case PICO:
return PrefixName.PICO;
case TERA:
return PrefixName.TERA;
case YOCTO:
return PrefixName.YOCTO;
case ZEPTO:
return PrefixName.ZEPTO;
case ZETTA:
return PrefixName.ZETTA;
case NONE:
return PrefixName.NONE;
default:
System.out.println("Waring no prefix name found for: " + prefix);
return PrefixName.NONE;
}
}
/**
* Return an new Unit with the set Prefix
*
* @param unit
* @param prefix
* @return
*/
public Unit getUnitWithPrefix(Unit unit, JEVisUnit.Prefix prefix) {
// System.out.println("getUnitWithPrefix: " + prefix);
switch (prefix) {
case ATTO:
return SI.ATTO(unit);
case CENTI:
return SI.CENTI(unit);
case DECI:
return SI.DECI(unit);
case DEKA:
return SI.DEKA(unit);
case EXA:
return SI.EXA(unit);
case FEMTO:
return SI.FEMTO(unit);
case GIGA:
return SI.GIGA(unit);
case HECTO:
return SI.HECTO(unit);
case KILO:
return SI.KILO(unit);
case MEGA:
return SI.MEGA(unit);
case MICRO:
return SI.MICRO(unit);
case MILLI:
return SI.MILLI(unit);
case NANO:
return SI.NANO(unit);
case PETA:
return SI.PETA(unit);
case PICO:
return SI.PICO(unit);
case TERA:
return SI.TERA(unit);
case YOCTO:
return SI.YOCTO(unit);
case ZEPTO:
return SI.ZEPTO(unit);
case ZETTA:
return SI.ZETTA(unit);
case NONE:
return unit;
default:
throw new AssertionError();
}
}
public List<JEVisUnit> getNonSIJEVisUnits() {
if (_nonSIJunit != null) {
return _nonSIJunit;
}
_nonSIJunit = new ArrayList<>();
for (Unit unit : getNonSIUnits()) {
_nonSIJunit.add(new JEVisUnitImp(unit));
}
return _nonSIJunit;
}
public List<Unit> getNonSIUnits() {
if (nonSI != null) {
return nonSI;
}
nonSI = new ArrayList<>();
nonSI.add(javax.measure.unit.NonSI.ANGSTROM);
nonSI.add(javax.measure.unit.NonSI.ARE);
nonSI.add(javax.measure.unit.NonSI.ASTRONOMICAL_UNIT);
nonSI.add(javax.measure.unit.NonSI.ATMOSPHERE);
nonSI.add(javax.measure.unit.NonSI.ATOM);
nonSI.add(javax.measure.unit.NonSI.ATOMIC_MASS);
nonSI.add(javax.measure.unit.NonSI.BAR);
nonSI.add(javax.measure.unit.NonSI.BYTE);
nonSI.add(javax.measure.unit.NonSI.C);
nonSI.add(javax.measure.unit.NonSI.CENTIRADIAN);
nonSI.add(javax.measure.unit.NonSI.COMPUTER_POINT);
nonSI.add(javax.measure.unit.NonSI.CUBIC_INCH);
nonSI.add(javax.measure.unit.NonSI.CURIE);
nonSI.add(javax.measure.unit.NonSI.DAY);
nonSI.add(javax.measure.unit.NonSI.DAY_SIDEREAL);
nonSI.add(javax.measure.unit.NonSI.DECIBEL);
nonSI.add(javax.measure.unit.NonSI.DEGREE_ANGLE);
nonSI.add(javax.measure.unit.NonSI.DYNE);
nonSI.add(javax.measure.unit.NonSI.E);
nonSI.add(javax.measure.unit.NonSI.ELECTRON_MASS);
nonSI.add(javax.measure.unit.NonSI.ELECTRON_VOLT);
nonSI.add(javax.measure.unit.NonSI.ERG);
nonSI.add(javax.measure.unit.NonSI.FAHRENHEIT);
nonSI.add(javax.measure.unit.NonSI.FARADAY);
nonSI.add(javax.measure.unit.NonSI.FOOT);
nonSI.add(javax.measure.unit.NonSI.FOOT_SURVEY_US);
nonSI.add(javax.measure.unit.NonSI.FRANKLIN);
nonSI.add(javax.measure.unit.NonSI.G);
nonSI.add(javax.measure.unit.NonSI.GALLON_DRY_US);
nonSI.add(javax.measure.unit.NonSI.GALLON_LIQUID_US);
nonSI.add(javax.measure.unit.NonSI.GALLON_UK);
nonSI.add(javax.measure.unit.NonSI.GAUSS);
nonSI.add(javax.measure.unit.NonSI.GILBERT);
nonSI.add(javax.measure.unit.NonSI.GRADE);
nonSI.add(javax.measure.unit.NonSI.HECTARE);
nonSI.add(javax.measure.unit.NonSI.HORSEPOWER);
nonSI.add(javax.measure.unit.NonSI.HOUR);
nonSI.add(javax.measure.unit.NonSI.INCH);
nonSI.add(javax.measure.unit.NonSI.INCH_OF_MERCURY);
nonSI.add(javax.measure.unit.NonSI.KILOGRAM_FORCE);
nonSI.add(javax.measure.unit.NonSI.KILOMETERS_PER_HOUR);
nonSI.add(javax.measure.unit.NonSI.KNOT);
nonSI.add(javax.measure.unit.NonSI.LAMBERT);
nonSI.add(javax.measure.unit.NonSI.LIGHT_YEAR);
nonSI.add(javax.measure.unit.NonSI.LITER);
nonSI.add(javax.measure.unit.NonSI.LITRE);
nonSI.add(javax.measure.unit.NonSI.MACH);
nonSI.add(javax.measure.unit.NonSI.MAXWELL);
nonSI.add(javax.measure.unit.NonSI.METRIC_TON);
nonSI.add(javax.measure.unit.NonSI.MILE);
nonSI.add(javax.measure.unit.NonSI.MILES_PER_HOUR);
nonSI.add(javax.measure.unit.NonSI.MILLIMETER_OF_MERCURY);
nonSI.add(javax.measure.unit.NonSI.MINUTE);
nonSI.add(javax.measure.unit.NonSI.MINUTE_ANGLE);
nonSI.add(javax.measure.unit.NonSI.MONTH);
nonSI.add(javax.measure.unit.NonSI.NAUTICAL_MILE);
nonSI.add(javax.measure.unit.NonSI.OCTET);
nonSI.add(javax.measure.unit.NonSI.OUNCE);
nonSI.add(javax.measure.unit.NonSI.OUNCE_LIQUID_UK);
nonSI.add(javax.measure.unit.NonSI.OUNCE_LIQUID_US);
nonSI.add(javax.measure.unit.NonSI.PARSEC);
nonSI.add(javax.measure.unit.NonSI.PERCENT);
nonSI.add(javax.measure.unit.NonSI.PIXEL);
nonSI.add(javax.measure.unit.NonSI.POINT);
nonSI.add(javax.measure.unit.NonSI.POISE);
nonSI.add(javax.measure.unit.NonSI.POUND);
nonSI.add(javax.measure.unit.NonSI.POUND_FORCE);
nonSI.add(javax.measure.unit.NonSI.RAD);
nonSI.add(javax.measure.unit.NonSI.RANKINE);
nonSI.add(javax.measure.unit.NonSI.REM);
nonSI.add(javax.measure.unit.NonSI.REVOLUTION);
nonSI.add(javax.measure.unit.NonSI.ROENTGEN);
nonSI.add(javax.measure.unit.NonSI.RUTHERFORD);
nonSI.add(javax.measure.unit.NonSI.SECOND_ANGLE);
nonSI.add(javax.measure.unit.NonSI.SPHERE);
nonSI.add(javax.measure.unit.NonSI.STOKE);
nonSI.add(javax.measure.unit.NonSI.TON_UK);
nonSI.add(javax.measure.unit.NonSI.TON_US);
nonSI.add(javax.measure.unit.NonSI.WEEK);
nonSI.add(javax.measure.unit.NonSI.YARD);
nonSI.add(javax.measure.unit.NonSI.YEAR);
nonSI.add(javax.measure.unit.NonSI.YEAR_CALENDAR);
nonSI.add(javax.measure.unit.NonSI.YEAR_SIDEREAL);
return nonSI;
}
public String formate(JEVisUnit junit) {
String uString = junit.getFormula().replace("·", "");
uString = uString.replace("(", "");
uString = uString.replace(")", "");
uString = uString.replace("/", "");
String withPrefix = getPrefixChar(junit.getPrefix()) + uString;
return withPrefix;
}
public String formate(Unit unit) {
return formate(unit, "");
}
public String formate(Unit unit, String altSymbol) {
// System.out.println("Formate unit: " + unit + " AltUnit: " + altSymbol);
// String u1 = unit.getStandardUnit().toString().replace("·", "");
String u1 = unit.toString().replace("·", "");
u1 = u1.replace("(", "");
u1 = u1.replace(")", "");
u1 = u1.replace("/", "");
return u1;
}
/**
* @TODO: this list comes from the WebServices
* @return
*/
public List<Unit> getAdditonalUnits() {
if (additonalUnits != null) {
return additonalUnits;
}
additonalUnits = new ArrayList<>();
additonalUnits.add(Unit.valueOf("Hz"));
additonalUnits.add(NonSI.REVOLUTION.divide(SI.SECOND));
additonalUnits.add(SI.WATT.times(SI.SECOND));
additonalUnits.add(SI.WATT.times(NonSI.HOUR));
additonalUnits.add(Money.BASE_UNIT.alternate("€"));
additonalUnits.add(Money.BASE_UNIT.alternate("$"));
additonalUnits.add(Money.BASE_UNIT.alternate("£"));
additonalUnits.add(Money.BASE_UNIT.alternate("¥"));
additonalUnits.add(Money.BASE_UNIT.alternate("₦"));
additonalUnits.add(Money.BASE_UNIT.alternate("₹"));
additonalUnits.add(SI.WATT.alternate("var"));
additonalUnits.add(SI.WATT.divide(SI.SQUARE_METRE));
additonalUnits.add(SI.METER.divide(SI.SECOND));
additonalUnits.add(Dimensionless.UNIT.alternate("Hits").divide(SI.METER.pow(2)));
additonalUnits.add(Unit.ONE.alternate("Hits").divide(SI.CENTIMETER.pow(2)));
additonalUnits.add(SI.OHM.divide(SI.CENTIMETER.pow(2)));
additonalUnits.add(SI.CENTIMETER.pow(2));
additonalUnits.add(SI.KILOMETER.pow(2));
additonalUnits.add(Dimensionless.UNIT.ONE.times(1E-6));//ppm
additonalUnits.add(SI.KILO(SI.WATT).times(NonSI.HOUR.times(SI.SECOND).times(Unit.ONE)));
//kWh/m²kWh/m²
additonalUnits.add(((SI.KILO(SI.WATT).times(NonSI.HOUR)).divide(SI.SQUARE_METRE)));
// additonalUnits.add(Dimensionless.UNIT.alternate("Status"));
return additonalUnits;
}
public List<JEVisUnit> getCustomUnits() {
List<JEVisUnit> customUnits = new ArrayList<>();
for (JEVisUnit unit : getAdditonalJEVisUnits()) {
boolean hasQuantitiy = false;
for (JEVisUnit quantity : getQuantitiesJunit()) {
if (quantity.isCompatible(unit)) {
hasQuantitiy = true;
}
}
if (!hasQuantitiy) {
// try {
// System.out.println("Cutom unit has NO Qulity: " + formate(unit));
// } catch (JEVisException ex) {
// Logger.getLogger(UnitManager.class.getName()).log(Level.SEVERE, null, ex);
// }
customUnits.add(unit);
} else {
// try {
// System.out.println("Cutom unit has Qulity: " + formate(unit));
// } catch (JEVisException ex) {
// Logger.getLogger(UnitManager.class.getName()).log(Level.SEVERE, null, ex);
// }
}
}
return customUnits;
}
public List<JEVisUnit> getAdditonalJEVisUnits() {
// if (additonalUnits != null) {
// return additonalUnits;
// }
List<JEVisUnit> units = new ArrayList<>();
for (Unit u : getAdditonalUnits()) {
units.add(new JEVisUnitImp(u));
}
return units;
}
public List<Unit> getSIUnits() {
if (si != null) {
return si;
}
si = new ArrayList<>();
si.add(javax.measure.unit.SI.AMPERE);
si.add(javax.measure.unit.SI.BECQUEREL);
si.add(javax.measure.unit.SI.BIT);
si.add(javax.measure.unit.SI.CANDELA);
si.add(javax.measure.unit.SI.CELSIUS);
si.add(javax.measure.unit.SI.CENTIMETER);
si.add(javax.measure.unit.SI.CENTIMETRE);
si.add(javax.measure.unit.SI.COULOMB);
si.add(javax.measure.unit.SI.CUBIC_METRE);
si.add(javax.measure.unit.SI.FARAD);
si.add(javax.measure.unit.SI.GRAM);
si.add(javax.measure.unit.SI.GRAY);
si.add(javax.measure.unit.SI.HENRY);
si.add(javax.measure.unit.SI.HERTZ);
si.add(javax.measure.unit.SI.JOULE);
si.add(javax.measure.unit.SI.KATAL);
si.add(javax.measure.unit.SI.KELVIN);
si.add(javax.measure.unit.SI.KILOGRAM);
si.add(javax.measure.unit.SI.KILOMETER);
si.add(javax.measure.unit.SI.LUMEN);
si.add(javax.measure.unit.SI.LUX);
si.add(javax.measure.unit.SI.METER);
si.add(javax.measure.unit.SI.METERS_PER_SECOND);
si.add(javax.measure.unit.SI.METERS_PER_SQUARE_SECOND);
si.add(javax.measure.unit.SI.METRE);
si.add(javax.measure.unit.SI.METRES_PER_SECOND);
si.add(javax.measure.unit.SI.METRES_PER_SQUARE_SECOND);
si.add(javax.measure.unit.SI.MILLIMETER);
si.add(javax.measure.unit.SI.MILLIMETRE);
si.add(javax.measure.unit.SI.MOLE);
si.add(javax.measure.unit.SI.NEWTON);
si.add(javax.measure.unit.SI.OHM);
si.add(javax.measure.unit.SI.PASCAL);
si.add(javax.measure.unit.SI.RADIAN);
si.add(javax.measure.unit.SI.SECOND);
si.add(javax.measure.unit.SI.SIEMENS);
si.add(javax.measure.unit.SI.SIEVERT);
si.add(javax.measure.unit.SI.SQUARE_METRE);
si.add(javax.measure.unit.SI.STERADIAN);
si.add(javax.measure.unit.SI.TESLA);
si.add(javax.measure.unit.SI.VOLT);
si.add(javax.measure.unit.SI.WATT);
si.add(javax.measure.unit.SI.WEBER);
si.add(javax.measure.unit.SI.METRE);
return si;
}
public List<JEVisUnit> getSIJEVisUnits() {
if (_siJunit != null) {
return _siJunit;
}
_siJunit = new ArrayList<>();
for (Unit unit : getSIUnits()) {
_siJunit.add(new JEVisUnitImp(unit));
}
return _siJunit;
}
public HashMap<JEVisUnit, String> getNameMapQuantities(Locale local) {
if (_dimNamesJUnit != null) {
return _dimNamesJUnit;
}
_dimNamesJUnit = new HashMap<>();
for (Map.Entry<Unit, String> entry : getNameMapQuantities().entrySet()) {
Unit unit = entry.getKey();
String string = entry.getValue();
_dimNamesJUnit.put(new JEVisUnitImp(unit), string);
}
return _dimNamesJUnit;
}
public HashMap<Unit, String> getNameMapQuantities() {
if (dimNames != null) {
return dimNames;
}
dimNames = new HashMap<>();
dimNames.put(Money.BASE_UNIT, "Currency");
dimNames.put(Acceleration.UNIT, "Acceleration");
dimNames.put(AngularVelocity.UNIT, "Angular Velocity");
dimNames.put(AmountOfSubstance.UNIT, "Amount Of Substance");
dimNames.put(Angle.UNIT, "Angle");
dimNames.put(AngularAcceleration.UNIT, "Angular Acceleration");
dimNames.put(Area.UNIT, "Area");
dimNames.put(CatalyticActivity.UNIT, "Catalytic Activity");
dimNames.put(DataAmount.UNIT, "Data Amount");
dimNames.put(DataRate.UNIT, "Data Rate");
dimNames.put(Dimensionless.UNIT, "Dimensionless");
dimNames.put(Duration.UNIT, "Duration");
dimNames.put(DynamicViscosity.UNIT, "DynamicViscosity");
dimNames.put(ElectricCapacitance.UNIT, "Electric Capacitance");
dimNames.put(ElectricConductance.UNIT, "Electric Conductance");
dimNames.put(ElectricCharge.UNIT, "Electric Charge");
dimNames.put(ElectricCurrent.UNIT, "Electric Current");
dimNames.put(ElectricInductance.UNIT, "Electric Inductance");
dimNames.put(ElectricPotential.UNIT, "Electric Potential");
dimNames.put(ElectricResistance.UNIT, "Electric Resistance");
dimNames.put(Energy.UNIT, "Energy");
dimNames.put(Force.UNIT, "Force");
dimNames.put(Frequency.UNIT, "Frequency");
dimNames.put(Illuminance.UNIT, "Illuminance");
dimNames.put(KinematicViscosity.UNIT, "Kinematic Viscosity");
dimNames.put(Length.UNIT, "Length");
dimNames.put(LuminousFlux.UNIT, "Luminous Flux");
dimNames.put(LuminousIntensity.UNIT, "Luminous Intensity");
dimNames.put(Mass.UNIT, "Mass");
dimNames.put(MagneticFlux.UNIT, "Magnetic Flux");
dimNames.put(MagneticFluxDensity.UNIT, "Magnetic Flux Density");
dimNames.put(MassFlowRate.UNIT, "Mass Flow Rate");
dimNames.put(Power.UNIT, "Power");
dimNames.put(Pressure.UNIT, "Pressure");
dimNames.put(RadiationDoseAbsorbed.UNIT, "Radiation Dose Absorbed");
dimNames.put(RadiationDoseEffective.UNIT, "Radiation Dose Effective");
dimNames.put(RadioactiveActivity.UNIT, "Radioactive Activity");
dimNames.put(SolidAngle.UNIT, "Solid Angle");
dimNames.put(Temperature.UNIT, "Temperature");
dimNames.put(Torque.UNIT, "Torque");
dimNames.put(Velocity.UNIT, "Velocity");
dimNames.put(Volume.UNIT, "Volume");
dimNames.put(VolumetricDensity.UNIT, "Volumetric Density");
dimNames.put(VolumetricFlowRate.UNIT, "Volumetric Flow Rate");
return dimNames;
}
public HashMap<JEVisUnit, String> getNameMap(Locale locale) {
if (_namesJUnit != null) {
return _namesJUnit;
}
_namesJUnit = new HashMap<>();
for (Map.Entry<Unit, String> entry : getNameMap().entrySet()) {
Unit unit = entry.getKey();
String string = entry.getValue();
_namesJUnit.put(new JEVisUnitImp(unit), string);
}
return _namesJUnit;
}
public HashMap<Unit, String> getNameMap() {
if (names != null) {
return names;
}
names = new HashMap<>();
names.put(SI.AMPERE, "Ampere");
names.put(SI.BECQUEREL, "Becquerel");
names.put(SI.BIT, "Bit");
names.put(SI.CANDELA, "Candela");
names.put(SI.CELSIUS, "Celsius");
names.put(SI.CENTIMETER, "Centimeter");
names.put(SI.CENTIMETRE, "Centimetre");
names.put(SI.COULOMB, "Coulomb");
names.put(SI.CUBIC_METRE, "Cubic Metre");
names.put(SI.FARAD, "Farad");
names.put(SI.GRAM, "Gram");
names.put(SI.GRAY, "Gray");
names.put(SI.HENRY, "Henry");
names.put(SI.HERTZ, "Hertz");
names.put(SI.JOULE, "Joule");
names.put(SI.KATAL, "Katal");
names.put(SI.KELVIN, "Kelvin");
names.put(SI.KILOGRAM, "Kilogram");
names.put(SI.KILOMETER, "Kilometer");
names.put(SI.LUMEN, "Lumen");
names.put(SI.LUX, "Lux");
names.put(SI.METER, "Meter");
names.put(SI.METERS_PER_SECOND, "Meters Per Second");
names.put(SI.METERS_PER_SQUARE_SECOND, "Meters Per Square Second");
names.put(SI.MILLIMETRE, "Millimetre");
names.put(SI.MOLE, "Mole");
names.put(SI.NEWTON, "Newton");
names.put(SI.OHM, "Ohm");
names.put(SI.PASCAL, "Pascal");
names.put(SI.RADIAN, "Radian");
names.put(SI.SECOND, "Second");
names.put(SI.SIEMENS, "Siemens");
names.put(SI.SIEVERT, "Sievert");
names.put(SI.SQUARE_METRE, "Square Metre");
names.put(SI.STERADIAN, "Steradian");
names.put(SI.TESLA, "Tesla");
names.put(SI.VOLT, "Volt");
names.put(SI.WATT, "Watt");
names.put(SI.WEBER, "Weber");
//---- NON SI
names.put(NonSI.ANGSTROM, "Angstrom");
names.put(NonSI.ARE, "Are");
names.put(NonSI.ASTRONOMICAL_UNIT, "Astronomical Unit");
names.put(NonSI.ATMOSPHERE, "Atmosphere");
names.put(NonSI.ATOM, "Atom");
names.put(NonSI.ATOMIC_MASS, "Atomic Mass");
names.put(NonSI.BAR, "Bar");
names.put(NonSI.BYTE, "Byte");
names.put(NonSI.C, "C");
names.put(NonSI.CENTIRADIAN, "Centiradian");
names.put(NonSI.COMPUTER_POINT, "Computer Point");
names.put(NonSI.CUBIC_INCH, "Cubic_Inch");
names.put(NonSI.CURIE, "Curie");
names.put(NonSI.DAY, "Day");
names.put(NonSI.DAY_SIDEREAL, "Day_Sidereal");
names.put(NonSI.DECIBEL, "Decibel");
names.put(NonSI.DEGREE_ANGLE, "Degree Angle");
names.put(NonSI.DYNE, "Dyne");
names.put(NonSI.E, "E");
names.put(NonSI.ELECTRON_MASS, "Electron Mass");
names.put(NonSI.ELECTRON_VOLT, "Electron Volt");
names.put(NonSI.ERG, "Erg");
names.put(NonSI.FAHRENHEIT, "Fahrenheit");
names.put(NonSI.FARADAY, "Faraday");
names.put(NonSI.FOOT, "Foot");
names.put(NonSI.FOOT_SURVEY_US, "Foot Survey Us");
names.put(NonSI.FRANKLIN, "Franklin");
names.put(NonSI.G, "G");
names.put(NonSI.GALLON_DRY_US, "Gallon Dry Us");
names.put(NonSI.GALLON_LIQUID_US, "Gallon Liquid US");
names.put(NonSI.GALLON_UK, "Gallon UK");
names.put(NonSI.GAUSS, "Gauss");
names.put(NonSI.GILBERT, "Gilbert");
names.put(NonSI.GRADE, "Grade");
names.put(NonSI.HECTARE, "Hectare");
names.put(NonSI.HORSEPOWER, "Horsepower");
names.put(NonSI.HOUR, "Hour");
names.put(NonSI.INCH, "Inch");
names.put(NonSI.INCH_OF_MERCURY, "Inch Of Mercury");
names.put(NonSI.KILOGRAM_FORCE, "Kilogram Force");
names.put(NonSI.KILOMETERS_PER_HOUR, "Kilometers Per Hour");
names.put(NonSI.KNOT, "Knot");
names.put(NonSI.LAMBERT, "Lambert");
names.put(NonSI.LIGHT_YEAR, "Light Year");
names.put(NonSI.LITER, "Liter");
names.put(NonSI.LITRE, "Litre");
names.put(NonSI.MACH, "Mach");
names.put(NonSI.MAXWELL, "Maxwell");
names.put(NonSI.METRIC_TON, "Metric Ton");
names.put(NonSI.MILE, "Mile");
names.put(NonSI.MILES_PER_HOUR, "Miles Per Hour");
names.put(NonSI.MILLIMETER_OF_MERCURY, "Millimeter Of Mercury");
names.put(NonSI.MINUTE, "Minute");
names.put(NonSI.MINUTE_ANGLE, "Minute Angle");
names.put(NonSI.MONTH, "Month");
names.put(NonSI.NAUTICAL_MILE, "Nautical Mile");
names.put(NonSI.OCTET, "Octet");
names.put(NonSI.OUNCE, "Ounce");
names.put(NonSI.OUNCE_LIQUID_UK, "Ounce Liquid UK");
names.put(NonSI.PARSEC, "Parsec");
names.put(NonSI.PERCENT, "Percent");
names.put(NonSI.PIXEL, "Pixel");
names.put(NonSI.POINT, "Point");
names.put(NonSI.POISE, "Poise");
names.put(NonSI.POUND, "Pound");
names.put(NonSI.POUND_FORCE, "Pound_Force");
names.put(NonSI.RAD, "Rad");
names.put(NonSI.RANKINE, "Rankine");
names.put(NonSI.REM, "Rem");
names.put(NonSI.REVOLUTION, "Revolution");
names.put(NonSI.ROENTGEN, "Roentgen");
names.put(NonSI.RUTHERFORD, "Rutherford");
names.put(NonSI.SECOND_ANGLE, "Second Angle");
names.put(NonSI.SPHERE, "Sphere");
names.put(NonSI.STOKE, "Stoke");
names.put(NonSI.TON_UK, "Ton UK");
names.put(NonSI.TON_US, "Ton US");
names.put(NonSI.WEEK, "Week");
names.put(NonSI.YARD, "Yard");
names.put(NonSI.YEAR, "Year");
names.put(NonSI.YEAR_CALENDAR, "Year Calendar");
names.put(NonSI.YEAR_SIDEREAL, "Year Sidereal");
//Prefix
names.put(SI.ZETTA(Unit.ONE), "Zetta");
names.put(SI.EXA(Unit.ONE), "Exa");
names.put(SI.PETA(Unit.ONE), "Peta");
names.put(SI.TERA(Unit.ONE), "Tera");
names.put(SI.GIGA(Unit.ONE), "Giga");
names.put(SI.MEGA(Unit.ONE), "Mega");
names.put(SI.KILO(Unit.ONE), "Kilo");
names.put(SI.HECTO(Unit.ONE), "Hecto");
names.put(SI.DEKA(Unit.ONE), "Deka");
names.put(SI.DECI(Unit.ONE), "Deci");
names.put(SI.CENTI(Unit.ONE), "Centi");
names.put(SI.MILLI(Unit.ONE), "Milli");
names.put(SI.MICRO(Unit.ONE), "Micro");
names.put(SI.NANO(Unit.ONE), "Nano");
names.put(SI.PICO(Unit.ONE), "Pico");
names.put(SI.FEMTO(Unit.ONE), "Femto");
names.put(SI.ATTO(Unit.ONE), "Atto");
names.put(SI.ZEPTO(Unit.ONE), "Zepto");
names.put(SI.ATTO(Unit.ONE), "Atto");
names.put(SI.YOCTO(Unit.ONE), "Yocto");
//money does not work with the rest of the system. The API will store € but cannot parse it again....
// we have to use Currency + alt symbol :(
names.put(Money.BASE_UNIT.alternate("€"), "Euro");
names.put(Money.BASE_UNIT.alternate("£"), "Pound");
names.put(Money.BASE_UNIT.alternate("$"), "US-Dollar");
names.put(Money.BASE_UNIT.alternate("£"), "Yen");
names.put(Money.BASE_UNIT.alternate("¥"), "Yuan");
names.put(Money.BASE_UNIT.alternate("₦"), "Naira");
names.put(Money.BASE_UNIT.alternate("元"), "Renminbi");
names.put(Money.BASE_UNIT.alternate("₹"), "Rupee");
///--additonal
// name.put
return names;
}
/**
* Ask the JEADPI localization feature for the correct name of the unit.
* Unit is identyfiyed by its symbole(this should be unitq?)
*
* TODO: The functionality is hardcoded in the moment....
*
* @param unit
* @param locale
* @return
*/
public String getUnitName(Unit unit, Locale locale) {
String name = getNameMap().get(unit);
if (name != null && !name.isEmpty()) {
return name;
} else {
return unit.toString();
}
}
public String getUnitName(JEVisUnit unit, Locale locale) {
String name = getNameMap(locale).get(unit);
if (name != null && !name.isEmpty()) {
return name;
} else {
return unit.toString();
}
}
public String getQuantitiesName(JEVisUnit unit, Locale locale) {
String name = getNameMapQuantities(locale).get(unit);
if (name != null && !name.isEmpty()) {
// System.out.println(String.format(" get name for: %s [%s] = %s", unit.toString(), unit.getStandardUnit().toString(), name));
return name;
} else {
return "Dimensionless";
}
}
public String getQuantitiesName(Unit unit, Locale locale) {
String name = getNameMapQuantities().get(unit.getStandardUnit());
if (name != null && !name.isEmpty()) {
// System.out.println(String.format(" get name for: %s [%s] = %s", unit.toString(), unit.getStandardUnit().toString(), name));
return name;
} else {
return "Dimensionless";
}
}
public List<JEVisUnit> getCompatibleNonSIUnit(JEVisUnit unit) {
List<JEVisUnit> units = new ArrayList<>();
for (JEVisUnit other : getNonSIJEVisUnits()) {
if (unit.isCompatible(other)) {
units.add(other);
}
}
return units;
}
public List<Unit> getCompatibleNonSIUnit(Unit unit) {
List<Unit> units = new ArrayList<Unit>();
for (Unit other : getNonSIUnits()) {
if (unit.isCompatible(other)) {
units.add(other);
}
}
return units;
}
public List<Unit> getCompatibleQuantityUnit(Unit unit) {
List<Unit> units = new ArrayList<Unit>();
for (Unit other : getQuantities()) {
if (unit.isCompatible(other)) {
units.add(other);
}
}
return units;
}
public List<JEVisUnit> getCompatibleSIUnit(JEVisUnit unit) {
List<JEVisUnit> units = new ArrayList<>();
for (JEVisUnit other : getSIJEVisUnits()) {
if (unit.isCompatible(other) && !other.equals(unit)) {
units.add(other);
}
}
return units;
}
public List<JEVisUnit> getCompatibleAdditionalUnit(JEVisUnit unit) {
List<JEVisUnit> units = new ArrayList<>();
for (JEVisUnit other : getAdditonalJEVisUnits()) {
// System.out.print(other + " ? ...");
if (unit.isCompatible(other) && !other.equals(unit)) {
// System.out.println("is");
units.add(other);
}
// System.out.println("NOT");
}
return units;
}
public List<Unit> getCompatibleSIUnit(Unit unit) {
List<Unit> units = new ArrayList<Unit>();
for (Unit other : getSIUnits()) {
if (unit.isCompatible(other) && !other.equals(unit)) {
units.add(other);
}
}
return units;
}
public List<Unit> getCompatibleAdditionalUnit(Unit unit) {
List<Unit> units = new ArrayList<Unit>();
// System.out.println("Found add units for: " + unit);
for (Unit other : getAdditonalUnits()) {
// System.out.print(other + " ? ...");
if (unit.getStandardUnit().isCompatible(other) && !other.equals(unit)) {
// System.out.println("is");
units.add(other);
}
// System.out.println("NOT");
}
return units;
}
public List<Unit> getFavoriteQuantitys() {
List<Unit> list = new ArrayList<Unit>();
list.add(Dimensionless.UNIT);
list.add(Energy.UNIT);
list.add(Power.UNIT);
list.add(Temperature.UNIT);
list.add(Volume.UNIT);
list.add(Area.UNIT);
return list;
}
}