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 BASIC_SCRIPTCONTAINER_HXX 29 #define BASIC_SCRIPTCONTAINER_HXX 30 31 #include "namecont.hxx" 32 #include <basic/basmgr.hxx> 33 #include <com/sun/star/script/vba/XVBAModuleInfo.hpp> 34 #include <comphelper/uno3.hxx> 35 36 class BasicManager; 37 38 namespace basic 39 { 40 41 //============================================================================ 42 43 class SfxScriptLibraryContainer : public SfxLibraryContainer, public OldBasicPassword 44 { 45 ::rtl::OUString maScriptLanguage; 46 ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess > mxCodeNameAccess; 47 48 // Methods to distinguish between deffirent library types 49 virtual SfxLibrary* SAL_CALL implCreateLibrary( const ::rtl::OUString& aName ); 50 virtual SfxLibrary* SAL_CALL implCreateLibraryLink 51 ( const ::rtl::OUString& aName, const ::rtl::OUString& aLibInfoFileURL, 52 const ::rtl::OUString& StorageURL, sal_Bool ReadOnly ); 53 virtual ::com::sun::star::uno::Any SAL_CALL createEmptyLibraryElement( void ); 54 virtual bool SAL_CALL isLibraryElementValid( ::com::sun::star::uno::Any aElement ) const; 55 virtual void SAL_CALL writeLibraryElement 56 ( 57 const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer>& xLibrary, 58 const ::rtl::OUString& aElementName, 59 const ::com::sun::star::uno::Reference< ::com::sun::star::io::XOutputStream >& xOutput 60 ) 61 throw(::com::sun::star::uno::Exception); 62 63 virtual ::com::sun::star::uno::Any SAL_CALL importLibraryElement 64 ( 65 const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer>& xLibrary, 66 const ::rtl::OUString& aElementName, 67 const ::rtl::OUString& aFile, 68 const ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream >& xElementStream ); 69 70 virtual void SAL_CALL importFromOldStorage( const ::rtl::OUString& aFile ); 71 72 virtual SfxLibraryContainer* createInstanceImpl( void ); 73 74 75 // Password encryption 76 virtual sal_Bool implStorePasswordLibrary( SfxLibrary* pLib, const ::rtl::OUString& aName, 77 const ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage>& xStorage, const ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionHandler >& Handler ); 78 79 // New variant for library export 80 virtual sal_Bool implStorePasswordLibrary( SfxLibrary* pLib, const ::rtl::OUString& aName, 81 const ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage >& xStorage, 82 const ::rtl::OUString& aTargetURL, 83 const ::com::sun::star::uno::Reference< ::com::sun::star::ucb::XSimpleFileAccess > xToUseSFI, const ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionHandler >& Handler ); 84 85 virtual sal_Bool implLoadPasswordLibrary( SfxLibrary* pLib, const ::rtl::OUString& Name, 86 sal_Bool bVerifyPasswordOnly=false ) 87 throw(::com::sun::star::lang::WrappedTargetException, 88 ::com::sun::star::uno::RuntimeException); 89 90 virtual void onNewRootStorage(); 91 92 93 // OldBasicPassword interface 94 virtual void setLibraryPassword( const String& rLibraryName, const String& rPassword ); 95 virtual String getLibraryPassword( const String& rLibraryName ); 96 virtual void clearLibraryPassword( const String& rLibraryName ); 97 virtual sal_Bool hasLibraryPassword( const String& rLibraryName ); 98 99 virtual const sal_Char* SAL_CALL getInfoFileName() const; 100 virtual const sal_Char* SAL_CALL getOldInfoFileName() const; 101 virtual const sal_Char* SAL_CALL getLibElementFileExtension() const; 102 virtual const sal_Char* SAL_CALL getLibrariesDir() const; 103 104 public: 105 SfxScriptLibraryContainer( void ); 106 SfxScriptLibraryContainer( const ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage >& xStorage ); 107 108 109 // Methods XLibraryContainerPassword 110 virtual sal_Bool SAL_CALL isLibraryPasswordProtected( const ::rtl::OUString& Name ) 111 throw (::com::sun::star::container::NoSuchElementException, 112 ::com::sun::star::uno::RuntimeException); 113 virtual sal_Bool SAL_CALL isLibraryPasswordVerified( const ::rtl::OUString& Name ) 114 throw (::com::sun::star::lang::IllegalArgumentException, 115 ::com::sun::star::container::NoSuchElementException, 116 ::com::sun::star::uno::RuntimeException); 117 virtual sal_Bool SAL_CALL verifyLibraryPassword( const ::rtl::OUString& Name, const ::rtl::OUString& Password ) 118 throw (::com::sun::star::lang::IllegalArgumentException, 119 ::com::sun::star::container::NoSuchElementException, 120 ::com::sun::star::uno::RuntimeException); 121 virtual void SAL_CALL changeLibraryPassword( const ::rtl::OUString& Name, 122 const ::rtl::OUString& OldPassword, const ::rtl::OUString& NewPassword ) 123 throw (::com::sun::star::lang::IllegalArgumentException, 124 ::com::sun::star::container::NoSuchElementException, 125 ::com::sun::star::uno::RuntimeException); 126 127 // Methods XServiceInfo 128 virtual ::rtl::OUString SAL_CALL getImplementationName( ) 129 throw (::com::sun::star::uno::RuntimeException); 130 virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames( ) 131 throw (::com::sun::star::uno::RuntimeException); 132 133 // Service 134 static ::com::sun::star::uno::Sequence< ::rtl::OUString > getSupportedServiceNames_static(); 135 static ::rtl::OUString getImplementationName_static(); 136 static ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL Create 137 ( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >& xServiceManager ) 138 throw( ::com::sun::star::uno::Exception ); 139 140 }; 141 142 //============================================================================ 143 144 typedef ::cppu::ImplHelper1< ::com::sun::star::script::vba::XVBAModuleInfo > SfxScriptLibrary_BASE; 145 146 class SfxScriptLibrary : public SfxLibrary, public SfxScriptLibrary_BASE 147 { 148 friend class SfxScriptLibraryContainer; 149 150 typedef std::hash_map< ::rtl::OUString, ::com::sun::star::script::ModuleInfo, ::rtl::OUStringHash > ModuleInfoMap; 151 152 sal_Bool mbLoadedSource; 153 sal_Bool mbLoadedBinary; 154 ModuleInfoMap mModuleInfos; 155 156 // Provide modify state including resources 157 virtual sal_Bool isModified( void ); 158 virtual void storeResources( void ); 159 virtual void storeResourcesAsURL( const ::rtl::OUString& URL, const ::rtl::OUString& NewName ); 160 virtual void storeResourcesToURL( const ::rtl::OUString& URL, 161 const ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionHandler >& xHandler ); 162 virtual void storeResourcesToStorage( const ::com::sun::star::uno::Reference 163 < ::com::sun::star::embed::XStorage >& xStorage ); 164 165 public: 166 SfxScriptLibrary 167 ( 168 ModifiableHelper& _rModifiable, 169 const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& xMSF, 170 const ::com::sun::star::uno::Reference< ::com::sun::star::ucb::XSimpleFileAccess >& xSFI 171 ); 172 173 SfxScriptLibrary 174 ( 175 ModifiableHelper& _rModifiable, 176 const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& xMSF, 177 const ::com::sun::star::uno::Reference< ::com::sun::star::ucb::XSimpleFileAccess >& xSFI, 178 const ::rtl::OUString& aLibInfoFileURL, const ::rtl::OUString& aStorageURL, sal_Bool ReadOnly 179 ); 180 181 DECLARE_XINTERFACE() 182 DECLARE_XTYPEPROVIDER() 183 184 // XVBAModuleInfo 185 virtual ::com::sun::star::script::ModuleInfo SAL_CALL getModuleInfo( const ::rtl::OUString& ModuleName ) throw (::com::sun::star::container::NoSuchElementException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); 186 virtual sal_Bool SAL_CALL hasModuleInfo( const ::rtl::OUString& ModuleName ) throw (::com::sun::star::uno::RuntimeException); 187 virtual void SAL_CALL insertModuleInfo( const ::rtl::OUString& ModuleName, const ::com::sun::star::script::ModuleInfo& ModuleInfo ) throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::container::ElementExistException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); 188 virtual void SAL_CALL removeModuleInfo( const ::rtl::OUString& ModuleName ) throw (::com::sun::star::container::NoSuchElementException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); 189 190 static bool containsValidModule( const ::com::sun::star::uno::Any& _rElement ); 191 192 protected: 193 virtual bool SAL_CALL isLibraryElementValid( ::com::sun::star::uno::Any aElement ) const; 194 }; 195 196 //============================================================================ 197 198 } // namespace basic 199 200 #endif 201 202