uk.me.nxg.unity
Class OneUnit

java.lang.Object
  extended by uk.me.nxg.unity.OneUnit

public class OneUnit
extends Object

A single unit. This is represented as a prefix, a base unit and an exponent. For example, the string "mm s^-2" will result in two OneUnit instances, one of which will have a base unit of "m" and a prefix power of -3, and the other of which will have a base unit of "s" and an exponent of -2.

This represents the abstract unit, shorn of the symbols which were parsed to obtain it. Thus if, in some odd syntax, the symbol 'x' were used to denote metres, then the OneUnit instance which resulted would be the same as the OneUnit which resulted from a more conventional syntax.

Also, there is a potential ambiguity if a symbol is recognised in one syntax, but not in another. Thus if the string 'erg' were parsed in a syntax which didn't recognise that, then it would be stored as just that, an unrecognised symbol, not associated with the UnitDefinition for the erg.

The class's instances are immutable.


Method Summary
 boolean equals(Object o)
          Two units are equal if they have the same power, units and exponent.
 UnitDefinition getBaseUnitDefinition()
          Returns the known base unit.
 String getBaseUnitName()
          Returns the name of this unit.
 Dimensions getDimensions()
          Return the dimensions of the unit, if it is a recognised one.
 double getExponent()
          Obtains the power the unit is raised to.
 double getPower()
          Returns the power to which this unit is raised.
 int getPrefix()
          Returns the prefix of the unit, as a base-ten log.
 int hashCode()
           
 boolean isRecognisedUnit(String syntax)
          Indicates whether the base unit is one of those recognised within the specification of the given syntax.
 boolean isRecommendedUnit(String syntax)
          Indicates whether the base unit is one of those recommended within the specification of the given syntax.
 boolean satisfiesUsageConstraints(String syntax)
          Indicates whether the unit is being used in a way which satisfies any usage constraints.
 String toDebugString()
          Write out the unit in a testable format.
 String toString()
          Format this unit in some sort of canonical form.
 String unitString()
          Obtains the string form of the unit, including prefix, with a default syntax.
 String unitString(String syntaxName)
          Obtains the string representation of the unit, including prefix, in the given syntax.
 
Methods inherited from class java.lang.Object
getClass, notify, notifyAll, wait, wait, wait
 

Method Detail

equals

public boolean equals(Object o)
Two units are equal if they have the same power, units and exponent. They don't have to have been obtained from the same syntax, so that in a syntax which (for example) permitted both "yr" and "a" for years, two OneUnit instances, obtained from parsing the two alternatives, would be regarded as equal.

Overrides:
equals in class Object

hashCode

public int hashCode()
Overrides:
hashCode in class Object

getPrefix

public int getPrefix()
Returns the prefix of the unit, as a base-ten log. Thus a prefix of "m", for "milli", would produce a prefix of -3.


getPower

public double getPower()
Returns the power to which this unit is raised. A unit of "mm^3" would return 3.0, and "m^(-1/2)" would return -0.5.


toString

public String toString()
Format this unit in some sort of canonical form. The form is unspecified. This should not generally be used for formatted output -- for that, it will generally be more appropriate to use UnitExpr.toString().

Overrides:
toString in class Object

unitString

public String unitString(String syntaxName)
                  throws UnitParserException
Obtains the string representation of the unit, including prefix, in the given syntax. That is, return 'mm' not 'm' or 'metre'.

Parameters:
syntaxName - one of the syntaxes of UnitParser
Returns:
a non-null string representation of the unit
Throws:
UnitParserException - if the syntax is unrecognised

getBaseUnitDefinition

public UnitDefinition getBaseUnitDefinition()
Returns the known base unit. If the unit wasn't recognised as a known unit in the syntax in which the string was parsed, then this returns null, though getBaseUnitString() will not.

Note that the 'base unit' is simply the unit without the prefix, and doesn't refer to the fundamental SI base units. Thus in the expression "MW", it is 'W', Watt, that is the base unit.


getBaseUnitName

public String getBaseUnitName()
Returns the name of this unit. If the unit is a known one, then this will return a name for the unit such as 'Metre', or 'Julian year'; if it is not, then this can do no more than return the unit symbol.


getDimensions

public Dimensions getDimensions()
Return the dimensions of the unit, if it is a recognised one. If this isn't a recognised unit, return null.

Returns:
the dimensions of the unit, or null if these aren't avaiable

unitString

public String unitString()
Obtains the string form of the unit, including prefix, with a default syntax. That is, return 'mm' not 'm'.

The default syntax is (currently) the syntax with which this unit was originally read.


getExponent

public double getExponent()
Obtains the power the unit is raised to. For example, for the unit 'mm^2', return 2.


isRecognisedUnit

public boolean isRecognisedUnit(String syntax)
Indicates whether the base unit is one of those recognised within the specification of the given syntax. In this context, "recognised" means "mentioned in the specification", so deprecated units count as recognised ones.

Note that this checks that the unit is a recommended one: we don't (currently) check whether the abbreviation that got us here is a recommended one (for example, "pixel" is a valid FITS/CDS name for pixels, and "pix" is a FITS and OGIP one).

Parameters:
syntax - one of the syntaxes of UnitParser
See Also:
isRecommendedUnit(java.lang.String)

isRecommendedUnit

public boolean isRecommendedUnit(String syntax)
Indicates whether the base unit is one of those recommended within the specification of the given syntax. In this context, "recommended" means "mentioned in the specification" and not deprecated.

Note that this checks that the unit is a recommended one: we don't (currently) check whether the abbreviation that got us here is a recommended one (for example, "pixel" is a valid FITS/CDS name for pixels, and "pix" is a FITS and OGIP one).

Parameters:
syntax - one of the syntaxes of UnitParser
See Also:
isRecognisedUnit(java.lang.String)

satisfiesUsageConstraints

public boolean satisfiesUsageConstraints(String syntax)
Indicates whether the unit is being used in a way which satisfies any usage constraints. Principally, this tests whether a unit which may not be used with SI prefixes was provided with a prefix, but there may be other constraints present.

An unrecognised unit has no constraints, and so will always satisfy them; this extends to units which are unrecognised in a particular syntax.

Parameters:
syntax - one of the syntaxes of UnitParser

toDebugString

public String toDebugString()
Write out the unit in a testable format. This is for debugging and testing.