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