xref: /trunk/main/desktop/source/deployment/manager/dp_extensionmanager.hxx (revision 91144cd0085a7583d2099b982122deb2184ab956)
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 
25 #if ! defined INCLUDED_DP_EXTENSIONMANAGER_H
26 #define INCLUDED_DP_EXTENSIONMANAGER_H
27 
28 #include "dp_manager.hrc"
29 #include "dp_misc.h"
30 #include "dp_interact.h"
31 #include "dp_activepackages.hxx"
32 #include "rtl/ref.hxx"
33 #include "cppuhelper/compbase1.hxx"
34 #include "ucbhelper/content.hxx"
35 #include "com/sun/star/deployment/XPackageRegistry.hpp"
36 #include "com/sun/star/deployment/XPackageManager.hpp"
37 #include "osl/mutex.hxx"
38 #include <list>
39 
40 
41 namespace css = ::com::sun::star;
42 
43 namespace dp_manager {
44 
45 typedef ::std::hash_map<
46     ::rtl::OUString,
47     ::std::vector<css::uno::Reference<css::deployment::XPackage> >,
48     ::rtl::OUStringHash > id2extensions;
49 
50 
51 class ExtensionManager : private ::dp_misc::MutexHolder,
52         public ::cppu::WeakComponentImplHelper1< css::deployment::XExtensionManager >
53 {
54 public:
55     ExtensionManager( css::uno::Reference< css::uno::XComponentContext >const& xContext);
56     virtual     ~ExtensionManager();
57 
58     static css::uno::Sequence< ::rtl::OUString > getServiceNames();
59     static ::rtl::OUString getImplName();
60 
61     void check();
62     void fireModified();
63 
64 public:
65 
66 //    XModifyBroadcaster
67     virtual void SAL_CALL addModifyListener(
68        css::uno::Reference<css::util::XModifyListener> const & xListener );
69     virtual void SAL_CALL removeModifyListener(
70        css::uno::Reference<css::util::XModifyListener> const & xListener );
71 
72 //XExtensionManager
73     virtual css::uno::Sequence<
74         css::uno::Reference<css::deployment::XPackageTypeInfo> > SAL_CALL
75         getSupportedPackageTypes();
76 
77     virtual css::uno::Reference<css::task::XAbortChannel> SAL_CALL
78     createAbortChannel();
79 
80     virtual css::uno::Reference<css::deployment::XPackage> SAL_CALL addExtension(
81         ::rtl::OUString const & url,
82         css::uno::Sequence<css::beans::NamedValue> const & properties,
83         ::rtl::OUString const & repository,
84         css::uno::Reference<css::task::XAbortChannel> const & xAbortChannel,
85         css::uno::Reference<css::ucb::XCommandEnvironment> const & xCmdEnv );
86 
87     virtual void SAL_CALL removeExtension(
88         ::rtl::OUString const & identifier,
89         ::rtl::OUString const & filename,
90         ::rtl::OUString const & repository,
91         css::uno::Reference<css::task::XAbortChannel> const & xAbortChannel,
92         css::uno::Reference<css::ucb::XCommandEnvironment> const & xCmdEnv );
93 
94     virtual void SAL_CALL enableExtension(
95         css::uno::Reference<css::deployment::XPackage> const & extension,
96         css::uno::Reference<css::task::XAbortChannel> const & xAbortChannel,
97         css::uno::Reference<css::ucb::XCommandEnvironment> const & xCmdEnv );
98 
99     virtual void SAL_CALL disableExtension(
100         css::uno::Reference<css::deployment::XPackage> const & extension,
101         css::uno::Reference<css::task::XAbortChannel> const & xAbortChannel,
102         css::uno::Reference<css::ucb::XCommandEnvironment> const & xCmdEnv );
103 
104 
105     virtual sal_Int32 SAL_CALL checkPrerequisitesAndEnable(
106         css::uno::Reference<css::deployment::XPackage> const & extension,
107         css::uno::Reference<css::task::XAbortChannel> const & xAbortChannel,
108         css::uno::Reference<css::ucb::XCommandEnvironment> const & xCmdEnv );
109 
110 
111     virtual css::uno::Sequence< css::uno::Reference<css::deployment::XPackage> >
112         SAL_CALL getDeployedExtensions(
113         ::rtl::OUString const & repository,
114         css::uno::Reference<css::task::XAbortChannel> const &,
115         css::uno::Reference<css::ucb::XCommandEnvironment> const & xCmdEnv );
116 
117     virtual css::uno::Reference< css::deployment::XPackage>
118         SAL_CALL getDeployedExtension(
119         ::rtl::OUString const & repository,
120         ::rtl::OUString const & identifier,
121         ::rtl::OUString const & filename,
122         css::uno::Reference< css::ucb::XCommandEnvironment> const & xCmdEnv );
123 
124     virtual css::uno::Sequence<css::uno::Reference<css::deployment::XPackage> >
125     SAL_CALL getExtensionsWithSameIdentifier(
126         ::rtl::OUString const & identifier,
127         ::rtl::OUString const & filename,
128         css::uno::Reference< css::ucb::XCommandEnvironment> const & xCmdEnv );
129 
130     virtual css::uno::Sequence< css::uno::Sequence<css::uno::Reference<css::deployment::XPackage> > >
131         SAL_CALL getAllExtensions(
132         css::uno::Reference<css::task::XAbortChannel> const &,
133         css::uno::Reference<css::ucb::XCommandEnvironment> const & xCmdEnv );
134 
135 
136     virtual void SAL_CALL reinstallDeployedExtensions(
137         ::rtl::OUString const & repository,
138         css::uno::Reference< css::task::XAbortChannel> const & xAbortChannel,
139         css::uno::Reference< css::ucb::XCommandEnvironment> const & xCmdEnv );
140 
141     virtual sal_Bool SAL_CALL synchronize(
142         css::uno::Reference<css::task::XAbortChannel> const & xAbortChannel,
143         css::uno::Reference<css::ucb::XCommandEnvironment> const & xCmdEnv );
144 
145     virtual void SAL_CALL synchronizeBundledPrereg(
146         css::uno::Reference<css::task::XAbortChannel> const & xAbortChannel,
147         css::uno::Reference<css::ucb::XCommandEnvironment> const & xCmdEnv );
148 
149     virtual css::uno::Sequence<css::uno::Reference<css::deployment::XPackage> > SAL_CALL
150     getExtensionsWithUnacceptedLicenses(
151         ::rtl::OUString const & repository,
152         css::uno::Reference<css::ucb::XCommandEnvironment> const & xCmdEnv);
153 
154     virtual sal_Bool SAL_CALL isReadOnlyRepository(::rtl::OUString const & repository);
155 
156 private:
157 
158     struct StrSyncRepository : public ::dp_misc::StaticResourceString<
159         StrSyncRepository, RID_STR_SYNCHRONIZING_REPOSITORY> {};
160 
161     struct ExtensionInfos
162     {
163         ::rtl::OUString identifier;
164         ::rtl::OUString fileName;
165         ::rtl::OUString displayName;
166         ::rtl::OUString version;
167     };
168 
169     css::uno::Reference< css::uno::XComponentContext> m_xContext;
170     css::uno::Reference<css::deployment::XPackageManagerFactory> m_xPackageManagerFactory;
171 
172     //only to be used within addExtension
173     ::osl::Mutex m_addMutex;
174     /* contains the names of all repositories (except tmp) in order of there
175        priority. That is, the first element is "user" follod by "shared" and
176        then "bundled"
177      */
178     ::std::list< ::rtl::OUString > m_repositoryNames;
179 
180     css::uno::Reference<css::deployment::XPackageManager> getUserRepository();
181     css::uno::Reference<css::deployment::XPackageManager> getSharedRepository();
182     css::uno::Reference<css::deployment::XPackageManager> getBundledRepository();
183     css::uno::Reference<css::deployment::XPackageManager> getTmpRepository();
184     css::uno::Reference<css::deployment::XPackageManager> getBakRepository();
185 
186     bool isUserDisabled(::rtl::OUString const & identifier,
187                         ::rtl::OUString const & filename);
188 
189     bool isUserDisabled(
190         css::uno::Sequence<css::uno::Reference<css::deployment::XPackage> > const & seqExtSameId);
191 
192     void activateExtension(
193         ::rtl::OUString const & identifier,
194         ::rtl::OUString const & fileName,
195         bool bUserDisabled, bool bStartup,
196         css::uno::Reference<css::task::XAbortChannel> const & xAbortChannel,
197         css::uno::Reference<css::ucb::XCommandEnvironment> const & xCmdEnv);
198 
199     void activateExtension(
200         css::uno::Sequence<css::uno::Reference<css::deployment::XPackage> > const & seqExt,
201         bool bUserDisabled, bool bStartup,
202         css::uno::Reference<css::task::XAbortChannel> const & xAbortChannel,
203         css::uno::Reference<css::ucb::XCommandEnvironment> const & xCmdEnv );
204 
205 
206     ::std::list<css::uno::Reference<css::deployment::XPackage> >
207     getExtensionsWithSameId(::rtl::OUString  const & identifier,
208                             ::rtl::OUString const & fileName,
209                             css::uno::Reference< css::ucb::XCommandEnvironment> const & xCmdEnv =
210                             css::uno::Reference< css::ucb::XCommandEnvironment>());
211 
212     css::uno::Reference<css::deployment::XPackage> backupExtension(
213         ::rtl::OUString const & identifier, ::rtl::OUString const & fileName,
214         css::uno::Reference<css::deployment::XPackageManager> const & xPackageManager,
215         css::uno::Reference<css::ucb::XCommandEnvironment> const & xCmdEnv);
216 
217     void checkInstall(
218         ::rtl::OUString const & displayName,
219         css::uno::Reference<css::ucb::XCommandEnvironment> const & cmdEnv);
220 
221     void checkUpdate(
222         ::rtl::OUString const & newVersion,
223         ::rtl::OUString const & newDisplayName,
224         css::uno::Reference<css::deployment::XPackage> const & oldExtension,
225         css::uno::Reference<css::ucb::XCommandEnvironment> const & xCmdEnv);
226 
227     css::uno::Reference<css::deployment::XPackage> getTempExtension(
228         ::rtl::OUString const & url,
229         css::uno::Reference<css::task::XAbortChannel> const & xAbortChannel,
230         css::uno::Reference<css::ucb::XCommandEnvironment> const & xCmdEnv);
231 
232 
233     void addExtensionsToMap(
234         id2extensions & mapExt,
235         css::uno::Sequence<css::uno::Reference<css::deployment::XPackage> > const & seqExt,
236         ::rtl::OUString const & repository);
237 
238     css::uno::Reference<css::deployment::XPackageManager>
239     getPackageManager(::rtl::OUString const & repository);
240 
241     bool doChecksForAddExtension(
242         css::uno::Reference<css::deployment::XPackageManager> const & xPackageMgr,
243         css::uno::Sequence<css::beans::NamedValue> const & properties,
244         css::uno::Reference<css::deployment::XPackage> const & xTmpExtension,
245         css::uno::Reference<css::task::XAbortChannel> const & xAbortChannel,
246         css::uno::Reference<css::ucb::XCommandEnvironment> const & xCmdEnv,
247         css::uno::Reference<css::deployment::XPackage> & out_existingExtension );
248 
249 
250 };
251 
252 }
253 
254 
255 
256 
257 #endif
258