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