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