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