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 #include "precompiled_configmgr.hxx"
25 #include "sal/config.h"
26
27 #include "boost/noncopyable.hpp"
28 #include "com/sun/star/beans/NamedValue.hpp"
29 #include "com/sun/star/beans/Property.hpp"
30 #include "com/sun/star/beans/XProperty.hpp"
31 #include "com/sun/star/container/NoSuchElementException.hpp"
32 #include "com/sun/star/container/XHierarchicalNameAccess.hpp"
33 #include "com/sun/star/container/XNamed.hpp"
34 #include "com/sun/star/lang/XMultiComponentFactory.hpp"
35 #include "com/sun/star/lang/XMultiServiceFactory.hpp"
36 #include "com/sun/star/lang/XServiceInfo.hpp"
37 #include "com/sun/star/registry/InvalidRegistryException.hpp"
38 #include "com/sun/star/registry/InvalidValueException.hpp"
39 #include "com/sun/star/registry/MergeConflictException.hpp"
40 #include "com/sun/star/registry/RegistryKeyType.hpp"
41 #include "com/sun/star/registry/RegistryValueType.hpp"
42 #include "com/sun/star/registry/XRegistryKey.hpp"
43 #include "com/sun/star/registry/XSimpleRegistry.hpp"
44 #include "com/sun/star/uno/Any.hxx"
45 #include "com/sun/star/uno/DeploymentException.hpp"
46 #include "com/sun/star/uno/Exception.hpp"
47 #include "com/sun/star/uno/Reference.hxx"
48 #include "com/sun/star/uno/RuntimeException.hpp"
49 #include "com/sun/star/uno/Sequence.hxx"
50 #include "com/sun/star/uno/Type.hxx"
51 #include "com/sun/star/uno/TypeClass.hpp"
52 #include "com/sun/star/uno/XComponentContext.hpp"
53 #include "com/sun/star/uno/XInterface.hpp"
54 #include "com/sun/star/util/XFlushable.hpp"
55 #include "cppu/unotype.hxx"
56 #include "cppuhelper/implbase1.hxx"
57 #include "cppuhelper/implbase3.hxx"
58 #include "cppuhelper/weak.hxx"
59 #include "osl/diagnose.h"
60 #include "osl/mutex.hxx"
61 #include "rtl/ustring.h"
62 #include "rtl/ustring.hxx"
63 #include "sal/types.h"
64
65 #include "configurationregistry.hxx"
66
67 namespace com { namespace sun { namespace star { namespace util {
68 class XFlushListener;
69 } } } }
70
71 namespace configmgr { namespace configuration_registry {
72
73 namespace {
74
75 namespace css = com::sun::star;
76
77 class Service:
78 public cppu::WeakImplHelper3<
79 css::lang::XServiceInfo, css::registry::XSimpleRegistry,
80 css::util::XFlushable >,
81 private boost::noncopyable
82 {
83 public:
84 Service(css::uno::Reference< css::uno::XComponentContext > const & context);
85
86 private:
~Service()87 virtual ~Service() {}
88
getImplementationName()89 virtual rtl::OUString SAL_CALL getImplementationName()
90 throw (css::uno::RuntimeException)
91 { return configuration_registry::getImplementationName(); }
92
supportsService(rtl::OUString const & ServiceName)93 virtual sal_Bool SAL_CALL supportsService(rtl::OUString const & ServiceName)
94 throw (css::uno::RuntimeException)
95 { return ServiceName == getSupportedServiceNames()[0]; } //TODO
96
97 virtual css::uno::Sequence< rtl::OUString > SAL_CALL
getSupportedServiceNames()98 getSupportedServiceNames() throw (css::uno::RuntimeException)
99 { return configuration_registry::getSupportedServiceNames(); }
100
101 virtual rtl::OUString SAL_CALL getURL() throw (css::uno::RuntimeException);
102
103 virtual void SAL_CALL open(
104 rtl::OUString const & rURL, sal_Bool bReadOnly, sal_Bool)
105 throw (
106 css::registry::InvalidRegistryException,
107 css::uno::RuntimeException);
108
109 virtual sal_Bool SAL_CALL isValid() throw (css::uno::RuntimeException);
110
111 virtual void SAL_CALL close()
112 throw (
113 css::registry::InvalidRegistryException,
114 css::uno::RuntimeException);
115
116 virtual void SAL_CALL destroy()
117 throw (
118 css::registry::InvalidRegistryException,
119 css::uno::RuntimeException);
120
121 virtual css::uno::Reference< css::registry::XRegistryKey > SAL_CALL
122 getRootKey()
123 throw (
124 css::registry::InvalidRegistryException,
125 css::uno::RuntimeException);
126
127 virtual sal_Bool SAL_CALL isReadOnly() throw (css::uno::RuntimeException);
128
129 virtual void SAL_CALL mergeKey(rtl::OUString const &, rtl::OUString const &)
130 throw (
131 css::registry::InvalidRegistryException,
132 css::registry::MergeConflictException, css::uno::RuntimeException);
133
134 virtual void SAL_CALL flush() throw (css::uno::RuntimeException);
135
136 virtual void SAL_CALL addFlushListener(
137 css::uno::Reference< css::util::XFlushListener > const &)
138 throw (css::uno::RuntimeException);
139
140 virtual void SAL_CALL removeFlushListener(
141 css::uno::Reference< css::util::XFlushListener > const &)
142 throw (css::uno::RuntimeException);
143
144 void checkValid();
145
146 void checkValid_RuntimeException();
147
148 void doClose();
149
150 css::uno::Reference< css::lang::XMultiServiceFactory > provider_;
151 osl::Mutex mutex_;
152 css::uno::Reference< css::uno::XInterface > access_;
153 rtl::OUString url_;
154 bool readOnly_;
155
156 friend class RegistryKey;
157 };
158
159 class RegistryKey:
160 public cppu::WeakImplHelper1< css::registry::XRegistryKey >,
161 private boost::noncopyable
162 {
163 public:
RegistryKey(Service & service,css::uno::Any const & value)164 RegistryKey(Service & service, css::uno::Any const & value):
165 service_(service), value_(value) {}
166
167 private:
~RegistryKey()168 virtual ~RegistryKey() {}
169
170 virtual rtl::OUString SAL_CALL getKeyName()
171 throw (css::uno::RuntimeException);
172
173 virtual sal_Bool SAL_CALL isReadOnly()
174 throw (
175 css::registry::InvalidRegistryException,
176 css::uno::RuntimeException);
177
178 virtual sal_Bool SAL_CALL isValid() throw (css::uno::RuntimeException);
179
180 virtual css::registry::RegistryKeyType SAL_CALL getKeyType(
181 rtl::OUString const &)
182 throw (
183 css::registry::InvalidRegistryException,
184 css::uno::RuntimeException);
185
186 virtual css::registry::RegistryValueType SAL_CALL getValueType()
187 throw (
188 css::registry::InvalidRegistryException,
189 css::uno::RuntimeException);
190
191 virtual sal_Int32 SAL_CALL getLongValue()
192 throw (
193 css::registry::InvalidRegistryException,
194 css::registry::InvalidValueException, css::uno::RuntimeException);
195
196 virtual void SAL_CALL setLongValue(sal_Int32)
197 throw (
198 css::registry::InvalidRegistryException,
199 css::uno::RuntimeException);
200
201 virtual css::uno::Sequence< sal_Int32 > SAL_CALL getLongListValue()
202 throw (
203 css::registry::InvalidRegistryException,
204 css::registry::InvalidValueException, css::uno::RuntimeException);
205
206 virtual void SAL_CALL setLongListValue(
207 css::uno::Sequence< sal_Int32 > const &)
208 throw (
209 css::registry::InvalidRegistryException,
210 css::uno::RuntimeException);
211
212 virtual rtl::OUString SAL_CALL getAsciiValue()
213 throw (
214 css::registry::InvalidRegistryException,
215 css::registry::InvalidValueException, css::uno::RuntimeException);
216
217 virtual void SAL_CALL setAsciiValue(rtl::OUString const &)
218 throw (
219 css::registry::InvalidRegistryException,
220 css::uno::RuntimeException);
221
222 virtual css::uno::Sequence< rtl::OUString > SAL_CALL getAsciiListValue()
223 throw (
224 css::registry::InvalidRegistryException,
225 css::registry::InvalidValueException, css::uno::RuntimeException);
226
227 virtual void SAL_CALL setAsciiListValue(
228 css::uno::Sequence< rtl::OUString > const &)
229 throw (
230 css::registry::InvalidRegistryException,
231 css::uno::RuntimeException);
232
233 virtual rtl::OUString SAL_CALL getStringValue()
234 throw (
235 css::registry::InvalidRegistryException,
236 css::registry::InvalidValueException, css::uno::RuntimeException);
237
238 virtual void SAL_CALL setStringValue(rtl::OUString const &)
239 throw (
240 css::registry::InvalidRegistryException,
241 css::uno::RuntimeException);
242
243 virtual css::uno::Sequence< rtl::OUString > SAL_CALL getStringListValue()
244 throw (
245 css::registry::InvalidRegistryException,
246 css::registry::InvalidValueException, css::uno::RuntimeException);
247
248 virtual void SAL_CALL setStringListValue(
249 css::uno::Sequence< rtl::OUString > const &)
250 throw (
251 css::registry::InvalidRegistryException,
252 css::uno::RuntimeException);
253
254 virtual css::uno::Sequence< sal_Int8 > SAL_CALL getBinaryValue()
255 throw (
256 css::registry::InvalidRegistryException,
257 css::registry::InvalidValueException, css::uno::RuntimeException);
258
259 virtual void SAL_CALL setBinaryValue(css::uno::Sequence< sal_Int8 > const &)
260 throw (
261 css::registry::InvalidRegistryException,
262 css::uno::RuntimeException);
263
264 virtual css::uno::Reference< css::registry::XRegistryKey > SAL_CALL openKey(
265 rtl::OUString const & aKeyName)
266 throw (
267 css::registry::InvalidRegistryException,
268 css::uno::RuntimeException);
269
270 virtual css::uno::Reference< css::registry::XRegistryKey > SAL_CALL
271 createKey(rtl::OUString const &)
272 throw (
273 css::registry::InvalidRegistryException,
274 css::uno::RuntimeException);
275
276 virtual void SAL_CALL closeKey()
277 throw (
278 css::registry::InvalidRegistryException,
279 css::uno::RuntimeException);
280
281 virtual void SAL_CALL deleteKey(rtl::OUString const &)
282 throw (
283 css::registry::InvalidRegistryException,
284 css::uno::RuntimeException);
285
286 virtual
287 css::uno::Sequence< css::uno::Reference< css::registry::XRegistryKey > >
288 SAL_CALL openKeys()
289 throw (
290 css::registry::InvalidRegistryException,
291 css::uno::RuntimeException);
292
293 virtual css::uno::Sequence< rtl::OUString > SAL_CALL getKeyNames()
294 throw (
295 css::registry::InvalidRegistryException,
296 css::uno::RuntimeException);
297
298 virtual sal_Bool SAL_CALL createLink(
299 rtl::OUString const &, rtl::OUString const &)
300 throw (
301 css::registry::InvalidRegistryException,
302 css::uno::RuntimeException);
303
304 virtual void SAL_CALL deleteLink(rtl::OUString const &)
305 throw (
306 css::registry::InvalidRegistryException,
307 css::uno::RuntimeException);
308
309 virtual rtl::OUString SAL_CALL getLinkTarget(rtl::OUString const &)
310 throw (
311 css::registry::InvalidRegistryException,
312 css::uno::RuntimeException);
313
314 virtual rtl::OUString SAL_CALL getResolvedName(
315 rtl::OUString const & aKeyName)
316 throw (
317 css::registry::InvalidRegistryException,
318 css::uno::RuntimeException);
319
320 Service & service_;
321 css::uno::Any value_;
322 };
323
Service(css::uno::Reference<css::uno::XComponentContext> const & context)324 Service::Service(
325 css::uno::Reference< css::uno::XComponentContext > const & context)
326 {
327 OSL_ASSERT(context.is());
328 try {
329 provider_ = css::uno::Reference< css::lang::XMultiServiceFactory >(
330 (css::uno::Reference< css::lang::XMultiComponentFactory >(
331 context->getServiceManager(), css::uno::UNO_SET_THROW)->
332 createInstanceWithContext(
333 rtl::OUString(
334 RTL_CONSTASCII_USTRINGPARAM(
335 "com.sun.star.configuration.DefaultProvider")),
336 context)),
337 css::uno::UNO_QUERY_THROW);
338 } catch (css::uno::RuntimeException &) {
339 throw;
340 } catch (css::uno::Exception & e) {
341 throw css::uno::DeploymentException(
342 (rtl::OUString(
343 RTL_CONSTASCII_USTRINGPARAM(
344 "component context fails to supply service"
345 " com.sun.star.configuration.DefaultProvider of type"
346 " com.sun.star.lang.XMultiServiceFactory: ")) +
347 e.Message),
348 context);
349 }
350 }
351
getURL()352 rtl::OUString Service::getURL() throw (css::uno::RuntimeException) {
353 osl::MutexGuard g(mutex_);
354 checkValid_RuntimeException();
355 return url_;
356 }
357
open(rtl::OUString const & rURL,sal_Bool bReadOnly,sal_Bool)358 void Service::open(rtl::OUString const & rURL, sal_Bool bReadOnly, sal_Bool)
359 throw (css::registry::InvalidRegistryException, css::uno::RuntimeException)
360 {
361 //TODO: bCreate
362 osl::MutexGuard g(mutex_);
363 if (access_.is()) {
364 doClose();
365 }
366 css::uno::Sequence< css::uno::Any > args(1);
367 args[0] <<= css::beans::NamedValue(
368 rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("nodepath")),
369 css::uno::makeAny(rURL));
370 try {
371 access_ = provider_->createInstanceWithArguments(
372 (bReadOnly
373 ? rtl::OUString(
374 RTL_CONSTASCII_USTRINGPARAM(
375 "com.sun.star.configuration.ConfigurationAccess"))
376 : rtl::OUString(
377 RTL_CONSTASCII_USTRINGPARAM(
378 "com.sun.star.configuration.ConfigurationUpdateAccess"))),
379 args);
380 } catch (css::uno::RuntimeException &) {
381 throw;
382 } catch (css::uno::Exception & e) {
383 throw css::uno::RuntimeException(
384 (rtl::OUString(
385 RTL_CONSTASCII_USTRINGPARAM(
386 "com.sun.star.configuration.ConfigurationRegistry: open"
387 " failed: ")) +
388 e.Message),
389 static_cast< cppu::OWeakObject * >(this));
390 }
391 url_ = rURL;
392 readOnly_ = bReadOnly;
393 }
394
isValid()395 sal_Bool Service::isValid() throw (css::uno::RuntimeException) {
396 osl::MutexGuard g(mutex_);
397 return access_.is();
398 }
399
close()400 void Service::close()
401 throw (css::registry::InvalidRegistryException, css::uno::RuntimeException)
402 {
403 osl::MutexGuard g(mutex_);
404 checkValid();
405 doClose();
406 }
407
destroy()408 void Service::destroy()
409 throw (css::registry::InvalidRegistryException, css::uno::RuntimeException)
410 {
411 throw css::uno::RuntimeException(
412 rtl::OUString(
413 RTL_CONSTASCII_USTRINGPARAM(
414 "com.sun.star.configuration.ConfigurationRegistry: not"
415 " implemented")),
416 static_cast< cppu::OWeakObject * >(this));
417 }
418
getRootKey()419 css::uno::Reference< css::registry::XRegistryKey > Service::getRootKey()
420 throw (css::registry::InvalidRegistryException, css::uno::RuntimeException)
421 {
422 osl::MutexGuard g(mutex_);
423 checkValid();
424 return new RegistryKey(*this, css::uno::makeAny(access_));
425 }
426
isReadOnly()427 sal_Bool Service::isReadOnly() throw (css::uno::RuntimeException) {
428 osl::MutexGuard g(mutex_);
429 checkValid_RuntimeException();
430 return readOnly_;
431 }
432
mergeKey(rtl::OUString const &,rtl::OUString const &)433 void Service::mergeKey(rtl::OUString const &, rtl::OUString const &)
434 throw (
435 css::registry::InvalidRegistryException,
436 css::registry::MergeConflictException, css::uno::RuntimeException)
437 {
438 throw css::uno::RuntimeException(
439 rtl::OUString(
440 RTL_CONSTASCII_USTRINGPARAM(
441 "com.sun.star.configuration.ConfigurationRegistry: not"
442 " implemented")),
443 static_cast< cppu::OWeakObject * >(this));
444 }
445
flush()446 void Service::flush() throw (css::uno::RuntimeException)
447 {
448 throw css::uno::RuntimeException(
449 rtl::OUString(
450 RTL_CONSTASCII_USTRINGPARAM(
451 "com.sun.star.configuration.ConfigurationRegistry: not"
452 " implemented")),
453 static_cast< cppu::OWeakObject * >(this));
454 }
455
addFlushListener(css::uno::Reference<css::util::XFlushListener> const &)456 void Service::addFlushListener(
457 css::uno::Reference< css::util::XFlushListener > const &)
458 throw (css::uno::RuntimeException)
459 {
460 throw css::uno::RuntimeException(
461 rtl::OUString(
462 RTL_CONSTASCII_USTRINGPARAM(
463 "com.sun.star.configuration.ConfigurationRegistry: not"
464 " implemented")),
465 static_cast< cppu::OWeakObject * >(this));
466 }
467
removeFlushListener(css::uno::Reference<css::util::XFlushListener> const &)468 void Service::removeFlushListener(
469 css::uno::Reference< css::util::XFlushListener > const &)
470 throw (css::uno::RuntimeException)
471 {
472 throw css::uno::RuntimeException(
473 rtl::OUString(
474 RTL_CONSTASCII_USTRINGPARAM(
475 "com.sun.star.configuration.ConfigurationRegistry: not"
476 " implemented")),
477 static_cast< cppu::OWeakObject * >(this));
478 }
479
checkValid()480 void Service::checkValid() {
481 if (!access_.is()) {
482 throw css::registry::InvalidRegistryException(
483 rtl::OUString(
484 RTL_CONSTASCII_USTRINGPARAM(
485 "com.sun.star.configuration.ConfigurationRegistry: not"
486 " valid")),
487 static_cast< cppu::OWeakObject * >(this));
488 }
489 }
490
checkValid_RuntimeException()491 void Service::checkValid_RuntimeException() {
492 if (!access_.is()) {
493 throw css::uno::RuntimeException(
494 rtl::OUString(
495 RTL_CONSTASCII_USTRINGPARAM(
496 "com.sun.star.configuration.ConfigurationRegistry: not"
497 " valid")),
498 static_cast< cppu::OWeakObject * >(this));
499 }
500 }
501
doClose()502 void Service::doClose() {
503 access_.clear();
504 }
505
getKeyName()506 rtl::OUString RegistryKey::getKeyName() throw (css::uno::RuntimeException) {
507 osl::MutexGuard g(service_.mutex_);
508 service_.checkValid_RuntimeException();
509 css::uno::Reference< css::container::XNamed > named;
510 if (value_ >>= named) {
511 return named->getName();
512 }
513 throw css::uno::RuntimeException(
514 rtl::OUString(
515 RTL_CONSTASCII_USTRINGPARAM(
516 "com.sun.star.configuration.ConfigurationRegistry: not"
517 " implemented")),
518 static_cast< cppu::OWeakObject * >(this));
519 }
520
isReadOnly()521 sal_Bool RegistryKey::isReadOnly()
522 throw (css::registry::InvalidRegistryException, css::uno::RuntimeException)
523 {
524 osl::MutexGuard g(service_.mutex_);
525 service_.checkValid_RuntimeException();
526 return service_.readOnly_; //TODO: read-only sub-nodes in update access?
527 }
528
isValid()529 sal_Bool RegistryKey::isValid() throw (css::uno::RuntimeException) {
530 return service_.isValid();
531 }
532
getKeyType(rtl::OUString const &)533 css::registry::RegistryKeyType RegistryKey::getKeyType(rtl::OUString const &)
534 throw (css::registry::InvalidRegistryException, css::uno::RuntimeException)
535 {
536 osl::MutexGuard g(service_.mutex_);
537 service_.checkValid();
538 return css::registry::RegistryKeyType_KEY;
539 }
540
getValueType()541 css::registry::RegistryValueType RegistryKey::getValueType()
542 throw (css::registry::InvalidRegistryException, css::uno::RuntimeException)
543 {
544 osl::MutexGuard g(service_.mutex_);
545 service_.checkValid();
546 css::uno::Type t(value_.getValueType());
547 switch (t.getTypeClass()) {
548 case css::uno::TypeClass_LONG:
549 return css::registry::RegistryValueType_LONG;
550 case css::uno::TypeClass_STRING:
551 return css::registry::RegistryValueType_STRING;
552 case css::uno::TypeClass_SEQUENCE:
553 if (t == cppu::UnoType< css::uno::Sequence< sal_Int8 > >::get()) {
554 return css::registry::RegistryValueType_BINARY;
555 } else if (t == cppu::UnoType< css::uno::Sequence< sal_Int32 > >::get())
556 {
557 return css::registry::RegistryValueType_LONGLIST;
558 } else if (t ==
559 cppu::UnoType< css::uno::Sequence< rtl::OUString > >::get())
560 {
561 return css::registry::RegistryValueType_STRINGLIST;
562 }
563 // fall through
564 default:
565 return css::registry::RegistryValueType_NOT_DEFINED;
566 }
567 }
568
getLongValue()569 sal_Int32 RegistryKey::getLongValue()
570 throw (
571 css::registry::InvalidRegistryException,
572 css::registry::InvalidValueException, css::uno::RuntimeException)
573 {
574 osl::MutexGuard g(service_.mutex_);
575 service_.checkValid();
576 sal_Int32 v = 0;
577 if (value_ >>= v) {
578 return v;
579 }
580 throw css::registry::InvalidValueException(
581 rtl::OUString(
582 RTL_CONSTASCII_USTRINGPARAM(
583 "com.sun.star.configuration.ConfigurationRegistry")),
584 static_cast< cppu::OWeakObject * >(this));
585 }
586
setLongValue(sal_Int32)587 void RegistryKey::setLongValue(sal_Int32)
588 throw (css::registry::InvalidRegistryException, css::uno::RuntimeException)
589 {
590 throw css::uno::RuntimeException(
591 rtl::OUString(
592 RTL_CONSTASCII_USTRINGPARAM(
593 "com.sun.star.configuration.ConfigurationRegistry: not"
594 " implemented")),
595 static_cast< cppu::OWeakObject * >(this));
596 }
597
getLongListValue()598 css::uno::Sequence< sal_Int32 > RegistryKey::getLongListValue()
599 throw (
600 css::registry::InvalidRegistryException,
601 css::registry::InvalidValueException, css::uno::RuntimeException)
602 {
603 osl::MutexGuard g(service_.mutex_);
604 service_.checkValid();
605 css::uno::Sequence< sal_Int32 > v;
606 if (value_ >>= v) {
607 return v;
608 }
609 throw css::registry::InvalidValueException(
610 rtl::OUString(
611 RTL_CONSTASCII_USTRINGPARAM(
612 "com.sun.star.configuration.ConfigurationRegistry")),
613 static_cast< cppu::OWeakObject * >(this));
614 }
615
setLongListValue(css::uno::Sequence<sal_Int32> const &)616 void RegistryKey::setLongListValue(css::uno::Sequence< sal_Int32 > const &)
617 throw (css::registry::InvalidRegistryException, css::uno::RuntimeException)
618 {
619 throw css::uno::RuntimeException(
620 rtl::OUString(
621 RTL_CONSTASCII_USTRINGPARAM(
622 "com.sun.star.configuration.ConfigurationRegistry: not"
623 " implemented")),
624 static_cast< cppu::OWeakObject * >(this));
625 }
626
getAsciiValue()627 rtl::OUString RegistryKey::getAsciiValue()
628 throw (
629 css::registry::InvalidRegistryException,
630 css::registry::InvalidValueException, css::uno::RuntimeException)
631 {
632 osl::MutexGuard g(service_.mutex_);
633 service_.checkValid();
634 rtl::OUString v;
635 if (value_ >>= v) {
636 return v;
637 }
638 throw css::registry::InvalidValueException(
639 rtl::OUString(
640 RTL_CONSTASCII_USTRINGPARAM(
641 "com.sun.star.configuration.ConfigurationRegistry")),
642 static_cast< cppu::OWeakObject * >(this));
643 }
644
setAsciiValue(rtl::OUString const &)645 void RegistryKey::setAsciiValue(rtl::OUString const &)
646 throw (css::registry::InvalidRegistryException, css::uno::RuntimeException)
647 {
648 throw css::uno::RuntimeException(
649 rtl::OUString(
650 RTL_CONSTASCII_USTRINGPARAM(
651 "com.sun.star.configuration.ConfigurationRegistry: not"
652 " implemented")),
653 static_cast< cppu::OWeakObject * >(this));
654 }
655
getAsciiListValue()656 css::uno::Sequence< rtl::OUString > RegistryKey::getAsciiListValue()
657 throw (
658 css::registry::InvalidRegistryException,
659 css::registry::InvalidValueException, css::uno::RuntimeException)
660 {
661 osl::MutexGuard g(service_.mutex_);
662 service_.checkValid();
663 css::uno::Sequence< rtl::OUString > v;
664 if (value_ >>= v) {
665 return v;
666 }
667 throw css::registry::InvalidValueException(
668 rtl::OUString(
669 RTL_CONSTASCII_USTRINGPARAM(
670 "com.sun.star.configuration.ConfigurationRegistry")),
671 static_cast< cppu::OWeakObject * >(this));
672 }
673
setAsciiListValue(css::uno::Sequence<rtl::OUString> const &)674 void RegistryKey::setAsciiListValue(css::uno::Sequence< rtl::OUString > const &)
675 throw (css::registry::InvalidRegistryException, css::uno::RuntimeException)
676 {
677 throw css::uno::RuntimeException(
678 rtl::OUString(
679 RTL_CONSTASCII_USTRINGPARAM(
680 "com.sun.star.configuration.ConfigurationRegistry: not"
681 " implemented")),
682 static_cast< cppu::OWeakObject * >(this));
683 }
684
getStringValue()685 rtl::OUString RegistryKey::getStringValue()
686 throw (
687 css::registry::InvalidRegistryException,
688 css::registry::InvalidValueException, css::uno::RuntimeException)
689 {
690 osl::MutexGuard g(service_.mutex_);
691 service_.checkValid();
692 rtl::OUString v;
693 if (value_ >>= v) {
694 return v;
695 }
696 throw css::registry::InvalidValueException(
697 rtl::OUString(
698 RTL_CONSTASCII_USTRINGPARAM(
699 "com.sun.star.configuration.ConfigurationRegistry")),
700 static_cast< cppu::OWeakObject * >(this));
701 }
702
setStringValue(rtl::OUString const &)703 void RegistryKey::setStringValue(rtl::OUString const &)
704 throw (css::registry::InvalidRegistryException, css::uno::RuntimeException)
705 {
706 throw css::uno::RuntimeException(
707 rtl::OUString(
708 RTL_CONSTASCII_USTRINGPARAM(
709 "com.sun.star.configuration.ConfigurationRegistry: not"
710 " implemented")),
711 static_cast< cppu::OWeakObject * >(this));
712 }
713
getStringListValue()714 css::uno::Sequence< rtl::OUString > RegistryKey::getStringListValue()
715 throw (
716 css::registry::InvalidRegistryException,
717 css::registry::InvalidValueException, css::uno::RuntimeException)
718 {
719 osl::MutexGuard g(service_.mutex_);
720 service_.checkValid();
721 css::uno::Sequence< rtl::OUString > v;
722 if (value_ >>= v) {
723 return v;
724 }
725 throw css::registry::InvalidValueException(
726 rtl::OUString(
727 RTL_CONSTASCII_USTRINGPARAM(
728 "com.sun.star.configuration.ConfigurationRegistry")),
729 static_cast< cppu::OWeakObject * >(this));
730 }
731
setStringListValue(css::uno::Sequence<rtl::OUString> const &)732 void RegistryKey::setStringListValue(
733 css::uno::Sequence< rtl::OUString > const &)
734 throw (css::registry::InvalidRegistryException, css::uno::RuntimeException)
735 {
736 throw css::uno::RuntimeException(
737 rtl::OUString(
738 RTL_CONSTASCII_USTRINGPARAM(
739 "com.sun.star.configuration.ConfigurationRegistry: not"
740 " implemented")),
741 static_cast< cppu::OWeakObject * >(this));
742 }
743
getBinaryValue()744 css::uno::Sequence< sal_Int8 > RegistryKey::getBinaryValue()
745 throw (
746 css::registry::InvalidRegistryException,
747 css::registry::InvalidValueException, css::uno::RuntimeException)
748 {
749 osl::MutexGuard g(service_.mutex_);
750 service_.checkValid();
751 css::uno::Sequence< sal_Int8 > v;
752 if (value_ >>= v) {
753 return v;
754 }
755 throw css::registry::InvalidValueException(
756 rtl::OUString(
757 RTL_CONSTASCII_USTRINGPARAM(
758 "com.sun.star.configuration.ConfigurationRegistry")),
759 static_cast< cppu::OWeakObject * >(this));
760 }
761
setBinaryValue(css::uno::Sequence<sal_Int8> const &)762 void RegistryKey::setBinaryValue(css::uno::Sequence< sal_Int8 > const &)
763 throw (css::registry::InvalidRegistryException, css::uno::RuntimeException)
764 {
765 throw css::uno::RuntimeException(
766 rtl::OUString(
767 RTL_CONSTASCII_USTRINGPARAM(
768 "com.sun.star.configuration.ConfigurationRegistry: not"
769 " implemented")),
770 static_cast< cppu::OWeakObject * >(this));
771 }
772
openKey(rtl::OUString const & aKeyName)773 css::uno::Reference< css::registry::XRegistryKey > RegistryKey::openKey(
774 rtl::OUString const & aKeyName)
775 throw (css::registry::InvalidRegistryException, css::uno::RuntimeException)
776 {
777 osl::MutexGuard g(service_.mutex_);
778 service_.checkValid_RuntimeException();
779 css::uno::Reference< css::container::XHierarchicalNameAccess > access;
780 if (value_ >>= access) {
781 try {
782 return new RegistryKey(
783 service_, access->getByHierarchicalName(aKeyName));
784 } catch (css::container::NoSuchElementException &) {}
785 }
786 return css::uno::Reference< css::registry::XRegistryKey >();
787 }
788
createKey(rtl::OUString const &)789 css::uno::Reference< css::registry::XRegistryKey > RegistryKey::createKey(
790 rtl::OUString const &)
791 throw (
792 css::registry::InvalidRegistryException, css::uno::RuntimeException)
793 {
794 throw css::uno::RuntimeException(
795 rtl::OUString(
796 RTL_CONSTASCII_USTRINGPARAM(
797 "com.sun.star.configuration.ConfigurationRegistry: not"
798 " implemented")),
799 static_cast< cppu::OWeakObject * >(this));
800 }
801
closeKey()802 void RegistryKey::closeKey()
803 throw (
804 css::registry::InvalidRegistryException, css::uno::RuntimeException)
805 {
806 osl::MutexGuard g(service_.mutex_);
807 service_.checkValid_RuntimeException();
808 }
809
deleteKey(rtl::OUString const &)810 void RegistryKey::deleteKey(rtl::OUString const &)
811 throw (css::registry::InvalidRegistryException, css::uno::RuntimeException)
812 {
813 throw css::uno::RuntimeException(
814 rtl::OUString(
815 RTL_CONSTASCII_USTRINGPARAM(
816 "com.sun.star.configuration.ConfigurationRegistry: not"
817 " implemented")),
818 static_cast< cppu::OWeakObject * >(this));
819 }
820
821 css::uno::Sequence< css::uno::Reference< css::registry::XRegistryKey > >
openKeys()822 RegistryKey::openKeys()
823 throw (css::registry::InvalidRegistryException, css::uno::RuntimeException)
824 {
825 throw css::uno::RuntimeException(
826 rtl::OUString(
827 RTL_CONSTASCII_USTRINGPARAM(
828 "com.sun.star.configuration.ConfigurationRegistry: not"
829 " implemented")),
830 static_cast< cppu::OWeakObject * >(this));
831 }
832
getKeyNames()833 css::uno::Sequence< rtl::OUString > RegistryKey::getKeyNames()
834 throw (css::registry::InvalidRegistryException, css::uno::RuntimeException)
835 {
836 throw css::uno::RuntimeException(
837 rtl::OUString(
838 RTL_CONSTASCII_USTRINGPARAM(
839 "com.sun.star.configuration.ConfigurationRegistry: not"
840 " implemented")),
841 static_cast< cppu::OWeakObject * >(this));
842 }
843
createLink(rtl::OUString const &,rtl::OUString const &)844 sal_Bool RegistryKey::createLink(rtl::OUString const &, rtl::OUString const &)
845 throw (css::registry::InvalidRegistryException, css::uno::RuntimeException)
846 {
847 osl::MutexGuard g(service_.mutex_);
848 service_.checkValid_RuntimeException();
849 return false;
850 }
851
deleteLink(rtl::OUString const &)852 void RegistryKey::deleteLink(rtl::OUString const &)
853 throw (css::registry::InvalidRegistryException, css::uno::RuntimeException)
854 {
855 osl::MutexGuard g(service_.mutex_);
856 service_.checkValid_RuntimeException();
857 }
858
getLinkTarget(rtl::OUString const &)859 rtl::OUString RegistryKey::getLinkTarget(rtl::OUString const &)
860 throw (css::registry::InvalidRegistryException, css::uno::RuntimeException)
861 {
862 osl::MutexGuard g(service_.mutex_);
863 service_.checkValid_RuntimeException();
864 return rtl::OUString();
865 }
866
getResolvedName(rtl::OUString const & aKeyName)867 rtl::OUString RegistryKey::getResolvedName(rtl::OUString const & aKeyName)
868 throw (css::registry::InvalidRegistryException, css::uno::RuntimeException)
869 {
870 osl::MutexGuard g(service_.mutex_);
871 service_.checkValid_RuntimeException();
872 return aKeyName;
873 }
874
875 }
876
create(css::uno::Reference<css::uno::XComponentContext> const & context)877 css::uno::Reference< css::uno::XInterface > create(
878 css::uno::Reference< css::uno::XComponentContext > const & context)
879 {
880 return static_cast< cppu::OWeakObject * >(new Service(context));
881 }
882
getImplementationName()883 rtl::OUString getImplementationName() {
884 return rtl::OUString(
885 RTL_CONSTASCII_USTRINGPARAM(
886 "com.sun.star.comp.configuration.ConfigurationRegistry"));
887 }
888
getSupportedServiceNames()889 css::uno::Sequence< rtl::OUString > getSupportedServiceNames() {
890 rtl::OUString name(
891 RTL_CONSTASCII_USTRINGPARAM(
892 "com.sun.star.configuration.ConfigurationRegistry"));
893 return css::uno::Sequence< rtl::OUString >(&name, 1);
894 }
895
896 } }
897