/*                     __                                               *\
**     ________ ___   / /  ___     Scala API                            **
**    / __/ __// _ | / /  / _ |    (c) 2002-2009, LAMP/EPFL             **
**  __\ \/ /__/ __ |/ /__/ __ |    http://www.scala-lang.org/           **
** /____/\___/_/ |_/____/_/ | |                                         **
**                          |/                                          **
\*                                                                      */

// $Id: ValidationException.scala 18615 2009-08-31 13:21:58Z extempore $


package scala.xml
package dtd


case class ValidationException(e: String) extends Exception(e)

/**
 *  @author Burak Emir
 */
object MakeValidationException {
  def fromFixedAttribute(k: String, value: String, actual: String) =
    ValidationException("value of attribute " + k + " FIXED to \""+
                        value+"\", but document tries \""+actual+"\"")

  def fromNonEmptyElement() =
    new ValidationException("element should be *empty*")

  def fromUndefinedElement(label: String) = 
    new ValidationException("element \""+ label +"\" not allowed here")

  def fromUndefinedAttribute(key: String) = 
    new ValidationException("attribute " + key +" not allowed here")

  def fromMissingAttribute(allKeys: Set[String]) = {
    val sb = new StringBuilder("missing value for REQUIRED attribute")
    if (allKeys.size > 1) sb.append('s');
    allKeys foreach (k => sb append "'%s'".format(k))
    new ValidationException(sb.toString())
  }

  def fromMissingAttribute(key: String, tpe: String) =
    new ValidationException("missing value for REQUIRED attribute %s of type %s".format(key, tpe))
}