Home | History | Annotate | Download | only in common
      1 /**
      2  *******************************************************************************
      3  * Copyright (C) 2001-2014, 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 "uassert.h"
     21 
     22 #define UNDERSCORE_CHAR ((UChar)0x005f)
     23 #define AT_SIGN_CHAR    ((UChar)64)
     24 #define PERIOD_CHAR     ((UChar)46)
     25 
     26 U_NAMESPACE_BEGIN
     27 
     28 /*
     29  ******************************************************************
     30  */
     31 
     32 SimpleLocaleKeyFactory::SimpleLocaleKeyFactory(UObject* objToAdopt,
     33                                                const UnicodeString& locale,
     34                                                int32_t kind,
     35                                                int32_t coverage)
     36   : LocaleKeyFactory(coverage)
     37   , _obj(objToAdopt)
     38   , _id(locale)
     39   , _kind(kind)
     40 {
     41 }
     42 
     43 SimpleLocaleKeyFactory::SimpleLocaleKeyFactory(UObject* objToAdopt,
     44                                                const Locale& locale,
     45                                                int32_t kind,
     46                                                int32_t coverage)
     47   : LocaleKeyFactory(coverage)
     48   , _obj(objToAdopt)
     49   , _id()
     50   , _kind(kind)
     51 {
     52     LocaleUtility::initNameFromLocale(locale, _id);
     53 }
     54 
     55 SimpleLocaleKeyFactory::~SimpleLocaleKeyFactory()
     56 {
     57   delete _obj;
     58   _obj = NULL;
     59 }
     60 
     61 UObject*
     62 SimpleLocaleKeyFactory::create(const ICUServiceKey& key, const ICUService* service, UErrorCode& status) const
     63 {
     64     if (U_SUCCESS(status)) {
     65         const LocaleKey& lkey = (const LocaleKey&)key;
     66         if (_kind == LocaleKey::KIND_ANY || _kind == lkey.kind()) {
     67             UnicodeString keyID;
     68             lkey.currentID(keyID);
     69             if (_id == keyID) {
     70                 return service->cloneInstance(_obj);
     71             }
     72         }
     73     }
     74     return NULL;
     75 }
     76 
     77 //UBool
     78 //SimpleLocaleKeyFactory::isSupportedID(const UnicodeString& id, UErrorCode& /* status */) const
     79 //{
     80 //    return id == _id;
     81 //}
     82 
     83 void
     84 SimpleLocaleKeyFactory::updateVisibleIDs(Hashtable& result, UErrorCode& status) const
     85 {
     86     if (U_SUCCESS(status)) {
     87         if (_coverage & 0x1) {
     88             result.remove(_id);
     89         } else {
     90             result.put(_id, (void*)this, status);
     91         }
     92     }
     93 }
     94 
     95 #ifdef SERVICE_DEBUG
     96 UnicodeString&
     97 SimpleLocaleKeyFactory::debug(UnicodeString& result) const
     98 {
     99     LocaleKeyFactory::debug(result);
    100     result.append((UnicodeString)", id: ");
    101     result.append(_id);
    102     result.append((UnicodeString)", kind: ");
    103     result.append(_kind);
    104     return result;
    105 }
    106 
    107 UnicodeString&
    108 SimpleLocaleKeyFactory::debugClass(UnicodeString& result) const
    109 {
    110     return result.append((UnicodeString)"SimpleLocaleKeyFactory");
    111 }
    112 #endif
    113 
    114 UOBJECT_DEFINE_RTTI_IMPLEMENTATION(SimpleLocaleKeyFactory)
    115 
    116 U_NAMESPACE_END
    117 
    118 /* !UCONFIG_NO_SERVICE */
    119 #endif
    120 
    121 
    122