/*
* Copyright 2008 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.google.template.soy.data;
/**
* Exception thrown when an error occurs in the data package.
*
*/
public class SoyDataException extends RuntimeException {
/** The data path where this error occurred. */
private String dataPath;
/** @param message A detailed description of the error. */
public SoyDataException(String message) {
this(null, message);
}
/**
* @param dataPath The data path where the error occurred.
* @param message A detailed description of the error.
*/
public SoyDataException(String dataPath, String message) {
super(message);
this.dataPath = dataPath;
}
/**
* @param message A detailed description of the error.
* @param cause The throwable that is causing this exception.
*/
public SoyDataException(String message, Throwable cause) {
this(null, message, cause);
}
/**
* @param dataPath The data path where the error occurred.
* @param message A detailed description of the error.
* @param cause The throwable that is causing this exception.
*/
public SoyDataException(String dataPath, String message, Throwable cause) {
super(message, cause);
this.dataPath = dataPath;
}
/**
* Prepends a key to the data path where this error occurred. E.g. if the dataPath was previously
* 'foo.goo' and the key to prepend is 'boo', then the new data path will be 'boo.foo.goo'.
*
* @param key The key to prepend.
*/
public void prependKeyToDataPath(String key) {
if (dataPath == null) {
dataPath = key;
} else {
dataPath = key + ((dataPath.charAt(0) == '[') ? "" : ".") + dataPath;
}
}
/**
* Prepends an index to the data path where this error occurred. E.g. if the dataPath was
* previously 'foo.goo' and the index to prepend is 2, then the new data path will be
* '[2].foo.goo'.
*
* @param index The index to prepend.
*/
public void prependIndexToDataPath(int index) {
prependKeyToDataPath("[" + index + "]");
}
@Override
public String getMessage() {
return (dataPath == null)
? super.getMessage()
: "At data path '" + dataPath + "': " + super.getMessage();
}
}