14c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson/*
24c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * Licensed to the Apache Software Foundation (ASF) under one
34c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * or more contributor license agreements. See the NOTICE file
44c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * distributed with this work for additional information
54c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * regarding copyright ownership. The ASF licenses this file
64c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * to you under the Apache License, Version 2.0 (the  "License");
74c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * you may not use this file except in compliance with the License.
84c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * You may obtain a copy of the License at
94c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson *
104c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson *     http://www.apache.org/licenses/LICENSE-2.0
114c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson *
124c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * Unless required by applicable law or agreed to in writing, software
134c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * distributed under the License is distributed on an "AS IS" BASIS,
144c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
154c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * See the License for the specific language governing permissions and
164c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * limitations under the License.
174c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson */
184c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson/*
194c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * $Id: XPATHMessages.java 468655 2006-10-28 07:12:06Z minchau $
204c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson */
214c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilsonpackage org.apache.xpath.res;
224c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson
234c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilsonimport java.util.ListResourceBundle;
244c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson
254c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilsonimport org.apache.xml.res.XMLMessages;
264c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson
274c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson/**
284c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * A utility class for issuing XPath error messages.
294c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @xsl.usage internal
304c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson */
314c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilsonpublic class XPATHMessages extends XMLMessages
324c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson{
334c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson  /** The language specific resource object for XPath messages.  */
340b4ea6cb0176b34c7ac46800d51ce925683ef667Jesse Wilson  private static ListResourceBundle XPATHBundle = new XPATHErrorResources();
354c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson
364c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson  /** The class name of the XPath error message string table.     */
374c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson  private static final String XPATH_ERROR_RESOURCES =
384c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson    "org.apache.xpath.res.XPATHErrorResources";
394c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson
404c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson  /**
414c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson   * Creates a message from the specified key and replacement
424c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson   * arguments, localized to the given locale.
434c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson   *
444c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson   * @param msgKey    The key for the message text.
454c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson   * @param args      The arguments to be used as replacement text
464c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson   *                  in the message created.
474c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson   *
484c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson   * @return The formatted message string.
494c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson   */
504c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson  public static final String createXPATHMessage(String msgKey, Object args[])  //throws Exception
514c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson  {
520b4ea6cb0176b34c7ac46800d51ce925683ef667Jesse Wilson      // BEGIN android-changed
530b4ea6cb0176b34c7ac46800d51ce925683ef667Jesse Wilson      //     don't localize exception messages
544c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson      return createXPATHMsg(XPATHBundle, msgKey, args);
550b4ea6cb0176b34c7ac46800d51ce925683ef667Jesse Wilson      // END android-changed
564c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson  }
574c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson
584c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson  /**
594c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson   * Creates a message from the specified key and replacement
604c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson   * arguments, localized to the given locale.
614c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson   *
624c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson   * @param msgKey The key for the message text.
634c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson   * @param args      The arguments to be used as replacement text
644c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson   *                  in the message created.
654c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson   *
664c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson   * @return The formatted warning string.
674c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson   */
684c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson  public static final String createXPATHWarning(String msgKey, Object args[])  //throws Exception
694c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson  {
700b4ea6cb0176b34c7ac46800d51ce925683ef667Jesse Wilson      // BEGIN android-changed
710b4ea6cb0176b34c7ac46800d51ce925683ef667Jesse Wilson      //     don't localize exception messages
724c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson      return createXPATHMsg(XPATHBundle, msgKey, args);
730b4ea6cb0176b34c7ac46800d51ce925683ef667Jesse Wilson      // END android-changed
744c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson  }
754c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson
764c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson  /**
774c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson   * Creates a message from the specified key and replacement
784c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson   * arguments, localized to the given locale.
794c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson   *
804c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson   * @param fResourceBundle The resource bundle to use.
814c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson   * @param msgKey  The message key to use.
824c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson   * @param args      The arguments to be used as replacement text
834c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson   *                  in the message created.
844c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson   *
854c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson   * @return The formatted message string.
864c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson   */
874c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson  public static final String createXPATHMsg(ListResourceBundle fResourceBundle,
884c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson                                            String msgKey, Object args[])  //throws Exception
894c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson  {
904c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson
914c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson    String fmsg = null;
924c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson    boolean throwex = false;
934c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson    String msg = null;
944c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson
954c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson    if (msgKey != null)
964c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson      msg = fResourceBundle.getString(msgKey);
974c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson
984c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson    if (msg == null)
994c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson    {
1004c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson      msg = fResourceBundle.getString(XPATHErrorResources.BAD_CODE);
1014c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson      throwex = true;
1024c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson    }
1034c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson
1044c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson    if (args != null)
1054c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson    {
1064c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson      try
1074c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson      {
1084c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson
1094c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson        // Do this to keep format from crying.
1104c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson        // This is better than making a bunch of conditional
1114c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson        // code all over the place.
1124c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson        int n = args.length;
1134c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson
1144c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson        for (int i = 0; i < n; i++)
1154c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson        {
1164c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson          if (null == args[i])
1174c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson            args[i] = "";
1184c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson        }
1194c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson
1204c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson        fmsg = java.text.MessageFormat.format(msg, args);
1214c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson      }
1224c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson      catch (Exception e)
1234c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson      {
1244c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson        fmsg = fResourceBundle.getString(XPATHErrorResources.FORMAT_FAILED);
1254c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson        fmsg += " " + msg;
1264c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson      }
1274c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson    }
1284c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson    else
1294c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson      fmsg = msg;
1304c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson
1314c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson    if (throwex)
1324c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson    {
1334c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson      throw new RuntimeException(fmsg);
1344c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson    }
1354c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson
1364c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson    return fmsg;
1374c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson  }
1384c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson
1394c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson}
140