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 #ifndef INCLUDED_OFFICEINSTALLATIONDIRECTORIES_HXX
29 #define INCLUDED_OFFICEINSTALLATIONDIRECTORIES_HXX
30 
31 #include "osl/mutex.hxx"
32 #include "cppuhelper/implbase2.hxx"
33 
34 #include "com/sun/star/lang/XServiceInfo.hpp"
35 #include "com/sun/star/uno/XComponentContext.hpp"
36 #include "com/sun/star/util/XOfficeInstallationDirectories.hpp"
37 
38 namespace comphelper {
39 
40 //=========================================================================
41 
42 typedef cppu::WeakImplHelper2<
43             com::sun::star::util::XOfficeInstallationDirectories,
44             com::sun::star::lang::XServiceInfo > UnoImplBase;
45 
46 struct mutex_holder
47 {
48     osl::Mutex m_aMutex;
49 };
50 
51 class OfficeInstallationDirectories : public mutex_holder, public UnoImplBase
52 {
53 public:
54     OfficeInstallationDirectories(
55         const com::sun::star::uno::Reference<
56             com::sun::star::uno::XComponentContext > & xCtx );
57     virtual ~OfficeInstallationDirectories();
58 
59     // XOfficeInstallationDirectories
60     virtual ::rtl::OUString SAL_CALL
61     getOfficeInstallationDirectoryURL()
62         throw (::com::sun::star::uno::RuntimeException);
63     virtual ::rtl::OUString SAL_CALL
64     getOfficeUserDataDirectoryURL()
65         throw (::com::sun::star::uno::RuntimeException);
66     virtual ::rtl::OUString SAL_CALL
67     makeRelocatableURL( const ::rtl::OUString& URL )
68         throw (::com::sun::star::uno::RuntimeException);
69     virtual ::rtl::OUString SAL_CALL
70     makeAbsoluteURL( const ::rtl::OUString& URL )
71         throw (::com::sun::star::uno::RuntimeException);
72 
73     // XServiceInfo
74     virtual ::rtl::OUString SAL_CALL
75     getImplementationName()
76         throw (::com::sun::star::uno::RuntimeException);
77     virtual sal_Bool SAL_CALL
78     supportsService( const ::rtl::OUString& ServiceName )
79         throw (::com::sun::star::uno::RuntimeException);
80     virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL
81     getSupportedServiceNames()
82         throw (::com::sun::star::uno::RuntimeException);
83 
84     // XServiceInfo - static versions (used for component registration)
85     static ::rtl::OUString SAL_CALL
86         getImplementationName_static();
87     static ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL
88         getSupportedServiceNames_static();
89     static ::rtl::OUString SAL_CALL
90         getSingletonName_static();
91     static ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL
92         Create( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >& );
93 
94 private:
95     void initDirs();
96 
97     rtl::OUString                                   m_aOfficeBrandDirMacro;
98     rtl::OUString                                   m_aOfficeBaseDirMacro;
99     rtl::OUString                                   m_aUserDirMacro;
100     com::sun::star::uno::Reference<
101         com::sun::star::uno::XComponentContext >    m_xCtx;
102     rtl::OUString *                                 m_pOfficeBrandDir;
103     rtl::OUString *                                 m_pOfficeBaseDir;
104     rtl::OUString *                                 m_pUserDir;
105 };
106 
107 } // namespace comphelper
108 
109 #endif /* !INCLUDED_OFFICEINSTALLATIONDIRECTORIES_HXX */
110