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 StringNotAllowedException extends AbstractValidationException {
012    
013        private static String formatMessage(Name currentElement, String value, Map exceptions) {
014            if (exceptions.isEmpty()) {
015                Object[] values = new Object[3];
016                values[0] = NameFormatter.format(currentElement);
017                values[1] = value;
018                return localizer.message("string_not_allowed", values);
019            } else {
020                StringBuffer sb = new StringBuffer();
021                for (Iterator iter = exceptions.keySet().iterator(); iter.hasNext();) {
022                    String msg = (String) iter.next();
023                    sb.append(' ');
024                    sb.append(msg);
025                }
026                Object[] values = new Object[4];
027                values[0] = NameFormatter.format(currentElement);
028                values[1] = value;
029                values[2] = sb;
030                return localizer.message("string_not_allowed_explain", values);
031            }
032        }
033    
034        private final String value;
035        
036        private final Map exceptions;
037        
038        public StringNotAllowedException(Locator locator,
039                Name currentElement, Name parent, String value, Map exceptions) {
040            super(formatMessage(currentElement, value, exceptions), locator, currentElement, parent);
041            this.value = value;
042            this.exceptions = exceptions;
043        }
044    
045        /**
046         * Returns the value.
047         * 
048         * @return the value
049         */
050        public String getValue() {
051            return value;
052        }
053    
054        /**
055         * Returns the exceptions.
056         * 
057         * @return the exceptions
058         */
059        public Map getExceptions() {
060            return exceptions;
061        }
062    
063    }