/*
* Units - Temporary implementation for Geotools 2
* Copyright (C) 1998 University Corporation for Atmospheric Research (Unidata)
* 1998 Bill Hibbard & al. (VisAD)
* 1999 Pêches et Océans Canada
* 2000 Institut de Recherche pour le Développement
* 2002 Centre for Computational Geography
*
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library 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
* Library General Public License for more details (http://www.gnu.org/).
*
*
* This package is inspired from the units package of VisAD.
* Unidata and Visad's work is fully acknowledged here.
*
* THIS IS A TEMPORARY CLASS
*
* This is a placeholder for future Unit
class.
* This skeleton will be removed when the real classes from
* JSR-108: Units specification will be publicly available.
*/
package org.geotools.units;
// Divers
import org.geotools.resources.units.Units;
/**
* Classe de base pour les unités fondamentales ({@link BaseUnit}) ou les
* unités dérivées ({@link DerivedUnit}). Aucune autre sous-classe n'est permise. Les objets
* SimpleUnit
représentent donc toujours une combinaison d'unités fondamentales,
* sans facteur multiplicatif ni constante ajoutée.
*
* @version 1.0
* @author Martin Desruisseaux
*
* @deprecated Replaced by the {@link javax.units.Unit} framework.
*/
/*public*/
abstract class SimpleUnit extends Unit {
/**
* Serial number for interoperability with different versions.
*/
private static final long serialVersionUID = -1702845175242358392L;
/**
* La quantité de cette unité. Cette quantité peut être par exemple
* "mass" pour les kilogramme ou "speed" pour les mètres par seconde),
* ou null
si elle n'est pas connue.
*/
final String quantityName;
/**
* Construit des unités représentées
* par le ou les symboles spécifiés.
*/
SimpleUnit(final String quantityName, final String symbol, final PrefixSet prefix) {
super(symbol, prefix);
this.quantityName=quantityName;
}
/**
* Retourne la quantité que représente cette unité. Les quantités sont des chaînes de
* caractères qui décrivent le paramètre physique mesuré, comme "mass" ou "speed". Si
* aucune quantité n'est définie pour cette unité, retourne null
.
*/
public final String getQuantityName() {
return quantityName;
}
/**
* Retourne le nom de l'unité dans la langue de l'utilisateur.
* Par exemple le symbole "kg" sera traduit par "kilogramme"
* dans la langue française. Si aucun nom n'est disponible
* pour l'unité courante, retourne simplement son symbole.
*/
public String getLocalizedName() {
String unpref=getUnprefixedSymbol();
if (prefix!=null && symbol.endsWith(unpref)) {
final Prefix p=prefix.getPrefix(symbol.substring(0, symbol.length()-unpref.length()));
if (p!=null) {
return p.getLocalizedName()+Units.localize(unpref);
}
}
return super.getLocalizedName();
}
/**
* Retourne le symbole {@link #symbol} sans son préfix. L'implémentation par défaut
* retourne {@link #symbol}, ce qui est correct pour la presque totalité des unités
* des classes {@link BaseUnit} et {@link DerivedUnit}. Dans le système SI, la seule
* exception notable (qui justifie à elle seule l'existence de cette méthode) est le
* kilogramme (symbole "kg"). Dans ce dernier cas, le symbole sans préfix est "g".
*/
String getUnprefixedSymbol() {
return symbol;
}
/**
* Élève ces unités à une puissance entière. Contrairement à la méthode
* {@link Unit#pow}, cette méthode ne lance jamais d'exception puisque
* cette opération est toujours définie pour les unités fondamentales
* ou dérivées.
*
* Note: Si JavaSoft donne suite aux RFE 4144488 ou 4106143,
* alors la signature de cette méthode sera modifiée pour retourner
* explicitement un objet SimpleUnit
.
*
* @param power La puissance à laquelle élever cette unité.
* @return Les unités résultant de l'élévation des unités
* this
à la puissance power
.
*
* @see #multiply
* @see #divide
* @see #scale
* @see #shift
*/
public abstract Unit pow(int power); // CAST
final Unit inverseMultiply (final ScaledUnit that) throws UnitException {return ScaledUnit.getInstance(that.amount, (SimpleUnit) that.unit.multiply(this));}
abstract /*Simple*/Unit inverseMultiply (final BaseUnit that) throws UnitException; // CAST
abstract /*Simple*/Unit inverseMultiply (final DerivedUnit that) throws UnitException; // CAST
final Unit inverseDivide (final ScaledUnit that) throws UnitException {return ScaledUnit.getInstance(that.amount, (SimpleUnit) that.unit.divide(this));}
abstract /*Simple*/Unit inverseDivide (final BaseUnit that) throws UnitException; // CAST
abstract /*Simple*/Unit inverseDivide (final DerivedUnit that) throws UnitException; // CAST
abstract UnitTransform getTransform (final BaseUnit fromUnit) throws UnitException;
abstract UnitTransform getTransform (final DerivedUnit fromUnit) throws UnitException;
abstract UnitTransform getInverseTransform(final BaseUnit toUnit) throws UnitException;
abstract UnitTransform getInverseTransform(final DerivedUnit toUnit) throws UnitException;
/**
* Crée une nouvelle unité proportionnelle à cette unité. Par exemple
* pour convertir en kilomètres des mesures exprimées en mètres, il
* faut les diviser par 1000. On peut exprimer cette relation par le
* code Unit km=metre.scale(1000)
.
*
* @param amount Facteur par lequel il faudra diviser les valeurs
* exprimées selon ces unités pour obtenir des valeurs
* exprimées selon les nouvelles unités.
* @return Les nouvelles unités.
*
* @see #pow
* @see #multiply
* @see #divide
* @see #shift
*/
public final Unit scale(final double amount) {
return ScaledUnit.getInstance(amount, this);
}
/**
* Crée une nouvelle unité décalée par rapport à cette unité. Par exemple
* pour convertir des degrés Kelvin en degrés Celsius, il faut soustraire
* 273.15 aux degrés Kelvin. On peut exprimer cette relation par le code
* Unit celsius=kelvin.shift(273.15)
.
*
* @param offset Constante à soustraire aux valeurs exprimées selon ces
* unités pour obtenir des valeurs exprimées selon les nouvelles
* unités.
* @return Les nouvelles unités.
*
* @see #pow
* @see #multiply
* @see #divide
* @see #scale
*/
public final Unit shift(final double offset) {
return OffsetUnit.getInstance(offset, this);
}
}