1 /************************************************************************* 2 * 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * Copyright 2000, 2010 Oracle and/or its affiliates. 6 * 7 * OpenOffice.org - a multi-platform office productivity suite 8 * 9 * This file is part of OpenOffice.org. 10 * 11 * OpenOffice.org is free software: you can redistribute it and/or modify 12 * it under the terms of the GNU Lesser General Public License version 3 13 * only, as published by the Free Software Foundation. 14 * 15 * OpenOffice.org is distributed in the hope that it will be useful, 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 * GNU Lesser General Public License version 3 for more details 19 * (a copy is included in the LICENSE file that accompanied this code). 20 * 21 * You should have received a copy of the GNU Lesser General Public License 22 * version 3 along with OpenOffice.org. If not, see 23 * <http://www.openoffice.org/license.html> 24 * for a copy of the LGPLv3 License. 25 * 26 ************************************************************************/ 27 28 // MARKER(update_precomp.py): autogen include statement, do not remove 29 #include "precompiled_unotools.hxx" 30 31 #include <unotools/numberformatcodewrapper.hxx> 32 #include <tools/debug.hxx> 33 34 #ifndef _COMPHELPER_COMPONENTFACTORY_HXX_ 35 #include <comphelper/componentfactory.hxx> 36 #endif 37 #include <com/sun/star/uno/XInterface.hpp> 38 #include <com/sun/star/lang/XMultiServiceFactory.hpp> 39 40 #define LOCALEDATA_LIBRARYNAME "i18npool" 41 #define LOCALEDATA_SERVICENAME "com.sun.star.i18n.NumberFormatMapper" 42 43 using namespace ::com::sun::star; 44 using namespace ::com::sun::star::i18n; 45 using namespace ::com::sun::star::uno; 46 47 48 NumberFormatCodeWrapper::NumberFormatCodeWrapper( 49 const Reference< lang::XMultiServiceFactory > & xSF, 50 const lang::Locale& rLocale 51 ) 52 : 53 xSMgr( xSF ) 54 { 55 setLocale( rLocale ); 56 if ( xSMgr.is() ) 57 { 58 try 59 { 60 xNFC = Reference< XNumberFormatCode > ( xSMgr->createInstance( 61 ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( LOCALEDATA_SERVICENAME ) ) ), 62 uno::UNO_QUERY ); 63 } 64 catch ( Exception& e ) 65 { 66 (void)e; 67 DBG_ERRORFILE( "NumberFormatCodeWrapper ctor: Exception caught!" ); 68 } 69 } 70 else 71 { // try to get an instance somehow 72 DBG_ERRORFILE( "NumberFormatCodeWrapper: no service manager, trying own" ); 73 try 74 { 75 Reference< XInterface > xI = ::comphelper::getComponentInstance( 76 ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( LLCF_LIBNAME( LOCALEDATA_LIBRARYNAME ) ) ), 77 ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( LOCALEDATA_SERVICENAME ) ) ); 78 if ( xI.is() ) 79 { 80 Any x = xI->queryInterface( ::getCppuType((const Reference< XNumberFormatCode >*)0) ); 81 x >>= xNFC; 82 } 83 } 84 catch ( Exception& e ) 85 { 86 (void)e; 87 DBG_ERRORFILE( "getComponentInstance: Exception caught!" ); 88 } 89 } 90 DBG_ASSERT( xNFC.is(), "NumberFormatCodeWrapper: no NumberFormatMapper" ); 91 } 92 93 94 NumberFormatCodeWrapper::~NumberFormatCodeWrapper() 95 { 96 } 97 98 99 void NumberFormatCodeWrapper::setLocale( const ::com::sun::star::lang::Locale& rLocale ) 100 { 101 aLocale = rLocale; 102 } 103 104 105 ::com::sun::star::i18n::NumberFormatCode 106 NumberFormatCodeWrapper::getDefault( sal_Int16 formatType, sal_Int16 formatUsage ) const 107 { 108 try 109 { 110 if ( xNFC.is() ) 111 return xNFC->getDefault( formatType, formatUsage, aLocale ); 112 } 113 catch ( Exception& e ) 114 { 115 (void)e; 116 DBG_ERRORFILE( "getDefault: Exception caught!" ); 117 } 118 return ::com::sun::star::i18n::NumberFormatCode(); 119 } 120 121 122 ::com::sun::star::i18n::NumberFormatCode 123 NumberFormatCodeWrapper::getFormatCode( sal_Int16 formatIndex ) const 124 { 125 try 126 { 127 if ( xNFC.is() ) 128 return xNFC->getFormatCode( formatIndex, aLocale ); 129 } 130 catch ( Exception& e ) 131 { 132 (void)e; 133 DBG_ERRORFILE( "getFormatCode: Exception caught!" ); 134 } 135 return ::com::sun::star::i18n::NumberFormatCode(); 136 } 137 138 139 ::com::sun::star::uno::Sequence< ::com::sun::star::i18n::NumberFormatCode > 140 NumberFormatCodeWrapper::getAllFormatCode( sal_Int16 formatUsage ) const 141 { 142 try 143 { 144 if ( xNFC.is() ) 145 return xNFC->getAllFormatCode( formatUsage, aLocale ); 146 } 147 catch ( Exception& e ) 148 { 149 (void)e; 150 DBG_ERRORFILE( "getAllFormatCode: Exception caught!" ); 151 } 152 return ::com::sun::star::uno::Sequence< ::com::sun::star::i18n::NumberFormatCode > (0); 153 } 154 155 156 ::com::sun::star::uno::Sequence< ::com::sun::star::i18n::NumberFormatCode > 157 NumberFormatCodeWrapper::getAllFormatCodes() const 158 { 159 try 160 { 161 if ( xNFC.is() ) 162 return xNFC->getAllFormatCodes( aLocale ); 163 } 164 catch ( Exception& e ) 165 { 166 (void)e; 167 DBG_ERRORFILE( "getAllFormatCodes: Exception caught!" ); 168 } 169 return ::com::sun::star::uno::Sequence< ::com::sun::star::i18n::NumberFormatCode > (0); 170 } 171