/*
* Geotoolkit - An Open Source Java GIS Toolkit
* http://www.geotoolkit.org
*
* (C) 2008 - 2009, Geomatys
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 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
* Lesser General Public License for more details.
*/
package org.geotoolkit.math;
/**
* Exception lancée lorsqu'une extrapolation a
* été effectuée alors que ce n'était pas permis.
*
* @author Martin Desruisseaux
* @version 1.0
* @module
*/
public class ExtrapolationException extends Exception {
/**
* Valeur <var>x</var> pour laquelle une interpolation avait été demandée.
*/
public double xi = Double.NaN;
/**
* Indique la raison pour laquelle il y a eu une extrapolation. La donnée
* demandée peut être en dessous ou au dessus de la plage des <var>x</var>.
* Ce champs contiendra typiquement une des valeurs suivantes:<p>
*
* -1 Indique que le <var>xi</var> demandé précède les données du vecteur des.
* <var>x</var>. Ce serait le cas par exemple si on demandait <var>xi</var>=8
* alors que le vecteur des <var>x</var> contient [9 12 13 16] ou [6 4 2 1].
*
* 0 Cette information n'est pas disponible.
*
* +1 Indique que le <var>xi</var> demandé suit les données du vecteur des
* <var>x</var>. Ce serait le cas par exemple si on demandait <var>xi</var>=8
* alors que le vecteur des <var>x</var> contient [1 2 4 6] ou [16 13 12 9].
*/
public byte raison = 0;
/**
* Index d'une donnée valide. Si <code>raison</code> est négatif, alors cet index sera celui
* de la première donnée valide du vecteur des <var>x</var>. Si <code>raison</code> est positif,
* alors cet index sera celui de la dernière donnée valide du vecteur des <var>x</var>. Si cette
* information ne s'applique pas, cet index sera -1.
*/
public int index = -1;
/**
* Construit une exception déclarant que le vecteur
* des <var>x</var> ne contient pas suffisament de données.
*/
public ExtrapolationException() {
super("Le vecteur des X ne contient pas suffisament de données valides."); // TODO: localize
}
/**
* Construit une exception déclarant que le vecteur des <var>x</var> ne contient pas
* suffisament de données ou que la donnée <var>xi</var> demandée n'est pas valide,
* si celle-ci est un NaN.
*
* @param xi valeur de <var>x</var> pour laquelle on voulait interpoler un <var>y</var>.
*/
public ExtrapolationException(final double xi) {
super(Double.isNaN(xi) ? "Je ne peux pas interpoler à x=NaN." : "Le vecteur des X ne contient pas suffisament de données valides."); // TODO: Localize
this.xi = xi;
}
/**
* Construit un objet déclarant qu'une extrapolation a eu lieu.
*
* @param raison Raison de l'extrapolation (-1, 0 ou +1).
* Voyez la description de {@link #raison}.
*/
public ExtrapolationException(final int raison) {
super("La donnée demandée est en dehors de la plage de valeurs du vecteur des X."); // TODO: Localize
this.raison = (byte) raison;
}
/**
* Construit une exception déclarant qu'une extrapolation a eu lieu.
*
* @param raison Raison de l'extrapolation (-1, 0 ou +1).
* Voyez la description de {@link #raison}.
* @param index index d'une donnée valide.
*/
public ExtrapolationException(final int raison, final int index) {
this(raison);
this.index = index;
}
/**
* Renvoie un message décrivant l'erreur.
*/
@Override
public String getMessage() {
String message = super.getMessage();
return message + " (" + xi + ')'; // TODO: Localize
}
}