summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStephan Bergmann <sbergman@redhat.com>2012-12-21 11:11:47 +0100
committerStephan Bergmann <sbergman@redhat.com>2012-12-21 15:56:45 +0100
commit03739641088846c4cf76a0752619905a8a65f88c (patch)
treec444f46d11818990d8b1521a173986e739924027
parentf3051abde54e7a0bc3e2d184e31ac011e96d3e6b (diff)
Remove support for XML .rdbs froom SimpleRegistry service again
...this was a transitional hack to get XML-format service.rdbs in. Now that registry-based bootstrap_InitialComponentContext is gone, XML-format .rdbs need only be handled in cppuhelper/source/defaultbootstrap.cxx (so the textualservices stuff once duplicated to there now effectively moved there). Change-Id: Ifb93558768095c1b462fe4057ebf8724968cca77
-rw-r--r--cppuhelper/source/defaultbootstrap.cxx10
-rw-r--r--stoc/Library_bootstrap.mk2
-rw-r--r--stoc/prj/build.lst2
-rw-r--r--stoc/source/simpleregistry/simpleregistry.cxx51
-rw-r--r--stoc/source/simpleregistry/textualservices.cxx1248
-rw-r--r--stoc/source/simpleregistry/textualservices.hxx61
6 files changed, 8 insertions, 1366 deletions
diff --git a/cppuhelper/source/defaultbootstrap.cxx b/cppuhelper/source/defaultbootstrap.cxx
index 1fe1aa76e8bd..128ee64a9a1f 100644
--- a/cppuhelper/source/defaultbootstrap.cxx
+++ b/cppuhelper/source/defaultbootstrap.cxx
@@ -233,13 +233,9 @@ struct Data: private boost::noncopyable {
ImplementationMap singletons;
};
-// This is largely a copy from stoc/source/simpleregistry/textualservices.cxx
-// (which it obsoletes); cppuhelper's published interface concept makes it
-// difficult to make both places use a shared Parser implementation, so I
-// created a copy for now (until the whole stoc/source/simpleregistry stuff can
-// be removed in an incompatible LibreOffice version). For simplicity, this
-// code keeps throwing css::registry::InvalidRegistryException for invalid XML
-// rdbs (even though that does not fit the exception's name):
+// For simplicity, this code keeps throwing
+// css::registry::InvalidRegistryException for invalid XML rdbs (even though
+// that does not fit the exception's name):
class Parser: private boost::noncopyable {
public:
Parser(
diff --git a/stoc/Library_bootstrap.mk b/stoc/Library_bootstrap.mk
index b9d0f18f033c..e68ddfaaca6b 100644
--- a/stoc/Library_bootstrap.mk
+++ b/stoc/Library_bootstrap.mk
@@ -52,7 +52,6 @@ $(eval $(call gb_Library_use_libraries,bootstrap,\
reg \
sal \
salhelper \
- xmlreader \
$(gb_UWINAPI) \
))
@@ -84,7 +83,6 @@ $(eval $(call gb_Library_add_exception_objects,bootstrap,\
stoc/source/security/permissions \
stoc/source/servicemanager/servicemanager \
stoc/source/simpleregistry/simpleregistry \
- stoc/source/simpleregistry/textualservices \
stoc/source/tdmanager/tdmgr \
stoc/source/tdmanager/tdmgr_check \
stoc/source/tdmanager/tdmgr_tdenumeration \
diff --git a/stoc/prj/build.lst b/stoc/prj/build.lst
index 674439ecb074..cd1b84369ba2 100644
--- a/stoc/prj/build.lst
+++ b/stoc/prj/build.lst
@@ -1,3 +1,3 @@
-tc stoc : cppuhelper cppu jvmaccess sal salhelper jvmfwk xmlreader LIBXSTL:libxslt registry NULL
+tc stoc : cppuhelper cppu jvmaccess sal salhelper jvmfwk LIBXSTL:libxslt registry NULL
tc stoc usr1 - all tc_mkout NULL
tc stoc\prj nmake - all tc_prj NULL
diff --git a/stoc/source/simpleregistry/simpleregistry.cxx b/stoc/source/simpleregistry/simpleregistry.cxx
index e08aba30593a..4783625c5cc6 100644
--- a/stoc/source/simpleregistry/simpleregistry.cxx
+++ b/stoc/source/simpleregistry/simpleregistry.cxx
@@ -20,7 +20,6 @@
#include "sal/config.h"
#include <cstdlib>
-#include <memory>
#include <vector>
#include "com/sun/star/lang/XServiceInfo.hpp"
@@ -53,8 +52,6 @@
#include "bootstrapservices.hxx"
-#include "textualservices.hxx"
-
extern rtl_StandardModuleCount g_moduleCount;
namespace {
@@ -113,7 +110,6 @@ private:
{ return stoc_bootstrap::simreg_getSupportedServiceNames(); }
Registry registry_;
- std::auto_ptr< stoc::simpleregistry::TextualServices > textual_;
};
class Key: public cppu::WeakImplHelper1< css::registry::XRegistryKey > {
@@ -1121,7 +1117,7 @@ rtl::OUString Key::getResolvedName(rtl::OUString const & aKeyName)
rtl::OUString SimpleRegistry::getURL() throw (css::uno::RuntimeException) {
osl::MutexGuard guard(mutex_);
- return textual_.get() == 0 ? registry_.getName() : textual_->getUri();
+ return registry_.getName();
}
void SimpleRegistry::open(
@@ -1129,33 +1125,13 @@ void SimpleRegistry::open(
throw (css::registry::InvalidRegistryException, css::uno::RuntimeException)
{
osl::MutexGuard guard(mutex_);
- if (textual_.get() != 0) {
- throw css::registry::InvalidRegistryException(
- (rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry.open(")) +
- rURL +
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "): instance already open"))),
- static_cast< OWeakObject * >(this));
- }
RegError err = (rURL.isEmpty() && bCreate)
? REG_REGISTRY_NOT_EXISTS
: registry_.open(rURL, bReadOnly ? REG_READONLY : REG_READWRITE);
if (err == REG_REGISTRY_NOT_EXISTS && bCreate) {
err = registry_.create(rURL);
}
- switch (err) {
- case REG_NO_ERROR:
- break;
- case REG_INVALID_REGISTRY:
- if (bReadOnly && !bCreate) {
- textual_.reset(new stoc::simpleregistry::TextualServices(rURL));
- break;
- }
- // fall through
- default:
+ if (err != REG_NO_ERROR) {
throw css::registry::InvalidRegistryException(
(rtl::OUString(
RTL_CONSTASCII_USTRINGPARAM(
@@ -1171,17 +1147,13 @@ void SimpleRegistry::open(
sal_Bool SimpleRegistry::isValid() throw (css::uno::RuntimeException) {
osl::MutexGuard guard(mutex_);
- return textual_.get() != 0 || registry_.isValid();
+ return registry_.isValid();
}
void SimpleRegistry::close()
throw (css::registry::InvalidRegistryException, css::uno::RuntimeException)
{
osl::MutexGuard guard(mutex_);
- if (textual_.get() != 0) {
- textual_.reset();
- return;
- }
RegError err = registry_.close();
if (err != REG_NO_ERROR) {
throw css::registry::InvalidRegistryException(
@@ -1198,10 +1170,6 @@ void SimpleRegistry::destroy()
throw (css::registry::InvalidRegistryException, css::uno::RuntimeException)
{
osl::MutexGuard guard(mutex_);
- if (textual_.get() != 0) {
- textual_.reset();
- return;
- }
RegError err = registry_.destroy(rtl::OUString());
if (err != REG_NO_ERROR) {
throw css::registry::InvalidRegistryException(
@@ -1218,9 +1186,6 @@ css::uno::Reference< css::registry::XRegistryKey > SimpleRegistry::getRootKey()
throw (css::registry::InvalidRegistryException, css::uno::RuntimeException)
{
osl::MutexGuard guard(mutex_);
- if (textual_.get() != 0) {
- return textual_->getRootKey();
- }
RegistryKey root;
RegError err = registry_.openRootKey(root);
if (err != REG_NO_ERROR) {
@@ -1239,7 +1204,7 @@ sal_Bool SimpleRegistry::isReadOnly()
throw (css::registry::InvalidRegistryException, css::uno::RuntimeException)
{
osl::MutexGuard guard(mutex_);
- return textual_.get() != 0 || registry_.isReadOnly();
+ return registry_.isReadOnly();
}
void SimpleRegistry::mergeKey(
@@ -1249,14 +1214,6 @@ void SimpleRegistry::mergeKey(
css::registry::MergeConflictException, css::uno::RuntimeException)
{
osl::MutexGuard guard(mutex_);
- if (textual_.get() != 0) {
- throw css::uno::RuntimeException(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry.mergeKey: not"
- " supported for textual representation")),
- static_cast< cppu::OWeakObject * >(this));
- }
RegistryKey root;
RegError err = registry_.openRootKey(root);
if (err == REG_NO_ERROR) {
diff --git a/stoc/source/simpleregistry/textualservices.cxx b/stoc/source/simpleregistry/textualservices.cxx
deleted file mode 100644
index eae2f4255547..000000000000
--- a/stoc/source/simpleregistry/textualservices.cxx
+++ /dev/null
@@ -1,1248 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-#include "sal/config.h"
-
-#include <cstddef>
-#include <cstdlib>
-#include <map>
-#include <vector>
-
-#include "boost/noncopyable.hpp"
-#include "com/sun/star/container/NoSuchElementException.hpp"
-#include "com/sun/star/registry/InvalidRegistryException.hpp"
-#include "com/sun/star/registry/XRegistryKey.hpp"
-#include "com/sun/star/uno/Reference.hxx"
-#include "com/sun/star/uno/XInterface.hpp"
-#include "cppuhelper/implbase1.hxx"
-#include "osl/diagnose.h"
-#include "rtl/malformeduriexception.hxx"
-#include "rtl/ref.hxx"
-#include "rtl/string.h"
-#include "rtl/uri.hxx"
-#include "rtl/ustrbuf.hxx"
-#include "rtl/ustring.h"
-#include "rtl/ustring.hxx"
-#include "salhelper/simplereferenceobject.hxx"
-#include "xmlreader/span.hxx"
-#include "xmlreader/xmlreader.hxx"
-
-#include "textualservices.hxx"
-
-namespace stoc { namespace simpleregistry {
-
-namespace {
-
-struct Implementation {
- rtl::OUString uri;
- rtl::OUString loader;
- rtl::OUString prefix;
- std::vector< rtl::OUString > services;
- std::vector< rtl::OUString > singletons;
-};
-
-typedef std::map< rtl::OUString, Implementation > Implementations;
-
-typedef std::map< rtl::OUString, std::vector< rtl::OUString > >
- ImplementationMap;
-
-}
-
-class Data: public salhelper::SimpleReferenceObject, private boost::noncopyable
-{
-public:
- Implementations implementations;
- ImplementationMap services;
- ImplementationMap singletons;
-};
-
-namespace {
-
-class Parser: private boost::noncopyable {
-public:
- Parser(rtl::OUString const & uri, rtl::Reference< Data > const & data);
-
-private:
- void handleComponent();
-
- void handleImplementation();
-
- void handleService();
-
- void handleSingleton();
-
- rtl::OUString getNameAttribute();
-
- xmlreader::XmlReader reader_;
- rtl::Reference< Data > data_;
- rtl::OUString attrUri_;
- rtl::OUString attrLoader_;
- rtl::OUString attrPrefix_;
- rtl::OUString attrImplementation_;
-};
-
-Parser::Parser(rtl::OUString const & uri, rtl::Reference< Data > const & data):
- reader_(uri), data_(data)
-{
- OSL_ASSERT(data.is());
- int ucNsId = reader_.registerNamespaceIri(
- xmlreader::Span(
- RTL_CONSTASCII_STRINGPARAM(
- "http://openoffice.org/2010/uno-components")));
- enum State {
- STATE_BEGIN, STATE_END, STATE_COMPONENTS, STATE_COMPONENT_INITIAL,
- STATE_COMPONENT, STATE_IMPLEMENTATION, STATE_SERVICE, STATE_SINGLETON };
- for (State state = STATE_BEGIN;;) {
- xmlreader::Span name;
- int nsId;
- xmlreader::XmlReader::Result res = reader_.nextItem(
- xmlreader::XmlReader::TEXT_NONE, &name, &nsId);
- switch (state) {
- case STATE_BEGIN:
- if (res == xmlreader::XmlReader::RESULT_BEGIN && nsId == ucNsId &&
- name.equals(RTL_CONSTASCII_STRINGPARAM("components")))
- {
- state = STATE_COMPONENTS;
- break;
- }
- throw css::registry::InvalidRegistryException(
- (reader_.getUrl() +
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- ": unexpected item in outer level"))),
- css::uno::Reference< css::uno::XInterface >());
- case STATE_END:
- if (res == xmlreader::XmlReader::RESULT_DONE) {
- return;
- }
- throw css::registry::InvalidRegistryException(
- (reader_.getUrl() +
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- ": unexpected item in outer level"))),
- css::uno::Reference< css::uno::XInterface >());
- case STATE_COMPONENTS:
- if (res == xmlreader::XmlReader::RESULT_END) {
- state = STATE_END;
- break;
- }
- if (res == xmlreader::XmlReader::RESULT_BEGIN && nsId == ucNsId &&
- name.equals(RTL_CONSTASCII_STRINGPARAM("component")))
- {
- handleComponent();
- state = STATE_COMPONENT_INITIAL;
- break;
- }
- throw css::registry::InvalidRegistryException(
- (reader_.getUrl() +
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- ": unexpected item in <components>"))),
- css::uno::Reference< css::uno::XInterface >());
- case STATE_COMPONENT:
- if (res == xmlreader::XmlReader::RESULT_END) {
- state = STATE_COMPONENTS;
- break;
- }
- // fall through
- case STATE_COMPONENT_INITIAL:
- if (res == xmlreader::XmlReader::RESULT_BEGIN && nsId == ucNsId &&
- name.equals(RTL_CONSTASCII_STRINGPARAM("implementation")))
- {
- handleImplementation();
- state = STATE_IMPLEMENTATION;
- break;
- }
- throw css::registry::InvalidRegistryException(
- (reader_.getUrl() +
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- ": unexpected item in <component>"))),
- css::uno::Reference< css::uno::XInterface >());
- case STATE_IMPLEMENTATION:
- if (res == xmlreader::XmlReader::RESULT_END) {
- state = STATE_COMPONENT;
- break;
- }
- if (res == xmlreader::XmlReader::RESULT_BEGIN && nsId == ucNsId &&
- name.equals(RTL_CONSTASCII_STRINGPARAM("service")))
- {
- handleService();
- state = STATE_SERVICE;
- break;
- }
- if (res == xmlreader::XmlReader::RESULT_BEGIN && nsId == ucNsId &&
- name.equals(RTL_CONSTASCII_STRINGPARAM("singleton")))
- {
- handleSingleton();
- state = STATE_SINGLETON;
- break;
- }
- throw css::registry::InvalidRegistryException(
- (reader_.getUrl() +
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- ": unexpected item in <implementation>"))),
- css::uno::Reference< css::uno::XInterface >());
- case STATE_SERVICE:
- if (res == xmlreader::XmlReader::RESULT_END) {
- state = STATE_IMPLEMENTATION;
- break;
- }
- throw css::registry::InvalidRegistryException(
- (reader_.getUrl() +
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- ": unexpected item in <service>"))),
- css::uno::Reference< css::uno::XInterface >());
- case STATE_SINGLETON:
- if (res == xmlreader::XmlReader::RESULT_END) {
- state = STATE_IMPLEMENTATION;
- break;
- }
- throw css::registry::InvalidRegistryException(
- (reader_.getUrl() +
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- ": unexpected item in <service>"))),
- css::uno::Reference< css::uno::XInterface >());
- }
- }
-}
-
-void Parser::handleComponent() {
- attrUri_ = rtl::OUString();
- attrLoader_ = rtl::OUString();
- attrPrefix_ = rtl::OUString();
- xmlreader::Span name;
- int nsId;
- while (reader_.nextAttribute(&nsId, &name)) {
- if (nsId == xmlreader::XmlReader::NAMESPACE_NONE &&
- name.equals(RTL_CONSTASCII_STRINGPARAM("uri")))
- {
- if (!attrUri_.isEmpty()) {
- throw css::registry::InvalidRegistryException(
- (reader_.getUrl() +
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- ": <component> has multiple \"uri\" attributes"))),
- css::uno::Reference< css::uno::XInterface >());
- }
- attrUri_ = reader_.getAttributeValue(false).convertFromUtf8();
- if (attrUri_.isEmpty()) {
- throw css::registry::InvalidRegistryException(
- (reader_.getUrl() +
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- ": <component> has empty \"uri\" attribute"))),
- css::uno::Reference< css::uno::XInterface >());
- }
- } else if (nsId == xmlreader::XmlReader::NAMESPACE_NONE &&
- name.equals(RTL_CONSTASCII_STRINGPARAM("loader")))
- {
- if (!attrLoader_.isEmpty()) {
- throw css::registry::InvalidRegistryException(
- (reader_.getUrl() +
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- ": <component> has multiple \"loader\""
- " attributes"))),
- css::uno::Reference< css::uno::XInterface >());
- }
- attrLoader_ = reader_.getAttributeValue(false).convertFromUtf8();
- if (attrLoader_.isEmpty()) {
- throw css::registry::InvalidRegistryException(
- (reader_.getUrl() +
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- ": <component> has empty \"loader\" attribute"))),
- css::uno::Reference< css::uno::XInterface >());
- }
- } else if (nsId == xmlreader::XmlReader::NAMESPACE_NONE &&
- name.equals(RTL_CONSTASCII_STRINGPARAM("prefix")))
- {
- if (!attrPrefix_.isEmpty()) {
- throw css::registry::InvalidRegistryException(
- (reader_.getUrl() +
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- ": <component> has multiple \"prefix\""
- " attributes"))),
- css::uno::Reference< css::uno::XInterface >());
- }
- attrPrefix_ = reader_.getAttributeValue(false).convertFromUtf8();
- if (attrPrefix_.isEmpty()) {
- throw css::registry::InvalidRegistryException(
- (reader_.getUrl() +
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- ": <component> has empty \"prefix\" attribute"))),
- css::uno::Reference< css::uno::XInterface >());
- }
- } else {
- OSL_FAIL ("unexpected component attribute, expected 'uri' or 'loader' or 'prefix'");
- }
- }
- if (attrUri_.isEmpty()) {
- throw css::registry::InvalidRegistryException(
- (reader_.getUrl() +
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- ": <component> is missing \"uri\" attribute"))),
- css::uno::Reference< css::uno::XInterface >());
- }
- if (attrLoader_.isEmpty()) {
- throw css::registry::InvalidRegistryException(
- (reader_.getUrl() +
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- ": <component> is missing \"loader\" attribute"))),
- css::uno::Reference< css::uno::XInterface >());
- }
-#ifndef DISABLE_DYNLOADING
- try {
- attrUri_ = rtl::Uri::convertRelToAbs(reader_.getUrl(), attrUri_);
- } catch (const rtl::MalformedUriException & e) {
- throw css::registry::InvalidRegistryException(
- (reader_.getUrl() +
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(": bad \"uri\" attribute: ")) +
- e.getMessage()),
- css::uno::Reference< css::uno::XInterface >());
- }
-#endif
-}
-
-void Parser::handleImplementation() {
- attrImplementation_ = getNameAttribute();
- if (data_->implementations.find(attrImplementation_) !=
- data_->implementations.end())
- {
- throw css::registry::InvalidRegistryException(
- (reader_.getUrl() +
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- ": duplicate <implementation name=\"")) +
- attrImplementation_ +
- rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("\">"))),
- css::uno::Reference< css::uno::XInterface >());
- }
- data_->implementations[attrImplementation_].uri = attrUri_;
- data_->implementations[attrImplementation_].loader = attrLoader_;
- data_->implementations[attrImplementation_].prefix = attrPrefix_;
-}
-
-void Parser::handleService() {
- rtl::OUString name = getNameAttribute();
- data_->implementations[attrImplementation_].services.push_back(name);
- data_->services[name].push_back(attrImplementation_);
-}
-
-void Parser::handleSingleton() {
- rtl::OUString name = getNameAttribute();
- data_->implementations[attrImplementation_].singletons.push_back(name);
- data_->singletons[name].push_back(attrImplementation_);
-}
-
-rtl::OUString Parser::getNameAttribute() {
- rtl::OUString attrName;
- xmlreader::Span name;
- int nsId;
- while (reader_.nextAttribute(&nsId, &name)) {
- if (nsId == xmlreader::XmlReader::NAMESPACE_NONE &&
- name.equals(RTL_CONSTASCII_STRINGPARAM("name")))
- {
- if (!attrName.isEmpty()) {
- throw css::registry::InvalidRegistryException(
- (reader_.getUrl() +
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- ": element has multiple \"name\" attributes"))),
- css::uno::Reference< css::uno::XInterface >());
- }
- attrName = reader_.getAttributeValue(false).convertFromUtf8();
- if (attrName.isEmpty()) {
- throw css::registry::InvalidRegistryException(
- (reader_.getUrl() +
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- ": element has empty \"name\" attribute"))),
- css::uno::Reference< css::uno::XInterface >());
- }
- } else {
- throw css::registry::InvalidRegistryException(
- (reader_.getUrl() +
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- ": expected element attribute \"name\""))),
- css::uno::Reference< css::uno::XInterface >());
- }
- }
- if (attrName.isEmpty()) {
- throw css::registry::InvalidRegistryException(
- (reader_.getUrl() +
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- ": element is missing \"name\" attribute"))),
- css::uno::Reference< css::uno::XInterface >());
- }
- return attrName;
-}
-
-rtl::OUString pathToString(std::vector< rtl::OUString > const & path) {
- rtl::OUStringBuffer buf;
- for (std::vector< rtl::OUString >::const_iterator i(path.begin());
- i != path.end(); ++i)
- {
- buf.append(sal_Unicode('/'));
- buf.append(*i);
- }
- if (buf.getLength() == 0) {
- buf.append(sal_Unicode('/'));
- }
- return buf.makeStringAndClear();
-}
-
-class Key: public cppu::WeakImplHelper1< css::registry::XRegistryKey > {
-public:
- Key(
- rtl::Reference< Data > const & data,
- std::vector< rtl::OUString > const & path):
- data_(data), path_(path) { OSL_ASSERT(data.is());
- }
-
-private:
- /*
- /
- IMPLEMENTATIONS
- <implementation>
- UNO
- LOCATION utf-8
- ACTIVATOR utf-8
- PREFIX utf-8
- SERVICES
- <service>
- ...
- SINGLETONS
- <singleton> utf-16
- ...
- ...
- SERVICES
- <service> utf-8-list
- ...
- SINGLETONS
- <singleton> utf-16
- REGISTERED_BY utf-8-list
- ...
- */
- enum State {
- STATE_ROOT, STATE_IMPLEMENTATIONS, STATE_IMPLEMENTATION, STATE_UNO,
- STATE_LOCATION, STATE_ACTIVATOR, STATE_PREFIX, STATE_IMPLEMENTATION_SERVICES,
- STATE_IMPLEMENTATION_SERVICE, STATE_IMPLEMENTATION_SINGLETONS,
- STATE_IMPLEMENTATION_SINGLETON, STATE_SERVICES, STATE_SERVICE,
- STATE_SINGLETONS, STATE_SINGLETON, STATE_REGISTEREDBY };
-
- virtual rtl::OUString SAL_CALL getKeyName()
- throw (css::uno::RuntimeException);
-
- virtual sal_Bool SAL_CALL isReadOnly() throw (
- css::registry::InvalidRegistryException, css::uno::RuntimeException);
-
- virtual sal_Bool SAL_CALL isValid() throw(css::uno::RuntimeException);
-
- virtual css::registry::RegistryKeyType SAL_CALL getKeyType(
- rtl::OUString const & rKeyName)
- throw (
- css::registry::InvalidRegistryException,
- css::uno::RuntimeException);
-
- virtual css::registry::RegistryValueType SAL_CALL getValueType() throw(
- css::registry::InvalidRegistryException, css::uno::RuntimeException);
-
- virtual sal_Int32 SAL_CALL getLongValue() throw (
- css::registry::InvalidRegistryException,
- css::registry::InvalidValueException, css::uno::RuntimeException);
-
- virtual void SAL_CALL setLongValue(sal_Int32 value) throw (
- css::registry::InvalidRegistryException, css::uno::RuntimeException);
-
- virtual css::uno::Sequence< sal_Int32 > SAL_CALL getLongListValue() throw(
- css::registry::InvalidRegistryException,
- css::registry::InvalidValueException, css::uno::RuntimeException);
-
- virtual void SAL_CALL setLongListValue(
- com::sun::star::uno::Sequence< sal_Int32 > const & seqValue)
- throw (
- css::registry::InvalidRegistryException,
- css::uno::RuntimeException);
-
- virtual rtl::OUString SAL_CALL getAsciiValue() throw (
- css::registry::InvalidRegistryException,
- css::registry::InvalidValueException, css::uno::RuntimeException);
-
- virtual void SAL_CALL setAsciiValue(rtl::OUString const & value) throw (
- css::registry::InvalidRegistryException, css::uno::RuntimeException);
-
- virtual css::uno::Sequence< rtl::OUString > SAL_CALL getAsciiListValue()
- throw (
- css::registry::InvalidRegistryException,
- css::registry::InvalidValueException, css::uno::RuntimeException);
-
- virtual void SAL_CALL setAsciiListValue(
- css::uno::Sequence< rtl::OUString > const & seqValue)
- throw (
- css::registry::InvalidRegistryException,
- css::uno::RuntimeException);
-
- virtual rtl::OUString SAL_CALL getStringValue() throw(
- css::registry::InvalidRegistryException,
- css::registry::InvalidValueException, css::uno::RuntimeException);
-
- virtual void SAL_CALL setStringValue(rtl::OUString const & value) throw (
- css::registry::InvalidRegistryException, css::uno::RuntimeException);
-
- virtual css::uno::Sequence< rtl::OUString > SAL_CALL getStringListValue()
- throw (
- css::registry::InvalidRegistryException,
- css::registry::InvalidValueException, css::uno::RuntimeException);
-
- virtual void SAL_CALL setStringListValue(
- css::uno::Sequence< rtl::OUString > const & seqValue)
- throw (
- css::registry::InvalidRegistryException,
- css::uno::RuntimeException);
-
- virtual css::uno::Sequence< sal_Int8 > SAL_CALL getBinaryValue() throw (
- css::registry::InvalidRegistryException,
- css::registry::InvalidValueException, css::uno::RuntimeException);
-
- virtual void SAL_CALL setBinaryValue(
- css::uno::Sequence< sal_Int8 > const & value)
- throw (
- css::registry::InvalidRegistryException,
- css::uno::RuntimeException);
-
- virtual css::uno::Reference< css::registry::XRegistryKey > SAL_CALL openKey(
- rtl::OUString const & aKeyName)
- throw (
- css::registry::InvalidRegistryException,
- css::uno::RuntimeException);
-
- virtual css::uno::Reference< css::registry::XRegistryKey > SAL_CALL
- createKey(rtl::OUString const & aKeyName) throw (
- css::registry::InvalidRegistryException, css::uno::RuntimeException);
-
- virtual void SAL_CALL closeKey() throw (
- css::registry::InvalidRegistryException, css::uno::RuntimeException);
-
- virtual void SAL_CALL deleteKey(rtl::OUString const & rKeyName) throw (
- css::registry::InvalidRegistryException, css::uno::RuntimeException);
-
- virtual
- css::uno::Sequence< css::uno::Reference< css::registry::XRegistryKey > >
- SAL_CALL openKeys() throw (
- css::registry::InvalidRegistryException, css::uno::RuntimeException);
-
- virtual css::uno::Sequence< rtl::OUString > SAL_CALL getKeyNames() throw (
- css::registry::InvalidRegistryException, css::uno::RuntimeException);
-
- virtual sal_Bool SAL_CALL createLink(
- rtl::OUString const & aLinkName, rtl::OUString const & aLinkTarget)
- throw (
- css::registry::InvalidRegistryException,
- css::uno::RuntimeException);
-
- virtual void SAL_CALL deleteLink(rtl::OUString const & rLinkName) throw (
- css::registry::InvalidRegistryException, css::uno::RuntimeException);
-
- virtual rtl::OUString SAL_CALL getLinkTarget(
- rtl::OUString const & rLinkName)
- throw (
- css::registry::InvalidRegistryException,
- css::uno::RuntimeException);
-
- virtual rtl::OUString SAL_CALL getResolvedName(
- rtl::OUString const & aKeyName)
- throw (
- css::registry::InvalidRegistryException,
- css::uno::RuntimeException);
-
- bool find(
- rtl::OUString const & relative, std::vector< rtl::OUString > * path,
- State * state, css::registry::RegistryValueType * type) const;
-
- css::uno::Sequence< rtl::OUString > getChildren();
-
- rtl::Reference< Data > data_;
- std::vector< rtl::OUString > path_;
-};
-
-rtl::OUString Key::getKeyName() throw (css::uno::RuntimeException) {
- return pathToString(path_);
-}
-
-sal_Bool Key::isReadOnly()
- throw (css::registry::InvalidRegistryException, css::uno::RuntimeException)
-{
- return true;
-}
-
-sal_Bool Key::isValid() throw(css::uno::RuntimeException) {
- return true;
-}
-
-css::registry::RegistryKeyType Key::getKeyType(rtl::OUString const & rKeyName)
- throw (css::registry::InvalidRegistryException, css::uno::RuntimeException)
-{
- if (!find(rtl::OUString(), 0, 0, 0)) {
- throw css::registry::InvalidRegistryException(
- (rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("unknown key ")) +
- rKeyName),
- static_cast< cppu::OWeakObject * >(this));
- }
- return css::registry::RegistryKeyType_KEY;
-}
-
-css::registry::RegistryValueType Key::getValueType()
- throw (css::registry::InvalidRegistryException, css::uno::RuntimeException)
-{
- css::registry::RegistryValueType type =
- css::registry::RegistryValueType_NOT_DEFINED;
- OSL_VERIFY(find(rtl::OUString(), 0, 0, &type));
- return type;
-}
-
-sal_Int32 Key::getLongValue() throw (
- css::registry::InvalidRegistryException,
- css::registry::InvalidValueException, css::uno::RuntimeException)
-{
- throw css::registry::InvalidValueException(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry textual services key"
- " getLongValue not supported")),
- static_cast< OWeakObject * >(this));
-}
-
-void Key::setLongValue(sal_Int32)
- throw (css::registry::InvalidRegistryException, css::uno::RuntimeException)
-{
- throw css::registry::InvalidRegistryException(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry textual services key"
- " setLongValue not supported")),
- static_cast< OWeakObject * >(this));
-}
-
-css::uno::Sequence< sal_Int32 > Key::getLongListValue() throw (
- css::registry::InvalidRegistryException,
- css::registry::InvalidValueException, css::uno::RuntimeException)
-{
- throw css::registry::InvalidValueException(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry textual services key"
- " getLongListValue not supported")),
- static_cast< OWeakObject * >(this));
-}
-
-void Key::setLongListValue(css::uno::Sequence< sal_Int32 > const &)
- throw (css::registry::InvalidRegistryException, css::uno::RuntimeException)
-{
- throw css::registry::InvalidRegistryException(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry textual services key"
- " setLongListValue not supported")),
- static_cast< OWeakObject * >(this));
-}
-
-rtl::OUString Key::getAsciiValue() throw (
- css::registry::InvalidRegistryException,
- css::registry::InvalidValueException, css::uno::RuntimeException)
-{
- State state = STATE_ROOT;
- OSL_VERIFY(find(rtl::OUString(), 0, &state, 0));
- switch (state) {
- case STATE_LOCATION:
- return data_->implementations[path_[1]].uri;
- case STATE_ACTIVATOR:
- return data_->implementations[path_[1]].loader;
- case STATE_PREFIX:
- return data_->implementations[path_[1]].prefix;
- default:
- throw css::registry::InvalidValueException(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry textual services key"
- " getAsciiValue: wrong type")),
- static_cast< OWeakObject * >(this));
- }
-}
-
-void Key::setAsciiValue(rtl::OUString const &)
- throw (css::registry::InvalidRegistryException, css::uno::RuntimeException)
-{
- throw css::registry::InvalidRegistryException(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry textual services key"
- " setAsciiValue not supported")),
- static_cast< OWeakObject * >(this));
-}
-
-css::uno::Sequence< rtl::OUString > Key::getAsciiListValue() throw (
- css::registry::InvalidRegistryException,
- css::registry::InvalidValueException, css::uno::RuntimeException)
-{
- State state = STATE_ROOT;
- OSL_VERIFY(find(rtl::OUString(), 0, &state, 0));
- std::vector< rtl::OUString > const * list;
- switch (state) {
- case STATE_SERVICE:
- list = &data_->services[path_[1]];
- break;
- case STATE_REGISTEREDBY:
- list = &data_->singletons[path_[1]];
- break;
- default:
- throw css::registry::InvalidValueException(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry textual services key"
- " getAsciiListValue: wrong type")),
- static_cast< OWeakObject * >(this));
- }
- if (list->size() > SAL_MAX_INT32) {
- throw css::registry::InvalidValueException(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry textual services key"
- " getAsciiListValue: too large")),
- static_cast< OWeakObject * >(this));
- }
- css::uno::Sequence< rtl::OUString > seq(
- static_cast< sal_Int32 >(list->size()));
- sal_Int32 i = 0;
- for (std::vector< rtl::OUString >::const_iterator j(list->begin());
- j != list->end(); ++j)
- {
- seq[i++] = *j;
- }
- return seq;
-}
-
-void Key::setAsciiListValue(css::uno::Sequence< rtl::OUString > const &)
- throw (css::registry::InvalidRegistryException, css::uno::RuntimeException)
-{
- throw css::registry::InvalidRegistryException(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry textual services key"
- " setAsciiListValue not supported")),
- static_cast< OWeakObject * >(this));
-}
-
-rtl::OUString Key::getStringValue() throw (
- css::registry::InvalidRegistryException,
- css::registry::InvalidValueException, css::uno::RuntimeException)
-{
- State state = STATE_ROOT;
- OSL_VERIFY(find(rtl::OUString(), 0, &state, 0));
- switch (state) {
- case STATE_IMPLEMENTATION_SINGLETON:
- case STATE_SINGLETON:
- throw css::registry::InvalidRegistryException(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry textual services key"
- " getStringValue: does not associate singletons with"
- " services")),
- static_cast< OWeakObject * >(this));
- default:
- break;
- }
- // default case extracted from switch to avoid erroneous compiler warnings
- // on Solaris:
- throw css::registry::InvalidValueException(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry textual services key"
- " getStringValue: wrong type")),
- static_cast< OWeakObject * >(this));
-}
-
-void Key::setStringValue(rtl::OUString const &)
- throw (css::registry::InvalidRegistryException, css::uno::RuntimeException)
-{
- throw css::registry::InvalidRegistryException(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry textual services key"
- " setStringValue not supported")),
- static_cast< OWeakObject * >(this));
-}
-
-css::uno::Sequence< rtl::OUString > Key::getStringListValue() throw (
- css::registry::InvalidRegistryException,
- css::registry::InvalidValueException, css::uno::RuntimeException)
-{
- throw css::registry::InvalidValueException(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry textual services key"
- " getStringListValue not supported")),
- static_cast< OWeakObject * >(this));
-}
-
-void Key::setStringListValue(css::uno::Sequence< rtl::OUString > const &)
- throw (css::registry::InvalidRegistryException, css::uno::RuntimeException)
-{
- throw css::registry::InvalidRegistryException(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry textual services key"
- " setStringListValue not supported")),
- static_cast< OWeakObject * >(this));
-}
-
-css::uno::Sequence< sal_Int8 > Key::getBinaryValue()
- throw (
- css::registry::InvalidRegistryException,
- css::registry::InvalidValueException, css::uno::RuntimeException)
-{
- throw css::registry::InvalidValueException(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry textual services key"
- " getBinarValue not supported")),
- static_cast< OWeakObject * >(this));
-}
-
-void Key::setBinaryValue(css::uno::Sequence< sal_Int8 > const &)
- throw (css::registry::InvalidRegistryException, css::uno::RuntimeException)
-{
- throw css::registry::InvalidRegistryException(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry textual services key"
- " setBinaryValue not supported")),
- static_cast< OWeakObject * >(this));
-}
-
-css::uno::Reference< css::registry::XRegistryKey > Key::openKey(
- rtl::OUString const & aKeyName)
- throw (css::registry::InvalidRegistryException, css::uno::RuntimeException)
-{
- std::vector< rtl::OUString > path;
- if (!find(aKeyName, &path, 0, 0)) {
- return css::uno::Reference< css::registry::XRegistryKey >();
- }
- return new Key(data_, path);
-}
-
-css::uno::Reference< css::registry::XRegistryKey > Key::createKey(
- rtl::OUString const &)
- throw (css::registry::InvalidRegistryException, css::uno::RuntimeException)
-{
- throw css::registry::InvalidRegistryException(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry textual services key"
- " createKey not supported")),
- static_cast< OWeakObject * >(this));
-}
-
-void Key::closeKey()
- throw (css::registry::InvalidRegistryException, css::uno::RuntimeException)
-{}
-
-void Key::deleteKey(rtl::OUString const &)
- throw (css::registry::InvalidRegistryException, css::uno::RuntimeException)
-{
- throw css::registry::InvalidRegistryException(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry textual services key"
- " deleteKey not supported")),
- static_cast< OWeakObject * >(this));
-}
-
-css::uno::Sequence< css::uno::Reference< css::registry::XRegistryKey > >
-Key::openKeys()
- throw (css::registry::InvalidRegistryException, css::uno::RuntimeException)
-{
- css::uno::Sequence< rtl::OUString > names(getChildren());
- css::uno::Sequence< css::uno::Reference< css::registry::XRegistryKey > >
- keys(names.getLength());
- for (sal_Int32 i = 0; i < keys.getLength(); ++i) {
- keys[i] = openKey(names[i]);
- OSL_ASSERT(keys[i].is());
- }
- return keys;
-}
-
-css::uno::Sequence< rtl::OUString > Key::getKeyNames()
- throw (css::registry::InvalidRegistryException, css::uno::RuntimeException)
-{
- css::uno::Sequence< rtl::OUString > names(getChildren());
- rtl::OUString prefix(pathToString(path_));
- prefix += rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("/"));
- for (sal_Int32 i = 0; i < names.getLength(); ++i) {
- names[i] = prefix + names[i];
- }
- return names;
-}
-
-sal_Bool Key::createLink(rtl::OUString const &, rtl::OUString const &)
- throw (css::registry::InvalidRegistryException, css::uno::RuntimeException)
-{
- throw css::registry::InvalidRegistryException(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry textual services key"
- " createLink not supported")),
- static_cast< OWeakObject * >(this));
-}
-
-void Key::deleteLink(rtl::OUString const &)
- throw (css::registry::InvalidRegistryException, css::uno::RuntimeException)
-{
- throw css::registry::InvalidRegistryException(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry textual services key"
- " deleteLink not supported")),
- static_cast< OWeakObject * >(this));
-}
-
-rtl::OUString Key::getLinkTarget(rtl::OUString const &)
- throw (css::registry::InvalidRegistryException, css::uno::RuntimeException)
-{
- throw css::registry::InvalidRegistryException(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry textual services key"
- " getLinkTarget not supported")),
- static_cast< OWeakObject * >(this));
-}
-
-rtl::OUString Key::getResolvedName(rtl::OUString const & aKeyName)
- throw (css::registry::InvalidRegistryException, css::uno::RuntimeException)
-{
- std::vector< rtl::OUString > path;
- find(aKeyName, &path, 0, 0);
- return pathToString(path);
-}
-
-bool Key::find(
- rtl::OUString const & relative, std::vector< rtl::OUString > * path,
- State * state, css::registry::RegistryValueType * type) const
-{
- std::vector< rtl::OUString > p(path_);
- sal_Int32 i = 0;
- do {
- rtl::OUString seg(relative.getToken(0, '/', i));
- if (!seg.isEmpty()) {
- p.push_back(seg);
- }
- } while (i >= 0);
- if (path != 0) {
- *path = p;
- }
- std::size_t const MAX_TRANSITIONS = 5;
- struct StateInfo {
- css::registry::RegistryValueType type;
- std::size_t count;
- struct { char const * segment; State state; }
- transitions[MAX_TRANSITIONS];
- };
- static StateInfo const info[] = {
- // STATE_ROOT:
- { css::registry::RegistryValueType_NOT_DEFINED, 3,
- { { "IMPLEMENTATIONS", STATE_IMPLEMENTATIONS },
- { "SERVICES", STATE_SERVICES },
- { "SINGLETONS", STATE_SINGLETONS } } },
- // STATE_IMPLEMENTATIONS:
- { css::registry::RegistryValueType_NOT_DEFINED, 1,
- { { 0, STATE_IMPLEMENTATION } } },
- // STATE_IMPLEMENTATION:
- { css::registry::RegistryValueType_NOT_DEFINED, 1,
- { { "UNO", STATE_UNO } } },
- // STATE_UNO:
- { css::registry::RegistryValueType_NOT_DEFINED, 5,
- { { "LOCATION", STATE_LOCATION },
- { "ACTIVATOR", STATE_ACTIVATOR },
- { "PREFIX", STATE_PREFIX },
- { "SERVICES", STATE_IMPLEMENTATION_SERVICES },
- { "SINGLETONS", STATE_IMPLEMENTATION_SINGLETONS } } },
- // STATE_LOCATION:
- { css::registry::RegistryValueType_ASCII, 0, {} },
- // STATE_ACTIVATOR:
- { css::registry::RegistryValueType_ASCII, 0, {} },
- // STATE_PREFIX:
- { css::registry::RegistryValueType_ASCII, 0, {} },
- // STATE_IMPLEMENTATION_SERVICES:
- { css::registry::RegistryValueType_NOT_DEFINED, 1,
- { { 0, STATE_IMPLEMENTATION_SERVICE } } },
- // STATE_IMPLEMENTATION_SERVICE:
- { css::registry::RegistryValueType_NOT_DEFINED, 0, {} },
- // STATE_IMPLEMENTATION_SINGLETONS:
- { css::registry::RegistryValueType_NOT_DEFINED, 1,
- { { 0, STATE_IMPLEMENTATION_SINGLETON } } },
- // STATE_IMPLEMENTATION_SINGLETON:
- { css::registry::RegistryValueType_STRING, 0, {} },
- // STATE_SERVICES:
- { css::registry::RegistryValueType_NOT_DEFINED, 1,
- { { 0, STATE_SERVICE } } },
- // STATE_SERVICE:
- { css::registry::RegistryValueType_ASCIILIST, 0, {} },
- // STATE_SINGLETONS:
- { css::registry::RegistryValueType_NOT_DEFINED, 1,
- { { 0, STATE_SINGLETON } } },
- // STATE_SINGLETON:
- { css::registry::RegistryValueType_STRING, 1,
- { { "REGISTERED_BY", STATE_REGISTEREDBY } } },
- // STATE_REGISTEREDBY:
- { css::registry::RegistryValueType_ASCIILIST, 0, {} } };
- State s = STATE_ROOT;
- for (std::vector< rtl::OUString >::iterator j(p.begin()); j != p.end(); ++j)
- {
- bool found = false;
- for (std::size_t k = 0; k < info[s].count; ++k) {
- if (info[s].transitions[k].segment == 0) {
- switch (info[s].transitions[k].state) {
- case STATE_IMPLEMENTATION:
- found = data_->implementations.find(*j) !=
- data_->implementations.end();
- break;
- case STATE_IMPLEMENTATION_SERVICE:
- case STATE_IMPLEMENTATION_SINGLETON:
- found = true; //TODO
- break;
- case STATE_SERVICE:
- found = data_->services.find(*j) != data_->services.end();
- break;
- case STATE_SINGLETON:
- found = data_->singletons.find(*j) !=
- data_->singletons.end();
- break;
- default:
- std::abort(); // this cannot happen
- }
- } else {
- found = j->equalsAscii(info[s].transitions[k].segment);
- }
- if (found) {
- s = info[s].transitions[k].state;
- break;
- }
- }
- if (!found) {
- return false;
- }
- }
- if (state != 0) {
- *state = s;
- }
- if (type != 0) {
- *type = info[s].type;
- }
- return true;
-}
-
-css::uno::Sequence< rtl::OUString > Key::getChildren() {
- State state = STATE_ROOT;
- OSL_VERIFY(find(rtl::OUString(), 0, &state, 0));
- switch (state) {
- default:
- std::abort(); // this cannot happen
- // pseudo-fall-through to avoid warnings on MSC
- case STATE_ROOT:
- {
- css::uno::Sequence< rtl::OUString > seq(3);
- seq[0] = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM("IMPLEMENTATIONS"));
- seq[1] = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("SERVICES"));
- seq[2] = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("SINGLETONS"));
- return seq;
- }
- case STATE_IMPLEMENTATIONS:
- {
- if (data_->implementations.size() > SAL_MAX_INT32) {
- throw css::registry::InvalidValueException(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry textual"
- " services key openKeys: too large")),
- static_cast< OWeakObject * >(this));
- }
- css::uno::Sequence< rtl::OUString > seq(
- static_cast< sal_Int32 >(data_->implementations.size()));
- sal_Int32 i = 0;
- for (Implementations::iterator j(data_->implementations.begin());
- j != data_->implementations.end(); ++j)
- {
- seq[i++] = j->first;
- }
- return seq;
- }
- case STATE_UNO:
- {
- css::uno::Sequence< rtl::OUString > seq(5);
- seq[0] = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("LOCATION"));
- seq[1] = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ACTIVATOR"));
- seq[2] = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("PREFIX"));
- seq[3] = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("SERVICES"));
- seq[4] = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("SINGLETONS"));
- return seq;
- }
- case STATE_LOCATION:
- case STATE_ACTIVATOR:
- case STATE_PREFIX:
- case STATE_IMPLEMENTATION_SERVICE:
- case STATE_IMPLEMENTATION_SINGLETON:
- case STATE_SERVICE:
- case STATE_REGISTEREDBY:
- return css::uno::Sequence< rtl::OUString >();
- case STATE_IMPLEMENTATION_SERVICES:
- {
- if (data_->implementations[path_[1]].services.size() >
- SAL_MAX_INT32)
- {
- throw css::registry::InvalidValueException(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry textual"
- " services key openKeys: too large")),
- static_cast< OWeakObject * >(this));
- }
- css::uno::Sequence< rtl::OUString > seq(
- static_cast< sal_Int32 >(
- data_->implementations[path_[1]].services.size()));
- sal_Int32 i = 0;
- for (std::vector< rtl::OUString >::iterator j(
- data_->implementations[path_[1]].services.begin());
- j != data_->implementations[path_[1]].services.end(); ++j)
- {
- seq[i++] = *j;
- }
- return seq;
- }
- case STATE_IMPLEMENTATION_SINGLETONS:
- {
- if (data_->implementations[path_[1]].singletons.size() >
- SAL_MAX_INT32)
- {
- throw css::registry::InvalidValueException(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry textual"
- " services key openKeys: too large")),
- static_cast< OWeakObject * >(this));
- }
- css::uno::Sequence< rtl::OUString > seq(
- static_cast< sal_Int32 >(
- data_->implementations[path_[1]].singletons.size()));
- sal_Int32 i = 0;
- for (std::vector< rtl::OUString >::iterator j(
- data_->implementations[path_[1]].singletons.begin());
- j != data_->implementations[path_[1]].singletons.end(); ++j)
- {
- seq[i++] = *j;
- }
- return seq;
- }
- case STATE_SERVICES:
- {
- if (data_->services.size() > SAL_MAX_INT32) {
- throw css::registry::InvalidValueException(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry textual"
- " services key openKeys: too large")),
- static_cast< OWeakObject * >(this));
- }
- css::uno::Sequence< rtl::OUString > seq(
- static_cast< sal_Int32 >(data_->services.size()));
- sal_Int32 i = 0;
- for (ImplementationMap::iterator j(data_->services.begin());
- j != data_->services.end(); ++j)
- {
- seq[i++] = j->first;
- }
- return seq;
- }
- case STATE_SINGLETONS:
- {
- if (data_->singletons.size() > SAL_MAX_INT32) {
- throw css::registry::InvalidValueException(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry textual"
- " services key openKeys: too large")),
- static_cast< OWeakObject * >(this));
- }
- css::uno::Sequence< rtl::OUString > seq(
- static_cast< sal_Int32 >(data_->singletons.size()));
- sal_Int32 i = 0;
- for (ImplementationMap::iterator j(data_->singletons.begin());
- j != data_->singletons.end(); ++j)
- {
- seq[i++] = j->first;
- }
- return seq;
- }
- case STATE_SINGLETON:
- {
- css::uno::Sequence< rtl::OUString > seq(1);
- seq[0] = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM("REGISTERED_BY"));
- return seq;
- }
- }
-}
-
-}
-
-TextualServices::TextualServices(rtl::OUString const & uri):
- uri_(uri), data_(new Data)
-{
- try {
- Parser(uri, data_);
- } catch (css::container::NoSuchElementException &) {
- throw css::registry::InvalidRegistryException(
- (uri +
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(": no such file"))),
- css::uno::Reference< css::uno::XInterface >());
- }
-}
-
-TextualServices::~TextualServices() {}
-
-css::uno::Reference< css::registry::XRegistryKey > TextualServices::getRootKey()
-{
- return new Key(data_, std::vector< rtl::OUString >());
-}
-
-} }
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/stoc/source/simpleregistry/textualservices.hxx b/stoc/source/simpleregistry/textualservices.hxx
deleted file mode 100644
index 4e41735aa0d4..000000000000
--- a/stoc/source/simpleregistry/textualservices.hxx
+++ /dev/null
@@ -1,61 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-#ifndef INCLUDED_STOC_SOURCE_SIMPLEREGISTRY_TEXTUALSERVICES_HXX
-#define INCLUDED_STOC_SOURCE_SIMPLEREGISTRY_TEXTUALSERVICES_HXX
-
-#include "sal/config.h"
-
-#include <memory>
-
-#include "boost/noncopyable.hpp"
-#include "com/sun/star/uno/Reference.hxx"
-#include "rtl/ref.hxx"
-#include "rtl/ustring.hxx"
-
-namespace com { namespace sun { namespace star { namespace registry {
- class XRegistryKey;
-} } } }
-
-namespace stoc { namespace simpleregistry {
-
-class Data;
-
-class TextualServices: private boost::noncopyable {
-public:
- explicit TextualServices(rtl::OUString const & uri);
- // throws com::sun::star::registry::InvalidRegistryException
-
- virtual ~TextualServices();
-
- inline rtl::OUString getUri() { return uri_; }
-
- com::sun::star::uno::Reference< com::sun::star::registry::XRegistryKey >
- getRootKey();
-
-private:
- rtl::OUString uri_;
- rtl::Reference< Data > data_;
-};
-
-} }
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */