1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_unotools.hxx"
26 
27 #include <unotools/nativenumberwrapper.hxx>
28 #include <tools/debug.hxx>
29 
30 #ifndef _COMPHELPER_COMPONENTFACTORY_HXX_
31 #include <comphelper/componentfactory.hxx>
32 #endif
33 #include <com/sun/star/uno/XInterface.hpp>
34 #include <com/sun/star/lang/XMultiServiceFactory.hpp>
35 
36 #define LOCALEDATA_LIBRARYNAME "i18npool"
37 #define LOCALEDATA_SERVICENAME "com.sun.star.i18n.NativeNumberSupplier"
38 
39 using namespace ::com::sun::star;
40 
41 
NativeNumberWrapper(const uno::Reference<lang::XMultiServiceFactory> & xSF)42 NativeNumberWrapper::NativeNumberWrapper(
43             const uno::Reference< lang::XMultiServiceFactory > & xSF
44             )
45         :
46         xSMgr( xSF )
47 {
48     if ( xSMgr.is() )
49     {
50         try
51         {
52             xNNS = uno::Reference< i18n::XNativeNumberSupplier > ( xSMgr->createInstance(
53                 ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( LOCALEDATA_SERVICENAME ) ) ),
54                 uno::UNO_QUERY );
55         }
56         catch ( uno::Exception& e )
57         {
58             (void)e;
59             DBG_ERRORFILE( "NativeNumberWrapper ctor: Exception caught!" );
60         }
61     }
62     else
63     {   // try to get an instance somehow
64         DBG_ERRORFILE( "NativeNumberWrapper: no service manager, trying own" );
65         try
66         {
67             uno::Reference< uno::XInterface > xI = ::comphelper::getComponentInstance(
68                 ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( LLCF_LIBNAME( LOCALEDATA_LIBRARYNAME ) ) ),
69                 ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( LOCALEDATA_SERVICENAME ) ) );
70             if ( xI.is() )
71             {
72                 uno::Any x = xI->queryInterface( ::getCppuType((const uno::Reference< i18n::XNativeNumberSupplier >*)0) );
73                 x >>= xNNS;
74             }
75         }
76         catch ( uno::Exception& e )
77         {
78             (void)e;
79             DBG_ERRORFILE( "getComponentInstance: Exception caught!" );
80         }
81     }
82     DBG_ASSERT( xNNS.is(), "NativeNumberWrapper: no NativeNumberSupplier" );
83 }
84 
85 
~NativeNumberWrapper()86 NativeNumberWrapper::~NativeNumberWrapper()
87 {
88 }
89 
90 
91 ::rtl::OUString
getNativeNumberString(const::rtl::OUString & rNumberString,const::com::sun::star::lang::Locale & rLocale,sal_Int16 nNativeNumberMode) const92 NativeNumberWrapper::getNativeNumberString(
93                     const ::rtl::OUString& rNumberString,
94                     const ::com::sun::star::lang::Locale& rLocale,
95                     sal_Int16 nNativeNumberMode ) const
96 {
97     try
98     {
99         if ( xNNS.is() )
100             return xNNS->getNativeNumberString( rNumberString, rLocale, nNativeNumberMode );
101     }
102     catch ( uno::Exception& e )
103     {
104         (void)e;
105         DBG_ERRORFILE( "getNativeNumberString: Exception caught!" );
106     }
107     return ::rtl::OUString();
108 }
109 
110 
111 sal_Bool
isValidNatNum(const::com::sun::star::lang::Locale & rLocale,sal_Int16 nNativeNumberMode) const112 NativeNumberWrapper::isValidNatNum(
113                     const ::com::sun::star::lang::Locale& rLocale,
114                     sal_Int16 nNativeNumberMode ) const
115 {
116     try
117     {
118         if ( xNNS.is() )
119             return xNNS->isValidNatNum( rLocale, nNativeNumberMode );
120     }
121     catch ( uno::Exception& e )
122     {
123         (void)e;
124         DBG_ERRORFILE( "isValidNatNum: Exception caught!" );
125     }
126     return sal_False;
127 }
128 
129 
130 i18n::NativeNumberXmlAttributes
convertToXmlAttributes(const::com::sun::star::lang::Locale & rLocale,sal_Int16 nNativeNumberMode) const131 NativeNumberWrapper::convertToXmlAttributes(
132                     const ::com::sun::star::lang::Locale& rLocale,
133                     sal_Int16 nNativeNumberMode ) const
134 {
135     try
136     {
137         if ( xNNS.is() )
138             return xNNS->convertToXmlAttributes( rLocale, nNativeNumberMode );
139     }
140     catch ( uno::Exception& e )
141     {
142         (void)e;
143         DBG_ERRORFILE( "convertToXmlAttributes: Exception caught!" );
144     }
145     return i18n::NativeNumberXmlAttributes();
146 }
147 
148 
149 sal_Int16
convertFromXmlAttributes(const i18n::NativeNumberXmlAttributes & rAttr) const150 NativeNumberWrapper::convertFromXmlAttributes(
151                     const i18n::NativeNumberXmlAttributes& rAttr ) const
152 {
153     try
154     {
155         if ( xNNS.is() )
156             return xNNS->convertFromXmlAttributes( rAttr );
157     }
158     catch ( uno::Exception& e )
159     {
160         (void)e;
161         DBG_ERRORFILE( "convertFromXmlAttributes: Exception caught!" );
162     }
163     return 0;
164 }
165 
166 
167