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