/* * 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; // Entrés/sorties /** * Une transformation d'unités qui représente la * combinaison de deux autres transformations. * * @source $URL$ * @version 1.0 * @author Martin Desruisseaux * * @deprecated Replaced by the {@link javax.units.Unit} framework. */ final class CompoundTransform extends UnitTransform { /** * Serial number for interoperability with different versions. */ private static final long serialVersionUID = 6193871497550654092L; /** * Première transformation à * appliquer lors des conversions. */ private final UnitTransform transform1; /** * Deuxième transformation à * appliquer lors des conversions. */ private final UnitTransform transform2; /** * Construit une transformation qui représente la combinaison de transform1 avec transform2. * Les unités seront converties de transform1.fromUnit vers transform2.toUnit en appliquant * d'abord la transformation transform1, puis la transformation code>transform2. */ private CompoundTransform(final UnitTransform transform1, final UnitTransform transform2) { super(transform1.fromUnit, transform2.toUnit); this.transform1 = transform1; this.transform2 = transform2; } /** * Retourne une transformation qui représente la combinaison de transform1 avec transform2. * Les unités seront converties de transform1.fromUnit vers transform2.toUnit en appliquant * d'abord la transformation transform1, puis la transformation code>transform2. * * @param transform1 Première transformation à appliquer. * @param transform2 Deuxième transformation à appliquer. * @return Une combinaison des deux transformations spécifiées. Si un des arguments * est une transformation identitée, l'autre transformation sera retournée. */ public static UnitTransform getInstance(final UnitTransform transform1, final UnitTransform transform2) { if (transform1.isIdentity()) return transform2; if (transform2.isIdentity()) return transform1; return new CompoundTransform(transform1, transform2).intern(); } /** * 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 double convert(final double value) { return transform2.convert(transform1.convert(value)); } /** * Effectue la conversion d'unités d'un tableaux de valeurs. * @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) { transform1.convert(values); transform2.convert(values); } /** * Effectue la conversion d'unités d'un tableaux de valeurs. * @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 float[] values) { transform1.convert(values); transform2.convert(values); } /** * Effectue la conversion inverse d'unités d'une valeur. * @param value Valeur exprimée selon les unités {@link #toUnit}. * @return Valeur exprimée selon les unités {@link #fromUnit}. */ public double inverseConvert(final double value) { return transform1.inverseConvert(transform2.inverseConvert(value)); } /** * Effectue la conversion inverse d'unités d'un tableaux de valeurs. * @param values Valeurs exprimées selon les unités {@link #toUnit}. * Elles seront converties sur place en valeurs exprimées selon * les unités {@link #fromUnits}. */ public void inverseConvert(final double[] values) { transform2.inverseConvert(values); transform1.inverseConvert(values); } /** * Effectue la conversion inverse d'unités d'un tableaux de valeurs. * @param values Valeurs exprimées selon les unités {@link #toUnit}. * Elles seront converties sur place en valeurs exprimées selon * les unités {@link #fromUnit}. */ public void inverseConvert(final float[] values) { transform2.inverseConvert(values); transform1.inverseConvert(values); } /** * Indique si cette transformation est * identique à la transformation spécifiée. */ public boolean equals(final Object o) { if (super.equals(o)) { final CompoundTransform t=(CompoundTransform) o; return transform1.equals(t.transform1) && transform2.equals(t.transform2); } return false; } }