(file) Return to MessageLoader.h CVS log (file) (dir) Up to [Pegasus] / pegasus / src / Pegasus / Common

  1 karl  1.18 //%2006////////////////////////////////////////////////////////////////////////
  2 karl  1.7  //
  3 karl  1.10 // Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development
  4            // Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems.
  5            // Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L.P.;
  6 karl  1.7  // IBM Corp.; EMC Corporation, The Open Group.
  7 karl  1.10 // Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.;
  8            // IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group.
  9 karl  1.13 // Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.;
 10            // EMC Corporation; VERITAS Software Corporation; The Open Group.
 11 karl  1.18 // Copyright (c) 2006 Hewlett-Packard Development Company, L.P.; IBM Corp.;
 12            // EMC Corporation; Symantec Corporation; The Open Group.
 13 karl  1.7  //
 14            // Permission is hereby granted, free of charge, to any person obtaining a copy
 15            // of this software and associated documentation files (the "Software"), to
 16            // deal in the Software without restriction, including without limitation the
 17            // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
 18            // sell copies of the Software, and to permit persons to whom the Software is
 19            // furnished to do so, subject to the following conditions:
 20            // 
 21            // THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN
 22            // ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED
 23            // "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
 24            // LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
 25            // PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
 26            // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
 27            // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 28            // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 29            //
 30            //==============================================================================
 31 alagaraja 1.8  //
 32                //%/////////////////////////////////////////////////////////////////////////////
 33                
 34                #ifndef Pegasus_MessageLoader_h
 35                #define Pegasus_MessageLoader_h
 36                
 37                #include <cstdlib>
 38                #include <cctype>
 39                #include <Pegasus/Common/Linkage.h>
 40                #include <Pegasus/Common/Config.h>
 41                #include <Pegasus/Common/String.h>
 42                #include <Pegasus/Common/Formatter.h>
 43 kumpf     1.16 #include <Pegasus/Common/AcceptLanguageList.h>
 44                #include <Pegasus/Common/ContentLanguageList.h>
 45 alagaraja 1.8  
 46 kumpf     1.23 //ICU specific
 47 alagaraja 1.8  #ifdef PEGASUS_HAS_ICU
 48 kumpf     1.23 # include <unicode/uloc.h>
 49                # include <unicode/ures.h>
 50                # include <unicode/umsg.h>
 51                # include <unicode/ucnv.h>
 52                # include <unicode/fmtable.h>
 53                # include <unicode/msgfmt.h>
 54 alagaraja 1.8  #endif
 55 chuck     1.6  
 56 dave.sudlik 1.21 #ifdef PEGASUS_HAS_ICU
 57 kumpf       1.23 # define NO_ICU_MAGIC (UResourceBundle*)0xDEADBEEF
 58 dave.sudlik 1.21 #else
 59 kumpf       1.23 # define NO_ICU_MAGIC (void*)0xDEADBEEF
 60 dave.sudlik 1.21 #endif
 61                  
 62 alagaraja   1.8  PEGASUS_NAMESPACE_BEGIN
 63                  
 64 kumpf       1.20 /**
 65 kumpf       1.23     MessageLoaderParms class is basically a stuct class containing public
 66                      variables that control the way MessageLoader behaves. MessageLoader uses
 67                      the fields in this class to decide where and how to load messages from
 68                      the message resources.
 69 alagaraja   1.8   */
 70 kumpf       1.23 class PEGASUS_COMMON_LINKAGE MessageLoaderParms
 71                  {
 72                  public:
 73 alagaraja   1.8  
 74 kumpf       1.23     /**
 75                          String msg_id: unique message identifier for a particular
 76                          message in a message resource
 77                       */
 78                      String msg_id;
 79                  
 80                      /**
 81                          String default_msg: the default message to use if a message
 82                          cannot be loaded from a message resource
 83                       */
 84                      String default_msg;
 85                  
 86                      /**
 87                          String msg_src_path: this path tells MessageLoader where to
 88                          find message resources.
 89                          It can be empty, fully qualified or relative to $PEGASUS_HOME
 90                       */
 91                      String msg_src_path;
 92                  
 93                      /**
 94                          AcceptLanguageList acceptlanguages: This contains the languages
 95 kumpf       1.23         that are acceptable by the caller of MessageLoader::getMessage()
 96                          or openMessageFile(). That is, MessageLoader will do its best to
 97                          return a message in a language that was specified in this container.
 98                          This container is naturally ordered using the quality values
 99                          attached to the languages and MessageLoader iterates through this
100                          container in its natural ordering.  This container is used by
101                          MessageLoader to load messages if it is not empty.
102                       */
103                      AcceptLanguageList acceptlanguages;
104                  
105                      /**
106                          ContentLanguageList contentlanguages: This is set by
107                          MessageLoader::getMessage() and after a message has been loaded
108                          from either a message resource or the default message, or by
109                          MessageLoader::openMessageFile() after it has identified and
110                          opened a message resource. After the call to
111                          MessageLoader::getMessage() or MessageLoader::openMessageFile(),
112                          the caller can check the MessageLoaderParms.contentlanguages
113                          object to see what MessageLoader set it to. In all cases where a
114                          message is returned from MessageLoader::getMessage() or will be
115                          returned from MessageLoader::getMessage2(), this field will be
116 kumpf       1.23         set to match the language that the message was (or will be)
117                          found in.
118                       */
119                      ContentLanguageList contentlanguages;
120                  
121                      /**
122                          Boolean useProcessLocale: Default is false, if true, MessageLoader
123                          uses the system default language to loads messages from.
124                       */
125                      Boolean useProcessLocale;
126                  
127                      /**
128                          Boolean useThreadLocale: Default is true, this tells
129                          MessageLoader to use the AcceptLanguageList container
130                          from the current Pegasus thread.
131                       */
132                      Boolean useThreadLocale;
133                  
134                      /**
135                          Boolean useICUfallback: Default is false.  Only relevant if
136                          PEGASUS_HAS_ICU is defined.  MessageLoader::getMessage() default
137 kumpf       1.23         behaviour is to extract messages for the langauge exactly
138                          matching an available message resource.  If this is set to true,
139                          the MessageLoader is free to extract a message from a less
140                          specific message resource according to its search algorithm.
141                       */
142                  #ifdef PEGASUS_HAS_ICU
143                      Boolean useICUfallback;
144                  #endif
145 dave.sudlik 1.21 
146 kumpf       1.23     /**
147                          const Formatter::Arg&0-9: These are assigned the various
148                          substitutions necessary to properly format the message being
149                          extracted.  MessageLoader substitutes these in the correct
150                          places in the message being returned from
151                          MessageLoader::getMessage()
152                       */
153                      Formatter::Arg arg0;
154                      Formatter::Arg arg1;
155                      Formatter::Arg arg2;
156                      Formatter::Arg arg3;
157                      Formatter::Arg arg4;
158                      Formatter::Arg arg5;
159                      Formatter::Arg arg6;
160                      Formatter::Arg arg7;
161                      Formatter::Arg arg8;
162                      Formatter::Arg arg9;
163 dave.sudlik 1.21 
164 karl        1.11     /** Constructor */
165                      MessageLoaderParms();
166                  
167                      /** Constructor */
168                      MessageLoaderParms(
169 kumpf       1.23         const String& id,
170                          const String& msg,
171                          const Formatter::Arg& arg0,
172                          const Formatter::Arg& arg1,
173                          const Formatter::Arg& arg2,
174                          const Formatter::Arg& arg3,
175                          const Formatter::Arg& arg4,
176                          const Formatter::Arg& arg5 = Formatter::DEFAULT_ARG,
177                          const Formatter::Arg& arg6 = Formatter::DEFAULT_ARG,
178                          const Formatter::Arg& arg7 = Formatter::DEFAULT_ARG,
179                          const Formatter::Arg& arg8 = Formatter::DEFAULT_ARG,
180                          const Formatter::Arg& arg9 = Formatter::DEFAULT_ARG);
181 karl        1.11 
182                      /** Constructor */
183                      MessageLoaderParms(
184 kumpf       1.23         const String& id,
185                          const String& msg);
186                  
187 karl        1.11     /** Constructor */
188                      MessageLoaderParms(
189 kumpf       1.23         const String& id,
190                          const String& msg,
191                          const Formatter::Arg& arg0);
192 karl        1.11 
193                      /** Constructor */
194                      MessageLoaderParms(
195 kumpf       1.23         const String& id,
196                          const String& msg,
197                          const Formatter::Arg& arg0,
198                          const Formatter::Arg& arg1);
199 karl        1.11 
200                      /** Constructor */
201                      MessageLoaderParms(
202 kumpf       1.23         const String& id,
203                          const String& msg,
204                          const Formatter::Arg& arg0,
205                          const Formatter::Arg& arg1,
206                          const Formatter::Arg& arg2);
207 karl        1.11 
208                      /** Constructor */
209                      MessageLoaderParms(
210 kumpf       1.23         const String& id,
211                          const String& msg,
212                          const Formatter::Arg& arg0,
213                          const Formatter::Arg& arg1,
214                          const Formatter::Arg& arg2,
215                          const Formatter::Arg& arg3);
216 karl        1.11 
217                      MessageLoaderParms(
218 kumpf       1.23         const char* id,
219                          const char* msg);
220 karl        1.11 
221                      MessageLoaderParms(
222 kumpf       1.23         const char* id,
223                          const char* msg,
224                          const String& arg0);
225 karl        1.11 
226                      MessageLoaderParms(
227 kumpf       1.23         const char* id,
228                          const char* msg,
229                          const String& arg0,
230                          const String& arg1);
231                  
232 karl        1.11     /** Converts to string. */
233                      String toString();
234                  
235                      ~MessageLoaderParms();
236                  
237                  private:
238 dave.sudlik 1.21 #ifdef PEGASUS_HAS_ICU
239 kumpf       1.23     UResourceBundle* _resbundl;
240 dave.sudlik 1.21 #else
241 kumpf       1.23     void* _resbundl;
242 dave.sudlik 1.21 #endif
243 karl        1.11 
244                      void _init();
245 alagaraja   1.8  
246 kumpf       1.23     friend class MessageLoader;
247                  };
248 alagaraja   1.8  
249 kumpf       1.23 
250                  /**
251                      MessageLoader is a static class resposible for looking up messages in
252                      message resources.
253                      For specific behaviour details of this class see the Globalization HOWTO.
254 alagaraja   1.8   */
255 kumpf       1.23 class PEGASUS_COMMON_LINKAGE MessageLoader
256                  {
257                  public:
258 alagaraja   1.8  
259 kumpf       1.23     /**
260                          Retrieves a message from a message resource
261                          @param parms MessageLoaderParms - controls the behaviour of how a
262                          message is retrieved
263                          @return String - the formatted message
264                       */
265                      static String getMessage(MessageLoaderParms& parms);
266                  
267                      /**
268                          Opens a message resource bundle.
269                          If this method fails for some reason, it will set parms.resbundl
270                          to NO_ICU_MAGIC, and a subsequent call to getMessage2() will
271                          result in the default message being formatted.
272                          ATTN: Do we want *real* error codes for this?
273                          @param parms MessageLoaderParms - controls the behaviour of how a
274                              message is retrieved, this parameter should be used *ONLY* on
275                              subsequent calls to getMessage2() and closeMessageFile().
276                       */
277                      static void openMessageFile(MessageLoaderParms& parms);
278                  
279                      /**
280 kumpf       1.23         Closes a message resource bundle.
281                          @param parms MessageLoaderParms - identifies a previously opened
282                              resource bundle returned from openMessageFile().
283                       */
284                      static void closeMessageFile(MessageLoaderParms& parms);
285                  
286                      /**
287                          Retrieves a message from a message resource previously opened by
288                          openMessageFile()
289                          @param parms MessageLoaderParms - controls the behaviour of how a
290                              message is retrieved, and is the same MessageLoaderParms
291                              parameter that was passed to openMessageFile().
292                          @return String - the formatted message
293                       */
294                      static String getMessage2(MessageLoaderParms& parms);
295 dave.sudlik 1.21 
296 kumpf       1.23     static void setPegasusMsgHome(String home);
297 joyce.j     1.15 
298                      static void setPegasusMsgHomeRelative(const String& argv0);
299 kumpf       1.23 
300                      static Boolean _useProcessLocale;
301                  
302                      static Boolean _useDefaultMsg;
303                  
304                      static AcceptLanguageList _acceptlanguages;
305                  
306 alagaraja   1.8  private:
307                  
308 kumpf       1.23     static String formatDefaultMessage(MessageLoaderParms& parms);
309                  
310                      static String getQualifiedMsgPath(String path);
311                  
312                      static void initPegasusMsgHome(const String& startDir);
313                  
314                      static void checkDefaultMsgLoading();
315                  
316                      static String pegasus_MSG_HOME;
317                  
318                  #ifdef PEGASUS_HAS_ICU
319                      static void openICUMessageFile(MessageLoaderParms& parms);
320                  
321                      static String extractICUMessage(
322                          UResourceBundle* resbundl,
323                          MessageLoaderParms& parms);
324                  
325                      static String formatICUMessage(
326                          UResourceBundle* resbundl,
327                          const UChar* msg,
328                          int msg_len,
329 kumpf       1.23         MessageLoaderParms& parms);
330                  
331                      static String uChar2String(UChar* uchar_str);
332                  
333                      static String uChar2String(UChar* uchar_str, int len);
334                  
335                      static void xferFormattable(Formatter::Arg& arg, Formattable& formattable);
336                  #endif
337                  
338                  };
339 alagaraja   1.8  
340                  PEGASUS_NAMESPACE_END
341 chuck       1.6  
342 alagaraja   1.8  #endif

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2