public final class UnitDatabase
extends java.lang.Object
Constructor and Description |
---|
UnitDatabase()
Creates the
UnitsDatabase . |
Modifier and Type | Method and Description |
---|---|
void |
addDimension(java.lang.String name,
ObjectProduct<BaseDimension> dimension)
Adds a unit dimension to the database.
|
void |
addPrefix(java.lang.String name,
UnitPrefix prefix)
Adds a unit prefix to the database.
|
void |
addUnit(java.lang.String name,
Unit unit)
Adds a unit to the database.
|
boolean |
containsDimensionName(java.lang.String name)
Tests if the database has a unit dimension with this name.
|
boolean |
containsPrefixName(java.lang.String name)
Tests if the database has a unit prefix with this name.
|
boolean |
containsUnitName(java.lang.String name)
Tests if the database has a unit with this name, taking prefixes into consideration
|
java.util.Map<java.lang.String,ObjectProduct<BaseDimension>> |
dimensionMap() |
ObjectProduct<BaseDimension> |
getDimension(java.lang.String name)
Gets a unit dimension from the database using its name.
|
ObjectProduct<BaseDimension> |
getDimensionFromExpression(java.lang.String expression)
Uses the database's data to parse an expression into a unit dimension
|
UnitPrefix |
getPrefix(java.lang.String name)
Gets a unit prefix from the database from its name
|
UnitPrefix |
getPrefixFromExpression(java.lang.String expression)
Gets a unit prefix from a prefix expression
|
Unit |
getUnit(java.lang.String name)
Gets a unit from the database from its name, looking for prefixes.
|
Unit |
getUnitFromExpression(java.lang.String expression)
Uses the database's unit data to parse an expression into a unit
|
void |
loadDimensionFile(java.io.File file)
Adds all dimensions from a file, using data from the database to parse them.
|
void |
loadUnitsFile(java.io.File file)
Adds all units from a file, using data from the database to parse them.
|
java.util.Map<java.lang.String,UnitPrefix> |
prefixMap() |
java.lang.String |
toString() |
java.util.Map<java.lang.String,Unit> |
unitMap()
Returns a map mapping unit names to units, including units with prefixes.
|
java.util.Map<java.lang.String,Unit> |
unitMapPrefixless() |
public UnitDatabase()
UnitsDatabase
.public void addDimension(java.lang.String name, ObjectProduct<BaseDimension> dimension)
name
- dimension's namedimension
- dimension to addjava.lang.NullPointerException
- if name or dimension is nullpublic void addPrefix(java.lang.String name, UnitPrefix prefix)
name
- prefix's nameprefix
- prefix to addjava.lang.NullPointerException
- if name or prefix is nullpublic void addUnit(java.lang.String name, Unit unit)
name
- unit's nameunit
- unit to addjava.lang.NullPointerException
- if unit is nullpublic boolean containsDimensionName(java.lang.String name)
name
- name to testpublic boolean containsPrefixName(java.lang.String name)
name
- name to testpublic boolean containsUnitName(java.lang.String name)
name
- name to testpublic java.util.Map<java.lang.String,ObjectProduct<BaseDimension>> dimensionMap()
public ObjectProduct<BaseDimension> getDimension(java.lang.String name)
This method accepts exponents, like "L^3"
name
- dimension's namepublic ObjectProduct<BaseDimension> getDimensionFromExpression(java.lang.String expression)
The expression is a series of any of the following:
expression
- expression to parsejava.lang.IllegalArgumentException
- if the expression cannot be parsedjava.lang.NullPointerException
- if expression is nullpublic UnitPrefix getPrefix(java.lang.String name)
name
- prefix's namepublic UnitPrefix getPrefixFromExpression(java.lang.String expression)
Currently, prefix expressions are much simpler than unit expressions: They are either a number or the name of another prefix
expression
- expression to inputjava.lang.IllegalArgumentException
- if expression cannot be parsedjava.lang.NullPointerException
- if any argument is nullpublic Unit getUnit(java.lang.String name)
name
- unit's namepublic Unit getUnitFromExpression(java.lang.String expression)
The expression is a series of any of the following:
expression
- expression to parsejava.lang.IllegalArgumentException
- if the expression cannot be parsedjava.lang.NullPointerException
- if expression is nullpublic void loadDimensionFile(java.io.File file)
Each line in the file should consist of a name and an expression (parsed by getDimensionFromExpression) separated by any number of tab characters.
Allowed exceptions:
file
- file to readjava.lang.IllegalArgumentException
- if the file cannot be parsed, found or readjava.lang.NullPointerException
- if file is nullpublic void loadUnitsFile(java.io.File file)
Each line in the file should consist of a name and an expression (parsed by getUnitFromExpression) separated by any number of tab characters.
Allowed exceptions:
file
- file to readjava.lang.IllegalArgumentException
- if the file cannot be parsed, found or readjava.lang.NullPointerException
- if file is nullpublic java.util.Map<java.lang.String,UnitPrefix> prefixMap()
public java.lang.String toString()
toString
in class java.lang.Object
public java.util.Map<java.lang.String,Unit> unitMap()
The returned map is infinite in size if there is at least one unit and at least one prefix. If it is infinite,
some operations that only work with finite collections, like converting name/entry sets to arrays, will throw an
IllegalStateException
.
Specifically, the operations that will throw an IllegalStateException if the map is infinite in size are:
unitMap.entrySet().toArray()
(either overloading)unitMap.keySet().toArray()
(either overloading)
Because of ambiguities between prefixes (i.e. kilokilo = mega), the map's containsValue
and values()
methods currently ignore prefixes.
public java.util.Map<java.lang.String,Unit> unitMapPrefixless()