001 /* 002 * JBoss, Home of Professional Open Source. 003 * Copyright 2008, Red Hat Middleware LLC, and individual contributors 004 * as indicated by the @author tags. See the copyright.txt file in the 005 * distribution for a full listing of individual contributors. 006 * 007 * This is free software; you can redistribute it and/or modify it 008 * under the terms of the GNU Lesser General Public License as 009 * published by the Free Software Foundation; either version 2.1 of 010 * the License, or (at your option) any later version. 011 * 012 * This software is distributed in the hope that it will be useful, 013 * but WITHOUT ANY WARRANTY; without even the implied warranty of 014 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 015 * Lesser General Public License for more details. 016 * 017 * You should have received a copy of the GNU Lesser General Public 018 * License along with this software; if not, write to the Free 019 * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 020 * 02110-1301 USA, or see the FSF site: http://www.fsf.org. 021 */ 022 package org.jboss.dna.graph.properties; 023 024 import org.jboss.dna.graph.Location; 025 026 /** 027 * @author Randall Hauch 028 */ 029 public class PathNotFoundException extends RuntimeException { 030 031 /** 032 */ 033 private static final long serialVersionUID = -3703984046286975978L; 034 035 private final Location location; 036 private final Path lowestAncestorThatDoesExist; 037 038 /** 039 * @param location the location of the node that does not exist 040 * @param lowestAncestorThatDoesExist the path of the lowest (closest) ancestor that does exist 041 */ 042 public PathNotFoundException( Location location, 043 Path lowestAncestorThatDoesExist ) { 044 this.location = location; 045 this.lowestAncestorThatDoesExist = lowestAncestorThatDoesExist; 046 } 047 048 /** 049 * @param location the location of the node that does not exist 050 * @param lowestAncestorThatDoesExist the path of the lowest (closest) ancestor that does exist 051 * @param message 052 */ 053 public PathNotFoundException( Location location, 054 Path lowestAncestorThatDoesExist, 055 String message ) { 056 super(message); 057 this.location = location; 058 this.lowestAncestorThatDoesExist = lowestAncestorThatDoesExist; 059 } 060 061 /** 062 * @param location the location of the node that does not exist 063 * @param lowestAncestorThatDoesExist the path of the lowest (closest) ancestor that does exist 064 * @param cause 065 */ 066 public PathNotFoundException( Location location, 067 Path lowestAncestorThatDoesExist, 068 Throwable cause ) { 069 super(cause); 070 this.location = location; 071 this.lowestAncestorThatDoesExist = lowestAncestorThatDoesExist; 072 } 073 074 /** 075 * @param location the location of the node that does not exist 076 * @param lowestAncestorThatDoesExist the path of the lowest (closest) ancestor that does exist 077 * @param message 078 * @param cause 079 */ 080 public PathNotFoundException( Location location, 081 Path lowestAncestorThatDoesExist, 082 String message, 083 Throwable cause ) { 084 super(message, cause); 085 this.location = location; 086 this.lowestAncestorThatDoesExist = lowestAncestorThatDoesExist; 087 } 088 089 /** 090 * {@inheritDoc} 091 */ 092 @Override 093 public String toString() { 094 return super.toString(); 095 } 096 097 /** 098 * Get the path that was not found 099 * 100 * @return the path that was not found 101 */ 102 public Location getLocation() { 103 return location; 104 } 105 106 /** 107 * Get the lowest (closest) existing {@link Path#getParent() ancestor} of the {@link #getLocation() non-existant location}. 108 * 109 * @return the lowest ancestor that does exist 110 */ 111 public Path getLowestAncestorThatDoesExist() { 112 return lowestAncestorThatDoesExist; 113 } 114 }