xref: /trunk/main/unotools/source/config/useroptions.cxx (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 // MARKER(update_precomp.py): autogen include statement, do not remove
29 #include "precompiled_unotools.hxx"
30 
31 #include <unotools/useroptions.hxx>
32 #include <unotools/useroptions_const.hxx>
33 
34 #include <unotools/configmgr.hxx>
35 #include <tools/debug.hxx>
36 #include <com/sun/star/uno/Any.hxx>
37 #include <com/sun/star/uno/Sequence.hxx>
38 #include <vos/mutex.hxx>
39 #include <rtl/instance.hxx>
40 #include <rtl/logfile.hxx>
41 #include "itemholder1.hxx"
42 
43 #include <com/sun/star/beans/Property.hpp>
44 #include <com/sun/star/beans/XPropertySet.hpp>
45 #include <com/sun/star/beans/PropertyAttribute.hpp>
46 #include <com/sun/star/container/XNameAccess.hpp>
47 #include <com/sun/star/container/XNameContainer.hpp>
48 #include <com/sun/star/lang/XSingleServiceFactory.hpp>
49 #include <com/sun/star/util/XChangesListener.hpp>
50 #include <com/sun/star/util/XChangesNotifier.hpp>
51 #include <com/sun/star/util/ChangesEvent.hpp>
52 #include <comphelper/configurationhelper.hxx>
53 #include <unotools/processfactory.hxx>
54 #include <unotools/loghelper.hxx>
55 
56 using namespace utl;
57 using namespace rtl;
58 using namespace com::sun::star;
59 using namespace com::sun::star::uno;
60 
61 namespace css = ::com::sun::star;
62 
63 // class SvtUserOptions_Impl ---------------------------------------------
64 class SvtUserOptions_Impl;
65 class SvtUserConfigChangeListener_Impl : public cppu::WeakImplHelper1
66 <
67     com::sun::star::util::XChangesListener
68 >
69 {
70         SvtUserOptions_Impl&    m_rParent;
71     public:
72         SvtUserConfigChangeListener_Impl(SvtUserOptions_Impl& rParent);
73         ~SvtUserConfigChangeListener_Impl();
74 
75     //XChangesListener
76     virtual void SAL_CALL changesOccurred( const util::ChangesEvent& Event ) throw(RuntimeException);
77     //XEventListener
78     virtual void SAL_CALL disposing( const lang::EventObject& Source ) throw(RuntimeException);
79 };
80 
81 class SvtUserOptions_Impl : public utl::ConfigurationBroadcaster
82 {
83 public:
84     SvtUserOptions_Impl();
85     ~SvtUserOptions_Impl();
86 
87     // get the user token
88     ::rtl::OUString   GetCompany() const;
89     ::rtl::OUString   GetFirstName() const;
90     ::rtl::OUString   GetLastName() const;
91     ::rtl::OUString   GetID() const;
92     ::rtl::OUString   GetStreet() const;
93     ::rtl::OUString   GetCity() const;
94     ::rtl::OUString   GetState() const;
95     ::rtl::OUString   GetZip() const;
96     ::rtl::OUString   GetCountry() const;
97     ::rtl::OUString   GetPosition() const;
98     ::rtl::OUString   GetTitle() const;
99     ::rtl::OUString   GetTelephoneHome() const;
100     ::rtl::OUString   GetTelephoneWork() const;
101     ::rtl::OUString   GetFax() const;
102     ::rtl::OUString   GetEmail() const;
103     ::rtl::OUString   GetCustomerNumber() const;
104     ::rtl::OUString   GetFathersName() const;
105     ::rtl::OUString   GetApartment() const;
106 
107     ::rtl::OUString   GetFullName() const;
108     ::rtl::OUString   GetLocale() const { return m_aLocale; }
109 
110     // set the address token
111     void              SetCompany( const ::rtl::OUString& rNewToken );
112     void              SetFirstName( const ::rtl::OUString& rNewToken );
113     void              SetLastName( const ::rtl::OUString& rNewToken );
114     void              SetID( const ::rtl::OUString& rNewToken );
115     void              SetStreet( const ::rtl::OUString& rNewToken );
116     void              SetCity( const ::rtl::OUString& rNewToken );
117     void              SetState( const ::rtl::OUString& rNewToken );
118     void              SetZip( const ::rtl::OUString& rNewToken );
119     void              SetCountry( const ::rtl::OUString& rNewToken );
120     void              SetPosition( const ::rtl::OUString& rNewToken );
121     void              SetTitle( const ::rtl::OUString& rNewToken );
122     void              SetTelephoneHome( const ::rtl::OUString& rNewToken );
123     void              SetTelephoneWork( const ::rtl::OUString& rNewToken );
124     void              SetFax( const ::rtl::OUString& rNewToken );
125     void              SetEmail( const ::rtl::OUString& rNewToken );
126     void              SetCustomerNumber( const ::rtl::OUString& rNewToken );
127     void              SetFathersName( const ::rtl::OUString& rNewToken );
128     void              SetApartment( const ::rtl::OUString& rNewToken );
129 
130     sal_Bool          IsTokenReadonly( sal_uInt16 nToken ) const;
131     ::rtl::OUString   GetToken(sal_uInt16 nToken) const;
132     void              Notify();
133 
134 private:
135     uno::Reference< util::XChangesListener >           m_xChangeListener;
136     css::uno::Reference< css::container::XNameAccess > m_xCfg;
137     css::uno::Reference< css::beans::XPropertySet >    m_xData;
138     ::rtl::OUString m_aLocale;
139 };
140 
141 // global ----------------------------------------------------------------
142 
143 static SvtUserOptions_Impl* pOptions = NULL;
144 static sal_Int32            nRefCount = 0;
145 
146 #define READONLY_DEFAULT    sal_False
147 
148 /*-- 16.06.2009 14:22:56---------------------------------------------------
149 
150   -----------------------------------------------------------------------*/
151 SvtUserConfigChangeListener_Impl::SvtUserConfigChangeListener_Impl(SvtUserOptions_Impl& rParent) :
152     m_rParent( rParent )
153 {
154 }
155 /*-- 16.06.2009 14:22:56---------------------------------------------------
156 
157   -----------------------------------------------------------------------*/
158 SvtUserConfigChangeListener_Impl::~SvtUserConfigChangeListener_Impl()
159 {
160 }
161 /*-- 16.06.2009 14:22:56---------------------------------------------------
162 
163   -----------------------------------------------------------------------*/
164 void SvtUserConfigChangeListener_Impl::changesOccurred( const util::ChangesEvent& rEvent ) throw(RuntimeException)
165 {
166     if(rEvent.Changes.getLength())
167         m_rParent.Notify();
168 }
169 /*-- 16.06.2009 14:22:56---------------------------------------------------
170 
171   -----------------------------------------------------------------------*/
172 void SvtUserConfigChangeListener_Impl::disposing( const lang::EventObject& rSource ) throw(RuntimeException)
173 {
174     try
175     {
176         uno::Reference< util::XChangesNotifier > xChgNot( rSource.Source, UNO_QUERY_THROW);
177         xChgNot->removeChangesListener(this);
178     }
179     catch(Exception& )
180     {
181     }
182 }
183 
184 // class SvtUserOptions_Impl ---------------------------------------------
185 
186 // -----------------------------------------------------------------------
187 SvtUserOptions_Impl::SvtUserOptions_Impl() :
188     m_xChangeListener( new SvtUserConfigChangeListener_Impl(*this) )
189 {
190     try
191     {
192         m_xCfg = Reference< css::container::XNameAccess > (
193             ::comphelper::ConfigurationHelper::openConfig(
194             utl::getProcessServiceFactory(),
195             s_sData,
196             ::comphelper::ConfigurationHelper::E_STANDARD),
197             css::uno::UNO_QUERY );
198 
199         m_xData = css::uno::Reference< css::beans::XPropertySet >(m_xCfg, css::uno::UNO_QUERY);
200         uno::Reference< util::XChangesNotifier > xChgNot( m_xCfg, UNO_QUERY);
201         try
202         {
203             xChgNot->addChangesListener( m_xChangeListener );
204         }
205         catch(RuntimeException& )
206         {
207         }
208     }
209     catch(const css::uno::Exception& ex)
210     {
211         m_xCfg.clear();
212         LogHelper::logIt(ex);
213     }
214 
215     Any aAny = ConfigManager::GetConfigManager()->GetDirectConfigProperty( ConfigManager::LOCALE );
216     ::rtl::OUString aLocale;
217     if ( aAny >>= aLocale )
218         m_aLocale = aLocale;
219     else
220     {
221         DBG_ERRORFILE( "SvtUserOptions_Impl::SvtUserOptions_Impl(): no locale found" );
222     }
223 }
224 
225 // -----------------------------------------------------------------------
226 
227 SvtUserOptions_Impl::~SvtUserOptions_Impl()
228 {
229 }
230 
231 ::rtl::OUString SvtUserOptions_Impl::GetCompany() const
232 {
233     ::rtl::OUString sCompany;
234 
235     try
236     {
237         m_xData->getPropertyValue(s_so) >>= sCompany;
238     }
239     catch ( const css::uno::Exception& ex )
240     {
241         LogHelper::logIt(ex);
242     }
243 
244     return sCompany;
245 }
246 
247 ::rtl::OUString SvtUserOptions_Impl::GetFirstName() const
248 {
249     ::rtl::OUString sFirstName;
250 
251     try
252     {
253         m_xData->getPropertyValue(s_sgivenname) >>= sFirstName;
254     }
255     catch ( const css::uno::Exception& ex )
256     {
257         LogHelper::logIt(ex);
258     }
259 
260     return  sFirstName;
261 }
262 
263 ::rtl::OUString SvtUserOptions_Impl::GetLastName() const
264 {
265     ::rtl::OUString sLastName;
266 
267     try
268     {
269         m_xData->getPropertyValue(s_ssn) >>= sLastName;
270     }
271     catch ( const css::uno::Exception& ex )
272     {
273         LogHelper::logIt(ex);
274     }
275 
276     return  sLastName;
277 }
278 
279 ::rtl::OUString SvtUserOptions_Impl::GetID() const
280 {
281     ::rtl::OUString sID;
282 
283     try
284     {
285         m_xData->getPropertyValue(s_sinitials) >>= sID;
286     }
287     catch ( const css::uno::Exception& ex )
288     {
289         LogHelper::logIt(ex);
290     }
291 
292     return  sID;
293 }
294 
295 ::rtl::OUString SvtUserOptions_Impl::GetStreet() const
296 {
297     ::rtl::OUString sStreet;
298 
299     try
300     {
301         m_xData->getPropertyValue(s_sstreet) >>= sStreet;
302     }
303     catch ( const css::uno::Exception& ex )
304     {
305         LogHelper::logIt(ex);
306     }
307 
308     return  sStreet;
309 }
310 
311 ::rtl::OUString SvtUserOptions_Impl::GetCity() const
312 {
313     ::rtl::OUString sCity;
314 
315     try
316     {
317         m_xData->getPropertyValue(s_sl) >>= sCity;
318     }
319     catch ( const css::uno::Exception& ex )
320     {
321         LogHelper::logIt(ex);
322     }
323 
324     return  sCity;
325 }
326 
327 ::rtl::OUString SvtUserOptions_Impl::GetState() const
328 {
329     ::rtl::OUString sState;
330 
331     try
332     {
333         m_xData->getPropertyValue(s_sst) >>= sState;
334     }
335     catch ( const css::uno::Exception& ex )
336     {
337         LogHelper::logIt(ex);
338     }
339 
340     return  sState;
341 }
342 
343 ::rtl::OUString SvtUserOptions_Impl::GetZip() const
344 {
345     ::rtl::OUString sZip;
346 
347     try
348     {
349         m_xData->getPropertyValue(s_spostalcode) >>= sZip;
350     }
351     catch ( const css::uno::Exception& ex )
352     {
353         LogHelper::logIt(ex);
354     }
355 
356     return  sZip;
357 }
358 
359 ::rtl::OUString SvtUserOptions_Impl::GetCountry() const
360 {
361     ::rtl::OUString sCountry;
362 
363     try
364     {
365         m_xData->getPropertyValue(s_sc) >>= sCountry;
366     }
367     catch ( const css::uno::Exception& ex )
368     {
369         LogHelper::logIt(ex);
370     }
371 
372     return  sCountry;
373 }
374 
375 ::rtl::OUString SvtUserOptions_Impl::GetPosition() const
376 {
377     ::rtl::OUString sPosition;
378 
379     try
380     {
381         m_xData->getPropertyValue(s_sposition) >>= sPosition;
382     }
383     catch ( const css::uno::Exception& ex )
384     {
385         LogHelper::logIt(ex);
386     }
387 
388     return  sPosition;
389 }
390 
391 ::rtl::OUString SvtUserOptions_Impl::GetTitle() const
392 {
393     ::rtl::OUString sTitle;
394 
395     try
396     {
397         m_xData->getPropertyValue(s_stitle) >>= sTitle;
398     }
399     catch ( const css::uno::Exception& ex )
400     {
401         LogHelper::logIt(ex);
402     }
403 
404     return  sTitle;
405 }
406 
407 ::rtl::OUString SvtUserOptions_Impl::GetTelephoneHome() const
408 {
409     ::rtl::OUString sTelephoneHome;
410 
411     try
412     {
413         m_xData->getPropertyValue(s_shomephone) >>= sTelephoneHome;
414     }
415     catch ( const css::uno::Exception& ex )
416     {
417         LogHelper::logIt(ex);
418     }
419 
420     return  sTelephoneHome;
421 }
422 
423 ::rtl::OUString SvtUserOptions_Impl::GetTelephoneWork() const
424 {
425     ::rtl::OUString sTelephoneWork;
426 
427     try
428     {
429         m_xData->getPropertyValue(s_stelephonenumber) >>= sTelephoneWork;
430     }
431     catch ( const css::uno::Exception& ex )
432     {
433         LogHelper::logIt(ex);
434     }
435 
436     return  sTelephoneWork;
437 }
438 
439 ::rtl::OUString SvtUserOptions_Impl::GetFax() const
440 {
441     ::rtl::OUString sFax;
442 
443     try
444     {
445         m_xData->getPropertyValue(s_sfacsimiletelephonenumber) >>= sFax;
446     }
447     catch ( const css::uno::Exception& ex )
448     {
449         LogHelper::logIt(ex);
450     }
451 
452     return  sFax;
453 }
454 
455 ::rtl::OUString SvtUserOptions_Impl::GetEmail() const
456 {
457     ::rtl::OUString sEmail;
458 
459     try
460     {
461         m_xData->getPropertyValue(s_smail) >>= sEmail;
462     }
463     catch ( const css::uno::Exception& ex )
464     {
465         LogHelper::logIt(ex);
466     }
467 
468     return  sEmail;
469 }
470 
471 ::rtl::OUString SvtUserOptions_Impl::GetCustomerNumber() const
472 {
473     ::rtl::OUString sCustomerNumber;
474 
475     try
476     {
477         m_xData->getPropertyValue(s_scustomernumber) >>= sCustomerNumber;
478     }
479     catch ( const css::uno::Exception& ex )
480     {
481         LogHelper::logIt(ex);
482     }
483 
484     return  sCustomerNumber;
485 }
486 
487 ::rtl::OUString SvtUserOptions_Impl::GetFathersName() const
488 {
489     ::rtl::OUString sFathersName;
490 
491     try
492     {
493         m_xData->getPropertyValue(s_sfathersname) >>= sFathersName;
494     }
495     catch ( const css::uno::Exception& ex )
496     {
497         LogHelper::logIt(ex);
498     }
499 
500     return  sFathersName;
501 }
502 
503 ::rtl::OUString SvtUserOptions_Impl::GetApartment() const
504 {
505     ::rtl::OUString sApartment;
506 
507     try
508     {
509         m_xData->getPropertyValue(s_sapartment) >>= sApartment;
510     }
511     catch ( const css::uno::Exception& ex )
512     {
513         LogHelper::logIt(ex);
514     }
515 
516     return  sApartment;
517 }
518 
519 void SvtUserOptions_Impl::SetCompany( const ::rtl::OUString& sCompany )
520 {
521     try
522     {
523         m_xData->setPropertyValue(s_so, css::uno::makeAny(::rtl::OUString(sCompany)));
524         ::comphelper::ConfigurationHelper::flush(m_xCfg);
525     }
526     catch ( const css::uno::Exception& ex)
527     {
528         LogHelper::logIt(ex);
529     }
530 }
531 
532 void SvtUserOptions_Impl::SetFirstName( const ::rtl::OUString& sFirstName )
533 {
534     try
535     {
536         m_xData->setPropertyValue(s_sgivenname, css::uno::makeAny(::rtl::OUString(sFirstName)));
537         ::comphelper::ConfigurationHelper::flush(m_xCfg);
538     }
539     catch ( const css::uno::Exception& ex)
540     {
541         LogHelper::logIt(ex);
542     }
543 }
544 
545 void SvtUserOptions_Impl::SetLastName( const ::rtl::OUString& sLastName )
546 {
547     try
548     {
549         m_xData->setPropertyValue(s_ssn, css::uno::makeAny(::rtl::OUString(sLastName)));
550         ::comphelper::ConfigurationHelper::flush(m_xCfg);
551     }
552     catch ( const css::uno::Exception& ex)
553     {
554         LogHelper::logIt(ex);
555     }
556 }
557 void SvtUserOptions_Impl::SetID( const ::rtl::OUString& sID )
558 {
559     try
560     {
561         m_xData->setPropertyValue(s_sinitials, css::uno::makeAny(::rtl::OUString(sID)));
562         ::comphelper::ConfigurationHelper::flush(m_xCfg);
563     }
564     catch ( const css::uno::Exception& ex)
565     {
566         LogHelper::logIt(ex);
567     }
568 }
569 
570 void SvtUserOptions_Impl::SetStreet( const ::rtl::OUString& sStreet )
571 {
572     try
573     {
574         m_xData->setPropertyValue(s_sstreet, css::uno::makeAny(::rtl::OUString(sStreet)));
575         ::comphelper::ConfigurationHelper::flush(m_xCfg);
576     }
577     catch ( const css::uno::Exception& ex)
578     {
579         LogHelper::logIt(ex);
580     }
581 }
582 
583 void SvtUserOptions_Impl::SetCity( const ::rtl::OUString& sCity )
584 {
585     try
586     {
587         m_xData->setPropertyValue(s_sl, css::uno::makeAny(::rtl::OUString(sCity)));
588         ::comphelper::ConfigurationHelper::flush(m_xCfg);
589     }
590     catch ( const css::uno::Exception& ex)
591     {
592         LogHelper::logIt(ex);
593     }
594 }
595 
596 void SvtUserOptions_Impl::SetState( const ::rtl::OUString& sState )
597 {
598     try
599     {
600         m_xData->setPropertyValue(s_sst, css::uno::makeAny(::rtl::OUString(sState)));
601         ::comphelper::ConfigurationHelper::flush(m_xCfg);
602     }
603     catch ( const css::uno::Exception& ex)
604     {
605         LogHelper::logIt(ex);
606     }
607 }
608 
609 void SvtUserOptions_Impl::SetZip( const ::rtl::OUString& sZip )
610 {
611     try
612     {
613         m_xData->setPropertyValue(s_spostalcode, css::uno::makeAny(::rtl::OUString(sZip)));
614         ::comphelper::ConfigurationHelper::flush(m_xCfg);
615     }
616     catch ( const css::uno::Exception& ex)
617     {
618         LogHelper::logIt(ex);
619     }
620 }
621 
622 void SvtUserOptions_Impl::SetCountry( const ::rtl::OUString& sCountry )
623 {
624     try
625     {
626         m_xData->setPropertyValue(s_sc, css::uno::makeAny(::rtl::OUString(sCountry)));
627         ::comphelper::ConfigurationHelper::flush(m_xCfg);
628     }
629     catch ( const css::uno::Exception& ex)
630     {
631         LogHelper::logIt(ex);
632     }
633 }
634 
635 void SvtUserOptions_Impl::SetPosition( const ::rtl::OUString& sPosition )
636 {
637     try
638     {
639         m_xData->setPropertyValue(s_sposition, css::uno::makeAny(::rtl::OUString(sPosition)));
640         ::comphelper::ConfigurationHelper::flush(m_xCfg);
641     }
642     catch ( const css::uno::Exception& ex)
643     {
644         LogHelper::logIt(ex);
645     }
646 }
647 
648 void SvtUserOptions_Impl::SetTitle( const ::rtl::OUString& sTitle )
649 {
650     try
651     {
652         m_xData->setPropertyValue(s_stitle, css::uno::makeAny(::rtl::OUString(sTitle)));
653         ::comphelper::ConfigurationHelper::flush(m_xCfg);
654     }
655     catch ( const css::uno::Exception& ex)
656     {
657         LogHelper::logIt(ex);
658     }
659 }
660 
661 void SvtUserOptions_Impl::SetTelephoneHome( const ::rtl::OUString& sTelephoneHome )
662 {
663     try
664     {
665         m_xData->setPropertyValue(s_shomephone, css::uno::makeAny(::rtl::OUString(sTelephoneHome)));
666         ::comphelper::ConfigurationHelper::flush(m_xCfg);
667     }
668     catch ( const css::uno::Exception& ex)
669     {
670         LogHelper::logIt(ex);
671     }
672 }
673 
674 void SvtUserOptions_Impl::SetTelephoneWork( const ::rtl::OUString& sTelephoneWork )
675 {
676     try
677     {
678         m_xData->setPropertyValue(s_stelephonenumber, css::uno::makeAny(::rtl::OUString(sTelephoneWork)));
679         ::comphelper::ConfigurationHelper::flush(m_xCfg);
680     }
681     catch ( const css::uno::Exception& ex)
682     {
683         LogHelper::logIt(ex);
684     }
685 }
686 
687 void SvtUserOptions_Impl::SetFax( const ::rtl::OUString& sFax )
688 {
689     try
690     {
691         m_xData->setPropertyValue(s_sfacsimiletelephonenumber, css::uno::makeAny(::rtl::OUString(sFax)));
692         ::comphelper::ConfigurationHelper::flush(m_xCfg);
693     }
694     catch ( const css::uno::Exception& ex)
695     {
696         LogHelper::logIt(ex);
697     }
698 }
699 
700 void SvtUserOptions_Impl::SetEmail( const ::rtl::OUString& sEmail )
701 {
702     try
703     {
704         m_xData->setPropertyValue(s_smail, css::uno::makeAny(::rtl::OUString(sEmail)));
705         ::comphelper::ConfigurationHelper::flush(m_xCfg);
706     }
707     catch ( const css::uno::Exception& ex)
708     {
709         LogHelper::logIt(ex);
710     }
711 }
712 
713 void SvtUserOptions_Impl::SetCustomerNumber( const ::rtl::OUString& sCustomerNumber )
714 {
715     try
716     {
717         m_xData->setPropertyValue(s_scustomernumber, css::uno::makeAny(::rtl::OUString(sCustomerNumber)));
718         ::comphelper::ConfigurationHelper::flush(m_xCfg);
719     }
720     catch ( const css::uno::Exception& ex)
721     {
722         LogHelper::logIt(ex);
723     }
724 }
725 
726 void SvtUserOptions_Impl::SetFathersName( const ::rtl::OUString& sFathersName )
727 {
728     try
729     {
730         m_xData->setPropertyValue(s_sfathersname, css::uno::makeAny(::rtl::OUString(sFathersName)));
731         ::comphelper::ConfigurationHelper::flush(m_xCfg);
732     }
733     catch ( const css::uno::Exception& ex)
734     {
735         LogHelper::logIt(ex);
736     }
737 }
738 
739 void SvtUserOptions_Impl::SetApartment( const ::rtl::OUString& sApartment )
740 {
741     try
742     {
743         m_xData->setPropertyValue(s_sapartment, css::uno::makeAny(::rtl::OUString(sApartment)));
744         ::comphelper::ConfigurationHelper::flush(m_xCfg);
745     }
746     catch ( const css::uno::Exception& ex)
747     {
748         LogHelper::logIt(ex);
749     }
750 }
751 
752 // -----------------------------------------------------------------------
753 
754 ::rtl::OUString SvtUserOptions_Impl::GetFullName() const
755 {
756     ::rtl::OUString sFullName;
757 
758     sFullName = GetFirstName();
759     sFullName.trim();
760     if ( sFullName.getLength() )
761         sFullName += ::rtl::OUString::createFromAscii(" ");
762     sFullName += GetLastName();
763     sFullName.trim();
764 
765     return sFullName;
766 }
767 
768 // -----------------------------------------------------------------------
769 
770 void SvtUserOptions_Impl::Notify()
771 {
772     NotifyListeners(0);
773 }
774 
775 // -----------------------------------------------------------------------
776 
777 sal_Bool SvtUserOptions_Impl::IsTokenReadonly( sal_uInt16 nToken ) const
778 {
779     css::uno::Reference< css::beans::XPropertySet >     xData(m_xCfg, css::uno::UNO_QUERY);
780     css::uno::Reference< css::beans::XPropertySetInfo > xInfo = xData->getPropertySetInfo();
781     css::beans::Property aProp;
782     sal_Bool             bRet = sal_False;
783 
784     switch ( nToken )
785     {
786         case USER_OPT_COMPANY:
787         {
788             aProp = xInfo->getPropertyByName(s_so);
789             bRet = ((aProp.Attributes & css::beans::PropertyAttribute::READONLY) == css::beans::PropertyAttribute::READONLY);
790             break;
791         }
792         case USER_OPT_FIRSTNAME:
793         {
794                 aProp = xInfo->getPropertyByName(s_sgivenname);
795                 bRet = ((aProp.Attributes & css::beans::PropertyAttribute::READONLY) == css::beans::PropertyAttribute::READONLY);
796                 break;
797         }
798         case USER_OPT_LASTNAME:
799         {
800                 aProp = xInfo->getPropertyByName(s_ssn);
801                 bRet = ((aProp.Attributes & css::beans::PropertyAttribute::READONLY) == css::beans::PropertyAttribute::READONLY);
802                 break;
803         }
804         case USER_OPT_ID:
805         {
806                 aProp = xInfo->getPropertyByName(s_sinitials);
807                 bRet = ((aProp.Attributes & css::beans::PropertyAttribute::READONLY) == css::beans::PropertyAttribute::READONLY);
808                 break;
809         }
810         case USER_OPT_STREET:
811         {
812                 aProp = xInfo->getPropertyByName(s_sstreet);
813                 bRet = ((aProp.Attributes & css::beans::PropertyAttribute::READONLY) == css::beans::PropertyAttribute::READONLY);
814                 break;
815         }
816         case USER_OPT_CITY:
817         {
818                 aProp = xInfo->getPropertyByName(s_sl);
819                 bRet = ((aProp.Attributes & css::beans::PropertyAttribute::READONLY) == css::beans::PropertyAttribute::READONLY);
820                 break;
821         }
822         case USER_OPT_STATE:
823         {
824                 aProp = xInfo->getPropertyByName(s_sst);
825                 bRet = ((aProp.Attributes & css::beans::PropertyAttribute::READONLY) == css::beans::PropertyAttribute::READONLY);
826                 break;
827         }
828         case USER_OPT_ZIP:
829         {
830                 aProp = xInfo->getPropertyByName(s_spostalcode);
831                 bRet = ((aProp.Attributes & css::beans::PropertyAttribute::READONLY) == css::beans::PropertyAttribute::READONLY);
832                 break;
833         }
834         case USER_OPT_COUNTRY:
835         {
836                 aProp = xInfo->getPropertyByName(s_sc);
837                 bRet = ((aProp.Attributes & css::beans::PropertyAttribute::READONLY) == css::beans::PropertyAttribute::READONLY);
838                 break;
839         }
840         case USER_OPT_POSITION:
841         {
842                 aProp = xInfo->getPropertyByName(s_sposition);
843                 bRet = ((aProp.Attributes & css::beans::PropertyAttribute::READONLY) == css::beans::PropertyAttribute::READONLY);
844                 break;
845         }
846         case USER_OPT_TITLE:
847         {
848                 aProp = xInfo->getPropertyByName(s_stitle);
849                 bRet = ((aProp.Attributes & css::beans::PropertyAttribute::READONLY) == css::beans::PropertyAttribute::READONLY);
850                 break;
851         }
852         case USER_OPT_TELEPHONEHOME:
853         {
854                 aProp = xInfo->getPropertyByName(s_shomephone);
855                 bRet = ((aProp.Attributes & css::beans::PropertyAttribute::READONLY) == css::beans::PropertyAttribute::READONLY);
856                 break;
857         }
858         case USER_OPT_TELEPHONEWORK:
859         {
860                 aProp = xInfo->getPropertyByName(s_stelephonenumber);
861                 bRet = ((aProp.Attributes & css::beans::PropertyAttribute::READONLY) == css::beans::PropertyAttribute::READONLY);
862                 break;
863         }
864         case USER_OPT_FAX:
865         {
866                 aProp = xInfo->getPropertyByName(s_sfacsimiletelephonenumber);
867                 bRet = ((aProp.Attributes & css::beans::PropertyAttribute::READONLY) == css::beans::PropertyAttribute::READONLY);
868                 break;
869         }
870         case USER_OPT_EMAIL:
871         {
872                 aProp = xInfo->getPropertyByName(s_smail);
873                 bRet = ((aProp.Attributes & css::beans::PropertyAttribute::READONLY) == css::beans::PropertyAttribute::READONLY);
874                 break;
875         }
876         case USER_OPT_FATHERSNAME:
877             {
878                 aProp = xInfo->getPropertyByName(s_sfathersname);
879                 bRet = ((aProp.Attributes & css::beans::PropertyAttribute::READONLY) == css::beans::PropertyAttribute::READONLY);
880                 break;
881             }
882         case USER_OPT_APARTMENT:
883             {
884                 aProp = xInfo->getPropertyByName(s_sapartment);
885                 bRet = ((aProp.Attributes & css::beans::PropertyAttribute::READONLY) == css::beans::PropertyAttribute::READONLY);
886                 break;
887             }
888         default:
889             DBG_ERRORFILE( "SvtUserOptions_Impl::IsTokenReadonly(): invalid token" );
890     }
891 
892     return bRet;
893 }
894 
895 //------------------------------------------------------------------------
896 ::rtl::OUString SvtUserOptions_Impl::GetToken(sal_uInt16 nToken) const
897 {
898     ::rtl::OUString pRet;
899     switch(nToken)
900     {
901         case USER_OPT_COMPANY:        pRet = GetCompany();     break;
902         case USER_OPT_FIRSTNAME:      pRet = GetFirstName();   break;
903         case USER_OPT_LASTNAME:       pRet = GetLastName();    break;
904         case USER_OPT_ID:             pRet = GetID();          break;
905         case USER_OPT_STREET:         pRet = GetStreet();      break;
906         case USER_OPT_CITY:           pRet = GetCity();        break;
907         case USER_OPT_STATE:          pRet = GetState();       break;
908         case USER_OPT_ZIP:            pRet = GetZip();         break;
909         case USER_OPT_COUNTRY:        pRet = GetCountry();     break;
910         case USER_OPT_POSITION:       pRet = GetPosition();    break;
911         case USER_OPT_TITLE:          pRet = GetTitle();       break;
912         case USER_OPT_TELEPHONEHOME:  pRet = GetTelephoneHome(); break;
913         case USER_OPT_TELEPHONEWORK:  pRet = GetTelephoneWork(); break;
914         case USER_OPT_FAX:            pRet = GetFax();           break;
915         case USER_OPT_EMAIL:          pRet = GetEmail();         break;
916         case USER_OPT_FATHERSNAME:    pRet = GetFathersName();   break;
917         case USER_OPT_APARTMENT:      pRet = GetApartment();     break;
918         default:
919             DBG_ERRORFILE( "SvtUserOptions_Impl::GetToken(): invalid token" );
920     }
921     return pRet;
922 }
923 
924 // class SvtUserOptions --------------------------------------------------
925 
926 SvtUserOptions::SvtUserOptions()
927 {
928     // Global access, must be guarded (multithreading)
929     ::osl::MutexGuard aGuard( GetInitMutex() );
930 
931     if ( !pOptions )
932     {
933         RTL_LOGFILE_CONTEXT(aLog, "unotools ( ??? ) ::SvtUserOptions_Impl::ctor()");
934         pOptions = new SvtUserOptions_Impl;
935 
936         ItemHolder1::holdConfigItem(E_USEROPTIONS);
937     }
938     ++nRefCount;
939     pImp = pOptions;
940     pImp->AddListener(this);
941 }
942 
943 // -----------------------------------------------------------------------
944 
945 SvtUserOptions::~SvtUserOptions()
946 {
947     // Global access, must be guarded (multithreading)
948     ::osl::MutexGuard aGuard( GetInitMutex() );
949     pImp->RemoveListener(this);
950     if ( !--nRefCount )
951     {
952         //if ( pOptions->IsModified() )
953         //  pOptions->Commit();
954         DELETEZ( pOptions );
955     }
956 }
957 
958 // -----------------------------------------------------------------------
959 
960 ::osl::Mutex& SvtUserOptions::GetInitMutex()
961 {
962     // Initialize static mutex only for one time!
963     static ::osl::Mutex* pMutex = NULL;
964     // If these method first called (Mutex not already exist!) ...
965     if ( pMutex == NULL )
966     {
967         // ... we must create a new one. Protect follow code with the global mutex -
968         // It must be - we create a static variable!
969         ::osl::MutexGuard aGuard( ::osl::Mutex::getGlobalMutex() );
970         // We must check our pointer again -
971         // because another instance of our class will be faster then this instance!
972         if ( pMutex == NULL )
973         {
974             // Create the new mutex and set it for return on static variable.
975             static ::osl::Mutex aMutex;
976             pMutex = &aMutex;
977         }
978     }
979     // Return new created or already existing mutex object.
980     return *pMutex;
981 }
982 
983 // -----------------------------------------------------------------------
984 
985 ::rtl::OUString SvtUserOptions::GetCompany() const
986 {
987     ::osl::MutexGuard aGuard( GetInitMutex() );
988     return pImp->GetCompany();
989 }
990 
991 // -----------------------------------------------------------------------
992 
993 ::rtl::OUString SvtUserOptions::GetFirstName() const
994 {
995     ::osl::MutexGuard aGuard( GetInitMutex() );
996     return pImp->GetFirstName();
997 }
998 
999 // -----------------------------------------------------------------------
1000 
1001 ::rtl::OUString SvtUserOptions::GetLastName() const
1002 {
1003     ::osl::MutexGuard aGuard( GetInitMutex() );
1004     return pImp->GetLastName();
1005 }
1006 
1007 // -----------------------------------------------------------------------
1008 
1009 ::rtl::OUString SvtUserOptions::GetID() const
1010 {
1011     ::osl::MutexGuard aGuard( GetInitMutex() );
1012     return pImp->GetID();
1013 }
1014 
1015 // -----------------------------------------------------------------------
1016 
1017 ::rtl::OUString SvtUserOptions::GetStreet() const
1018 {
1019     ::osl::MutexGuard aGuard( GetInitMutex() );
1020     return pImp->GetStreet();
1021 }
1022 
1023 // -----------------------------------------------------------------------
1024 
1025 ::rtl::OUString SvtUserOptions::GetCity() const
1026 {
1027     ::osl::MutexGuard aGuard( GetInitMutex() );
1028     return pImp->GetCity();
1029 }
1030 
1031 // -----------------------------------------------------------------------
1032 
1033 ::rtl::OUString SvtUserOptions::GetState() const
1034 {
1035     ::osl::MutexGuard aGuard( GetInitMutex() );
1036     return pImp->GetState();
1037 }
1038 
1039 // -----------------------------------------------------------------------
1040 
1041 ::rtl::OUString SvtUserOptions::GetZip() const
1042 {
1043     ::osl::MutexGuard aGuard( GetInitMutex() );
1044     return pImp->GetZip();
1045 }
1046 
1047 // -----------------------------------------------------------------------
1048 
1049 ::rtl::OUString SvtUserOptions::GetCountry() const
1050 {
1051     ::osl::MutexGuard aGuard( GetInitMutex() );
1052     return pImp->GetCountry();
1053 }
1054 
1055 // -----------------------------------------------------------------------
1056 
1057 ::rtl::OUString SvtUserOptions::GetPosition() const
1058 {
1059     ::osl::MutexGuard aGuard( GetInitMutex() );
1060     return pImp->GetPosition();
1061 }
1062 
1063 // -----------------------------------------------------------------------
1064 
1065 ::rtl::OUString SvtUserOptions::GetTitle() const
1066 {
1067     ::osl::MutexGuard aGuard( GetInitMutex() );
1068     return pImp->GetTitle();
1069 }
1070 
1071 // -----------------------------------------------------------------------
1072 
1073 ::rtl::OUString SvtUserOptions::GetTelephoneHome() const
1074 {
1075     ::osl::MutexGuard aGuard( GetInitMutex() );
1076     return pImp->GetTelephoneHome();
1077 }
1078 
1079 // -----------------------------------------------------------------------
1080 
1081 ::rtl::OUString SvtUserOptions::GetTelephoneWork() const
1082 {
1083     ::osl::MutexGuard aGuard( GetInitMutex() );
1084     return pImp->GetTelephoneWork();
1085 }
1086 
1087 // -----------------------------------------------------------------------
1088 
1089 ::rtl::OUString SvtUserOptions::GetFax() const
1090 {
1091     ::osl::MutexGuard aGuard( GetInitMutex() );
1092     return pImp->GetFax();
1093 }
1094 
1095 // -----------------------------------------------------------------------
1096 
1097 ::rtl::OUString SvtUserOptions::GetEmail() const
1098 {
1099     ::osl::MutexGuard aGuard( GetInitMutex() );
1100     return pImp->GetEmail();
1101 }
1102 
1103 // -----------------------------------------------------------------------
1104 
1105 ::rtl::OUString SvtUserOptions::GetCustomerNumber() const
1106 {
1107     ::osl::MutexGuard aGuard( GetInitMutex() );
1108     return pImp->GetCustomerNumber();
1109 }
1110 // -----------------------------------------------------------------------
1111 
1112 ::rtl::OUString SvtUserOptions::GetFathersName() const
1113 {
1114     ::osl::MutexGuard aGuard( GetInitMutex() );
1115     return pImp->GetFathersName() ;
1116 }
1117 
1118 // -----------------------------------------------------------------------
1119 
1120 ::rtl::OUString SvtUserOptions::GetApartment() const
1121 {
1122     ::osl::MutexGuard aGuard( GetInitMutex() );
1123     return pImp->GetApartment();
1124 }
1125 
1126 // -----------------------------------------------------------------------
1127 
1128 ::rtl::OUString SvtUserOptions::GetFullName() const
1129 {
1130     ::osl::MutexGuard aGuard( GetInitMutex() );
1131     return pImp->GetFullName();
1132 }
1133 
1134 // -----------------------------------------------------------------------
1135 
1136 ::rtl::OUString SvtUserOptions::GetLocale() const
1137 {
1138     ::osl::MutexGuard aGuard( GetInitMutex() );
1139     return pImp->GetLocale();
1140 }
1141 
1142 // -----------------------------------------------------------------------
1143 
1144 void SvtUserOptions::SetCompany( const ::rtl::OUString& rNewToken )
1145 {
1146     ::osl::MutexGuard aGuard( GetInitMutex() );
1147     pImp->SetCompany( rNewToken );
1148 }
1149 
1150 // -----------------------------------------------------------------------
1151 
1152 void SvtUserOptions::SetFirstName( const ::rtl::OUString& rNewToken )
1153 {
1154     ::osl::MutexGuard aGuard( GetInitMutex() );
1155     pImp->SetFirstName( rNewToken );
1156 }
1157 
1158 // -----------------------------------------------------------------------
1159 
1160 void SvtUserOptions::SetLastName( const ::rtl::OUString& rNewToken )
1161 {
1162     ::osl::MutexGuard aGuard( GetInitMutex() );
1163     pImp->SetLastName( rNewToken );
1164 }
1165 
1166 // -----------------------------------------------------------------------
1167 
1168 void SvtUserOptions::SetID( const ::rtl::OUString& rNewToken )
1169 {
1170     ::osl::MutexGuard aGuard( GetInitMutex() );
1171     pImp->SetID( rNewToken );
1172 }
1173 
1174 // -----------------------------------------------------------------------
1175 
1176 void SvtUserOptions::SetStreet( const ::rtl::OUString& rNewToken )
1177 {
1178     ::osl::MutexGuard aGuard( GetInitMutex() );
1179     pImp->SetStreet( rNewToken );
1180 }
1181 
1182 // -----------------------------------------------------------------------
1183 
1184 void SvtUserOptions::SetCity( const ::rtl::OUString& rNewToken )
1185 {
1186     ::osl::MutexGuard aGuard( GetInitMutex() );
1187     pImp->SetCity( rNewToken );
1188 }
1189 
1190 // -----------------------------------------------------------------------
1191 
1192 void SvtUserOptions::SetState( const ::rtl::OUString& rNewToken )
1193 {
1194     ::osl::MutexGuard aGuard( GetInitMutex() );
1195     pImp->SetState( rNewToken );
1196 }
1197 
1198 // -----------------------------------------------------------------------
1199 
1200 void SvtUserOptions::SetZip( const ::rtl::OUString& rNewToken )
1201 {
1202     ::osl::MutexGuard aGuard( GetInitMutex() );
1203     pImp->SetZip( rNewToken );
1204 }
1205 
1206 // -----------------------------------------------------------------------
1207 
1208 void SvtUserOptions::SetCountry( const ::rtl::OUString& rNewToken )
1209 {
1210     ::osl::MutexGuard aGuard( GetInitMutex() );
1211     pImp->SetCountry( rNewToken );
1212 }
1213 
1214 // -----------------------------------------------------------------------
1215 
1216 void SvtUserOptions::SetPosition( const ::rtl::OUString& rNewToken )
1217 {
1218     ::osl::MutexGuard aGuard( GetInitMutex() );
1219     pImp->SetPosition( rNewToken );
1220 }
1221 
1222 // -----------------------------------------------------------------------
1223 
1224 void SvtUserOptions::SetTitle( const ::rtl::OUString& rNewToken )
1225 {
1226     ::osl::MutexGuard aGuard( GetInitMutex() );
1227     pImp->SetTitle( rNewToken );
1228 }
1229 
1230 // -----------------------------------------------------------------------
1231 
1232 void SvtUserOptions::SetTelephoneHome( const ::rtl::OUString& rNewToken )
1233 {
1234     ::osl::MutexGuard aGuard( GetInitMutex() );
1235     pImp->SetTelephoneHome( rNewToken );
1236 }
1237 
1238 // -----------------------------------------------------------------------
1239 
1240 void SvtUserOptions::SetTelephoneWork( const ::rtl::OUString& rNewToken )
1241 {
1242     ::osl::MutexGuard aGuard( GetInitMutex() );
1243     pImp->SetTelephoneWork( rNewToken );
1244 }
1245 
1246 // -----------------------------------------------------------------------
1247 
1248 void SvtUserOptions::SetFax( const ::rtl::OUString& rNewToken )
1249 {
1250     ::osl::MutexGuard aGuard( GetInitMutex() );
1251     pImp->SetFax( rNewToken );
1252 }
1253 
1254 // -----------------------------------------------------------------------
1255 
1256 void SvtUserOptions::SetEmail( const ::rtl::OUString& rNewToken )
1257 {
1258     ::osl::MutexGuard aGuard( GetInitMutex() );
1259     pImp->SetEmail( rNewToken );
1260 }
1261 
1262 // -----------------------------------------------------------------------
1263 
1264 void SvtUserOptions::SetCustomerNumber( const ::rtl::OUString& rNewToken )
1265 {
1266     ::osl::MutexGuard aGuard( GetInitMutex() );
1267     pImp->SetCustomerNumber( rNewToken );
1268 }
1269 // -----------------------------------------------------------------------
1270 
1271 void SvtUserOptions::SetFathersName( const ::rtl::OUString& rNewToken )
1272 {
1273     ::osl::MutexGuard aGuard( GetInitMutex() );
1274     pImp->SetFathersName( rNewToken );
1275 }
1276 
1277 // -----------------------------------------------------------------------
1278 
1279 void SvtUserOptions::SetApartment( const ::rtl::OUString& rNewToken )
1280 {
1281     ::osl::MutexGuard aGuard( GetInitMutex() );
1282     pImp->SetApartment( rNewToken );
1283 }
1284 
1285 // -----------------------------------------------------------------------
1286 
1287 sal_Bool SvtUserOptions::IsTokenReadonly( sal_uInt16 nToken ) const
1288 {
1289     ::osl::MutexGuard aGuard( GetInitMutex() );
1290     return pImp->IsTokenReadonly( nToken );
1291 }
1292 //------------------------------------------------------------------------
1293 ::rtl::OUString   SvtUserOptions::GetToken(sal_uInt16 nToken) const
1294 {
1295     ::osl::MutexGuard aGuard( GetInitMutex() );
1296     return pImp->GetToken( nToken );
1297 }
1298