xref: /trunk/main/desktop/source/deployment/manager/dp_manager.h (revision 45c5a00162811bd03b87fcb4fe9996782f2b59ec)
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 #if ! defined INCLUDED_DP_MANAGER_H
25 #define INCLUDED_DP_MANAGER_H
26 
27 #include "dp_manager.hrc"
28 #include "dp_misc.h"
29 #include "dp_interact.h"
30 #include "dp_activepackages.hxx"
31 #include "rtl/ref.hxx"
32 #include "cppuhelper/compbase1.hxx"
33 #include "cppuhelper/implbase2.hxx"
34 #include "ucbhelper/content.hxx"
35 #include "com/sun/star/deployment/XPackageRegistry.hpp"
36 #include "com/sun/star/deployment/XPackageManager.hpp"
37 #include <memory>
38 
39 
40 namespace css = ::com::sun::star;
41 
42 namespace dp_manager {
43 
44 typedef ::cppu::WeakComponentImplHelper1<
45     css::deployment::XPackageManager > t_pm_helper;
46 
47 //==============================================================================
48 class PackageManagerImpl : private ::dp_misc::MutexHolder, public t_pm_helper
49 {
50     css::uno::Reference<css::uno::XComponentContext> m_xComponentContext;
51     ::rtl::OUString m_context;
52     ::rtl::OUString m_registrationData;
53     ::rtl::OUString m_registrationData_expanded;
54     ::rtl::OUString m_registryCache;
55     bool m_readOnly;
56 
57     ::rtl::OUString m_activePackages;
58     ::rtl::OUString m_activePackages_expanded;
59     ::std::auto_ptr< ActivePackages > m_activePackagesDB;
60     //This mutex is only used for synchronization in addPackage
61     ::osl::Mutex m_addMutex;
62     css::uno::Reference<css::ucb::XProgressHandler> m_xLogFile;
63     inline void logIntern( css::uno::Any const & status );
64     void fireModified();
65 
66     css::uno::Reference<css::deployment::XPackageRegistry> m_xRegistry;
67 
68     void initRegistryBackends();
69     void initActivationLayer(
70         css::uno::Reference<css::ucb::XCommandEnvironment> const & xCmdEnv );
71     ::rtl::OUString detectMediaType(
72         ::ucbhelper::Content const & ucbContent, bool throw_exc = true );
73     ::rtl::OUString insertToActivationLayer(
74         css::uno::Sequence<css::beans::NamedValue> const & properties,
75         ::rtl::OUString const & mediaType,
76         ::ucbhelper::Content const & sourceContent,
77         ::rtl::OUString const & title, ActivePackages::Data * dbData );
78     void insertToActivationLayerDB(
79         ::rtl::OUString const & id, ActivePackages::Data const & dbData );
80 
81     void deletePackageFromCache(
82         css::uno::Reference<css::deployment::XPackage> const & xPackage,
83         ::rtl::OUString const & destFolder );
84 
85     bool isInstalled(
86         css::uno::Reference<css::deployment::XPackage> const & package);
87 
88     bool synchronizeRemovedExtensions(
89         css::uno::Reference<css::task::XAbortChannel> const & xAbortChannel,
90         css::uno::Reference<css::ucb::XCommandEnvironment> const & xCmdEnv);
91 
92     bool synchronizeAddedExtensions(
93         css::uno::Reference<css::task::XAbortChannel> const & xAbortChannel,
94         css::uno::Reference<css::ucb::XCommandEnvironment> const & xCmdEnv);
95 
96     class CmdEnvWrapperImpl
97         : public ::cppu::WeakImplHelper2< css::ucb::XCommandEnvironment,
98                                           css::ucb::XProgressHandler >
99     {
100         css::uno::Reference<css::ucb::XProgressHandler> m_xLogFile;
101         css::uno::Reference<css::ucb::XProgressHandler> m_xUserProgress;
102         css::uno::Reference<css::task::XInteractionHandler>
103         m_xUserInteractionHandler;
104 
105     public:
106         virtual ~CmdEnvWrapperImpl();
107         CmdEnvWrapperImpl(
108             css::uno::Reference<css::ucb::XCommandEnvironment>
109             const & xUserCmdEnv,
110             css::uno::Reference<css::ucb::XProgressHandler> const & xLogFile );
111 
112         // XCommandEnvironment
113         virtual css::uno::Reference<css::task::XInteractionHandler> SAL_CALL
114         getInteractionHandler();
115         virtual css::uno::Reference<css::ucb::XProgressHandler> SAL_CALL
116         getProgressHandler();
117 
118         // XProgressHandler
119         virtual void SAL_CALL push( css::uno::Any const & Status );
120         virtual void SAL_CALL update( css::uno::Any const & Status );
121         virtual void SAL_CALL pop();
122     };
123 
124 protected:
125     inline void check();
126     virtual void SAL_CALL disposing();
127 
128     virtual ~PackageManagerImpl();
129     inline PackageManagerImpl(
130         css::uno::Reference<css::uno::XComponentContext>
131         const & xComponentContext, ::rtl::OUString const & context )
132         : t_pm_helper( getMutex() ),
133           m_xComponentContext( xComponentContext ),
134           m_context( context ),
135           m_readOnly( true )
136         {}
137 
138 public:
139     static css::uno::Reference<css::deployment::XPackageManager> create(
140         css::uno::Reference<css::uno::XComponentContext>
141         const & xComponentContext, ::rtl::OUString const & context );
142 
143     // XComponent
144     virtual void SAL_CALL dispose();
145     virtual void SAL_CALL addEventListener(
146         css::uno::Reference<css::lang::XEventListener> const & xListener );
147     virtual void SAL_CALL removeEventListener(
148         css::uno::Reference<css::lang::XEventListener> const & xListener );
149 
150     // XModifyBroadcaster
151     virtual void SAL_CALL addModifyListener(
152         css::uno::Reference<css::util::XModifyListener> const & xListener );
153     virtual void SAL_CALL removeModifyListener(
154         css::uno::Reference<css::util::XModifyListener> const & xListener );
155 
156     // XPackageManager
157     virtual ::rtl::OUString SAL_CALL getContext();
158     virtual css::uno::Sequence<
159         css::uno::Reference<css::deployment::XPackageTypeInfo> > SAL_CALL
160     getSupportedPackageTypes();
161 
162     virtual css::uno::Reference<css::task::XAbortChannel> SAL_CALL
163     createAbortChannel();
164 
165     virtual css::uno::Reference<css::deployment::XPackage> SAL_CALL addPackage(
166         ::rtl::OUString const & url,
167         css::uno::Sequence<css::beans::NamedValue> const & properties,
168         ::rtl::OUString const & mediaType,
169         css::uno::Reference<css::task::XAbortChannel> const & xAbortChannel,
170         css::uno::Reference<css::ucb::XCommandEnvironment> const & xCmdEnv );
171 
172     virtual css::uno::Reference<css::deployment::XPackage> SAL_CALL importExtension(
173         css::uno::Reference<css::deployment::XPackage> const & extension,
174         css::uno::Reference<css::task::XAbortChannel> const & xAbortChannel,
175         css::uno::Reference<css::ucb::XCommandEnvironment> const & xCmdEnv );
176 
177     virtual void SAL_CALL removePackage(
178         ::rtl::OUString const & id, ::rtl::OUString const & fileName,
179         css::uno::Reference<css::task::XAbortChannel> const & xAbortChannel,
180         css::uno::Reference<css::ucb::XCommandEnvironment> const & xCmdEnv );
181 
182     ::rtl::OUString getDeployPath( ActivePackages::Data const & data );
183     css::uno::Reference<css::deployment::XPackage> SAL_CALL getDeployedPackage_(
184         ::rtl::OUString const & id, ::rtl::OUString const & fileName,
185         css::uno::Reference<css::ucb::XCommandEnvironment> const & xCmdEnv );
186     css::uno::Reference<css::deployment::XPackage> getDeployedPackage_(
187         ::rtl::OUString const & id, ActivePackages::Data const & data,
188         css::uno::Reference<css::ucb::XCommandEnvironment> const & xCmdEnv,
189         bool ignoreAlienPlatforms = false );
190     virtual css::uno::Reference<css::deployment::XPackage> SAL_CALL
191     getDeployedPackage(
192         ::rtl::OUString const & id, ::rtl::OUString const & fileName,
193         css::uno::Reference<css::ucb::XCommandEnvironment> const & xCmdEnv );
194 
195     css::uno::Sequence< css::uno::Reference<css::deployment::XPackage> >
196     getDeployedPackages_(
197         css::uno::Reference<css::ucb::XCommandEnvironment> const & xCmdEnv );
198     virtual css::uno::Sequence< css::uno::Reference<css::deployment::XPackage> >
199     SAL_CALL getDeployedPackages(
200         css::uno::Reference<css::task::XAbortChannel> const & xAbortChannel,
201         css::uno::Reference<css::ucb::XCommandEnvironment> const & xCmdEnv );
202 
203     virtual void SAL_CALL reinstallDeployedPackages(
204         css::uno::Reference<css::task::XAbortChannel> const & xAbortChannel,
205         css::uno::Reference<css::ucb::XCommandEnvironment> const & xCmdEnv );
206 
207     virtual ::sal_Bool SAL_CALL isReadOnly(  );
208 
209     virtual ::sal_Bool SAL_CALL synchronize(
210         css::uno::Reference<css::task::XAbortChannel> const & xAbortChannel,
211         css::uno::Reference<css::ucb::XCommandEnvironment> const & xCmdEnv );
212 
213     virtual css::uno::Sequence<css::uno::Reference<css::deployment::XPackage> > SAL_CALL
214     getExtensionsWithUnacceptedLicenses(
215         css::uno::Reference<css::ucb::XCommandEnvironment> const & xCmdEnv);
216 
217     virtual sal_Int32 SAL_CALL checkPrerequisites(
218         css::uno::Reference<css::deployment::XPackage> const & extension,
219         css::uno::Reference<css::task::XAbortChannel> const & xAbortChannel,
220         css::uno::Reference<css::ucb::XCommandEnvironment> const & xCmdEnv );
221         };
222 
223 //______________________________________________________________________________
224 inline void PackageManagerImpl::check()
225 {
226     ::osl::MutexGuard guard( getMutex() );
227     if (rBHelper.bInDispose || rBHelper.bDisposed)
228         throw css::lang::DisposedException(
229             OUSTR("PackageManager instance has already been disposed!"),
230             static_cast< ::cppu::OWeakObject * >(this) );
231 }
232 
233 //______________________________________________________________________________
234 inline void PackageManagerImpl::logIntern( css::uno::Any const & status )
235 {
236     if (m_xLogFile.is())
237         m_xLogFile->update( status );
238 }
239 
240 }
241 
242 #endif
243