/**
*
*/
package org.goko.core.common.measure.quantity;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.goko.core.common.measure.converter.MultiplyConverter;
import org.goko.core.common.measure.dimension.QuantityDimension;
import org.goko.core.common.measure.units.BaseUnit;
import org.goko.core.common.measure.units.TransformedUnit;
import org.goko.core.common.measure.units.Unit;
/**
* @author PsyKo
* @date 15 janv. 2016
*/
public class AngleUnit {
/** The map of known units */
private static Map<String, Unit<Angle>> mapUnitBySymbol = new HashMap<String, Unit<Angle>>();
/**
* The SI base unit for angle quantities (standard name <code>rad</code>).
* An angle's measurement in radians is numerically equal to the length of a corresponding arc of a unit circle,
*/
public static final BaseUnit<Angle> RADIAN = add(new BaseUnit<Angle>("rad", QuantityDimension.ANGLE));
/**
* Degrees (angular degrees, symbol � )
*/
public static final TransformedUnit<Angle> DEGREE_ANGLE = add(new TransformedUnit<Angle>("°", RADIAN, new MultiplyConverter(BigDecimal.valueOf(Math.PI).divide(new BigDecimal("180"), RoundingMode.HALF_UP))));
/**
* Registers a Unit to the map of handled units
* @param unit the unit to register
* @return the registered unit
*/
private static <T extends Unit<Angle>> T add(T unit){
mapUnitBySymbol.put(unit.getSymbol(), unit);
return unit;
}
/**
* Get the list of known units
* @return the list of known units
*/
public static List<Unit<Angle>> getAll(){
return new ArrayList<Unit<Angle>>(mapUnitBySymbol.values());
}
}