001    /*
002     * Licensed to the Apache Software Foundation (ASF) under one
003     * or more contributor license agreements. See the NOTICE file
004     * distributed with this work for additional information
005     * regarding copyright ownership. The ASF licenses this file
006     * to you under the Apache License, Version 2.0 (the  "License");
007     * you may not use this file except in compliance with the License.
008     * You may obtain a copy of the License at
009     *
010     *     http://www.apache.org/licenses/LICENSE-2.0
011     *
012     * Unless required by applicable law or agreed to in writing, software
013     * distributed under the License is distributed on an "AS IS" BASIS,
014     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
015     * See the License for the specific language governing permissions and
016     * limitations under the License.
017     */
018    /*
019     * $Id: XPATHMessages.java 468655 2006-10-28 07:12:06Z minchau $
020     */
021    package org.apache.xpath.res;
022    
023    import java.util.ListResourceBundle;
024    
025    import org.apache.xml.res.XMLMessages;
026    
027    /**
028     * A utility class for issuing XPath error messages.
029     * @xsl.usage internal
030     */
031    public class XPATHMessages extends XMLMessages
032    {
033      /** The language specific resource object for XPath messages.  */
034      private static ListResourceBundle XPATHBundle = null;
035    
036      /** The class name of the XPath error message string table.     */
037      private static final String XPATH_ERROR_RESOURCES =
038        "org.apache.xpath.res.XPATHErrorResources";
039      
040      /**
041       * Creates a message from the specified key and replacement
042       * arguments, localized to the given locale.
043       *
044       * @param msgKey    The key for the message text.
045       * @param args      The arguments to be used as replacement text
046       *                  in the message created.
047       *
048       * @return The formatted message string.
049       */
050      public static final String createXPATHMessage(String msgKey, Object args[])  //throws Exception 
051      {
052        if (XPATHBundle == null)
053          XPATHBundle = loadResourceBundle(XPATH_ERROR_RESOURCES);
054        
055        if (XPATHBundle != null)
056        {
057          return createXPATHMsg(XPATHBundle, msgKey, args);
058        }
059        else
060          return "Could not load any resource bundles.";
061      }
062    
063      /**
064       * Creates a message from the specified key and replacement
065       * arguments, localized to the given locale.
066       *
067       * @param msgKey The key for the message text.
068       * @param args      The arguments to be used as replacement text
069       *                  in the message created.
070       *
071       * @return The formatted warning string.
072       */
073      public static final String createXPATHWarning(String msgKey, Object args[])  //throws Exception
074      {
075        if (XPATHBundle == null)
076          XPATHBundle = loadResourceBundle(XPATH_ERROR_RESOURCES);
077    
078        if (XPATHBundle != null)
079        {
080          return createXPATHMsg(XPATHBundle, msgKey, args);
081        }
082        else
083          return "Could not load any resource bundles.";
084      }
085    
086      /**
087       * Creates a message from the specified key and replacement
088       * arguments, localized to the given locale.
089       *
090       * @param fResourceBundle The resource bundle to use.
091       * @param msgKey  The message key to use.
092       * @param args      The arguments to be used as replacement text
093       *                  in the message created.
094       *
095       * @return The formatted message string.
096       */
097      public static final String createXPATHMsg(ListResourceBundle fResourceBundle,
098                                                String msgKey, Object args[])  //throws Exception
099      {
100    
101        String fmsg = null;
102        boolean throwex = false;
103        String msg = null;
104    
105        if (msgKey != null)
106          msg = fResourceBundle.getString(msgKey); 
107    
108        if (msg == null)
109        {
110          msg = fResourceBundle.getString(XPATHErrorResources.BAD_CODE);
111          throwex = true;
112        }
113    
114        if (args != null)
115        {
116          try
117          {
118    
119            // Do this to keep format from crying.
120            // This is better than making a bunch of conditional
121            // code all over the place.
122            int n = args.length;
123    
124            for (int i = 0; i < n; i++)
125            {
126              if (null == args[i])
127                args[i] = "";
128            }
129    
130            fmsg = java.text.MessageFormat.format(msg, args);
131          }
132          catch (Exception e)
133          {
134            fmsg = fResourceBundle.getString(XPATHErrorResources.FORMAT_FAILED);
135            fmsg += " " + msg;
136          }
137        }
138        else
139          fmsg = msg;
140    
141        if (throwex)
142        {
143          throw new RuntimeException(fmsg);
144        }
145    
146        return fmsg;
147      }
148    
149    }