1*efeef26fSAndrew Rist /**************************************************************
2cdf0e10cSrcweir *
3*efeef26fSAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one
4*efeef26fSAndrew Rist * or more contributor license agreements. See the NOTICE file
5*efeef26fSAndrew Rist * distributed with this work for additional information
6*efeef26fSAndrew Rist * regarding copyright ownership. The ASF licenses this file
7*efeef26fSAndrew Rist * to you under the Apache License, Version 2.0 (the
8*efeef26fSAndrew Rist * "License"); you may not use this file except in compliance
9*efeef26fSAndrew Rist * with the License. You may obtain a copy of the License at
10*efeef26fSAndrew Rist *
11*efeef26fSAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0
12*efeef26fSAndrew Rist *
13*efeef26fSAndrew Rist * Unless required by applicable law or agreed to in writing,
14*efeef26fSAndrew Rist * software distributed under the License is distributed on an
15*efeef26fSAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*efeef26fSAndrew Rist * KIND, either express or implied. See the License for the
17*efeef26fSAndrew Rist * specific language governing permissions and limitations
18*efeef26fSAndrew Rist * under the License.
19*efeef26fSAndrew Rist *
20*efeef26fSAndrew Rist *************************************************************/
21*efeef26fSAndrew Rist
22*efeef26fSAndrew Rist
23cdf0e10cSrcweir #include "vbaaddins.hxx"
24cdf0e10cSrcweir #include "vbaaddin.hxx"
25cdf0e10cSrcweir #include <cppuhelper/implbase3.hxx>
26cdf0e10cSrcweir #include <unotools/pathoptions.hxx>
27cdf0e10cSrcweir #include <com/sun/star/lang/XMultiComponentFactory.hpp>
28cdf0e10cSrcweir #include <com/sun/star/ucb/XSimpleFileAccess.hpp>
29cdf0e10cSrcweir
30cdf0e10cSrcweir using namespace ::ooo::vba;
31cdf0e10cSrcweir using namespace ::com::sun::star;
32cdf0e10cSrcweir
lcl_getAddinCollection(const uno::Reference<XHelperInterface> & xParent,const uno::Reference<uno::XComponentContext> & xContext)33cdf0e10cSrcweir uno::Reference< container::XIndexAccess > lcl_getAddinCollection( const uno::Reference< XHelperInterface >& xParent, const uno::Reference< uno::XComponentContext >& xContext )
34cdf0e10cSrcweir {
35cdf0e10cSrcweir XNamedObjectCollectionHelper< word::XAddin >::XNamedVec maAddins;
36cdf0e10cSrcweir
37cdf0e10cSrcweir // first get the autoload addins in the directory STARTUP
38cdf0e10cSrcweir uno::Reference< lang::XMultiComponentFactory > xMCF( xContext->getServiceManager(), uno::UNO_QUERY_THROW );
39cdf0e10cSrcweir uno::Reference< ucb::XSimpleFileAccess > xSFA( xMCF->createInstanceWithContext( rtl::OUString::createFromAscii( "com.sun.star.ucb.SimpleFileAccess" ), xContext), uno::UNO_QUERY_THROW );
40cdf0e10cSrcweir SvtPathOptions aPathOpt;
41cdf0e10cSrcweir // FIXME: temporary the STARTUP path is located in $OO/basic3.1/program/addin
42cdf0e10cSrcweir String aAddinPath = aPathOpt.GetAddinPath();
43cdf0e10cSrcweir OSL_TRACE("lcl_getAddinCollection: %s", rtl::OUStringToOString( aAddinPath, RTL_TEXTENCODING_UTF8 ).getStr() );
44cdf0e10cSrcweir if( xSFA->isFolder( aAddinPath ) )
45cdf0e10cSrcweir {
46cdf0e10cSrcweir uno::Sequence< rtl::OUString > sEntries = xSFA->getFolderContents( aAddinPath, sal_False );
47cdf0e10cSrcweir sal_Int32 nEntry = sEntries.getLength();
48cdf0e10cSrcweir for( sal_Int32 index = 0; index < nEntry; ++index )
49cdf0e10cSrcweir {
50cdf0e10cSrcweir rtl::OUString sUrl = sEntries[ index ];
51cdf0e10cSrcweir if( !xSFA->isFolder( sUrl ) && sUrl.endsWithIgnoreAsciiCaseAsciiL( ".dot", 4 ) )
52cdf0e10cSrcweir {
53cdf0e10cSrcweir maAddins.push_back( uno::Reference< word::XAddin >( new SwVbaAddin( xParent, xContext, sUrl, sal_True ) ) );
54cdf0e10cSrcweir }
55cdf0e10cSrcweir }
56cdf0e10cSrcweir }
57cdf0e10cSrcweir
58cdf0e10cSrcweir // TODO: second get the customize addins in the org.openoffice.Office.Writer/GlobalTemplateList
59cdf0e10cSrcweir
60cdf0e10cSrcweir uno::Reference< container::XIndexAccess > xAddinsAccess( new XNamedObjectCollectionHelper< word::XAddin >( maAddins ) );
61cdf0e10cSrcweir return xAddinsAccess;
62cdf0e10cSrcweir }
63cdf0e10cSrcweir
SwVbaAddins(const uno::Reference<XHelperInterface> & xParent,const uno::Reference<uno::XComponentContext> & xContext)64cdf0e10cSrcweir SwVbaAddins::SwVbaAddins( const uno::Reference< XHelperInterface >& xParent, const uno::Reference< uno::XComponentContext > & xContext ) throw (uno::RuntimeException): SwVbaAddins_BASE( xParent, xContext, lcl_getAddinCollection( xParent,xContext ) )
65cdf0e10cSrcweir {
66cdf0e10cSrcweir }
67cdf0e10cSrcweir // XEnumerationAccess
68cdf0e10cSrcweir uno::Type
getElementType()69cdf0e10cSrcweir SwVbaAddins::getElementType() throw (uno::RuntimeException)
70cdf0e10cSrcweir {
71cdf0e10cSrcweir return word::XAddin::static_type(0);
72cdf0e10cSrcweir }
73cdf0e10cSrcweir uno::Reference< container::XEnumeration >
createEnumeration()74cdf0e10cSrcweir SwVbaAddins::createEnumeration() throw (uno::RuntimeException)
75cdf0e10cSrcweir {
76cdf0e10cSrcweir uno::Reference< container::XEnumerationAccess > xEnumerationAccess( m_xIndexAccess, uno::UNO_QUERY_THROW );
77cdf0e10cSrcweir return xEnumerationAccess->createEnumeration();
78cdf0e10cSrcweir }
79cdf0e10cSrcweir
80cdf0e10cSrcweir uno::Any
createCollectionObject(const css::uno::Any & aSource)81cdf0e10cSrcweir SwVbaAddins::createCollectionObject( const css::uno::Any& aSource )
82cdf0e10cSrcweir {
83cdf0e10cSrcweir return aSource;
84cdf0e10cSrcweir }
85cdf0e10cSrcweir
86cdf0e10cSrcweir rtl::OUString&
getServiceImplName()87cdf0e10cSrcweir SwVbaAddins::getServiceImplName()
88cdf0e10cSrcweir {
89cdf0e10cSrcweir static rtl::OUString sImplName( RTL_CONSTASCII_USTRINGPARAM("SwVbaAddins") );
90cdf0e10cSrcweir return sImplName;
91cdf0e10cSrcweir }
92cdf0e10cSrcweir
93cdf0e10cSrcweir css::uno::Sequence<rtl::OUString>
getServiceNames()94cdf0e10cSrcweir SwVbaAddins::getServiceNames()
95cdf0e10cSrcweir {
96cdf0e10cSrcweir static uno::Sequence< rtl::OUString > sNames;
97cdf0e10cSrcweir if ( sNames.getLength() == 0 )
98cdf0e10cSrcweir {
99cdf0e10cSrcweir sNames.realloc( 1 );
100cdf0e10cSrcweir sNames[0] = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("ooo.vba.word.Addins") );
101cdf0e10cSrcweir }
102cdf0e10cSrcweir return sNames;
103cdf0e10cSrcweir }
104