xref: /trunk/main/scripting/source/stringresource/stringresource.hxx (revision 1ecadb572e7010ff3b3382ad9bf179dbc6efadbb)
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 SCRIPTING_DLGPROV_HXX
29 #define SCRIPTING_DLGPROV_HXX
30 
31 #ifndef _COM_SUN_STAR_AWT_XSTRINGRESOURCEWITHSTORAGE_HPP_
32 #include <com/sun/star/resource/XStringResourceWithStorage.hpp>
33 #endif
34 #ifndef _COM_SUN_STAR_AWT_XSTRINGRESOURCEWITHSTORAGE_HPP_
35 #include <com/sun/star/resource/XStringResourceWithLocation.hpp>
36 #endif
37 #include <com/sun/star/lang/XServiceInfo.hpp>
38 #include <com/sun/star/lang/XInitialization.hpp>
39 #include <com/sun/star/uno/XComponentContext.hpp>
40 #include <com/sun/star/ucb/XSimpleFileAccess.hpp>
41 #include <com/sun/star/io/XInputStream.hpp>
42 #include <com/sun/star/io/XOutputStream.hpp>
43 #include <cppuhelper/implbase1.hxx>
44 #include <cppuhelper/implbase2.hxx>
45 #include <cppuhelper/interfacecontainer.hxx>
46 #include <osl/mutex.hxx>
47 
48 #include <vector>
49 #include <hash_map>
50 
51 //.........................................................................
52 namespace stringresource
53 {
54 //.........................................................................
55 
56 // =============================================================================
57 // mutex
58 // =============================================================================
59 
60 ::osl::Mutex& getMutex();
61 
62 
63 // =============================================================================
64 // class stringresourceImpl
65 // =============================================================================
66 
67 // Hashtable to map string ids to string
68 struct hashName_Impl
69 {
70     size_t operator()(const ::rtl::OUString Str) const
71     {
72         return (size_t)Str.hashCode();
73     }
74 };
75 
76 struct eqName_Impl
77 {
78     sal_Bool operator()(const ::rtl::OUString Str1, const ::rtl::OUString Str2) const
79     {
80         return ( Str1 == Str2 );
81     }
82 };
83 
84 typedef std::hash_map
85 <
86     ::rtl::OUString,
87     ::rtl::OUString,
88     hashName_Impl,
89     eqName_Impl
90 >
91 IdToStringMap;
92 
93 typedef std::hash_map
94 <
95     ::rtl::OUString,
96     sal_Int32,
97     hashName_Impl,
98     eqName_Impl
99 >
100 IdToIndexMap;
101 
102 
103 struct LocaleItem
104 {
105     ::com::sun::star::lang::Locale      m_locale;
106     IdToStringMap                       m_aIdToStringMap;
107     IdToIndexMap                        m_aIdToIndexMap;
108     sal_Int32                           m_nNextIndex;
109     bool                                m_bLoaded;
110     bool                                m_bModified;
111 
112     LocaleItem( ::com::sun::star::lang::Locale locale, bool bLoaded=true )
113         : m_locale( locale )
114         , m_nNextIndex( 0 )
115         , m_bLoaded( bLoaded )
116         , m_bModified( false )
117     {}
118 };
119 
120 typedef std::vector< LocaleItem* > LocaleItemVector;
121 typedef std::vector< LocaleItem* >::iterator LocaleItemVectorIt;
122 typedef std::vector< LocaleItem* >::const_iterator LocaleItemVectorConstIt;
123 
124 typedef ::cppu::WeakImplHelper2<
125     ::com::sun::star::lang::XServiceInfo,
126     ::com::sun::star::resource::XStringResourceManager > StringResourceImpl_BASE;
127 
128 class StringResourceImpl : public StringResourceImpl_BASE
129 {
130 protected:
131     ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >        m_xContext;
132     ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiComponentFactory >  m_xMCF;
133 
134     LocaleItem*                                                                         m_pCurrentLocaleItem;
135     LocaleItem*                                                                         m_pDefaultLocaleItem;
136     bool                                                                                m_bDefaultModified;
137 
138     ::cppu::OInterfaceContainerHelper                                                   m_aListenerContainer;
139 
140     LocaleItemVector                                                                    m_aLocaleItemVector;
141     LocaleItemVector                                                                    m_aDeletedLocaleItemVector;
142     LocaleItemVector                                                                    m_aChangedDefaultLocaleVector;
143 
144     bool                                                                                m_bModified;
145     bool                                                                                m_bReadOnly;
146 
147     sal_Int32                                                                           m_nNextUniqueNumericId;
148 
149     // Scans ResourceID to start with number and adapt m_nNextUniqueNumericId
150     void implScanIdForNumber( const ::rtl::OUString& ResourceID );
151     const static sal_Int32 UNIQUE_NUMBER_NEEDS_INITIALISATION = -1;
152 
153     // Checks read only status and throws exception if it's true
154     void implCheckReadOnly( const sal_Char* pExceptionMsg )
155         throw (::com::sun::star::lang::NoSupportException);
156 
157     // Return the context's MultiComponentFactory
158     ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiComponentFactory >
159         getMultiComponentFactory( void );
160 
161     // Returns the LocalItem for a given locale, if it exists, otherwise NULL
162     // This method compares the locales exactly, no closest match search is performed
163     LocaleItem* getItemForLocale( const ::com::sun::star::lang::Locale& locale, sal_Bool bException )
164         throw (::com::sun::star::lang::IllegalArgumentException);
165 
166     // Returns the LocalItem for a given locale, if it exists, otherwise NULL
167     // This method performes a closest match search, at least the language must match
168     LocaleItem* getClosestMatchItemForLocale( const ::com::sun::star::lang::Locale& locale );
169     void implSetCurrentLocale( const ::com::sun::star::lang::Locale& locale,
170         sal_Bool FindClosestMatch, sal_Bool bUseDefaultIfNoMatch )
171             throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException);
172 
173     void implModified( void );
174     void implNotifyListeners( void );
175 
176     //=== Impl methods for ...ForLocale methods ===
177     ::rtl::OUString SAL_CALL implResolveString( const ::rtl::OUString& ResourceID, LocaleItem* pLocaleItem )
178         throw (::com::sun::star::resource::MissingResourceException);
179     ::sal_Bool implHasEntryForId( const ::rtl::OUString& ResourceID, LocaleItem* pLocaleItem );
180     ::com::sun::star::uno::Sequence< ::rtl::OUString > implGetResourceIDs( LocaleItem* pLocaleItem );
181     void implSetString( const ::rtl::OUString& ResourceID,
182         const ::rtl::OUString& Str, LocaleItem* pLocaleItem );
183     void implRemoveId( const ::rtl::OUString& ResourceID, LocaleItem* pLocaleItem )
184         throw (::com::sun::star::resource::MissingResourceException);
185 
186     // Method to load a locale if necessary, returns true if loading was
187     // successful. Default implementation in base class just returns true.
188     virtual bool loadLocale( LocaleItem* pLocaleItem );
189 
190     virtual void implLoadAllLocales( void );
191 
192 public:
193     StringResourceImpl(
194         const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >& rxContext );
195     virtual ~StringResourceImpl();
196 
197     // XServiceInfo
198     virtual ::rtl::OUString SAL_CALL getImplementationName(  )
199         throw (::com::sun::star::uno::RuntimeException);
200     virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName )
201         throw (::com::sun::star::uno::RuntimeException);
202     virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames(  )
203         throw (::com::sun::star::uno::RuntimeException);
204 
205     // XModifyBroadcaster
206     virtual void SAL_CALL addModifyListener( const ::com::sun::star::uno::Reference< ::com::sun::star::util::XModifyListener >& aListener )
207         throw (::com::sun::star::uno::RuntimeException);
208     virtual void SAL_CALL removeModifyListener( const ::com::sun::star::uno::Reference< ::com::sun::star::util::XModifyListener >& aListener )
209         throw (::com::sun::star::uno::RuntimeException);
210 
211     // XStringResourceResolver
212     virtual ::rtl::OUString SAL_CALL resolveString( const ::rtl::OUString& ResourceID )
213         throw (::com::sun::star::resource::MissingResourceException, ::com::sun::star::uno::RuntimeException);
214     virtual ::rtl::OUString SAL_CALL resolveStringForLocale( const ::rtl::OUString& ResourceID,
215         const ::com::sun::star::lang::Locale& locale )
216             throw ( ::com::sun::star::resource::MissingResourceException,
217                     ::com::sun::star::uno::RuntimeException);
218     virtual ::sal_Bool SAL_CALL hasEntryForId( const ::rtl::OUString& ResourceID )
219         throw (::com::sun::star::uno::RuntimeException);
220     virtual ::sal_Bool SAL_CALL hasEntryForIdAndLocale( const ::rtl::OUString& ResourceID,
221         const ::com::sun::star::lang::Locale& locale )
222             throw (::com::sun::star::uno::RuntimeException);
223     virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getResourceIDs(  )
224         throw (::com::sun::star::uno::RuntimeException);
225     virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getResourceIDsForLocale
226         ( const ::com::sun::star::lang::Locale& locale )
227             throw (::com::sun::star::uno::RuntimeException);
228     virtual ::com::sun::star::lang::Locale SAL_CALL getCurrentLocale(  )
229         throw (::com::sun::star::uno::RuntimeException);
230     virtual ::com::sun::star::lang::Locale SAL_CALL getDefaultLocale(  )
231         throw (::com::sun::star::uno::RuntimeException);
232     virtual ::com::sun::star::uno::Sequence< ::com::sun::star::lang::Locale > SAL_CALL getLocales(  )
233         throw (::com::sun::star::uno::RuntimeException);
234 
235     // XStringResourceManager
236     virtual ::sal_Bool SAL_CALL isReadOnly()
237         throw (::com::sun::star::uno::RuntimeException);
238     virtual void SAL_CALL setCurrentLocale( const ::com::sun::star::lang::Locale& locale, ::sal_Bool FindClosestMatch )
239         throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException);
240     virtual void SAL_CALL setDefaultLocale( const ::com::sun::star::lang::Locale& locale )
241         throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException,
242                ::com::sun::star::lang::NoSupportException);
243     virtual void SAL_CALL setString( const ::rtl::OUString& ResourceID, const ::rtl::OUString& Str )
244         throw (::com::sun::star::lang::NoSupportException, ::com::sun::star::uno::RuntimeException);
245     virtual void SAL_CALL setStringForLocale( const ::rtl::OUString& ResourceID, const ::rtl::OUString& Str,
246         const ::com::sun::star::lang::Locale& locale )
247             throw (::com::sun::star::lang::NoSupportException, ::com::sun::star::uno::RuntimeException);
248     virtual void SAL_CALL removeId( const ::rtl::OUString& ResourceID )
249         throw (::com::sun::star::resource::MissingResourceException, ::com::sun::star::uno::RuntimeException,
250                ::com::sun::star::lang::NoSupportException);
251     virtual void SAL_CALL removeIdForLocale( const ::rtl::OUString& ResourceID,
252         const ::com::sun::star::lang::Locale& locale )
253             throw (::com::sun::star::resource::MissingResourceException, ::com::sun::star::uno::RuntimeException,
254                    ::com::sun::star::lang::NoSupportException);
255     virtual void SAL_CALL newLocale( const ::com::sun::star::lang::Locale& locale )
256         throw (::com::sun::star::container::ElementExistException, ::com::sun::star::lang::IllegalArgumentException,
257                ::com::sun::star::lang::NoSupportException, ::com::sun::star::uno::RuntimeException);
258     virtual void SAL_CALL removeLocale( const ::com::sun::star::lang::Locale& locale )
259         throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException,
260                ::com::sun::star::lang::NoSupportException);
261     virtual ::sal_Int32 SAL_CALL getUniqueNumericId(  )
262         throw (::com::sun::star::lang::NoSupportException,
263                ::com::sun::star::uno::RuntimeException);
264  };
265 
266 typedef ::cppu::ImplInheritanceHelper1<
267         StringResourceImpl,
268         ::com::sun::star::resource::XStringResourcePersistence > StringResourcePersistenceImpl_BASE;
269 
270 class BinaryOutput;
271 class BinaryInput;
272 
273 class StringResourcePersistenceImpl : public StringResourcePersistenceImpl_BASE
274 {
275 protected:
276     ::rtl::OUString                                                             m_aNameBase;
277     ::rtl::OUString                                                             m_aComment;
278 
279     void SAL_CALL implInitializeCommonParameters
280         ( const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >& aArguments )
281             throw (::com::sun::star::uno::Exception, ::com::sun::star::uno::RuntimeException);
282 
283     // Scan locale properties files
284     virtual void implScanLocales( void );
285 
286     // Method to load a locale if necessary, returns true if loading was successful
287     virtual bool loadLocale( LocaleItem* pLocaleItem );
288 
289     // does the actual loading
290     virtual bool implLoadLocale( LocaleItem* pLocaleItem );
291 
292     virtual void implLoadAllLocales( void );
293 
294     void implScanLocaleNames( const ::com::sun::star::uno::Sequence< ::rtl::OUString >& aContentSeq );
295     ::rtl::OUString implGetFileNameForLocaleItem( LocaleItem* pLocaleItem, const ::rtl::OUString& aNameBase );
296     ::rtl::OUString implGetPathForLocaleItem( LocaleItem* pLocaleItem, const ::rtl::OUString& aNameBase,
297         const ::rtl::OUString& aLocation, bool bDefaultFile=false );
298 
299     bool implReadPropertiesFile( LocaleItem* pLocaleItem,
300         const ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream >& xInput );
301 
302     bool implWritePropertiesFile( LocaleItem* pLocaleItem, const ::com::sun::star::uno::Reference
303         < ::com::sun::star::io::XOutputStream >& xOutputStream, const ::rtl::OUString& aComment );
304 
305     void implWriteLocaleBinary( LocaleItem* pLocaleItem, BinaryOutput& rOut );
306 
307     void implStoreAtStorage
308     (
309         const ::rtl::OUString& aNameBase,
310         const ::rtl::OUString& aComment,
311         const ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage >& Storage,
312         bool bUsedForStore,
313         bool bStoreAll
314     )
315     throw (::com::sun::star::uno::Exception, ::com::sun::star::uno::RuntimeException);
316 
317     void implKillRemovedLocaleFiles
318     (
319         const ::rtl::OUString& Location,
320         const ::rtl::OUString& aNameBase,
321         const ::com::sun::star::uno::Reference< ::com::sun::star::ucb::XSimpleFileAccess >& xFileAccess
322     )
323     throw (::com::sun::star::uno::Exception, ::com::sun::star::uno::RuntimeException);
324 
325     void implKillChangedDefaultFiles
326     (
327         const ::rtl::OUString& Location,
328         const ::rtl::OUString& aNameBase,
329         const ::com::sun::star::uno::Reference< ::com::sun::star::ucb::XSimpleFileAccess >& xFileAccess
330     )
331     throw (::com::sun::star::uno::Exception, ::com::sun::star::uno::RuntimeException);
332 
333     void implStoreAtLocation
334     (
335         const ::rtl::OUString& Location,
336         const ::rtl::OUString& aNameBase,
337         const ::rtl::OUString& aComment,
338         const ::com::sun::star::uno::Reference< ::com::sun::star::ucb::XSimpleFileAccess >& xFileAccess,
339         bool bUsedForStore,
340         bool bStoreAll,
341         bool bKillAll = false
342     )
343     throw (::com::sun::star::uno::Exception, ::com::sun::star::uno::RuntimeException);
344 
345 public:
346     StringResourcePersistenceImpl(
347         const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >& rxContext );
348     virtual ~StringResourcePersistenceImpl();
349 
350     // XServiceInfo
351     virtual ::rtl::OUString SAL_CALL getImplementationName(  )
352         throw (::com::sun::star::uno::RuntimeException);
353     virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName )
354         throw (::com::sun::star::uno::RuntimeException);
355     virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames(  )
356         throw (::com::sun::star::uno::RuntimeException);
357 
358     // XModifyBroadcaster
359     virtual void SAL_CALL addModifyListener( const ::com::sun::star::uno::Reference< ::com::sun::star::util::XModifyListener >& aListener )
360         throw (::com::sun::star::uno::RuntimeException);
361     virtual void SAL_CALL removeModifyListener( const ::com::sun::star::uno::Reference< ::com::sun::star::util::XModifyListener >& aListener )
362         throw (::com::sun::star::uno::RuntimeException);
363 
364     // XStringResourceResolver
365     virtual ::rtl::OUString SAL_CALL resolveString( const ::rtl::OUString& ResourceID )
366         throw (::com::sun::star::resource::MissingResourceException, ::com::sun::star::uno::RuntimeException);
367     virtual ::rtl::OUString SAL_CALL resolveStringForLocale( const ::rtl::OUString& ResourceID,
368         const ::com::sun::star::lang::Locale& locale )
369             throw ( ::com::sun::star::resource::MissingResourceException,
370                     ::com::sun::star::uno::RuntimeException);
371     virtual ::sal_Bool SAL_CALL hasEntryForId( const ::rtl::OUString& ResourceID )
372         throw (::com::sun::star::uno::RuntimeException);
373     virtual ::sal_Bool SAL_CALL hasEntryForIdAndLocale( const ::rtl::OUString& ResourceID,
374         const ::com::sun::star::lang::Locale& locale )
375             throw (::com::sun::star::uno::RuntimeException);
376     virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getResourceIDs(  )
377         throw (::com::sun::star::uno::RuntimeException);
378     virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getResourceIDsForLocale
379         ( const ::com::sun::star::lang::Locale& locale )
380             throw (::com::sun::star::uno::RuntimeException);
381     virtual ::com::sun::star::lang::Locale SAL_CALL getCurrentLocale(  )
382         throw (::com::sun::star::uno::RuntimeException);
383     virtual ::com::sun::star::lang::Locale SAL_CALL getDefaultLocale(  )
384         throw (::com::sun::star::uno::RuntimeException);
385     virtual ::com::sun::star::uno::Sequence< ::com::sun::star::lang::Locale > SAL_CALL getLocales(  )
386         throw (::com::sun::star::uno::RuntimeException);
387 
388     // XStringResourceManager
389     virtual ::sal_Bool SAL_CALL isReadOnly()
390         throw (::com::sun::star::uno::RuntimeException);
391     virtual void SAL_CALL setCurrentLocale( const ::com::sun::star::lang::Locale& locale, ::sal_Bool FindClosestMatch )
392         throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException);
393     virtual void SAL_CALL setDefaultLocale( const ::com::sun::star::lang::Locale& locale )
394         throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException,
395                ::com::sun::star::lang::NoSupportException);
396     virtual void SAL_CALL setString( const ::rtl::OUString& ResourceID, const ::rtl::OUString& Str )
397         throw (::com::sun::star::lang::NoSupportException, ::com::sun::star::uno::RuntimeException);
398     virtual void SAL_CALL setStringForLocale( const ::rtl::OUString& ResourceID, const ::rtl::OUString& Str,
399         const ::com::sun::star::lang::Locale& locale )
400             throw (::com::sun::star::lang::NoSupportException, ::com::sun::star::uno::RuntimeException);
401     virtual void SAL_CALL removeId( const ::rtl::OUString& ResourceID )
402         throw (::com::sun::star::resource::MissingResourceException, ::com::sun::star::uno::RuntimeException,
403                ::com::sun::star::lang::NoSupportException);
404     virtual void SAL_CALL removeIdForLocale( const ::rtl::OUString& ResourceID,
405         const ::com::sun::star::lang::Locale& locale )
406             throw (::com::sun::star::resource::MissingResourceException, ::com::sun::star::uno::RuntimeException,
407                    ::com::sun::star::lang::NoSupportException);
408     virtual void SAL_CALL newLocale( const ::com::sun::star::lang::Locale& locale )
409         throw (::com::sun::star::container::ElementExistException, ::com::sun::star::lang::IllegalArgumentException,
410                ::com::sun::star::lang::NoSupportException, ::com::sun::star::uno::RuntimeException);
411     virtual void SAL_CALL removeLocale( const ::com::sun::star::lang::Locale& locale )
412         throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException,
413                ::com::sun::star::lang::NoSupportException);
414     virtual ::sal_Int32 SAL_CALL getUniqueNumericId(  )
415         throw (::com::sun::star::lang::NoSupportException,
416                ::com::sun::star::uno::RuntimeException);
417 
418     // XStringResourcePersistence
419     virtual void SAL_CALL store(  )
420         throw (::com::sun::star::lang::NoSupportException,
421                ::com::sun::star::uno::Exception,
422                ::com::sun::star::uno::RuntimeException);
423     virtual ::sal_Bool SAL_CALL isModified(  )
424         throw (::com::sun::star::uno::RuntimeException);
425     virtual void SAL_CALL setComment( const ::rtl::OUString& Comment )
426         throw (::com::sun::star::uno::RuntimeException);
427     virtual void SAL_CALL storeToStorage
428         ( const ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage >& Storage,
429           const ::rtl::OUString& NameBase, const ::rtl::OUString& Comment )
430             throw (::com::sun::star::uno::Exception, ::com::sun::star::uno::RuntimeException);
431     virtual void SAL_CALL storeToURL( const ::rtl::OUString& URL, const ::rtl::OUString& NameBase,
432         const ::rtl::OUString& Comment, const ::com::sun::star::uno::Reference
433         < ::com::sun::star::task::XInteractionHandler >& Handler )
434             throw (::com::sun::star::uno::Exception, ::com::sun::star::uno::RuntimeException);
435     virtual ::com::sun::star::uno::Sequence< ::sal_Int8 > SAL_CALL exportBinary(  )
436         throw (::com::sun::star::uno::RuntimeException);
437     virtual void SAL_CALL importBinary( const ::com::sun::star::uno::Sequence< ::sal_Int8 >& Data )
438         throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException);
439 };
440 
441 
442 typedef ::cppu::ImplInheritanceHelper2<
443         StringResourcePersistenceImpl,
444         ::com::sun::star::lang::XInitialization,
445         ::com::sun::star::resource::XStringResourceWithStorage > StringResourceWithStorageImpl_BASE;
446 
447 class StringResourceWithStorageImpl : public StringResourceWithStorageImpl_BASE
448 {
449     ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage >       m_xStorage;
450     bool                                                                        m_bStorageChanged;
451 
452     virtual void implScanLocales( void );
453     virtual bool implLoadLocale( LocaleItem* pLocaleItem );
454 
455 public:
456     StringResourceWithStorageImpl(
457         const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >& rxContext );
458     virtual ~StringResourceWithStorageImpl();
459 
460     // XServiceInfo
461     virtual ::rtl::OUString SAL_CALL getImplementationName(  )
462         throw (::com::sun::star::uno::RuntimeException);
463     virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName )
464         throw (::com::sun::star::uno::RuntimeException);
465     virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames(  )
466         throw (::com::sun::star::uno::RuntimeException);
467 
468     // XInitialization
469     virtual void SAL_CALL initialize( const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >& aArguments )
470         throw (::com::sun::star::uno::Exception, ::com::sun::star::uno::RuntimeException);
471 
472     // XModifyBroadcaster
473     virtual void SAL_CALL addModifyListener( const ::com::sun::star::uno::Reference< ::com::sun::star::util::XModifyListener >& aListener )
474         throw (::com::sun::star::uno::RuntimeException);
475     virtual void SAL_CALL removeModifyListener( const ::com::sun::star::uno::Reference< ::com::sun::star::util::XModifyListener >& aListener )
476         throw (::com::sun::star::uno::RuntimeException);
477 
478     // XStringResourceResolver
479     virtual ::rtl::OUString SAL_CALL resolveString( const ::rtl::OUString& ResourceID )
480         throw (::com::sun::star::resource::MissingResourceException, ::com::sun::star::uno::RuntimeException);
481     virtual ::rtl::OUString SAL_CALL resolveStringForLocale( const ::rtl::OUString& ResourceID,
482         const ::com::sun::star::lang::Locale& locale )
483             throw ( ::com::sun::star::resource::MissingResourceException,
484                     ::com::sun::star::uno::RuntimeException);
485     virtual ::sal_Bool SAL_CALL hasEntryForId( const ::rtl::OUString& ResourceID )
486         throw (::com::sun::star::uno::RuntimeException);
487     virtual ::sal_Bool SAL_CALL hasEntryForIdAndLocale( const ::rtl::OUString& ResourceID,
488         const ::com::sun::star::lang::Locale& locale )
489             throw (::com::sun::star::uno::RuntimeException);
490     virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getResourceIDs(  )
491         throw (::com::sun::star::uno::RuntimeException);
492     virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getResourceIDsForLocale
493         ( const ::com::sun::star::lang::Locale& locale )
494             throw (::com::sun::star::uno::RuntimeException);
495     virtual ::com::sun::star::lang::Locale SAL_CALL getCurrentLocale(  )
496         throw (::com::sun::star::uno::RuntimeException);
497     virtual ::com::sun::star::lang::Locale SAL_CALL getDefaultLocale(  )
498         throw (::com::sun::star::uno::RuntimeException);
499     virtual ::com::sun::star::uno::Sequence< ::com::sun::star::lang::Locale > SAL_CALL getLocales(  )
500         throw (::com::sun::star::uno::RuntimeException);
501 
502     // XStringResourceManager
503     virtual ::sal_Bool SAL_CALL isReadOnly()
504         throw (::com::sun::star::uno::RuntimeException);
505     virtual void SAL_CALL setCurrentLocale( const ::com::sun::star::lang::Locale& locale, ::sal_Bool FindClosestMatch )
506         throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException);
507     virtual void SAL_CALL setDefaultLocale( const ::com::sun::star::lang::Locale& locale )
508         throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException,
509                ::com::sun::star::lang::NoSupportException);
510     virtual void SAL_CALL setString( const ::rtl::OUString& ResourceID, const ::rtl::OUString& Str )
511         throw (::com::sun::star::lang::NoSupportException, ::com::sun::star::uno::RuntimeException);
512     virtual void SAL_CALL setStringForLocale( const ::rtl::OUString& ResourceID, const ::rtl::OUString& Str,
513         const ::com::sun::star::lang::Locale& locale )
514             throw (::com::sun::star::lang::NoSupportException, ::com::sun::star::uno::RuntimeException);
515     virtual void SAL_CALL removeId( const ::rtl::OUString& ResourceID )
516         throw (::com::sun::star::resource::MissingResourceException, ::com::sun::star::uno::RuntimeException,
517                ::com::sun::star::lang::NoSupportException);
518     virtual void SAL_CALL removeIdForLocale( const ::rtl::OUString& ResourceID,
519         const ::com::sun::star::lang::Locale& locale )
520             throw (::com::sun::star::resource::MissingResourceException, ::com::sun::star::uno::RuntimeException,
521                    ::com::sun::star::lang::NoSupportException);
522     virtual void SAL_CALL newLocale( const ::com::sun::star::lang::Locale& locale )
523         throw (::com::sun::star::container::ElementExistException, ::com::sun::star::lang::IllegalArgumentException,
524                ::com::sun::star::lang::NoSupportException, ::com::sun::star::uno::RuntimeException);
525     virtual void SAL_CALL removeLocale( const ::com::sun::star::lang::Locale& locale )
526         throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException,
527                ::com::sun::star::lang::NoSupportException);
528     virtual ::sal_Int32 SAL_CALL getUniqueNumericId(  )
529         throw (::com::sun::star::lang::NoSupportException,
530                ::com::sun::star::uno::RuntimeException);
531 
532     // XStringResourcePersistence
533     virtual void SAL_CALL store(  )
534         throw (::com::sun::star::lang::NoSupportException,
535                ::com::sun::star::uno::Exception,
536                ::com::sun::star::uno::RuntimeException);
537     virtual ::sal_Bool SAL_CALL isModified(  )
538         throw (::com::sun::star::uno::RuntimeException);
539     virtual void SAL_CALL setComment( const ::rtl::OUString& Comment )
540         throw (::com::sun::star::uno::RuntimeException);
541     virtual void SAL_CALL storeToStorage
542         ( const ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage >& Storage,
543           const ::rtl::OUString& NameBase, const ::rtl::OUString& Comment )
544             throw (::com::sun::star::uno::Exception, ::com::sun::star::uno::RuntimeException);
545     virtual void SAL_CALL storeToURL( const ::rtl::OUString& URL, const ::rtl::OUString& NameBase,
546         const ::rtl::OUString& Comment, const ::com::sun::star::uno::Reference
547         < ::com::sun::star::task::XInteractionHandler >& Handler )
548             throw (::com::sun::star::uno::Exception, ::com::sun::star::uno::RuntimeException);
549     virtual ::com::sun::star::uno::Sequence< ::sal_Int8 > SAL_CALL exportBinary(  )
550         throw (::com::sun::star::uno::RuntimeException);
551     virtual void SAL_CALL importBinary( const ::com::sun::star::uno::Sequence< ::sal_Int8 >& Data )
552         throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException);
553 
554     // XStringResourceWithStorage
555     virtual void SAL_CALL storeAsStorage
556         ( const ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage >& Storage )
557             throw (::com::sun::star::uno::Exception, ::com::sun::star::uno::RuntimeException);
558     virtual void SAL_CALL setStorage
559         ( const ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage >& Storage )
560             throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException);
561 };
562 
563 
564 typedef ::cppu::ImplInheritanceHelper2<
565         StringResourcePersistenceImpl,
566         ::com::sun::star::lang::XInitialization,
567         ::com::sun::star::resource::XStringResourceWithLocation > StringResourceWithLocationImpl_BASE;
568 
569 class StringResourceWithLocationImpl : public StringResourceWithLocationImpl_BASE
570 {
571     ::rtl::OUString                                                             m_aLocation;
572     bool                                                                        m_bLocationChanged;
573     com::sun::star::uno::Reference< com::sun::star::ucb::XSimpleFileAccess >    m_xSFI;
574     com::sun::star::uno::Reference< com::sun::star::task::XInteractionHandler > m_xInteractionHandler;
575 
576     const ::com::sun::star::uno::Reference< ::com::sun::star::ucb::XSimpleFileAccess > getFileAccess( void );
577 
578     virtual void implScanLocales( void );
579     virtual bool implLoadLocale( LocaleItem* pLocaleItem );
580 
581 public:
582     StringResourceWithLocationImpl(
583         const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >& rxContext );
584     virtual ~StringResourceWithLocationImpl();
585 
586     // XServiceInfo
587     virtual ::rtl::OUString SAL_CALL getImplementationName(  )
588         throw (::com::sun::star::uno::RuntimeException);
589     virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName )
590         throw (::com::sun::star::uno::RuntimeException);
591     virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames(  )
592         throw (::com::sun::star::uno::RuntimeException);
593 
594     // XInitialization
595     virtual void SAL_CALL initialize( const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >& aArguments )
596         throw (::com::sun::star::uno::Exception, ::com::sun::star::uno::RuntimeException);
597 
598     // XModifyBroadcaster
599     virtual void SAL_CALL addModifyListener( const ::com::sun::star::uno::Reference< ::com::sun::star::util::XModifyListener >& aListener )
600         throw (::com::sun::star::uno::RuntimeException);
601     virtual void SAL_CALL removeModifyListener( const ::com::sun::star::uno::Reference< ::com::sun::star::util::XModifyListener >& aListener )
602         throw (::com::sun::star::uno::RuntimeException);
603 
604     // XStringResourceResolver
605     virtual ::rtl::OUString SAL_CALL resolveString( const ::rtl::OUString& ResourceID )
606         throw (::com::sun::star::resource::MissingResourceException, ::com::sun::star::uno::RuntimeException);
607     virtual ::rtl::OUString SAL_CALL resolveStringForLocale( const ::rtl::OUString& ResourceID,
608         const ::com::sun::star::lang::Locale& locale )
609             throw ( ::com::sun::star::resource::MissingResourceException,
610                     ::com::sun::star::uno::RuntimeException);
611     virtual ::sal_Bool SAL_CALL hasEntryForId( const ::rtl::OUString& ResourceID )
612         throw (::com::sun::star::uno::RuntimeException);
613     virtual ::sal_Bool SAL_CALL hasEntryForIdAndLocale( const ::rtl::OUString& ResourceID,
614         const ::com::sun::star::lang::Locale& locale )
615             throw (::com::sun::star::uno::RuntimeException);
616     virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getResourceIDs(  )
617         throw (::com::sun::star::uno::RuntimeException);
618     virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getResourceIDsForLocale
619         ( const ::com::sun::star::lang::Locale& locale )
620             throw (::com::sun::star::uno::RuntimeException);
621     virtual ::com::sun::star::lang::Locale SAL_CALL getCurrentLocale(  )
622         throw (::com::sun::star::uno::RuntimeException);
623     virtual ::com::sun::star::lang::Locale SAL_CALL getDefaultLocale(  )
624         throw (::com::sun::star::uno::RuntimeException);
625     virtual ::com::sun::star::uno::Sequence< ::com::sun::star::lang::Locale > SAL_CALL getLocales(  )
626         throw (::com::sun::star::uno::RuntimeException);
627 
628     // XStringResourceManager
629     virtual ::sal_Bool SAL_CALL isReadOnly()
630         throw (::com::sun::star::uno::RuntimeException);
631     virtual void SAL_CALL setCurrentLocale( const ::com::sun::star::lang::Locale& locale, ::sal_Bool FindClosestMatch )
632         throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException);
633     virtual void SAL_CALL setDefaultLocale( const ::com::sun::star::lang::Locale& locale )
634         throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException,
635                ::com::sun::star::lang::NoSupportException);
636     virtual void SAL_CALL setString( const ::rtl::OUString& ResourceID, const ::rtl::OUString& Str )
637         throw (::com::sun::star::lang::NoSupportException, ::com::sun::star::uno::RuntimeException);
638     virtual void SAL_CALL setStringForLocale( const ::rtl::OUString& ResourceID, const ::rtl::OUString& Str,
639         const ::com::sun::star::lang::Locale& locale )
640             throw (::com::sun::star::lang::NoSupportException, ::com::sun::star::uno::RuntimeException);
641     virtual void SAL_CALL removeId( const ::rtl::OUString& ResourceID )
642         throw (::com::sun::star::resource::MissingResourceException, ::com::sun::star::uno::RuntimeException,
643                ::com::sun::star::lang::NoSupportException);
644     virtual void SAL_CALL removeIdForLocale( const ::rtl::OUString& ResourceID,
645         const ::com::sun::star::lang::Locale& locale )
646             throw (::com::sun::star::resource::MissingResourceException, ::com::sun::star::uno::RuntimeException,
647                    ::com::sun::star::lang::NoSupportException);
648     virtual void SAL_CALL newLocale( const ::com::sun::star::lang::Locale& locale )
649         throw (::com::sun::star::container::ElementExistException, ::com::sun::star::lang::IllegalArgumentException,
650                ::com::sun::star::lang::NoSupportException, ::com::sun::star::uno::RuntimeException);
651     virtual void SAL_CALL removeLocale( const ::com::sun::star::lang::Locale& locale )
652         throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException,
653                ::com::sun::star::lang::NoSupportException);
654     virtual ::sal_Int32 SAL_CALL getUniqueNumericId(  )
655         throw (::com::sun::star::lang::NoSupportException,
656                ::com::sun::star::uno::RuntimeException);
657 
658     // XStringResourcePersistence
659     virtual void SAL_CALL store(  )
660         throw (::com::sun::star::lang::NoSupportException,
661                ::com::sun::star::uno::Exception,
662                ::com::sun::star::uno::RuntimeException);
663     virtual ::sal_Bool SAL_CALL isModified(  )
664         throw (::com::sun::star::uno::RuntimeException);
665     virtual void SAL_CALL setComment( const ::rtl::OUString& Comment )
666         throw (::com::sun::star::uno::RuntimeException);
667     virtual void SAL_CALL storeToStorage
668         ( const ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage >& Storage,
669           const ::rtl::OUString& NameBase, const ::rtl::OUString& Comment )
670             throw (::com::sun::star::uno::Exception, ::com::sun::star::uno::RuntimeException);
671     virtual void SAL_CALL storeToURL( const ::rtl::OUString& URL, const ::rtl::OUString& NameBase,
672         const ::rtl::OUString& Comment, const ::com::sun::star::uno::Reference
673         < ::com::sun::star::task::XInteractionHandler >& Handler )
674             throw (::com::sun::star::uno::Exception, ::com::sun::star::uno::RuntimeException);
675     virtual ::com::sun::star::uno::Sequence< ::sal_Int8 > SAL_CALL exportBinary(  )
676         throw (::com::sun::star::uno::RuntimeException);
677     virtual void SAL_CALL importBinary( const ::com::sun::star::uno::Sequence< ::sal_Int8 >& Data )
678         throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException);
679 
680     // XStringResourceWithLocation
681     virtual void SAL_CALL storeAsURL( const ::rtl::OUString& URL )
682         throw (::com::sun::star::uno::Exception, ::com::sun::star::uno::RuntimeException);
683     virtual void SAL_CALL setURL( const ::rtl::OUString& URL )
684         throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException);
685 };
686 
687 //.........................................................................
688 }   // namespace stringtable
689 //.........................................................................
690 
691 #endif // SCRIPTING_DLGPROV_HXX
692