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