Source for gnu.xml.dom.DomDOMException

   1: /* DomDOMException.java --
   2:    Copyright (C) 1999,2000,2001,2004 Free Software Foundation, Inc.
   3: 
   4: This file is part of GNU Classpath.
   5: 
   6: GNU Classpath is free software; you can redistribute it and/or modify
   7: it under the terms of the GNU General Public License as published by
   8: the Free Software Foundation; either version 2, or (at your option)
   9: any later version.
  10: 
  11: GNU Classpath is distributed in the hope that it will be useful, but
  12: WITHOUT ANY WARRANTY; without even the implied warranty of
  13: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  14: General Public License for more details.
  15: 
  16: You should have received a copy of the GNU General Public License
  17: along with GNU Classpath; see the file COPYING.  If not, write to the
  18: Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
  19: 02110-1301 USA.
  20: 
  21: Linking this library statically or dynamically with other modules is
  22: making a combined work based on this library.  Thus, the terms and
  23: conditions of the GNU General Public License cover the whole
  24: combination.
  25: 
  26: As a special exception, the copyright holders of this library give you
  27: permission to link this library with independent modules to produce an
  28: executable, regardless of the license terms of these independent
  29: modules, and to copy and distribute the resulting executable under
  30: terms of your choice, provided that you also meet, for each linked
  31: independent module, the terms and conditions of the license of that
  32: module.  An independent module is a module which is not derived from
  33: or based on this library.  If you modify this library, you may extend
  34: this exception to your version of the library, but you are not
  35: obligated to do so.  If you do not wish to do so, delete this
  36: exception statement from your version. */
  37: 
  38: package gnu.xml.dom;
  39: 
  40: import org.w3c.dom.DOMException;
  41: import org.w3c.dom.Node;
  42: 
  43: /**
  44:  * <p> DOMException implementation.   The version that
  45:  * is provided by the W3C is abstract, so it can't be instantiated.
  46:  *
  47:  * <p> This also provides a bit more information about the error
  48:  * that is being reported, in terms of the relevant DOM structures
  49:  * and data.
  50:  *
  51:  * @author David Brownell
  52:  */
  53: public class DomDOMException
  54:   extends DOMException
  55: {
  56: 
  57:   /** @serial Data that caused an error to be reported */
  58:   private String data;
  59: 
  60:   /** @serial Node associated with the error. */
  61:   private Node node;
  62: 
  63:   /** @serial Data associated with the error. */
  64:   private int value;
  65: 
  66:   /**
  67:    * Constructs an exception, with the diagnostic message
  68:    * corresponding to the specified code.
  69:    */
  70:   public DomDOMException(short code)
  71:   {
  72:     super(code, diagnostic(code));
  73:   }
  74: 
  75:   /**
  76:    * Constructs an exception, with the diagnostic message
  77:    * corresponding to the specified code and additional
  78:    * information as provided.
  79:    */
  80:   public DomDOMException(short code, String data, Node node, int value)
  81:   {
  82:     super(code, diagnostic(code));
  83:     this.data = data;
  84:     this.node = node;
  85:     this.value = value;
  86:   }
  87: 
  88:   /** Returns the node to which the diagnotic applies, or null. */
  89:   final public Node getNode()
  90:   {
  91:     return node;
  92:   }
  93: 
  94:   /** Returns data to which the diagnotic applies, or null. */
  95:   final public String getData()
  96:   {
  97:     return data;
  98:   }
  99: 
 100:   /** Returns data to which the diagnotic applies, or null. */
 101:   final public int getValue()
 102:   {
 103:     return value;
 104:   }
 105: 
 106:   /**
 107:    * Returns a diagnostic message that may be slightly more useful
 108:    * than the generic one, where possible.
 109:    */
 110:   public String getMessage()
 111:   {
 112:     String retval = super.getMessage();
 113: 
 114:     if (data != null)
 115:       {
 116:         retval += "\nMore Information: " + data;
 117:       }
 118:     if (value != 0)
 119:       {
 120:         retval += "\nNumber: " + value;
 121:       }
 122:     if (node != null)
 123:       {
 124:         retval += "\nNode Name: " + node.getNodeName();
 125:       }
 126:     return retval;
 127:   }
 128: 
 129:   // these strings should be localizable.
 130: 
 131:   private static String diagnostic(short code)
 132:   {
 133:     switch (code)
 134:       {
 135:         // DOM L1:
 136:       case INDEX_SIZE_ERR:
 137:         return "An index or size is out of range.";
 138:       case DOMSTRING_SIZE_ERR:
 139:         return "A string is too big.";
 140:       case HIERARCHY_REQUEST_ERR:
 141:         return "The node doesn't belong here.";
 142:       case WRONG_DOCUMENT_ERR:
 143:         return "The node belongs in another document.";
 144:       case INVALID_CHARACTER_ERR:
 145:         return "That character is not permitted.";
 146:       case NO_DATA_ALLOWED_ERR:
 147:         return "This node does not permit data.";
 148:       case NO_MODIFICATION_ALLOWED_ERR:
 149:         return "No changes are allowed.";
 150:       case NOT_FOUND_ERR:
 151:         return "The node was not found in that context.";
 152:       case NOT_SUPPORTED_ERR:
 153:         return "That object is not supported.";
 154:       case INUSE_ATTRIBUTE_ERR:
 155:         return "The attribute belongs to a different element.";
 156: 
 157:         // DOM L2:
 158:       case INVALID_STATE_ERR:
 159:         return "The object is not usable.";
 160:       case SYNTAX_ERR:
 161:         return "An illegal string was provided.";
 162:       case INVALID_MODIFICATION_ERR:
 163:         return "An object's type may not be changed.";
 164:       case NAMESPACE_ERR:
 165:         return "The operation violates XML Namespaces.";
 166:       case INVALID_ACCESS_ERR:
 167:         return "Parameter or operation isn't supported by this node.";
 168:       case TYPE_MISMATCH_ERR:
 169:         return "The type of the argument is incompatible with the expected type.";
 170:       }
 171:     return "Reserved exception number: " + code;
 172:   }
 173: 
 174: }