1*b1cdbd2cSJim Jagielski /************************************************************** 2*b1cdbd2cSJim Jagielski * 3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one 4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file 5*b1cdbd2cSJim Jagielski * distributed with this work for additional information 6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file 7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the 8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance 9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at 10*b1cdbd2cSJim Jagielski * 11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0 12*b1cdbd2cSJim Jagielski * 13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing, 14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an 15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the 17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations 18*b1cdbd2cSJim Jagielski * under the License. 19*b1cdbd2cSJim Jagielski * 20*b1cdbd2cSJim Jagielski *************************************************************/ 21*b1cdbd2cSJim Jagielski 22*b1cdbd2cSJim Jagielski 23*b1cdbd2cSJim Jagielski 24*b1cdbd2cSJim Jagielski #if ! defined INCLUDED_DP_REGISTRY_H 25*b1cdbd2cSJim Jagielski #define INCLUDED_DP_REGISTRY_H 26*b1cdbd2cSJim Jagielski 27*b1cdbd2cSJim Jagielski #include "dp_misc.h" 28*b1cdbd2cSJim Jagielski #include "dp_resource.h" 29*b1cdbd2cSJim Jagielski #include "dp_interact.h" 30*b1cdbd2cSJim Jagielski #include "rtl/ref.hxx" 31*b1cdbd2cSJim Jagielski #include "cppuhelper/weakref.hxx" 32*b1cdbd2cSJim Jagielski #include "cppuhelper/implbase1.hxx" 33*b1cdbd2cSJim Jagielski #include "cppuhelper/compbase1.hxx" 34*b1cdbd2cSJim Jagielski #include "cppuhelper/compbase2.hxx" 35*b1cdbd2cSJim Jagielski #include "tools/inetmime.hxx" 36*b1cdbd2cSJim Jagielski #include "com/sun/star/lang/XEventListener.hpp" 37*b1cdbd2cSJim Jagielski #include "com/sun/star/deployment/XPackageRegistry.hpp" 38*b1cdbd2cSJim Jagielski #include "com/sun/star/deployment/XPackageManager.hpp" 39*b1cdbd2cSJim Jagielski #include "com/sun/star/deployment/InvalidRemovedParameterException.hpp" 40*b1cdbd2cSJim Jagielski #include <memory> 41*b1cdbd2cSJim Jagielski #include <hash_map> 42*b1cdbd2cSJim Jagielski #include <list> 43*b1cdbd2cSJim Jagielski #include "dp_registry.hrc" 44*b1cdbd2cSJim Jagielski 45*b1cdbd2cSJim Jagielski namespace dp_registry 46*b1cdbd2cSJim Jagielski { 47*b1cdbd2cSJim Jagielski namespace backend 48*b1cdbd2cSJim Jagielski { 49*b1cdbd2cSJim Jagielski 50*b1cdbd2cSJim Jagielski namespace css = ::com::sun::star; 51*b1cdbd2cSJim Jagielski 52*b1cdbd2cSJim Jagielski class PackageRegistryBackend; 53*b1cdbd2cSJim Jagielski 54*b1cdbd2cSJim Jagielski char const* const BACKEND_SERVICE_NAME = 55*b1cdbd2cSJim Jagielski "com.sun.star.deployment.PackageRegistryBackend"; 56*b1cdbd2cSJim Jagielski 57*b1cdbd2cSJim Jagielski typedef ::cppu::WeakComponentImplHelper1< 58*b1cdbd2cSJim Jagielski css::deployment::XPackage > t_PackageBase; 59*b1cdbd2cSJim Jagielski 60*b1cdbd2cSJim Jagielski //============================================================================== 61*b1cdbd2cSJim Jagielski class Package : protected ::dp_misc::MutexHolder, public t_PackageBase 62*b1cdbd2cSJim Jagielski { 63*b1cdbd2cSJim Jagielski PackageRegistryBackend * getMyBackend() const; 64*b1cdbd2cSJim Jagielski void processPackage_impl( 65*b1cdbd2cSJim Jagielski bool registerPackage, 66*b1cdbd2cSJim Jagielski bool startup, 67*b1cdbd2cSJim Jagielski css::uno::Reference<css::task::XAbortChannel> const & xAbortChannel, 68*b1cdbd2cSJim Jagielski css::uno::Reference<css::ucb::XCommandEnvironment> const & xCmdEnv ); 69*b1cdbd2cSJim Jagielski 70*b1cdbd2cSJim Jagielski protected: 71*b1cdbd2cSJim Jagielski ::rtl::Reference<PackageRegistryBackend> m_myBackend; 72*b1cdbd2cSJim Jagielski const ::rtl::OUString m_url; 73*b1cdbd2cSJim Jagielski ::rtl::OUString m_name; 74*b1cdbd2cSJim Jagielski ::rtl::OUString m_displayName; 75*b1cdbd2cSJim Jagielski const css::uno::Reference<css::deployment::XPackageTypeInfo> m_xPackageType; 76*b1cdbd2cSJim Jagielski const bool m_bRemoved; 77*b1cdbd2cSJim Jagielski //Only set if m_bRemoved = true; 78*b1cdbd2cSJim Jagielski const ::rtl::OUString m_identifier; 79*b1cdbd2cSJim Jagielski 80*b1cdbd2cSJim Jagielski void check() const; 81*b1cdbd2cSJim Jagielski void fireModified(); 82*b1cdbd2cSJim Jagielski virtual void SAL_CALL disposing(); 83*b1cdbd2cSJim Jagielski 84*b1cdbd2cSJim Jagielski void checkAborted( 85*b1cdbd2cSJim Jagielski ::rtl::Reference< ::dp_misc::AbortChannel > const & abortChannel ); 86*b1cdbd2cSJim Jagielski 87*b1cdbd2cSJim Jagielski // @@@ to be implemented by specific backend: 88*b1cdbd2cSJim Jagielski virtual css::beans::Optional< css::beans::Ambiguous<sal_Bool> > 89*b1cdbd2cSJim Jagielski isRegistered_( 90*b1cdbd2cSJim Jagielski ::osl::ResettableMutexGuard & guard, 91*b1cdbd2cSJim Jagielski ::rtl::Reference< ::dp_misc::AbortChannel > const & abortChannel, 92*b1cdbd2cSJim Jagielski css::uno::Reference<css::ucb::XCommandEnvironment> const & xCmdEnv ) 93*b1cdbd2cSJim Jagielski = 0; 94*b1cdbd2cSJim Jagielski virtual void processPackage_( 95*b1cdbd2cSJim Jagielski ::osl::ResettableMutexGuard & guard, 96*b1cdbd2cSJim Jagielski bool registerPackage, 97*b1cdbd2cSJim Jagielski bool startup, 98*b1cdbd2cSJim Jagielski ::rtl::Reference< ::dp_misc::AbortChannel > const & abortChannel, 99*b1cdbd2cSJim Jagielski css::uno::Reference<css::ucb::XCommandEnvironment> const & xCmdEnv ) 100*b1cdbd2cSJim Jagielski = 0; 101*b1cdbd2cSJim Jagielski 102*b1cdbd2cSJim Jagielski virtual ~Package(); 103*b1cdbd2cSJim Jagielski Package( ::rtl::Reference<PackageRegistryBackend> const & myBackend, 104*b1cdbd2cSJim Jagielski ::rtl::OUString const & url, 105*b1cdbd2cSJim Jagielski ::rtl::OUString const & name, 106*b1cdbd2cSJim Jagielski ::rtl::OUString const & displayName, 107*b1cdbd2cSJim Jagielski css::uno::Reference<css::deployment::XPackageTypeInfo> const & 108*b1cdbd2cSJim Jagielski xPackageType, 109*b1cdbd2cSJim Jagielski bool bRemoved, 110*b1cdbd2cSJim Jagielski ::rtl::OUString const & identifier); 111*b1cdbd2cSJim Jagielski 112*b1cdbd2cSJim Jagielski public: 113*b1cdbd2cSJim Jagielski 114*b1cdbd2cSJim Jagielski class TypeInfo : 115*b1cdbd2cSJim Jagielski public ::cppu::WeakImplHelper1<css::deployment::XPackageTypeInfo> 116*b1cdbd2cSJim Jagielski { 117*b1cdbd2cSJim Jagielski const ::rtl::OUString m_mediaType; 118*b1cdbd2cSJim Jagielski const ::rtl::OUString m_fileFilter; 119*b1cdbd2cSJim Jagielski const ::rtl::OUString m_shortDescr; 120*b1cdbd2cSJim Jagielski const sal_uInt16 m_smallIcon, m_smallIcon_HC; 121*b1cdbd2cSJim Jagielski public: 122*b1cdbd2cSJim Jagielski virtual ~TypeInfo(); TypeInfo(::rtl::OUString const & mediaType,::rtl::OUString const & fileFilter,::rtl::OUString const & shortDescr,sal_uInt16 smallIcon,sal_uInt16 smallIcon_HC)123*b1cdbd2cSJim Jagielski TypeInfo( ::rtl::OUString const & mediaType, 124*b1cdbd2cSJim Jagielski ::rtl::OUString const & fileFilter, 125*b1cdbd2cSJim Jagielski ::rtl::OUString const & shortDescr, 126*b1cdbd2cSJim Jagielski sal_uInt16 smallIcon, sal_uInt16 smallIcon_HC ) 127*b1cdbd2cSJim Jagielski : m_mediaType(mediaType), m_fileFilter(fileFilter), 128*b1cdbd2cSJim Jagielski m_shortDescr(shortDescr), 129*b1cdbd2cSJim Jagielski m_smallIcon(smallIcon), m_smallIcon_HC(smallIcon_HC) 130*b1cdbd2cSJim Jagielski {} 131*b1cdbd2cSJim Jagielski // XPackageTypeInfo 132*b1cdbd2cSJim Jagielski virtual ::rtl::OUString SAL_CALL getMediaType() 133*b1cdbd2cSJim Jagielski throw (css::uno::RuntimeException); 134*b1cdbd2cSJim Jagielski virtual ::rtl::OUString SAL_CALL getDescription() 135*b1cdbd2cSJim Jagielski throw (css::deployment::ExtensionRemovedException, 136*b1cdbd2cSJim Jagielski css::uno::RuntimeException); 137*b1cdbd2cSJim Jagielski virtual ::rtl::OUString SAL_CALL getShortDescription() 138*b1cdbd2cSJim Jagielski throw (css::deployment::ExtensionRemovedException, 139*b1cdbd2cSJim Jagielski css::uno::RuntimeException); 140*b1cdbd2cSJim Jagielski virtual ::rtl::OUString SAL_CALL getFileFilter() 141*b1cdbd2cSJim Jagielski throw (css::uno::RuntimeException); 142*b1cdbd2cSJim Jagielski virtual css::uno::Any SAL_CALL getIcon( sal_Bool highContrast, 143*b1cdbd2cSJim Jagielski sal_Bool smallIcon ) 144*b1cdbd2cSJim Jagielski throw (css::uno::RuntimeException); 145*b1cdbd2cSJim Jagielski }; 146*b1cdbd2cSJim Jagielski 147*b1cdbd2cSJim Jagielski // XComponent 148*b1cdbd2cSJim Jagielski virtual void SAL_CALL dispose() throw (css::uno::RuntimeException); 149*b1cdbd2cSJim Jagielski virtual void SAL_CALL addEventListener( 150*b1cdbd2cSJim Jagielski css::uno::Reference<css::lang::XEventListener> const & xListener ) 151*b1cdbd2cSJim Jagielski throw (css::uno::RuntimeException); 152*b1cdbd2cSJim Jagielski virtual void SAL_CALL removeEventListener( 153*b1cdbd2cSJim Jagielski css::uno::Reference<css::lang::XEventListener> const & xListener ) 154*b1cdbd2cSJim Jagielski throw (css::uno::RuntimeException); 155*b1cdbd2cSJim Jagielski 156*b1cdbd2cSJim Jagielski // XModifyBroadcaster 157*b1cdbd2cSJim Jagielski virtual void SAL_CALL addModifyListener( 158*b1cdbd2cSJim Jagielski css::uno::Reference<css::util::XModifyListener> const & xListener ) 159*b1cdbd2cSJim Jagielski throw (css::uno::RuntimeException); 160*b1cdbd2cSJim Jagielski virtual void SAL_CALL removeModifyListener( 161*b1cdbd2cSJim Jagielski css::uno::Reference<css::util::XModifyListener> const & xListener ) 162*b1cdbd2cSJim Jagielski throw (css::uno::RuntimeException); 163*b1cdbd2cSJim Jagielski 164*b1cdbd2cSJim Jagielski // XPackage 165*b1cdbd2cSJim Jagielski virtual css::uno::Reference<css::task::XAbortChannel> SAL_CALL 166*b1cdbd2cSJim Jagielski createAbortChannel() throw (css::uno::RuntimeException); 167*b1cdbd2cSJim Jagielski virtual css::beans::Optional< css::beans::Ambiguous<sal_Bool> > 168*b1cdbd2cSJim Jagielski SAL_CALL isRegistered( 169*b1cdbd2cSJim Jagielski css::uno::Reference<css::task::XAbortChannel> const & xAbortChannel, 170*b1cdbd2cSJim Jagielski css::uno::Reference<css::ucb::XCommandEnvironment> const & xCmdEnv ) 171*b1cdbd2cSJim Jagielski throw (css::deployment::DeploymentException, 172*b1cdbd2cSJim Jagielski css::ucb::CommandFailedException, 173*b1cdbd2cSJim Jagielski css::ucb::CommandAbortedException, 174*b1cdbd2cSJim Jagielski css::uno::RuntimeException); 175*b1cdbd2cSJim Jagielski 176*b1cdbd2cSJim Jagielski virtual ::sal_Int32 SAL_CALL checkPrerequisites( 177*b1cdbd2cSJim Jagielski const css::uno::Reference< css::task::XAbortChannel >& xAbortChannel, 178*b1cdbd2cSJim Jagielski const css::uno::Reference< css::ucb::XCommandEnvironment >& xCmdEnv, 179*b1cdbd2cSJim Jagielski sal_Bool noLicenseChecking) 180*b1cdbd2cSJim Jagielski throw (css::deployment::DeploymentException, 181*b1cdbd2cSJim Jagielski css::deployment::ExtensionRemovedException, 182*b1cdbd2cSJim Jagielski css::ucb::CommandFailedException, 183*b1cdbd2cSJim Jagielski css::ucb::CommandAbortedException, 184*b1cdbd2cSJim Jagielski css::uno::RuntimeException); 185*b1cdbd2cSJim Jagielski 186*b1cdbd2cSJim Jagielski virtual ::sal_Bool SAL_CALL checkDependencies( 187*b1cdbd2cSJim Jagielski const css::uno::Reference< css::ucb::XCommandEnvironment >& xCmdEnv ) 188*b1cdbd2cSJim Jagielski throw (css::deployment::DeploymentException, 189*b1cdbd2cSJim Jagielski css::deployment::ExtensionRemovedException, 190*b1cdbd2cSJim Jagielski css::ucb::CommandFailedException, 191*b1cdbd2cSJim Jagielski css::uno::RuntimeException); 192*b1cdbd2cSJim Jagielski 193*b1cdbd2cSJim Jagielski virtual void SAL_CALL registerPackage( 194*b1cdbd2cSJim Jagielski sal_Bool startup, 195*b1cdbd2cSJim Jagielski css::uno::Reference<css::task::XAbortChannel> const & xAbortChannel, 196*b1cdbd2cSJim Jagielski css::uno::Reference<css::ucb::XCommandEnvironment> const & xCmdEnv ) 197*b1cdbd2cSJim Jagielski throw (css::deployment::DeploymentException, 198*b1cdbd2cSJim Jagielski css::deployment::ExtensionRemovedException, 199*b1cdbd2cSJim Jagielski css::ucb::CommandFailedException, 200*b1cdbd2cSJim Jagielski css::ucb::CommandAbortedException, 201*b1cdbd2cSJim Jagielski css::lang::IllegalArgumentException, css::uno::RuntimeException); 202*b1cdbd2cSJim Jagielski virtual void SAL_CALL revokePackage( 203*b1cdbd2cSJim Jagielski css::uno::Reference<css::task::XAbortChannel> const & xAbortChannel, 204*b1cdbd2cSJim Jagielski css::uno::Reference<css::ucb::XCommandEnvironment> const & xCmdEnv ) 205*b1cdbd2cSJim Jagielski throw (css::deployment::DeploymentException, 206*b1cdbd2cSJim Jagielski css::ucb::CommandFailedException, 207*b1cdbd2cSJim Jagielski css::ucb::CommandAbortedException, 208*b1cdbd2cSJim Jagielski css::lang::IllegalArgumentException, 209*b1cdbd2cSJim Jagielski css::uno::RuntimeException); 210*b1cdbd2cSJim Jagielski virtual sal_Bool SAL_CALL isBundle() 211*b1cdbd2cSJim Jagielski throw (css::uno::RuntimeException); 212*b1cdbd2cSJim Jagielski virtual css::uno::Sequence< css::uno::Reference<css::deployment::XPackage> > 213*b1cdbd2cSJim Jagielski SAL_CALL getBundle( 214*b1cdbd2cSJim Jagielski css::uno::Reference<css::task::XAbortChannel> const & xAbortChannel, 215*b1cdbd2cSJim Jagielski css::uno::Reference<css::ucb::XCommandEnvironment> const & xCmdEnv ) 216*b1cdbd2cSJim Jagielski throw (css::deployment::DeploymentException, 217*b1cdbd2cSJim Jagielski css::ucb::CommandFailedException, 218*b1cdbd2cSJim Jagielski css::ucb::CommandAbortedException, 219*b1cdbd2cSJim Jagielski css::lang::IllegalArgumentException, 220*b1cdbd2cSJim Jagielski css::uno::RuntimeException); 221*b1cdbd2cSJim Jagielski virtual ::rtl::OUString SAL_CALL getName() 222*b1cdbd2cSJim Jagielski throw (css::uno::RuntimeException); 223*b1cdbd2cSJim Jagielski virtual css::beans::Optional< ::rtl::OUString > SAL_CALL getIdentifier() 224*b1cdbd2cSJim Jagielski throw (css::uno::RuntimeException); 225*b1cdbd2cSJim Jagielski virtual ::rtl::OUString SAL_CALL getVersion() 226*b1cdbd2cSJim Jagielski throw (css::deployment::ExtensionRemovedException, 227*b1cdbd2cSJim Jagielski css::uno::RuntimeException); 228*b1cdbd2cSJim Jagielski virtual ::rtl::OUString SAL_CALL getURL() 229*b1cdbd2cSJim Jagielski throw (css::uno::RuntimeException); 230*b1cdbd2cSJim Jagielski virtual ::rtl::OUString SAL_CALL getDisplayName() 231*b1cdbd2cSJim Jagielski throw (css::deployment::ExtensionRemovedException, 232*b1cdbd2cSJim Jagielski css::uno::RuntimeException); 233*b1cdbd2cSJim Jagielski virtual ::rtl::OUString SAL_CALL getDescription() 234*b1cdbd2cSJim Jagielski throw (css::deployment::ExtensionRemovedException, 235*b1cdbd2cSJim Jagielski css::uno::RuntimeException); 236*b1cdbd2cSJim Jagielski virtual ::rtl::OUString SAL_CALL getLicenseText() 237*b1cdbd2cSJim Jagielski throw (css::deployment::ExtensionRemovedException, 238*b1cdbd2cSJim Jagielski css::uno::RuntimeException); 239*b1cdbd2cSJim Jagielski virtual css::uno::Sequence< ::rtl::OUString > SAL_CALL 240*b1cdbd2cSJim Jagielski getUpdateInformationURLs() 241*b1cdbd2cSJim Jagielski throw (css::deployment::ExtensionRemovedException, 242*b1cdbd2cSJim Jagielski css::uno::RuntimeException); 243*b1cdbd2cSJim Jagielski virtual css::beans::StringPair SAL_CALL getPublisherInfo() 244*b1cdbd2cSJim Jagielski throw (css::deployment::ExtensionRemovedException, 245*b1cdbd2cSJim Jagielski css::uno::RuntimeException); 246*b1cdbd2cSJim Jagielski virtual css::uno::Reference< css::graphic::XGraphic > SAL_CALL 247*b1cdbd2cSJim Jagielski getIcon( sal_Bool bHighContrast ) 248*b1cdbd2cSJim Jagielski throw (css::deployment::ExtensionRemovedException, 249*b1cdbd2cSJim Jagielski css::uno::RuntimeException); 250*b1cdbd2cSJim Jagielski virtual css::uno::Reference<css::deployment::XPackageTypeInfo> SAL_CALL 251*b1cdbd2cSJim Jagielski getPackageType() throw (css::uno::RuntimeException); 252*b1cdbd2cSJim Jagielski virtual void SAL_CALL exportTo( 253*b1cdbd2cSJim Jagielski ::rtl::OUString const & destFolderURL, 254*b1cdbd2cSJim Jagielski ::rtl::OUString const & newTitle, 255*b1cdbd2cSJim Jagielski sal_Int32 nameClashAction, 256*b1cdbd2cSJim Jagielski css::uno::Reference<css::ucb::XCommandEnvironment> const & xCmdEnv ) 257*b1cdbd2cSJim Jagielski throw (css::deployment::ExtensionRemovedException, 258*b1cdbd2cSJim Jagielski css::ucb::CommandFailedException, 259*b1cdbd2cSJim Jagielski css::ucb::CommandAbortedException, css::uno::RuntimeException); 260*b1cdbd2cSJim Jagielski virtual ::rtl::OUString SAL_CALL getRepositoryName() 261*b1cdbd2cSJim Jagielski throw (css::uno::RuntimeException); 262*b1cdbd2cSJim Jagielski virtual css::beans::Optional< ::rtl::OUString > SAL_CALL getRegistrationDataURL() 263*b1cdbd2cSJim Jagielski throw (css::deployment::ExtensionRemovedException, 264*b1cdbd2cSJim Jagielski css::uno::RuntimeException); 265*b1cdbd2cSJim Jagielski virtual sal_Bool SAL_CALL isRemoved() 266*b1cdbd2cSJim Jagielski throw (css::uno::RuntimeException); 267*b1cdbd2cSJim Jagielski 268*b1cdbd2cSJim Jagielski }; 269*b1cdbd2cSJim Jagielski 270*b1cdbd2cSJim Jagielski typedef ::cppu::WeakComponentImplHelper2< 271*b1cdbd2cSJim Jagielski css::lang::XEventListener, 272*b1cdbd2cSJim Jagielski css::deployment::XPackageRegistry > t_BackendBase; 273*b1cdbd2cSJim Jagielski 274*b1cdbd2cSJim Jagielski //============================================================================== 275*b1cdbd2cSJim Jagielski class PackageRegistryBackend 276*b1cdbd2cSJim Jagielski : protected ::dp_misc::MutexHolder, public t_BackendBase 277*b1cdbd2cSJim Jagielski { 278*b1cdbd2cSJim Jagielski //The map held originally WeakReferences. The map entries are removed in the disposing 279*b1cdbd2cSJim Jagielski //function, which is called when the XPackages are destructed or they are 280*b1cdbd2cSJim Jagielski //explicitely disposed. The latter happens, for example, when a extension is 281*b1cdbd2cSJim Jagielski //removed (see dp_manager.cxx). However, because of how the help systems work, now 282*b1cdbd2cSJim Jagielski // XPackageManager::getDeployedPackages is called often. This results in a lot 283*b1cdbd2cSJim Jagielski //of bindPackage calls which are costly. Therefore we keep hard references in 284*b1cdbd2cSJim Jagielski //the map now. 285*b1cdbd2cSJim Jagielski typedef ::std::hash_map< 286*b1cdbd2cSJim Jagielski ::rtl::OUString, css::uno::Reference<css::deployment::XPackage>, 287*b1cdbd2cSJim Jagielski ::rtl::OUStringHash > t_string2ref; 288*b1cdbd2cSJim Jagielski t_string2ref m_bound; 289*b1cdbd2cSJim Jagielski 290*b1cdbd2cSJim Jagielski protected: 291*b1cdbd2cSJim Jagielski ::rtl::OUString m_cachePath; 292*b1cdbd2cSJim Jagielski css::uno::Reference<css::uno::XComponentContext> m_xComponentContext; 293*b1cdbd2cSJim Jagielski 294*b1cdbd2cSJim Jagielski ::rtl::OUString m_context; 295*b1cdbd2cSJim Jagielski // currently only for library containers: 296*b1cdbd2cSJim Jagielski enum { 297*b1cdbd2cSJim Jagielski CONTEXT_UNKNOWN, 298*b1cdbd2cSJim Jagielski CONTEXT_USER, CONTEXT_SHARED,CONTEXT_BUNDLED, CONTEXT_TMP, CONTEXT_BUNDLED_PREREG, 299*b1cdbd2cSJim Jagielski CONTEXT_DOCUMENT 300*b1cdbd2cSJim Jagielski } m_eContext; 301*b1cdbd2cSJim Jagielski bool m_readOnly; 302*b1cdbd2cSJim Jagielski 303*b1cdbd2cSJim Jagielski struct StrCannotDetectMediaType : public ::dp_misc::StaticResourceString< 304*b1cdbd2cSJim Jagielski StrCannotDetectMediaType, RID_STR_CANNOT_DETECT_MEDIA_TYPE> {}; 305*b1cdbd2cSJim Jagielski struct StrUnsupportedMediaType : public ::dp_misc::StaticResourceString< 306*b1cdbd2cSJim Jagielski StrUnsupportedMediaType, RID_STR_UNSUPPORTED_MEDIA_TYPE> {}; 307*b1cdbd2cSJim Jagielski 308*b1cdbd2cSJim Jagielski // @@@ to be implemented by specific backend: 309*b1cdbd2cSJim Jagielski virtual css::uno::Reference<css::deployment::XPackage> bindPackage_( 310*b1cdbd2cSJim Jagielski ::rtl::OUString const & url, ::rtl::OUString const & mediaType, 311*b1cdbd2cSJim Jagielski sal_Bool bRemoved, ::rtl::OUString const & identifier, 312*b1cdbd2cSJim Jagielski css::uno::Reference<css::ucb::XCommandEnvironment> const & xCmdEnv ) 313*b1cdbd2cSJim Jagielski = 0; 314*b1cdbd2cSJim Jagielski 315*b1cdbd2cSJim Jagielski void check(); 316*b1cdbd2cSJim Jagielski virtual void SAL_CALL disposing(); 317*b1cdbd2cSJim Jagielski 318*b1cdbd2cSJim Jagielski virtual ~PackageRegistryBackend(); 319*b1cdbd2cSJim Jagielski PackageRegistryBackend( 320*b1cdbd2cSJim Jagielski css::uno::Sequence<css::uno::Any> const & args, 321*b1cdbd2cSJim Jagielski css::uno::Reference<css::uno::XComponentContext> const & xContext ); 322*b1cdbd2cSJim Jagielski 323*b1cdbd2cSJim Jagielski /* creates a folder with a unique name. 324*b1cdbd2cSJim Jagielski If url is empty then it is created in the the backend folder, otherwise 325*b1cdbd2cSJim Jagielski at a location relative to that folder specified by url. 326*b1cdbd2cSJim Jagielski */ 327*b1cdbd2cSJim Jagielski ::rtl::OUString createFolder( 328*b1cdbd2cSJim Jagielski ::rtl::OUString const & relUrl, 329*b1cdbd2cSJim Jagielski css::uno::Reference<css::ucb::XCommandEnvironment> const & xCmdEnv); 330*b1cdbd2cSJim Jagielski /* deletes folders and files. 331*b1cdbd2cSJim Jagielski 332*b1cdbd2cSJim Jagielski All folder all files which end with ".tmp" or ".tmp_" and which are 333*b1cdbd2cSJim Jagielski not used are deleted. 334*b1cdbd2cSJim Jagielski */ 335*b1cdbd2cSJim Jagielski void deleteUnusedFolders( 336*b1cdbd2cSJim Jagielski ::rtl::OUString const & relUrl, 337*b1cdbd2cSJim Jagielski ::std::list< ::rtl::OUString> const & usedFolders); 338*b1cdbd2cSJim Jagielski /* deletes one folder with a "temporary" name and the corresponding 339*b1cdbd2cSJim Jagielski tmp file, which was used to derive the folder name. 340*b1cdbd2cSJim Jagielski */ 341*b1cdbd2cSJim Jagielski static void deleteTempFolder( 342*b1cdbd2cSJim Jagielski ::rtl::OUString const & folderUrl); 343*b1cdbd2cSJim Jagielski 344*b1cdbd2cSJim Jagielski ::rtl::OUString getSharedRegistrationDataURL( 345*b1cdbd2cSJim Jagielski css::uno::Reference<css::deployment::XPackage> const & extension, 346*b1cdbd2cSJim Jagielski css::uno::Reference<css::deployment::XPackage> const & item); 347*b1cdbd2cSJim Jagielski 348*b1cdbd2cSJim Jagielski /* The backends must implement this function, which is called 349*b1cdbd2cSJim Jagielski from XPackageRegistry::packageRemoved (also implemented here). 350*b1cdbd2cSJim Jagielski This ensure that the backends clean up their registration data 351*b1cdbd2cSJim Jagielski when an extension was removed. 352*b1cdbd2cSJim Jagielski */ 353*b1cdbd2cSJim Jagielski // virtual void deleteDbEntry( ::rtl::OUString const & url) = 0; 354*b1cdbd2cSJim Jagielski 355*b1cdbd2cSJim Jagielski 356*b1cdbd2cSJim Jagielski 357*b1cdbd2cSJim Jagielski public: 358*b1cdbd2cSJim Jagielski struct StrRegisteringPackage : public ::dp_misc::StaticResourceString< 359*b1cdbd2cSJim Jagielski StrRegisteringPackage, RID_STR_REGISTERING_PACKAGE> {}; 360*b1cdbd2cSJim Jagielski struct StrRevokingPackage : public ::dp_misc::StaticResourceString< 361*b1cdbd2cSJim Jagielski StrRevokingPackage, RID_STR_REVOKING_PACKAGE> {}; 362*b1cdbd2cSJim Jagielski 363*b1cdbd2cSJim Jagielski inline css::uno::Reference<css::uno::XComponentContext> const & getComponentContext() const364*b1cdbd2cSJim Jagielski getComponentContext() const { return m_xComponentContext; } 365*b1cdbd2cSJim Jagielski getCachePath() const366*b1cdbd2cSJim Jagielski inline ::rtl::OUString const & getCachePath() const { return m_cachePath; } transientMode() const367*b1cdbd2cSJim Jagielski inline bool transientMode() const { return m_cachePath.getLength() == 0; } 368*b1cdbd2cSJim Jagielski getContext() const369*b1cdbd2cSJim Jagielski inline ::rtl::OUString getContext() const {return m_context; } 370*b1cdbd2cSJim Jagielski 371*b1cdbd2cSJim Jagielski // XEventListener 372*b1cdbd2cSJim Jagielski virtual void SAL_CALL disposing( css::lang::EventObject const & evt ) 373*b1cdbd2cSJim Jagielski throw (css::uno::RuntimeException); 374*b1cdbd2cSJim Jagielski 375*b1cdbd2cSJim Jagielski // XPackageRegistry 376*b1cdbd2cSJim Jagielski virtual css::uno::Reference<css::deployment::XPackage> SAL_CALL bindPackage( 377*b1cdbd2cSJim Jagielski ::rtl::OUString const & url, ::rtl::OUString const & mediaType, 378*b1cdbd2cSJim Jagielski sal_Bool bRemoved, ::rtl::OUString const & identifier, 379*b1cdbd2cSJim Jagielski css::uno::Reference<css::ucb::XCommandEnvironment> const & xCmdEnv ) 380*b1cdbd2cSJim Jagielski throw (css::deployment::DeploymentException, 381*b1cdbd2cSJim Jagielski css::deployment::InvalidRemovedParameterException, 382*b1cdbd2cSJim Jagielski css::ucb::CommandFailedException, 383*b1cdbd2cSJim Jagielski css::lang::IllegalArgumentException, css::uno::RuntimeException); 384*b1cdbd2cSJim Jagielski 385*b1cdbd2cSJim Jagielski // virtual void SAL_CALL packageRemoved( 386*b1cdbd2cSJim Jagielski // ::rtl::OUString const & url, ::rtl::OUString const & mediaType) 387*b1cdbd2cSJim Jagielski // throw (css::deployment::DeploymentException, 388*b1cdbd2cSJim Jagielski // css::uno::RuntimeException); 389*b1cdbd2cSJim Jagielski 390*b1cdbd2cSJim Jagielski }; 391*b1cdbd2cSJim Jagielski 392*b1cdbd2cSJim Jagielski } 393*b1cdbd2cSJim Jagielski } 394*b1cdbd2cSJim Jagielski 395*b1cdbd2cSJim Jagielski #endif 396*b1cdbd2cSJim Jagielski 397