001/* 002 * Units of Measurement API 003 * Copyright (c) 2014-2015, Jean-Marie Dautelle, Werner Keil, V2COM. 004 * 005 * All rights reserved. 006 * 007 * Redistribution and use in source and binary forms, with or without modification, 008 * are permitted provided that the following conditions are met: 009 * 010 * 1. Redistributions of source code must retain the above copyright notice, 011 * this list of conditions and the following disclaimer. 012 * 013 * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions 014 * and the following disclaimer in the documentation and/or other materials provided with the distribution. 015 * 016 * 3. Neither the name of JSR-363 nor the names of its contributors may be used to endorse or promote products 017 * derived from this software without specific prior written permission. 018 * 019 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 020 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 021 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 022 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 023 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 024 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 025 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 026 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 027 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 028 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 029 */ 030package javax.measure.format; 031 032import javax.measure.MeasurementException; 033 034/** 035 * Signals that an error has been reached unexpectedly while parsing. 036 * 037 * @author Werner Keil 038 * @version 0.4, $Date: 2014-08-04 $ 039 */ 040public class ParserException extends MeasurementException { 041 042 /** 043 * 044 */ 045 private static final long serialVersionUID = -3179553925611520368L; 046 047 /** 048 * The zero-based character position in the string being parsed at which the 049 * error was found while parsing. 050 * 051 * @serial 052 */ 053 private int position; 054 055 /** The original input data. */ 056 private CharSequence data; 057 058 /** 059 * Constructs a ParserException with the specified detail message, 060 * parsed text and index. A detail message is a String that describes this 061 * particular exception. 062 * 063 * @param message 064 * the detail message 065 * @param parsedData 066 * the parsed text, should not be null 067 * @param position 068 * the position where the error was found while parsing. 069 */ 070 public ParserException(String message, CharSequence parsedData, 071 int position) { 072 super(message); 073 this.data = parsedData; 074 this.position = position; 075 } 076 077 /** 078 * Constructs a ParserException with the parsed text and offset. A 079 * detail message is a String that describes this particular exception. 080 * 081 * @param parsedData 082 * the parsed text, should not be null 083 * @param errorIndex 084 * the position where the error is found while parsing. 085 */ 086 public ParserException(CharSequence parsedData, 087 int errorIndex) { 088 super("Parse Error"); 089 this.data = parsedData; 090 this.position = errorIndex; 091 } 092 093 /** 094 * Constructs a ParserException with the specified cause. 095 * 096 * @param cause 097 * the root cause 098 */ 099 public ParserException(Throwable cause) { 100 super(cause); 101 } 102 103 /** 104 * Returns the position where the error was found. 105 * 106 * @return the position of the error 107 */ 108 public int getPosition() { 109 return position; 110 } 111 112 /** 113 * Returns the string that was being parsed. 114 * 115 * @return the parsed string, or {@code null}, if {@code null} was passed as 116 * input. 117 */ 118 public String getParsedString() { 119 if (data == null) 120 return null; 121 return data.toString(); 122 } 123 124}