servrbf.cpp revision 51cfa1a9a96cad34675a6415fe86dfdf3f525bb6
1c8efed89ba740fe06a8207ae17520a4db38c96a7Vinson Lee/**
2c8efed89ba740fe06a8207ae17520a4db38c96a7Vinson Lee *******************************************************************************
3c8efed89ba740fe06a8207ae17520a4db38c96a7Vinson Lee * Copyright (C) 2001-2005, International Business Machines Corporation and    *
4c8efed89ba740fe06a8207ae17520a4db38c96a7Vinson Lee * others. All Rights Reserved.                                                *
5c8efed89ba740fe06a8207ae17520a4db38c96a7Vinson Lee *******************************************************************************
6c8efed89ba740fe06a8207ae17520a4db38c96a7Vinson Lee *
7c8efed89ba740fe06a8207ae17520a4db38c96a7Vinson Lee *******************************************************************************
8c8efed89ba740fe06a8207ae17520a4db38c96a7Vinson Lee */
9c8efed89ba740fe06a8207ae17520a4db38c96a7Vinson Lee#include "unicode/utypes.h"
10c8efed89ba740fe06a8207ae17520a4db38c96a7Vinson Lee
11c8efed89ba740fe06a8207ae17520a4db38c96a7Vinson Lee#if !UCONFIG_NO_SERVICE
12c8efed89ba740fe06a8207ae17520a4db38c96a7Vinson Lee
13c8efed89ba740fe06a8207ae17520a4db38c96a7Vinson Lee#include "unicode/resbund.h"
14c8efed89ba740fe06a8207ae17520a4db38c96a7Vinson Lee#include "uresimp.h"
15c8efed89ba740fe06a8207ae17520a4db38c96a7Vinson Lee#include "cmemory.h"
16c8efed89ba740fe06a8207ae17520a4db38c96a7Vinson Lee#include "servloc.h"
17c8efed89ba740fe06a8207ae17520a4db38c96a7Vinson Lee#include "ustrfmt.h"
18c8efed89ba740fe06a8207ae17520a4db38c96a7Vinson Lee#include "uhash.h"
19c8efed89ba740fe06a8207ae17520a4db38c96a7Vinson Lee#include "charstr.h"
20c8efed89ba740fe06a8207ae17520a4db38c96a7Vinson Lee#include "ucln_cmn.h"
21c8efed89ba740fe06a8207ae17520a4db38c96a7Vinson Lee#include "uassert.h"
22c8efed89ba740fe06a8207ae17520a4db38c96a7Vinson Lee
23c8efed89ba740fe06a8207ae17520a4db38c96a7Vinson Lee#define UNDERSCORE_CHAR ((UChar)0x005f)
24c8efed89ba740fe06a8207ae17520a4db38c96a7Vinson Lee#define AT_SIGN_CHAR    ((UChar)64)
25c8efed89ba740fe06a8207ae17520a4db38c96a7Vinson Lee#define PERIOD_CHAR     ((UChar)46)
26c8efed89ba740fe06a8207ae17520a4db38c96a7Vinson Lee
27c8efed89ba740fe06a8207ae17520a4db38c96a7Vinson LeeU_NAMESPACE_BEGIN
28c8efed89ba740fe06a8207ae17520a4db38c96a7Vinson Lee
29c8efed89ba740fe06a8207ae17520a4db38c96a7Vinson LeeICUResourceBundleFactory::ICUResourceBundleFactory()
30c8efed89ba740fe06a8207ae17520a4db38c96a7Vinson Lee  : LocaleKeyFactory(VISIBLE)
31c8efed89ba740fe06a8207ae17520a4db38c96a7Vinson Lee  , _bundleName()
32c8efed89ba740fe06a8207ae17520a4db38c96a7Vinson Lee{
33c8efed89ba740fe06a8207ae17520a4db38c96a7Vinson Lee}
34c8efed89ba740fe06a8207ae17520a4db38c96a7Vinson Lee
35c8efed89ba740fe06a8207ae17520a4db38c96a7Vinson LeeICUResourceBundleFactory::ICUResourceBundleFactory(const UnicodeString& bundleName)
36c8efed89ba740fe06a8207ae17520a4db38c96a7Vinson Lee  : LocaleKeyFactory(VISIBLE)
37c8efed89ba740fe06a8207ae17520a4db38c96a7Vinson Lee  , _bundleName(bundleName)
38c8efed89ba740fe06a8207ae17520a4db38c96a7Vinson Lee{
39c8efed89ba740fe06a8207ae17520a4db38c96a7Vinson Lee}
40c8efed89ba740fe06a8207ae17520a4db38c96a7Vinson Lee
41c8efed89ba740fe06a8207ae17520a4db38c96a7Vinson LeeICUResourceBundleFactory::~ICUResourceBundleFactory() {}
42c8efed89ba740fe06a8207ae17520a4db38c96a7Vinson Lee
43c8efed89ba740fe06a8207ae17520a4db38c96a7Vinson Leeconst Hashtable*
44c8efed89ba740fe06a8207ae17520a4db38c96a7Vinson LeeICUResourceBundleFactory::getSupportedIDs(UErrorCode& status) const
45c8efed89ba740fe06a8207ae17520a4db38c96a7Vinson Lee{
46c8efed89ba740fe06a8207ae17520a4db38c96a7Vinson Lee    if (U_SUCCESS(status)) {
47c8efed89ba740fe06a8207ae17520a4db38c96a7Vinson Lee        return LocaleUtility::getAvailableLocaleNames(_bundleName);
48c8efed89ba740fe06a8207ae17520a4db38c96a7Vinson Lee    }
49c8efed89ba740fe06a8207ae17520a4db38c96a7Vinson Lee    return NULL;
50c8efed89ba740fe06a8207ae17520a4db38c96a7Vinson Lee}
51c8efed89ba740fe06a8207ae17520a4db38c96a7Vinson Lee
52c8efed89ba740fe06a8207ae17520a4db38c96a7Vinson LeeUObject*
53c8efed89ba740fe06a8207ae17520a4db38c96a7Vinson LeeICUResourceBundleFactory::handleCreate(const Locale& loc, int32_t /* kind */, const ICUService* /* service */, UErrorCode& status) const
54c8efed89ba740fe06a8207ae17520a4db38c96a7Vinson Lee{
55c8efed89ba740fe06a8207ae17520a4db38c96a7Vinson Lee    if (U_SUCCESS(status)) {
56c8efed89ba740fe06a8207ae17520a4db38c96a7Vinson Lee        // _bundleName is a package name
57c8efed89ba740fe06a8207ae17520a4db38c96a7Vinson Lee        // and should only contain invariant characters
58c8efed89ba740fe06a8207ae17520a4db38c96a7Vinson Lee                // ??? is it always true that the max length of the bundle name is 19?
59c8efed89ba740fe06a8207ae17520a4db38c96a7Vinson Lee                // who made this change? -- dlf
60c8efed89ba740fe06a8207ae17520a4db38c96a7Vinson Lee        char pkg[20];
61c8efed89ba740fe06a8207ae17520a4db38c96a7Vinson Lee        int32_t length;
62c8efed89ba740fe06a8207ae17520a4db38c96a7Vinson Lee        length=_bundleName.extract(0, INT32_MAX, pkg, (int32_t)sizeof(pkg), US_INV);
63c8efed89ba740fe06a8207ae17520a4db38c96a7Vinson Lee        if(length>=(int32_t)sizeof(pkg)) {
64c8efed89ba740fe06a8207ae17520a4db38c96a7Vinson Lee            return NULL;
65c8efed89ba740fe06a8207ae17520a4db38c96a7Vinson Lee        }
66c8efed89ba740fe06a8207ae17520a4db38c96a7Vinson Lee        return new ResourceBundle(pkg, loc, status);
67c8efed89ba740fe06a8207ae17520a4db38c96a7Vinson Lee    }
68c8efed89ba740fe06a8207ae17520a4db38c96a7Vinson Lee    return NULL;
69c8efed89ba740fe06a8207ae17520a4db38c96a7Vinson Lee}
70c8efed89ba740fe06a8207ae17520a4db38c96a7Vinson Lee
71c8efed89ba740fe06a8207ae17520a4db38c96a7Vinson Lee#ifdef SERVICE_DEBUG
72c8efed89ba740fe06a8207ae17520a4db38c96a7Vinson LeeUnicodeString&
73c8efed89ba740fe06a8207ae17520a4db38c96a7Vinson LeeICUResourceBundleFactory::debug(UnicodeString& result) const
74c8efed89ba740fe06a8207ae17520a4db38c96a7Vinson Lee{
75c8efed89ba740fe06a8207ae17520a4db38c96a7Vinson Lee    LocaleKeyFactory::debug(result);
76c8efed89ba740fe06a8207ae17520a4db38c96a7Vinson Lee    result.append(", bundle: ");
77c8efed89ba740fe06a8207ae17520a4db38c96a7Vinson Lee    return result.append(_bundleName);
78c8efed89ba740fe06a8207ae17520a4db38c96a7Vinson Lee}
79c8efed89ba740fe06a8207ae17520a4db38c96a7Vinson Lee
80c8efed89ba740fe06a8207ae17520a4db38c96a7Vinson LeeUnicodeString&
81c8efed89ba740fe06a8207ae17520a4db38c96a7Vinson LeeICUResourceBundleFactory::debugClass(UnicodeString& result) const
82c8efed89ba740fe06a8207ae17520a4db38c96a7Vinson Lee{
83c8efed89ba740fe06a8207ae17520a4db38c96a7Vinson Lee    return result.append("ICUResourceBundleFactory");
84c8efed89ba740fe06a8207ae17520a4db38c96a7Vinson Lee}
85c8efed89ba740fe06a8207ae17520a4db38c96a7Vinson Lee#endif
86c8efed89ba740fe06a8207ae17520a4db38c96a7Vinson Lee
87UOBJECT_DEFINE_RTTI_IMPLEMENTATION(ICUResourceBundleFactory)
88
89U_NAMESPACE_END
90
91/* !UCONFIG_NO_SERVICE */
92#endif
93
94
95