content: /*
   * Licensed to the Apache Software Foundation (ASF) under one or more
   * contributor license agreements.  See the NOTICE file distributed with
   * this work for additional information regarding copyright ownership.
   * The ASF licenses this file to You 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 mf.org.apache.xerces.impl.dv;
  
  import java.util.MissingResourceException;
  import java.util.ResourceBundle;
  
  /**
   * Base class for datatype exceptions. For DTD types, the exception can be
   * created from an error message. For Schema types, it needs an error code
   * (as defined in Appendix C of the structure spec), plus an array of arguments,
   * for error message substitution.
   *
   * @author Sandy Gao, IBM
   * @version $Id: DatatypeException.java 809242 2009-08-30 03:34:31Z mrglavas $
   * @xerces.internal
   */
  public class DatatypeException extends Exception {
  
      /**
       * Serialization version.
       */
      static final long serialVersionUID = 1940805832730465578L;
  
      // used to store error code and error substitution arguments
      protected final String key;
      protected final Object[] args;
  
      /**
       * Create a new datatype exception by providing an error code and a list
       * of error message substitution arguments.
       *
       * @param key  error code
       * @param args error arguments
       */
      public DatatypeException(String key, Object[] args) {
          super(key);
          this.key = key;
          this.args = args;
      }
  
      /**
       * Return the error code
       *
       * @return error code
       */
      public String getKey() {
          return key;
      }
  
      /**
       * Return the list of error arguments
       *
       * @return error arguments
       */
      public Object[] getArgs() {
          return args;
      }
  
      /**
       * Overrides this method to get the formatted&localized error message.
       * <p/>
       * REVISIT: the system locale is used to load the property file.
       * do we want to allow the appilcation to specify a
       * different locale?
       */
      @Override
      public String getMessage() {
          ResourceBundle resourceBundle = null;
          //MF
          resourceBundle = ResourceBundle.getBundle("mf.org.apache.xerces.impl.msg.XMLSchemaMessages");
          //MF
          if (resourceBundle == null)
              throw new MissingResourceException("Property file not found!", "mf.org.apache.xerces.impl.msg.XMLSchemaMessages", key);
  
          String msg = resourceBundle.getString(key);
          if (msg == null) {
              msg = resourceBundle.getString("BadMessageKey");
              //MF
              throw new MissingResourceException(msg, "mf.org.apache.xerces.impl.msg.XMLSchemaMessages", key);
          }
  
          if (args != null) {
              try {
                  msg = java.text.MessageFormat.format(msg, args);
              } catch (Exception e) {
                  msg = resourceBundle.getString("FormatFailed");
                  msg += " " + resourceBundle.getString(key);
              }
          }
  
          return msg;
      }
  }
  