xref: /trunk/main/basic/source/inc/scriptcont.hxx (revision cdf0e10c4e3984b49a9502b011690b615761d4a3)
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