summaryrefslogtreecommitdiff
path: root/sc/source/core/data/globalx.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'sc/source/core/data/globalx.cxx')
-rw-r--r--sc/source/core/data/globalx.cxx171
1 files changed, 171 insertions, 0 deletions
diff --git a/sc/source/core/data/globalx.cxx b/sc/source/core/data/globalx.cxx
new file mode 100644
index 000000000000..2accdadeb781
--- /dev/null
+++ b/sc/source/core/data/globalx.cxx
@@ -0,0 +1,171 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_sc.hxx"
+
+
+#include "callform.hxx"
+#include "global.hxx"
+#include <tools/urlobj.hxx>
+#include <ucbhelper/contentbroker.hxx>
+#include <ucbhelper/content.hxx>
+#include <unotools/localfilehelper.hxx>
+
+#include <tools/debug.hxx>
+#include <unotools/pathoptions.hxx>
+
+#include <com/sun/star/sdbc/XResultSet.hpp>
+#include <com/sun/star/sdbc/XRow.hpp>
+#include <com/sun/star/ucb/XCommandEnvironment.hpp>
+#include <com/sun/star/ucb/XContentAccess.hpp>
+
+#include <com/sun/star/i18n/XOrdinalSuffix.hpp>
+#include <com/sun/star/lang/XMultiServiceFactory.hpp>
+#include <comphelper/processfactory.hxx>
+#include <unotools/localedatawrapper.hxx>
+
+
+using namespace ::com::sun::star;
+using namespace ::com::sun::star::uno;
+using namespace ::com::sun::star::ucb;
+
+
+// static
+void ScGlobal::InitAddIns()
+{
+ // multi paths separated by semicolons
+ SvtPathOptions aPathOpt;
+ String aMultiPath = aPathOpt.GetAddinPath();
+ if ( aMultiPath.Len() > 0 )
+ {
+ xub_StrLen nTokens = aMultiPath.GetTokenCount( ';' );
+ xub_StrLen nIndex = 0;
+ for ( xub_StrLen j=0; j<nTokens; j++ )
+ {
+ String aPath( aMultiPath.GetToken( 0, ';', nIndex ) );
+ if ( aPath.Len() > 0 )
+ {
+ // use LocalFileHelper to convert the path to a URL that always points
+ // to the file on the server
+ String aUrl;
+ if ( utl::LocalFileHelper::ConvertPhysicalNameToURL( aPath, aUrl ) )
+ aPath = aUrl;
+
+ INetURLObject aObj;
+ aObj.SetSmartURL( aPath );
+ aObj.setFinalSlash();
+ try
+ {
+ ::ucbhelper::Content aCnt( aObj.GetMainURL(INetURLObject::NO_DECODE),
+ Reference< XCommandEnvironment > () );
+ Reference< sdbc::XResultSet > xResultSet;
+ Sequence< rtl::OUString > aProps;
+ try
+ {
+ xResultSet = aCnt.createCursor(
+ aProps, ::ucbhelper::INCLUDE_DOCUMENTS_ONLY );
+ }
+ catch ( Exception& )
+ {
+ // ucb may throw different exceptions on failure now
+ // no assertion if AddIn directory doesn't exist
+ }
+
+ if ( xResultSet.is() )
+ {
+ Reference< sdbc::XRow > xRow( xResultSet, UNO_QUERY );
+ Reference< XContentAccess >
+ xContentAccess( xResultSet, UNO_QUERY );
+ try
+ {
+ if ( xResultSet->first() )
+ {
+ do
+ {
+ rtl::OUString aId( xContentAccess->queryContentIdentifierString() );
+ InitExternalFunc( aId );
+ }
+ while ( xResultSet->next() );
+ }
+ }
+ catch ( Exception& )
+ {
+ DBG_ERRORFILE( "ResultSetException catched!" );
+ }
+ }
+ }
+ catch ( Exception& )
+ {
+ DBG_ERRORFILE( "Exception catched!" );
+ }
+ catch ( ... )
+ {
+
+ DBG_ERRORFILE( "unexpected exception caught!" );
+ }
+ }
+ }
+ }
+}
+
+
+// static
+String ScGlobal::GetOrdinalSuffix( sal_Int32 nNumber)
+{
+ if (!xOrdinalSuffix.is())
+ {
+ try
+ {
+ Reference< lang::XMultiServiceFactory > xServiceManager =
+ ::comphelper::getProcessServiceFactory();
+ Reference< XInterface > xInterface =
+ xServiceManager->createInstance(
+ ::rtl::OUString::createFromAscii("com.sun.star.i18n.OrdinalSuffix"));
+ if (xInterface.is())
+ xOrdinalSuffix = Reference< i18n::XOrdinalSuffix >( xInterface, UNO_QUERY);
+ }
+ catch ( Exception& )
+ {
+ DBG_ERRORFILE( "GetOrdinalSuffix: exception caught during init" );
+ }
+ }
+ DBG_ASSERT( xOrdinalSuffix.is(), "GetOrdinalSuffix: createInstance failed");
+ if (xOrdinalSuffix.is())
+ {
+ try
+ {
+ return xOrdinalSuffix->getOrdinalSuffix( nNumber,
+ ScGlobal::pLocaleData->getLocale());
+ }
+ catch ( Exception& )
+ {
+ DBG_ERRORFILE( "GetOrdinalSuffix: exception caught during getOrdinalSuffix" );
+ }
+ }
+ return String();
+}