1/**
2 *******************************************************************************
3 * Copyright (C) 2001-2005, International Business Machines Corporation and    *
4 * others. All Rights Reserved.                                                *
5 *******************************************************************************
6 *
7 *******************************************************************************
8 */
9#include "unicode/utypes.h"
10
11#if !UCONFIG_NO_SERVICE
12
13#include "unicode/resbund.h"
14#include "uresimp.h"
15#include "cmemory.h"
16#include "servloc.h"
17#include "ustrfmt.h"
18#include "uhash.h"
19#include "charstr.h"
20#include "ucln_cmn.h"
21#include "uassert.h"
22
23#define UNDERSCORE_CHAR ((UChar)0x005f)
24#define AT_SIGN_CHAR    ((UChar)64)
25#define PERIOD_CHAR     ((UChar)46)
26
27U_NAMESPACE_BEGIN
28
29/*
30 ******************************************************************
31 */
32
33SimpleLocaleKeyFactory::SimpleLocaleKeyFactory(UObject* objToAdopt,
34                                               const UnicodeString& locale,
35                                               int32_t kind,
36                                               int32_t coverage)
37  : LocaleKeyFactory(coverage)
38  , _obj(objToAdopt)
39  , _id(locale)
40  , _kind(kind)
41{
42}
43
44SimpleLocaleKeyFactory::SimpleLocaleKeyFactory(UObject* objToAdopt,
45                                               const Locale& locale,
46                                               int32_t kind,
47                                               int32_t coverage)
48  : LocaleKeyFactory(coverage)
49  , _obj(objToAdopt)
50  , _id()
51  , _kind(kind)
52{
53    LocaleUtility::initNameFromLocale(locale, _id);
54}
55
56SimpleLocaleKeyFactory::~SimpleLocaleKeyFactory()
57{
58  delete _obj;
59  _obj = NULL;
60}
61
62UObject*
63SimpleLocaleKeyFactory::create(const ICUServiceKey& key, const ICUService* service, UErrorCode& status) const
64{
65    if (U_SUCCESS(status)) {
66        const LocaleKey& lkey = (const LocaleKey&)key;
67        if (_kind == LocaleKey::KIND_ANY || _kind == lkey.kind()) {
68            UnicodeString keyID;
69            lkey.currentID(keyID);
70            if (_id == keyID) {
71                return service->cloneInstance(_obj);
72            }
73        }
74    }
75    return NULL;
76}
77
78//UBool
79//SimpleLocaleKeyFactory::isSupportedID(const UnicodeString& id, UErrorCode& /* status */) const
80//{
81//    return id == _id;
82//}
83
84void
85SimpleLocaleKeyFactory::updateVisibleIDs(Hashtable& result, UErrorCode& status) const
86{
87    if (U_SUCCESS(status)) {
88        if (_coverage & 0x1) {
89            result.remove(_id);
90        } else {
91            result.put(_id, (void*)this, status);
92        }
93    }
94}
95
96#ifdef SERVICE_DEBUG
97UnicodeString&
98SimpleLocaleKeyFactory::debug(UnicodeString& result) const
99{
100    LocaleKeyFactory::debug(result);
101    result.append(", id: ");
102    result.append(_id);
103    result.append(", kind: ");
104    result.append(_kind);
105    return result;
106}
107
108UnicodeString&
109SimpleLocaleKeyFactory::debugClass(UnicodeString& result) const
110{
111    return result.append("SimpleLocaleKeyFactory");
112}
113#endif
114
115UOBJECT_DEFINE_RTTI_IMPLEMENTATION(SimpleLocaleKeyFactory)
116
117U_NAMESPACE_END
118
119/* !UCONFIG_NO_SERVICE */
120#endif
121
122
123