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