Unit
class.
* This skeleton will be removed when the real classes from
* JSR-108: Units specification will be publicly available.
*/
package org.geotools.units;
// Entrés/sorties
import java.io.ObjectStreamException;
import java.io.Serializable;
import org.geotools.resources.Utilities;
import org.geotools.util.WeakHashSet;
/**
* Représente une transformation entre deux unités. Par convention, tout
* les objets UnitTransform
sont toujours imutables. Il est
* donc sécuritaire de partager plusieurs références vers le même objet.
*
* @source $URL$
* @version 1.0
* @author Martin Desruisseaux
*
* @deprecated Replaced by the {@link javax.units.Unit} framework.
*/
public abstract class UnitTransform implements Serializable {
/**
* Serial number for interoperability with different versions.
*/
private static final long serialVersionUID = 59496814325077015L;
/**
* Banque des objets qui ont été précédemment créés et
* enregistrés par un appel à la méthode {@link #intern}.
*/
private static final WeakHashSet pool=Prefix.pool;
/**
* Unité selon laquelle seront
* exprimées les valeurs initiales.
*/
public final Unit fromUnit;
/**
* Unité selon laquelle seront
* exprimées les valeurs finales.
*/
public final Unit toUnit;
/**
* Construit un objet qui aura la charge de convertir
* des données exprimées selon les unités spécifiées.
*/
/*protected*/ UnitTransform(final Unit fromUnit, final Unit toUnit) {
this.fromUnit = fromUnit;
this.toUnit = toUnit;
}
/**
* Indique si cette transformation affine représente une transformation idéntitée.
* L'implémentation par défaut retourne toUnit.equalsIgnoreSymbol(fromUnit)
.
*/
public boolean isIdentity() {
return toUnit.equalsIgnoreSymbol(fromUnit);
}
/**
* Effectue la conversion d'unités d'une valeur.
* @param value Valeur exprimée selon les unités {@link #fromUnit}.
* @return Valeur exprimée selon les unités {@link #toUnit}.
*/
public abstract double convert(double value);
/**
* Effectue la conversion d'unités d'un tableaux de valeurs.
* L'implémentation par défaut appelle {@link #convert(double)}
* dans une boucle. Les classes dérivées devraient redéfinir cette
* méthode avec une implémentation plus efficace.
*
* @param values Valeurs exprimées selon les unités {@link #fromUnit}.
* Elles seront converties sur place en valeurs exprimées selon
* les unités {@link #toUnit}.
*/
public void convert(final double[] values) {
for (int i=0; iintern
* est appellée, elle recherchera une transformation égale à this
* au sens de la méthode {@link #equals}. Si une telle transformation fut trouvée,
* elle sera retournée. Sinon, la trsnsformation this
sera ajoutée à
* la banque de données en utilisant une référence faible et cette méthode retournera
* this
.
*
* De cette méthode il s'ensuit que pour deux transformations u et v,
* la condition u.intern()==v.intern()
sera vrai si et seulement si
* u.equals(v)
est vrai.
UnitTransform[km/h --> m/s]
*/
public String toString() {
return Utilities.getShortClassName(this)+'['+fromUnit+" --> "+toUnit+']';
}
/**
* Après la lecture d'une transformation, vérifie si cette transformation apparaît
* déjà dans la banque des unités pool
. Si oui, l'exemplaire de la banque
* sera retourné plutôt que de garder inutilement la transformation courante comme
* copie.
*/
final Object readResolve() throws ObjectStreamException {
return intern();
}
}