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