001package org.hl7.fhir.exceptions;
002
003import org.hl7.fhir.utilities.SourceLocation;
004import org.hl7.fhir.utilities.Utilities;
005
006/*
007  Copyright (c) 2011+, HL7, Inc.
008  All rights reserved.
009  
010  Redistribution and use in source and binary forms, with or without modification, 
011  are permitted provided that the following conditions are met:
012    
013   * Redistributions of source code must retain the above copyright notice, this 
014     list of conditions and the following disclaimer.
015   * Redistributions in binary form must reproduce the above copyright notice, 
016     this list of conditions and the following disclaimer in the documentation 
017     and/or other materials provided with the distribution.
018   * Neither the name of HL7 nor the names of its contributors may be used to 
019     endorse or promote products derived from this software without specific 
020     prior written permission.
021  
022  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 
023  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
024  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
025  IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 
026  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
027  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 
028  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
029  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
030  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
031  POSSIBILITY OF SUCH DAMAGE.
032  
033 */
034
035
036
037public class PathEngineException extends FHIRException {
038
039  private static final long serialVersionUID = 31969342112856390L;
040  private SourceLocation location;
041  private String expression;
042  
043        public PathEngineException() {
044                super();
045        }
046
047  public PathEngineException(String message, Throwable cause) {
048    super(message, cause);
049  }
050
051  public PathEngineException(String message) {
052    super(message);
053  }
054
055  public PathEngineException(String message, SourceLocation location, String expression, Throwable cause) {
056    super(message+rep(location, expression), cause);
057  }
058
059  public PathEngineException(String message, SourceLocation location, String expression) {
060    super(message+rep(location, expression));
061  }
062
063        private static String rep(SourceLocation loc, String expr) {
064          if (loc != null) {
065            if (loc.getLine() == 1) {
066              return " (@char "+loc.getColumn()+")";
067            } else { 
068              return " (@line "+loc.getLine()+" char "+loc.getColumn()+")";
069            }
070          } else if (Utilities.noString(expr)) { // can happen in some contexts...
071            return " (@~"+expr+")";
072          } else {
073            return "";
074          }
075  }
076
077  public PathEngineException(Throwable cause) {
078                super(cause);
079        }
080
081  public String getExpression() {
082    return expression;
083  }
084
085  public void setExpression(String expression) {
086    this.expression = expression;
087  }
088
089  public SourceLocation getLocation() {
090    return location;
091  }
092
093  public void setLocation(SourceLocation location) {
094    this.location = location;
095  }
096
097}