package dods.clients.importwizard.TMAP.convert; import java.util.StringTokenizer; /** * A class for conversions between <tt>double</tt> and * <tt>String</tt> along a length axis. The axis will have * a range of acceptable values. This package is designed * to be hooked up with TextInputFields for region specification * on database servers. * * @version 0.1, Sep 03, 1997 * @author Jonathan Callahan * * This class may change substantially when ported to JDK 1.1 which * contains a java.text.Format class. In the future, Convert and its * subclasses may extend that class. * * This software was developed by the Thermal Modeling and Analysis * Project(TMAP) of the National Oceanographic and Atmospheric * Administration's (NOAA) Pacific Marine Environmental Lab(PMEL), * hereafter referred to as NOAA/PMEL/TMAP. * * Access and use of this software shall impose the following * obligations and understandings on the user. The user is granted the * right, without any fee or cost, to use, copy, modify, alter, enhance * and distribute this software, and any derivative works thereof, and * its supporting documentation for any purpose whatsoever, provided * that this entire notice appears in all copies of the software, * derivative works and supporting documentation. Further, the user * agrees to credit NOAA/PMEL/TMAP in any publications that result from * the use of this software or in any product that includes this * software. The names TMAP, NOAA and/or PMEL, however, may not be used * in any advertising or publicity to endorse or promote any products * or commercial entity unless specific written permission is obtained * from NOAA/PMEL/TMAP. The user also understands that NOAA/PMEL/TMAP * is not obligated to provide the user with any support, consulting, * training or assistance of any kind with regard to the use, operation * and performance of this software nor to provide the user with any * updates, revisions, new versions or "bug fixes". * * THIS SOFTWARE IS PROVIDED BY NOAA/PMEL/TMAP "AS IS" AND ANY EXPRESS * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL NOAA/PMEL/TMAP BE LIABLE FOR ANY SPECIAL, * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF * CONTRACT, NEGLIGENCE OR OTHER TORTUOUS ACTION, ARISING OUT OF OR IN * CONNECTION WITH THE ACCESS, USE OR PERFORMANCE OF THIS SOFTWARE. * */ public class ConvertLength extends Convert { /** * The strings recognized as valid units. (always lower case) * */ private String recognizedUnits[] = { "m", "meter", "meters" }; /** * Creates a <B>Convert</B> object. * */ public ConvertLength() { } /** * Converts a <tt>String<tt> value to a <tt>double<tt>. * * @param s the string to be converted. */ public double toDouble(String s) throws IllegalArgumentException { StringTokenizer st, check; String val_s, unit_s; String len_s = new String(s); // so we don't corrupt s double len = 0; len_s = len_s.trim(); len_s = len_s.toUpperCase(); // this hack makes sure we only // have "good" characters check = new StringTokenizer(len_s," +-.0123456789",false); if (check.countTokens() > 0) throw new IllegalArgumentException("Bad character in string: \"" + s + "\"."); // break up by spaces st = new StringTokenizer(len_s," ",false); switch(st.countTokens()) { // only one token: check the value, assume default units // case (1): val_s = st.nextToken(); try { len = Double.valueOf(val_s).doubleValue(); } catch (NumberFormatException e) { throw new IllegalArgumentException(e.toString()); } break; // two tokens: check the value and check the units // case (2): val_s = st.nextToken(); unit_s = st.nextToken(); unitTest(unit_s); try { len = Double.valueOf(val_s).doubleValue(); } catch (NumberFormatException e) { throw new IllegalArgumentException(e.toString()); } break; default: throw new IllegalArgumentException("Too many spaces in input: \"" + s + "\"."); } // Now check the range // try { len = rangeTest(len); } finally { ; } return len; } /** * Converts a <tt>double<tt> value to a <tt>String<tt>. * * @param val the string to be converted. * @return String the value converted to a String. */ public String toString(double val) throws IllegalArgumentException { StringBuffer sbuf = new StringBuffer(""); try { val = rangeTest(val); } finally { ; } sbuf.append(val); return sbuf.toString(); } }