xref: /trunk/main/sdext/source/minimizer/configurationaccess.cxx (revision ffd38472365e95f6a578737bc9a5eb0fac624a86)
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 // MARKER(update_precomp.py): autogen include statement, do not remove
23 #include "precompiled_sdext.hxx"
24 
25 #include "configurationaccess.hxx"
26 #include <com/sun/star/frame/XComponentLoader.hpp>
27 #include <com/sun/star/container/XHierarchicalNameAccess.hpp>
28 #include <com/sun/star/util/XChangesBatch.hpp>
29 #include <com/sun/star/container/XNameContainer.hpp>
30 #include <com/sun/star/util/XMacroExpander.hpp>
31 #include <com/sun/star/lang/XSingleServiceFactory.hpp>
32 #include <com/sun/star/resource/XResourceBundleLoader.hpp>
33 
34 #include <rtl/ustrbuf.hxx>
35 
36 #include "minimizer.hrc"
37 
38 using namespace ::com::sun::star;
39 using namespace ::com::sun::star::uno;
40 using namespace ::com::sun::star::beans;
41 using namespace ::com::sun::star::container;
42 
43 using rtl::OUString;
44 using rtl::OUStringBuffer;
45 
46 #include <rtl/instance.hxx>
47 
48 typedef std::map < sal_Int32, rtl::OUString > StringResourceMap;
49 
50 struct StaticResourceMap
51     : public rtl::StaticWithInit< StringResourceMap, StaticResourceMap >
52 {
53     StringResourceMap &
54     operator()() const;
55 };
56 
57 StringResourceMap &
58 StaticResourceMap::operator()() const
59 {
60     static StringResourceMap aMap;
61     return aMap;
62 }
63 
64 static const OUString& GetConfigurationProviderServiceName (void)
65 {
66     static const OUString sConfigurationProviderServiceName (
67         RTL_CONSTASCII_USTRINGPARAM(
68             "com.sun.star.configuration.ConfigurationProvider"));
69     return sConfigurationProviderServiceName;
70 }
71 static const OUString& GetPathToConfigurationRoot (void)
72 {
73     static const OUString sPathToConfigurationRoot (
74         RTL_CONSTASCII_USTRINGPARAM("org.openoffice.Office.Impress/PresentationMinimizer"));
75     return sPathToConfigurationRoot;
76 }
77 
78 static OUString lcl_loadString(
79     const Reference< resource::XResourceBundle > xResourceBundle,
80     sal_Int32 nResourceId )
81 {
82     OUString sString;
83     OUStringBuffer sKey;
84     sKey.appendAscii( RTL_CONSTASCII_STRINGPARAM( "string:" ) );
85     sKey.append( nResourceId );
86 
87     try
88     {
89         OSL_VERIFY( xResourceBundle->getByName( sKey.makeStringAndClear() ) >>= sString );
90     }
91     catch( const uno::Exception& )
92     {
93         OSL_ENSURE( false, "OptimizerSettings: missing resource!" );
94     }
95 
96     return sString;
97 }
98 
99 void OptimizerSettings::LoadSettingsFromConfiguration( const Reference< XNameAccess >& rSettings )
100 {
101     if ( rSettings.is() )
102     {
103         const Sequence< OUString > aElements( rSettings->getElementNames() );
104         for ( int i = 0; i < aElements.getLength(); i++ )
105         {
106             try
107             {
108                 const OUString aPropertyName( aElements[ i ] );
109                 Any aValue( rSettings->getByName( aPropertyName ) );
110                 switch( TKGet( aPropertyName ) )
111                 {
112                     case TK_Name :                      aValue >>= maName; break;
113                     case TK_JPEGCompression :           aValue >>= mbJPEGCompression; break;
114                     case TK_JPEGQuality :               aValue >>= mnJPEGQuality; break;
115                     case TK_RemoveCropArea :            aValue >>= mbRemoveCropArea; break;
116                     case TK_ImageResolution :           aValue >>= mnImageResolution; break;
117                     case TK_EmbedLinkedGraphics :       aValue >>= mbEmbedLinkedGraphics; break;
118                     case TK_OLEOptimization :           aValue >>= mbOLEOptimization; break;
119                     case TK_OLEOptimizationType :       aValue >>= mnOLEOptimizationType; break;
120                     case TK_DeleteUnusedMasterPages :   aValue >>= mbDeleteUnusedMasterPages; break;
121                     case TK_DeleteHiddenSlides :        aValue >>= mbDeleteHiddenSlides; break;
122                     case TK_DeleteNotesPages :          aValue >>= mbDeleteNotesPages ;break;
123                     case TK_SaveAs :                    aValue >>= mbSaveAs; break;
124 //                  case TK_SaveAsURL :                 aValue >>= maSaveAsURL; break;      // URL is not saved to configuration
125 //                  case TK_FilterName :                aValue >>= maFilterName; break;     // URL is not saved to configuration
126                     case TK_OpenNewDocument :           aValue >>= mbOpenNewDocument; break;
127                     default: break;
128                 }
129             }
130             catch( Exception& )
131             {
132             }
133         }
134     }
135 }
136 
137 void OptimizerSettings::SaveSettingsToConfiguration( const Reference< XNameReplace >& rSettings )
138 {
139     if ( rSettings.is() )
140     {
141         OUString pNames[] = {
142             TKGet( TK_Name ),
143             TKGet( TK_JPEGCompression ),
144             TKGet( TK_JPEGQuality ),
145             TKGet( TK_RemoveCropArea ),
146             TKGet( TK_ImageResolution ),
147             TKGet( TK_EmbedLinkedGraphics ),
148             TKGet( TK_OLEOptimization ),
149             TKGet( TK_OLEOptimizationType ),
150             TKGet( TK_DeleteUnusedMasterPages ),
151             TKGet( TK_DeleteHiddenSlides ),
152             TKGet( TK_DeleteNotesPages ),
153             TKGet( TK_SaveAs ),
154 //          TKGet( TK_SaveAsURL ),
155 //          TKGet( TK_FilterName ),
156             TKGet( TK_OpenNewDocument ) };
157 
158         Any pValues[] = {
159             Any( maName ),
160             Any( mbJPEGCompression ),
161             Any( mnJPEGQuality ),
162             Any( mbRemoveCropArea ),
163             Any( mnImageResolution ),
164             Any( mbEmbedLinkedGraphics ),
165             Any( mbOLEOptimization ),
166             Any( mnOLEOptimizationType ),
167             Any( mbDeleteUnusedMasterPages ),
168             Any( mbDeleteHiddenSlides ),
169             Any( mbDeleteNotesPages ),
170             Any( mbSaveAs ),
171 //          Any( maSaveAsURL ),
172 //          Any( maFilterName ),
173             Any( mbOpenNewDocument ) };
174 
175         sal_Int32 i, nCount = sizeof( pNames ) / sizeof( OUString );
176 
177         for ( i = 0; i < nCount; i++ )
178         {
179             try
180             {
181                 rSettings->replaceByName( pNames[ i ], pValues[ i ] );
182             }
183             catch( Exception& /* rException */ )
184             {
185             }
186         }
187     }
188 }
189 
190 sal_Bool OptimizerSettings::operator==( const OptimizerSettings& rOptimizerSettings ) const
191 {
192     return ( rOptimizerSettings.mbJPEGCompression == mbJPEGCompression )
193         && ( rOptimizerSettings.mnJPEGQuality == mnJPEGQuality )
194         && ( rOptimizerSettings.mbRemoveCropArea == mbRemoveCropArea )
195         && ( rOptimizerSettings.mnImageResolution == mnImageResolution )
196         && ( rOptimizerSettings.mbEmbedLinkedGraphics == mbEmbedLinkedGraphics )
197         && ( rOptimizerSettings.mbOLEOptimization == mbOLEOptimization )
198         && ( rOptimizerSettings.mnOLEOptimizationType == mnOLEOptimizationType )
199         && ( rOptimizerSettings.mbDeleteUnusedMasterPages == mbDeleteUnusedMasterPages )
200         && ( rOptimizerSettings.mbDeleteHiddenSlides == mbDeleteHiddenSlides )
201         && ( rOptimizerSettings.mbDeleteNotesPages == mbDeleteNotesPages );
202 //      && ( rOptimizerSettings.mbOpenNewDocument == mbOpenNewDocument );
203 }
204 
205 
206 ConfigurationAccess::ConfigurationAccess( const Reference< uno::XComponentContext >& rxContext, OptimizerSettings* pDefaultSettings ) :
207     m_xContext( rxContext )
208 {
209     LoadStrings();
210     maSettings.push_back( pDefaultSettings ?
211         *pDefaultSettings : OptimizerSettings() );
212     maSettings.back().maName = TKGet( TK_LastUsedSettings );
213     LoadConfiguration();
214     maInitialSettings = maSettings;
215 };
216 
217 ConfigurationAccess::~ConfigurationAccess()
218 {
219 }
220 
221 rtl::OUString ConfigurationAccess::getString( sal_Int32 nResId )
222 {
223     const StringResourceMap &aStrings = StaticResourceMap::get();
224     StringResourceMap::const_iterator aIter( aStrings.find( nResId ) );
225     return aIter != aStrings.end() ? ((*aIter).second) : rtl::OUString();
226 }
227 
228 void ConfigurationAccess::LoadStrings()
229 {
230     static bool bLoaded = false;
231     if ( bLoaded )
232         return;
233     else
234         bLoaded = true;
235     try
236     {
237 
238         Reference< resource::XResourceBundleLoader > xResourceBundleLoader(
239             m_xContext->getValueByName(
240                 OUString( RTL_CONSTASCII_USTRINGPARAM(
241                     "/singletons/com.sun.star.resource.OfficeResourceLoader" ) ) ),
242                         UNO_QUERY_THROW );
243 
244         Reference< resource::XResourceBundle > xResourceBundle(
245             xResourceBundleLoader->loadBundle_Default(
246                 OUString( RTL_CONSTASCII_USTRINGPARAM( "minimizer" ) ) ),
247                     UNO_SET_THROW );
248 
249         StringResourceMap &aStrings = StaticResourceMap::get();
250         aStrings[ STR_PRESENTATION_MINIMIZER   ] = lcl_loadString( xResourceBundle, STR_PRESENTATION_MINIMIZER );
251         aStrings[ STR_STEPS                    ] = lcl_loadString( xResourceBundle, STR_STEPS );
252         aStrings[ STR_HELP                     ] = lcl_loadString( xResourceBundle, STR_HELP );
253         aStrings[ STR_BACK                     ] = lcl_loadString( xResourceBundle, STR_BACK );
254         aStrings[ STR_NEXT                     ] = lcl_loadString( xResourceBundle, STR_NEXT );
255         aStrings[ STR_FINISH                   ] = lcl_loadString( xResourceBundle, STR_FINISH );
256         aStrings[ STR_CANCEL                   ] = lcl_loadString( xResourceBundle, STR_CANCEL );
257         aStrings[ STR_INTRODUCTION             ] = lcl_loadString( xResourceBundle, STR_INTRODUCTION );
258         aStrings[ STR_INTRODUCTION_T           ] = lcl_loadString( xResourceBundle, STR_INTRODUCTION_T );
259         aStrings[ STR_CHOOSE_SETTINGS          ] = lcl_loadString( xResourceBundle, STR_CHOOSE_SETTINGS );
260         aStrings[ STR_REMOVE                   ] = lcl_loadString( xResourceBundle, STR_REMOVE );
261         aStrings[ STR_GRAPHIC_OPTIMIZATION     ] = lcl_loadString( xResourceBundle, STR_GRAPHIC_OPTIMIZATION );
262         aStrings[ STR_IMAGE_OPTIMIZATION       ] = lcl_loadString( xResourceBundle, STR_IMAGE_OPTIMIZATION );
263         aStrings[ STR_LOSSLESS_COMPRESSION     ] = lcl_loadString( xResourceBundle, STR_LOSSLESS_COMPRESSION );
264         aStrings[ STR_JPEG_COMPRESSION         ] = lcl_loadString( xResourceBundle, STR_JPEG_COMPRESSION );
265         aStrings[ STR_QUALITY                  ] = lcl_loadString( xResourceBundle, STR_QUALITY );
266         aStrings[ STR_REMOVE_CROP_AREA         ] = lcl_loadString( xResourceBundle, STR_REMOVE_CROP_AREA );
267         aStrings[ STR_IMAGE_RESOLUTION         ] = lcl_loadString( xResourceBundle, STR_IMAGE_RESOLUTION );
268         aStrings[ STR_IMAGE_RESOLUTION_0       ] = lcl_loadString( xResourceBundle, STR_IMAGE_RESOLUTION_0 );
269         aStrings[ STR_IMAGE_RESOLUTION_1       ] = lcl_loadString( xResourceBundle, STR_IMAGE_RESOLUTION_1 );
270         aStrings[ STR_IMAGE_RESOLUTION_2       ] = lcl_loadString( xResourceBundle, STR_IMAGE_RESOLUTION_2 );
271         aStrings[ STR_IMAGE_RESOLUTION_3       ] = lcl_loadString( xResourceBundle, STR_IMAGE_RESOLUTION_3 );
272         aStrings[ STR_EMBED_LINKED_GRAPHICS    ] = lcl_loadString( xResourceBundle, STR_EMBED_LINKED_GRAPHICS );
273         aStrings[ STR_OLE_OBJECTS              ] = lcl_loadString( xResourceBundle, STR_OLE_OBJECTS );
274         aStrings[ STR_OLE_OPTIMIZATION         ] = lcl_loadString( xResourceBundle, STR_OLE_OPTIMIZATION );
275         aStrings[ STR_OLE_REPLACE              ] = lcl_loadString( xResourceBundle, STR_OLE_REPLACE );
276         aStrings[ STR_ALL_OLE_OBJECTS          ] = lcl_loadString( xResourceBundle, STR_ALL_OLE_OBJECTS );
277         aStrings[ STR_ALIEN_OLE_OBJECTS_ONLY   ] = lcl_loadString( xResourceBundle, STR_ALIEN_OLE_OBJECTS_ONLY );
278         aStrings[ STR_OLE_OBJECTS_DESC         ] = lcl_loadString( xResourceBundle, STR_OLE_OBJECTS_DESC );
279         aStrings[ STR_NO_OLE_OBJECTS_DESC      ] = lcl_loadString( xResourceBundle, STR_NO_OLE_OBJECTS_DESC );
280         aStrings[ STR_SLIDES                   ] = lcl_loadString( xResourceBundle, STR_SLIDES );
281         aStrings[ STR_CHOOSE_SLIDES            ] = lcl_loadString( xResourceBundle, STR_CHOOSE_SLIDES );
282         aStrings[ STR_MASTER_PAGES             ] = lcl_loadString( xResourceBundle, STR_MASTER_PAGES );
283         aStrings[ STR_DELETE_MASTER_PAGES      ] = lcl_loadString( xResourceBundle, STR_DELETE_MASTER_PAGES );
284         aStrings[ STR_DELETE_NOTES_PAGES       ] = lcl_loadString( xResourceBundle, STR_DELETE_NOTES_PAGES );
285         aStrings[ STR_DELETE_HIDDEN_SLIDES     ] = lcl_loadString( xResourceBundle, STR_DELETE_HIDDEN_SLIDES );
286         aStrings[ STR_CUSTOM_SHOW              ] = lcl_loadString( xResourceBundle, STR_CUSTOM_SHOW );
287         aStrings[ STR_SUMMARY                  ] = lcl_loadString( xResourceBundle, STR_SUMMARY );
288         aStrings[ STR_SUMMARY_TITLE            ] = lcl_loadString( xResourceBundle, STR_SUMMARY_TITLE );
289         aStrings[ STR_PROGRESS                 ] = lcl_loadString( xResourceBundle, STR_PROGRESS );
290         aStrings[ STR_OBJECTS_OPTIMIZED        ] = lcl_loadString( xResourceBundle, STR_OBJECTS_OPTIMIZED );
291         aStrings[ STR_APPLY_TO_CURRENT         ] = lcl_loadString( xResourceBundle, STR_APPLY_TO_CURRENT );
292         aStrings[ STR_AUTOMATICALLY_OPEN       ] = lcl_loadString( xResourceBundle, STR_AUTOMATICALLY_OPEN );
293         aStrings[ STR_SAVE_SETTINGS            ] = lcl_loadString( xResourceBundle, STR_SAVE_SETTINGS );
294         aStrings[ STR_SAVE_AS                  ] = lcl_loadString( xResourceBundle, STR_SAVE_AS );
295         aStrings[ STR_DELETE_SLIDES            ] = lcl_loadString( xResourceBundle, STR_DELETE_SLIDES );
296         aStrings[ STR_OPTIMIZE_IMAGES          ] = lcl_loadString( xResourceBundle, STR_OPTIMIZE_IMAGES );
297         aStrings[ STR_CREATE_REPLACEMENT       ] = lcl_loadString( xResourceBundle, STR_CREATE_REPLACEMENT );
298         aStrings[ STR_CURRENT_FILESIZE         ] = lcl_loadString( xResourceBundle, STR_CURRENT_FILESIZE );
299         aStrings[ STR_ESTIMATED_FILESIZE       ] = lcl_loadString( xResourceBundle, STR_ESTIMATED_FILESIZE );
300         aStrings[ STR_MB                       ] = lcl_loadString( xResourceBundle, STR_MB );
301         aStrings[ STR_MY_SETTINGS              ] = lcl_loadString( xResourceBundle, STR_MY_SETTINGS );
302         aStrings[ STR_DEFAULT_SESSION          ] = lcl_loadString( xResourceBundle, STR_DEFAULT_SESSION );
303         aStrings[ STR_MODIFY_WARNING           ] = lcl_loadString( xResourceBundle, STR_MODIFY_WARNING );
304         aStrings[ STR_YES                      ] = lcl_loadString( xResourceBundle, STR_YES );
305         aStrings[ STR_OK                       ] = lcl_loadString( xResourceBundle, STR_OK );
306         aStrings[ STR_INFO_1                   ] = lcl_loadString( xResourceBundle, STR_INFO_1 );
307         aStrings[ STR_INFO_2                   ] = lcl_loadString( xResourceBundle, STR_INFO_2 );
308         aStrings[ STR_INFO_3                   ] = lcl_loadString( xResourceBundle, STR_INFO_3 );
309         aStrings[ STR_INFO_4                   ] = lcl_loadString( xResourceBundle, STR_INFO_4 );
310         aStrings[ STR_DUPLICATING_PRESENTATION ] = lcl_loadString( xResourceBundle, STR_DUPLICATING_PRESENTATION );
311         aStrings[ STR_DELETING_SLIDES          ] = lcl_loadString( xResourceBundle, STR_DELETING_SLIDES );
312         aStrings[ STR_OPTIMIZING_GRAPHICS      ] = lcl_loadString( xResourceBundle, STR_OPTIMIZING_GRAPHICS );
313         aStrings[ STR_CREATING_OLE_REPLACEMENTS] = lcl_loadString( xResourceBundle, STR_CREATING_OLE_REPLACEMENTS );
314         aStrings[ STR_FILESIZESEPARATOR        ] = lcl_loadString( xResourceBundle, STR_FILESIZESEPARATOR );
315         aStrings[ STR_INFO_DIALOG              ] = lcl_loadString( xResourceBundle, STR_INFO_DIALOG );
316     }
317     catch( Exception& )
318     {
319     }
320 }
321 
322 void ConfigurationAccess::LoadConfiguration()
323 {
324     try
325     {
326         do
327         {
328             Reference< XInterface > xRoot( OpenConfiguration( true ) );
329             if ( !xRoot.is() )
330                 break;
331             Reference< container::XNameAccess > xSet( GetConfigurationNode( xRoot, TKGet( TK_LastUsedSettings ) ), UNO_QUERY );
332             if ( xSet.is() )
333             {
334                 OptimizerSettings& rCurrent( maSettings.front() );
335                 rCurrent.LoadSettingsFromConfiguration( xSet );
336             }
337             xSet = Reference< container::XNameAccess >( GetConfigurationNode( xRoot, TKGet( TK_Settings_Templates ) ), UNO_QUERY );
338             if ( xSet.is() )
339             {
340                 const Sequence< OUString > aElements( xSet->getElementNames() );
341                 for ( int i = 0; i < aElements.getLength(); i++ )
342                 {
343                     try
344                     {
345                         OUString aPath( TKGet( TK_Settings_Templates_ ).concat( aElements[ i ] ) );
346                         Reference< container::XNameAccess > xTemplates( GetConfigurationNode( xRoot, aPath ), UNO_QUERY );
347                         if ( xTemplates.is() )
348                         {
349                             maSettings.push_back( OptimizerSettings() );
350                             maSettings.back().LoadSettingsFromConfiguration( xTemplates );
351                         }
352                     }
353                     catch( Exception& /* rException */ )
354                     {
355                     }
356                 }
357             }
358         }
359         while( false );
360     }
361     catch( Exception& )
362     {
363     }
364 }
365 
366 void ConfigurationAccess::SaveConfiguration()
367 {
368     try
369     {
370         do
371         {
372             int i;
373             unsigned int k;
374             Reference<util::XChangesBatch> xRoot( OpenConfiguration( false ), UNO_QUERY_THROW );
375 
376             // storing the last used settings
377             Reference< container::XNameReplace > xSet( GetConfigurationNode( xRoot, TKGet( TK_LastUsedSettings ) ), UNO_QUERY_THROW );
378             OptimizerSettings& rCurrent( maSettings.front() );
379             rCurrent.SaveSettingsToConfiguration( xSet );
380 
381             // updating template elements
382             xSet = Reference< container::XNameReplace >( GetConfigurationNode( xRoot, TKGet( TK_Settings_Templates ) ), UNO_QUERY_THROW );
383             Reference< container::XNameContainer > xNameContainer( xSet, UNO_QUERY_THROW );
384 
385             const Sequence< OUString > aElements( xSet->getElementNames() );
386             for( i = 0; i < aElements.getLength(); i++ )
387                 xNameContainer->removeByName( aElements[ i ] );
388 
389             for( k = 1; k < maSettings.size(); k++ )
390             {
391                 OptimizerSettings& rSettings( maSettings[ k ] );
392                 OUString aElementName( TKGet( TK_Template ).concat( OUString::valueOf( static_cast< sal_Int32 >( k ) ) ) );
393                 Reference< lang::XSingleServiceFactory > xChildFactory ( xSet, UNO_QUERY_THROW );
394                 Reference< container::XNameReplace > xChild( xChildFactory->createInstance(), UNO_QUERY_THROW );
395                 xNameContainer->insertByName( aElementName, Any( xChild ) );
396 
397                 OUString aPath( TKGet( TK_Settings_Templates_ ).concat( aElementName ) );
398                 Reference< container::XNameReplace > xTemplates( GetConfigurationNode( xRoot, aPath ), UNO_QUERY );
399                 rSettings.SaveSettingsToConfiguration( xTemplates );
400             }
401             xRoot->commitChanges();
402         }
403         while( false );
404     }
405     catch( Exception& /* rException */ )
406     {
407 
408     }
409 }
410 
411 Reference< XInterface > ConfigurationAccess::OpenConfiguration( bool bReadOnly )
412 {
413     Reference< XInterface > xRoot;
414     try
415     {
416         Reference< lang::XMultiServiceFactory > xProvider( m_xContext->getServiceManager()->createInstanceWithContext( GetConfigurationProviderServiceName(), m_xContext ), UNO_QUERY );
417         if ( xProvider.is() )
418         {
419             Sequence< Any > aCreationArguments( 2 );
420             aCreationArguments[0] = makeAny( PropertyValue(
421                 OUString( RTL_CONSTASCII_USTRINGPARAM( "nodepath" ) ), 0,
422                 makeAny( GetPathToConfigurationRoot() ),
423                 PropertyState_DIRECT_VALUE ) );
424             aCreationArguments[1] = makeAny(beans::PropertyValue(
425                 OUString( RTL_CONSTASCII_USTRINGPARAM( "lazywrite" ) ), 0, makeAny( true ),
426                 PropertyState_DIRECT_VALUE ) );
427             OUString sAccessService;
428             if ( bReadOnly )
429                 sAccessService = OUString( RTL_CONSTASCII_USTRINGPARAM(
430                     "com.sun.star.configuration.ConfigurationAccess" ) );
431             else
432                 sAccessService = OUString( RTL_CONSTASCII_USTRINGPARAM(
433                     "com.sun.star.configuration.ConfigurationUpdateAccess" ) );
434 
435             xRoot = xProvider->createInstanceWithArguments(
436                 sAccessService, aCreationArguments );
437         }
438     }
439     catch ( Exception& /* rException */ )
440     {
441     }
442     return xRoot;
443 }
444 
445 Reference< XInterface > ConfigurationAccess::GetConfigurationNode(
446     const Reference< XInterface >& xRoot,
447     const OUString& sPathToNode )
448 {
449     Reference< XInterface > xNode;
450     try
451     {
452         if ( !sPathToNode.getLength() )
453             xNode = xRoot;
454         else
455         {
456             Reference< XHierarchicalNameAccess > xHierarchy( xRoot, UNO_QUERY );
457             if ( xHierarchy.is() )
458             {
459                 xHierarchy->getByHierarchicalName( sPathToNode ) >>= xNode;
460             }
461         }
462     }
463     catch ( Exception& rException )
464     {
465         OSL_TRACE ("caught exception while getting configuration node %s: %s",
466             ::rtl::OUStringToOString(sPathToNode,
467                 RTL_TEXTENCODING_UTF8).getStr(),
468             ::rtl::OUStringToOString(rException.Message,
469                 RTL_TEXTENCODING_UTF8).getStr());
470     }
471     return xNode;
472 }
473 
474 com::sun::star::uno::Any ConfigurationAccess::GetConfigProperty( const PPPOptimizerTokenEnum ePropertyToken ) const
475 {
476     Any aRetValue;
477     const OptimizerSettings& rSettings( maSettings.front() );
478     try
479     {
480         switch( ePropertyToken )
481         {
482             case TK_Name :                      aRetValue <<= rSettings.maName; break;
483             case TK_JPEGCompression :           aRetValue <<= rSettings.mbJPEGCompression; break;
484             case TK_JPEGQuality :               aRetValue <<= rSettings.mnJPEGQuality; break;
485             case TK_RemoveCropArea :            aRetValue <<= rSettings.mbRemoveCropArea; break;
486             case TK_ImageResolution :           aRetValue <<= rSettings.mnImageResolution; break;
487             case TK_EmbedLinkedGraphics :       aRetValue <<= rSettings.mbEmbedLinkedGraphics; break;
488             case TK_OLEOptimization :           aRetValue <<= rSettings.mbOLEOptimization; break;
489             case TK_OLEOptimizationType :       aRetValue <<= rSettings.mnOLEOptimizationType; break;
490             case TK_DeleteUnusedMasterPages :   aRetValue <<= rSettings.mbDeleteUnusedMasterPages; break;
491             case TK_DeleteHiddenSlides :        aRetValue <<= rSettings.mbDeleteHiddenSlides; break;
492             case TK_DeleteNotesPages :          aRetValue <<= rSettings.mbDeleteNotesPages; break;
493             case TK_SaveAs :                    aRetValue <<= rSettings.mbSaveAs; break;
494             case TK_SaveAsURL :                 aRetValue <<= rSettings.maSaveAsURL; break;
495             case TK_FilterName :                aRetValue <<= rSettings.maFilterName; break;
496             case TK_OpenNewDocument :           aRetValue <<= rSettings.mbOpenNewDocument; break;
497             case TK_EstimatedFileSize :         aRetValue <<= rSettings.mnEstimatedFileSize; break;
498             default:
499                 break;
500         }
501     }
502     catch( Exception& /* rException */ )
503     {
504     }
505     return aRetValue;
506 }
507 
508 void ConfigurationAccess::SetConfigProperty( const PPPOptimizerTokenEnum ePropertyToken, const com::sun::star::uno::Any& rValue )
509 {
510     OptimizerSettings& rSettings( maSettings.front() );
511     try
512     {
513         switch( ePropertyToken )
514         {
515             case TK_Name :                      rValue >>= rSettings.maName; break;
516             case TK_JPEGCompression :           rValue >>= rSettings.mbJPEGCompression; break;
517             case TK_JPEGQuality :               rValue >>= rSettings.mnJPEGQuality; break;
518             case TK_RemoveCropArea :            rValue >>= rSettings.mbRemoveCropArea; break;
519             case TK_ImageResolution :           rValue >>= rSettings.mnImageResolution; break;
520             case TK_EmbedLinkedGraphics :       rValue >>= rSettings.mbEmbedLinkedGraphics; break;
521             case TK_OLEOptimization :           rValue >>= rSettings.mbOLEOptimization; break;
522             case TK_OLEOptimizationType :       rValue >>= rSettings.mnOLEOptimizationType; break;
523             case TK_DeleteUnusedMasterPages :   rValue >>= rSettings.mbDeleteUnusedMasterPages; break;
524             case TK_DeleteHiddenSlides :        rValue >>= rSettings.mbDeleteHiddenSlides; break;
525             case TK_DeleteNotesPages :          rValue >>= rSettings.mbDeleteNotesPages; break;
526             case TK_CustomShowName :            rValue >>= rSettings.maCustomShowName; break;
527             case TK_SaveAs :                    rValue >>= rSettings.mbSaveAs; break;
528             case TK_SaveAsURL :                 rValue >>= rSettings.maSaveAsURL; break;
529             case TK_FilterName :                rValue >>= rSettings.maFilterName; break;
530             case TK_OpenNewDocument :           rValue >>= rSettings.mbOpenNewDocument; break;
531             case TK_EstimatedFileSize :         rValue >>= rSettings.mnEstimatedFileSize; break;
532             default:
533                 break;
534         }
535     }
536     catch( Exception& /* rException */ )
537     {
538     }
539 }
540 
541 sal_Bool ConfigurationAccess::GetConfigProperty( const PPPOptimizerTokenEnum ePropertyToken, const sal_Bool bDefault ) const
542 {
543     sal_Bool bRetValue = bDefault;
544     if ( ! ( GetConfigProperty( ePropertyToken ) >>= bRetValue ) )
545         bRetValue = bDefault;
546     return bRetValue;
547 }
548 
549 sal_Int16 ConfigurationAccess::GetConfigProperty( const PPPOptimizerTokenEnum ePropertyToken, const sal_Int16 nDefault ) const
550 {
551     sal_Int16 nRetValue = nDefault;
552     if ( ! ( GetConfigProperty( ePropertyToken ) >>= nRetValue ) )
553         nRetValue = nDefault;
554     return nRetValue;
555 }
556 
557 sal_Int32 ConfigurationAccess::GetConfigProperty( const PPPOptimizerTokenEnum ePropertyToken, const sal_Int32 nDefault ) const
558 {
559     sal_Int32 nRetValue = nDefault;
560     if ( ! ( GetConfigProperty( ePropertyToken ) >>= nRetValue ) )
561         nRetValue = nDefault;
562     return nRetValue;
563 }
564 
565 Sequence< PropertyValue > ConfigurationAccess::GetConfigurationSequence()
566 {
567     Sequence< PropertyValue > aRet( 15 );
568     OptimizerSettings& rSettings( maSettings.front() );
569     aRet[ 0 ].Name = TKGet( TK_JPEGCompression );
570     aRet[ 0 ].Value= Any( rSettings.mbJPEGCompression );
571     aRet[ 1 ].Name = TKGet( TK_JPEGQuality );
572     aRet[ 1 ].Value= Any( rSettings.mnJPEGQuality );
573     aRet[ 2 ].Name = TKGet( TK_RemoveCropArea );
574     aRet[ 2 ].Value= Any( rSettings.mbRemoveCropArea );
575     aRet[ 3 ].Name = TKGet( TK_ImageResolution );
576     aRet[ 3 ].Value= Any( rSettings.mnImageResolution );
577     aRet[ 4 ].Name = TKGet( TK_EmbedLinkedGraphics );
578     aRet[ 4 ].Value= Any( rSettings.mbEmbedLinkedGraphics );
579     aRet[ 5 ].Name = TKGet( TK_OLEOptimization );
580     aRet[ 5 ].Value= Any( rSettings.mbOLEOptimization );
581     aRet[ 6 ].Name = TKGet( TK_OLEOptimizationType );
582     aRet[ 6 ].Value= Any( rSettings.mnOLEOptimizationType );
583     aRet[ 7 ].Name = TKGet( TK_DeleteUnusedMasterPages );
584     aRet[ 7 ].Value= Any( rSettings.mbDeleteUnusedMasterPages );
585     aRet[ 8 ].Name = TKGet( TK_DeleteHiddenSlides );
586     aRet[ 8 ].Value= Any( rSettings.mbDeleteHiddenSlides );
587     aRet[ 9 ].Name = TKGet( TK_DeleteNotesPages );
588     aRet[ 9 ].Value= Any( rSettings.mbDeleteNotesPages );
589     aRet[ 10].Name = TKGet( TK_CustomShowName );
590     aRet[ 10].Value= Any( rSettings.maCustomShowName );
591     aRet[ 11].Name = TKGet( TK_SaveAsURL );
592     aRet[ 11].Value= Any( rSettings.maSaveAsURL );
593     aRet[ 12].Name = TKGet( TK_FilterName );
594     aRet[ 12].Value= Any( rSettings.maFilterName );
595     aRet[ 13].Name = TKGet( TK_OpenNewDocument );
596     aRet[ 13].Value= Any( rSettings.mbOpenNewDocument );
597     aRet[ 14].Name = TKGet( TK_EstimatedFileSize );
598     aRet[ 14].Value= Any( rSettings.mnEstimatedFileSize );
599     return aRet;
600 }
601 
602 std::vector< OptimizerSettings >::iterator ConfigurationAccess::GetOptimizerSettingsByName( const rtl::OUString& rName )
603 {
604     std::vector< OptimizerSettings >::iterator aIter( maSettings.begin() + 1 );
605     while ( aIter != maSettings.end() )
606     {
607         if ( aIter->maName == rName )
608             break;
609         aIter++;
610     }
611     return aIter;
612 }
613 
614 /* vim: set noet sw=4 ts=4: */
615