001 package nu.validator.relaxng.exceptions;
002
003 import java.util.Iterator;
004 import java.util.Map;
005
006 import org.xml.sax.Locator;
007
008 import com.thaiopensource.relaxng.impl.NameFormatter;
009 import com.thaiopensource.xml.util.Name;
010
011 public class BadAttributeValueException extends AbstractValidationException {
012
013 private static String formatMessage(Name currentElement, Name attributeName, String attributeValue, Map exceptions) {
014 if (exceptions.isEmpty()) {
015 Object[] values = new Object[3];
016 values[0] = NameFormatter.format(attributeName);
017 values[1] = NameFormatter.format(currentElement);
018 values[2] = attributeValue;
019 return localizer.message("bad_attribute_value", values);
020 } else {
021 StringBuffer sb = new StringBuffer();
022 for (Iterator iter = exceptions.keySet().iterator(); iter.hasNext();) {
023 String msg = (String) iter.next();
024 sb.append(' ');
025 sb.append(msg);
026 }
027 Object[] values = new Object[4];
028 values[0] = NameFormatter.format(attributeName);
029 values[1] = NameFormatter.format(currentElement);
030 values[2] = attributeValue;
031 values[3] = sb;
032 return localizer.message("bad_attribute_value_explain", values);
033 }
034 }
035
036 private final Name attributeName;
037
038 private final String attributeValue;
039
040 private final Map exceptions;
041
042 public BadAttributeValueException(Locator locator,
043 Name currentElement, Name parent, Name attributeName, String attributeValue, Map exceptions) {
044 super(formatMessage(currentElement, attributeName, attributeValue, exceptions), locator, currentElement, parent);
045 this.attributeName = attributeName;
046 this.attributeValue = attributeValue;
047 this.exceptions = exceptions;
048 }
049
050 /**
051 * Returns the attributeName.
052 *
053 * @return the attributeName
054 */
055 public Name getAttributeName() {
056 return attributeName;
057 }
058
059 /**
060 * Returns the attributeValue.
061 *
062 * @return the attributeValue
063 */
064 public String getAttributeValue() {
065 return attributeValue;
066 }
067
068 /**
069 * Returns the exceptions.
070 *
071 * @return the exceptions
072 */
073 public Map getExceptions() {
074 return exceptions;
075 }
076
077 }