Quelle CURI.cxx
Sprache: C
/* -*- 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 <cppuhelper/implbase.hxx>
#include <cppuhelper/supportsservice.hxx>
#include <com/sun/star/lang/XServiceInfo.hpp>
#include <com/sun/star/lang/XInitialization.hpp>
#include <com/sun/star/rdf/XURI.hpp>
#include <com/sun/star/rdf/URIs.hpp>
#include <com/sun/star/uno/XComponentContext.hpp>
#include <com/sun/star/lang/IllegalArgumentException.hpp>
/// anonymous implementation namespace
namespace {
class CURI:
public ::cppu::WeakImplHelper<
css::lang::XServiceInfo,
css::lang::XInitialization,
css::rdf::XURI>
{
public :
explicit CURI();
// css::lang::XServiceInfo:
virtual OUString SAL_CALL getImplementationName() override;
virtual sal_Bool SAL_CALL supportsService(
const OUString & ServiceName) override;
virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override;
// css::lang::XInitialization:
virtual void SAL_CALL initialize(
const css::uno::Sequence< css::uno::Any > & aArgument
s) override;
// css::rdf::XNode:
virtual OUString SAL_CALL getStringValue() override;
// css::rdf::XURI:
virtual OUString SAL_CALL getLocalName() override;
virtual OUString SAL_CALL getNamespace() override;
private :
CURI(CURI const &) = delete ;
CURI& operator =(CURI const &) = delete ;
/// handle css.rdf.URIs
void initFromConstant(const sal_Int16 i_Constant);
OUString m_Namespace;
OUString m_LocalName;
};
CURI::CURI()
{}
// com.sun.star.uno.XServiceInfo:
OUString SAL_CALL CURI::getImplementationName()
{
return u"CURI" _ustr;
}
sal_Bool SAL_CALL CURI::supportsService(OUString const & serviceName)
{
return cppu::supportsService(this , serviceName);
}
css::uno::Sequence< OUString > SAL_CALL CURI::getSupportedServiceNames()
{
return { u"com.sun.star.rdf.URI" _ustr };
}
constexpr OUString s_nsXSD = u"http://www.w3.org/2001/XMLSchema-datatypes# "_ustr;
constexpr OUString s_nsRDF = u"http://www.w3.org/1999/02/22-rdf-syntax-ns# "_ustr;
constexpr OUString s_nsRDFs = u"http://www.w3.org/2000/01/rdf-schema# "_ustr;
constexpr OUString s_nsOWL = u"http://www.w3.org/2002/07/owl# "_ustr;
constexpr OUString s_nsPkg = u"http://docs.oasis-open.org/ns/office/1.2/meta/pkg# "_ustr;
constexpr OUString s_nsODF = u"http://docs.oasis-open.org/ns/office/1.2/meta/odf# "_ustr;
constexpr OUString s_nsLO_EXT =
u"urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0odf#" _ustr;
void CURI::initFromConstant(const sal_Int16 i_Constant)
{
OUString ns;
OUString ln;
switch (i_Constant)
{
case css::rdf::URIs::XSD_NCNAME:
ns = s_nsXSD;
ln = u"NCName" _ustr;
break ;
case css::rdf::URIs::XSD_STRING:
ns = s_nsXSD;
ln = u"string" _ustr;
break ;
case css::rdf::URIs::XSD_NORMALIZEDSTRING:
ns = s_nsXSD;
ln = u"normalizedString" _ustr;
break ;
case css::rdf::URIs::XSD_BOOLEAN:
ns = s_nsXSD;
ln = u"boolean" _ustr;
break ;
case css::rdf::URIs::XSD_DECIMAL:
ns = s_nsXSD;
ln = u"decimal" _ustr;
break ;
case css::rdf::URIs::XSD_FLOAT:
ns = s_nsXSD;
ln = u"float" _ustr;
break ;
case css::rdf::URIs::XSD_DOUBLE:
ns = s_nsXSD;
ln = u"double" _ustr;
break ;
case css::rdf::URIs::XSD_INTEGER:
ns = s_nsXSD;
ln = u"integer" _ustr;
break ;
case css::rdf::URIs::XSD_NONNEGATIVEINTEGER:
ns = s_nsXSD;
ln = u"nonNegativeInteger" _ustr;
break ;
case css::rdf::URIs::XSD_POSITIVEINTEGER:
ns = s_nsXSD;
ln = u"positiveInteger" _ustr;
break ;
case css::rdf::URIs::XSD_NONPOSITIVEINTEGER:
ns = s_nsXSD;
ln = u"nonPositiveInteger" _ustr;
break ;
case css::rdf::URIs::XSD_NEGATIVEINTEGER:
ns = s_nsXSD;
ln = u"negativeInteger" _ustr;
break ;
case css::rdf::URIs::XSD_LONG:
ns = s_nsXSD;
ln = u"long" _ustr;
break ;
case css::rdf::URIs::XSD_INT:
ns = s_nsXSD;
ln = u"int" _ustr;
break ;
case css::rdf::URIs::XSD_SHORT:
ns = s_nsXSD;
ln = u"short" _ustr;
break ;
case css::rdf::URIs::XSD_BYTE:
ns = s_nsXSD;
ln = u"byte" _ustr;
break ;
case css::rdf::URIs::XSD_UNSIGNEDLONG:
ns = s_nsXSD;
ln = u"unsignedLong" _ustr;
break ;
case css::rdf::URIs::XSD_UNSIGNEDINT:
ns = s_nsXSD;
ln = u"unsignedInt" _ustr;
break ;
case css::rdf::URIs::XSD_UNSIGNEDSHORT:
ns = s_nsXSD;
ln = u"unsignedShort" _ustr;
break ;
case css::rdf::URIs::XSD_UNSIGNEDBYTE:
ns = s_nsXSD;
ln = u"unsignedByte" _ustr;
break ;
case css::rdf::URIs::XSD_HEXBINARY:
ns = s_nsXSD;
ln = u"hexBinary" _ustr;
break ;
case css::rdf::URIs::XSD_BASE64BINARY:
ns = s_nsXSD;
ln = u"base64Binary" _ustr;
break ;
case css::rdf::URIs::XSD_DATETIME:
ns = s_nsXSD;
ln = u"dateTime" _ustr;
break ;
case css::rdf::URIs::XSD_TIME:
ns = s_nsXSD;
ln = u"time" _ustr;
break ;
case css::rdf::URIs::XSD_DATE:
ns = s_nsXSD;
ln = u"date" _ustr;
break ;
case css::rdf::URIs::XSD_GYEARMONTH:
ns = s_nsXSD;
ln = u"gYearMonth" _ustr;
break ;
case css::rdf::URIs::XSD_GYEAR:
ns = s_nsXSD;
ln = u"gYear" _ustr;
break ;
case css::rdf::URIs::XSD_GMONTHDAY:
ns = s_nsXSD;
ln = u"gMonthDay" _ustr;
break ;
case css::rdf::URIs::XSD_GDAY:
ns = s_nsXSD;
ln = u"gDay" _ustr;
break ;
case css::rdf::URIs::XSD_GMONTH:
ns = s_nsXSD;
ln = u"gMonth" _ustr;
break ;
case css::rdf::URIs::XSD_ANYURI:
ns = s_nsXSD;
ln = u"anyURI" _ustr;
break ;
case css::rdf::URIs::XSD_TOKEN:
ns = s_nsXSD;
ln = u"token" _ustr;
break ;
case css::rdf::URIs::XSD_LANGUAGE:
ns = s_nsXSD;
ln = u"language" _ustr;
break ;
case css::rdf::URIs::XSD_NMTOKEN:
ns = s_nsXSD;
ln = u"NMTOKEN" _ustr;
break ;
case css::rdf::URIs::XSD_NAME:
ns = s_nsXSD;
ln = u"Name" _ustr;
break ;
case css::rdf::URIs::XSD_DURATION:
ns = s_nsXSD;
ln = u"duration" _ustr;
break ;
case css::rdf::URIs::XSD_QNAME:
ns = s_nsXSD;
ln = u"QName" _ustr;
break ;
case css::rdf::URIs::XSD_NOTATION:
ns = s_nsXSD;
ln = u"NOTATION" _ustr;
break ;
case css::rdf::URIs::XSD_NMTOKENS:
ns = s_nsXSD;
ln = u"NMTOKENS" _ustr;
break ;
case css::rdf::URIs::XSD_ID:
ns = s_nsXSD;
ln = u"ID" _ustr;
break ;
case css::rdf::URIs::XSD_IDREF:
ns = s_nsXSD;
ln = u"IDREF" _ustr;
break ;
case css::rdf::URIs::XSD_IDREFS:
ns = s_nsXSD;
ln = u"IDREFS" _ustr;
break ;
case css::rdf::URIs::XSD_ENTITY:
ns = s_nsXSD;
ln = u"ENTITY" _ustr;
break ;
case css::rdf::URIs::XSD_ENTITIES:
ns = s_nsXSD;
ln = u"ENTITIES" _ustr;
break ;
case css::rdf::URIs::RDF_TYPE:
ns = s_nsRDF;
ln = u"type" _ustr;
break ;
case css::rdf::URIs::RDF_SUBJECT:
ns = s_nsRDF;
ln = u"subject" _ustr;
break ;
case css::rdf::URIs::RDF_PREDICATE:
ns = s_nsRDF;
ln = u"predicate" _ustr;
break ;
case css::rdf::URIs::RDF_OBJECT:
ns = s_nsRDF;
ln = u"object" _ustr;
break ;
case css::rdf::URIs::RDF_PROPERTY:
ns = s_nsRDF;
ln = u"Property" _ustr;
break ;
case css::rdf::URIs::RDF_STATEMENT:
ns = s_nsRDF;
ln = u"Statement" _ustr;
break ;
case css::rdf::URIs::RDF_VALUE:
ns = s_nsRDF;
ln = u"value" _ustr;
break ;
case css::rdf::URIs::RDF_FIRST:
ns = s_nsRDF;
ln = u"first" _ustr;
break ;
case css::rdf::URIs::RDF_REST:
ns = s_nsRDF;
ln = u"rest" _ustr;
break ;
case css::rdf::URIs::RDF_NIL:
ns = s_nsRDF;
ln = u"nil" _ustr;
break ;
case css::rdf::URIs::RDF_XMLLITERAL:
ns = s_nsRDF;
ln = u"XMLLiteral" _ustr;
break ;
case css::rdf::URIs::RDF_ALT:
ns = s_nsRDF;
ln = u"Alt" _ustr;
break ;
case css::rdf::URIs::RDF_BAG:
ns = s_nsRDF;
ln = u"Bag" _ustr;
break ;
case css::rdf::URIs::RDF_LIST:
ns = s_nsRDF;
ln = u"List" _ustr;
break ;
case css::rdf::URIs::RDF_SEQ:
ns = s_nsRDF;
ln = u"Seq" _ustr;
break ;
case css::rdf::URIs::RDF_1:
ns = s_nsRDF;
ln = u"_1" _ustr;
break ;
case css::rdf::URIs::RDFS_COMMENT:
ns = s_nsRDFs;
ln = u"comment" _ustr;
break ;
case css::rdf::URIs::RDFS_LABEL:
ns = s_nsRDFs;
ln = u"label" _ustr;
break ;
case css::rdf::URIs::RDFS_DOMAIN:
ns = s_nsRDFs;
ln = u"domain" _ustr;
break ;
case css::rdf::URIs::RDFS_RANGE:
ns = s_nsRDFs;
ln = u"range" _ustr;
break ;
case css::rdf::URIs::RDFS_SUBCLASSOF:
ns = s_nsRDFs;
ln = u"subClassOf" _ustr;
break ;
case css::rdf::URIs::RDFS_LITERAL:
ns = s_nsRDFs;
ln = u"Literal" _ustr;
break ;
case css::rdf::URIs::OWL_CLASS:
ns = s_nsOWL;
ln = u"Class" _ustr;
break ;
case css::rdf::URIs::OWL_OBJECTPROPERTY:
ns = s_nsOWL;
ln = u"ObjectProperty" _ustr;
break ;
case css::rdf::URIs::OWL_DATATYPEPROPERTY:
ns = s_nsOWL;
ln = u"DatatypeProperty" _ustr;
break ;
case css::rdf::URIs::OWL_FUNCTIONALPROPERTY:
ns = s_nsOWL;
ln = u"FunctionalProperty" _ustr;
break ;
case css::rdf::URIs::OWL_THING:
ns = s_nsOWL;
ln = u"Thing" _ustr;
break ;
case css::rdf::URIs::OWL_NOTHING:
ns = s_nsOWL;
ln = u"Nothing" _ustr;
break ;
case css::rdf::URIs::OWL_INDIVIDUAL:
ns = s_nsOWL;
ln = u"Individual" _ustr;
break ;
case css::rdf::URIs::OWL_EQUIVALENTCLASS:
ns = s_nsOWL;
ln = u"equivalentClass" _ustr;
break ;
case css::rdf::URIs::OWL_EQUIVALENTPROPERTY:
ns = s_nsOWL;
ln = u"equivalentProperty" _ustr;
break ;
case css::rdf::URIs::OWL_SAMEAS:
ns = s_nsOWL;
ln = u"sameAs" _ustr;
break ;
case css::rdf::URIs::OWL_DIFFERENTFROM:
ns = s_nsOWL;
ln = u"differentFrom" _ustr;
break ;
case css::rdf::URIs::OWL_ALLDIFFERENT:
ns = s_nsOWL;
ln = u"AllDifferent" _ustr;
break ;
case css::rdf::URIs::OWL_DISTINCTMEMBERS:
ns = s_nsOWL;
ln = u"distinctMembers" _ustr;
break ;
case css::rdf::URIs::OWL_INVERSEOF:
ns = s_nsOWL;
ln = u"inverseOf" _ustr;
break ;
case css::rdf::URIs::OWL_TRANSITIVEPROPERTY:
ns = s_nsOWL;
ln = u"TransitiveProperty" _ustr;
break ;
case css::rdf::URIs::OWL_SYMMETRICPROPERTY:
ns = s_nsOWL;
ln = u"SymmetricProperty" _ustr;
break ;
case css::rdf::URIs::OWL_INVERSEFUNCTIONALPROPERTY:
ns = s_nsOWL;
ln = u"InverseFunctionalProperty" _ustr;
break ;
case css::rdf::URIs::OWL_RESTRICTION:
ns = s_nsOWL;
ln = u"Restriction" _ustr;
break ;
case css::rdf::URIs::OWL_ONPROPERTY:
ns = s_nsOWL;
ln = u"onProperty" _ustr;
break ;
case css::rdf::URIs::OWL_ALLVALUESFROM:
ns = s_nsOWL;
ln = u"allValuesFrom" _ustr;
break ;
case css::rdf::URIs::OWL_SOMEVALUESFROM:
ns = s_nsOWL;
ln = u"someValuesFrom" _ustr;
break ;
case css::rdf::URIs::OWL_MINCARDINALITY:
ns = s_nsOWL;
ln = u"minCardinality" _ustr;
break ;
case css::rdf::URIs::OWL_MAXCARDINALITY:
ns = s_nsOWL;
ln = u"maxCardinality" _ustr;
break ;
case css::rdf::URIs::OWL_CARDINALITY:
ns = s_nsOWL;
ln = u"cardinality" _ustr;
break ;
case css::rdf::URIs::OWL_ONTOLOGY:
ns = s_nsOWL;
ln = u"Ontology" _ustr;
break ;
case css::rdf::URIs::OWL_IMPORTS:
ns = s_nsOWL;
ln = u"imports" _ustr;
break ;
case css::rdf::URIs::OWL_VERSIONINFO:
ns = s_nsOWL;
ln = u"versionInfo" _ustr;
break ;
case css::rdf::URIs::OWL_PRIORVERSION:
ns = s_nsOWL;
ln = u"priorVersion" _ustr;
break ;
case css::rdf::URIs::OWL_BACKWARDCOMPATIBLEWITH:
ns = s_nsOWL;
ln = u"backwardCompatibleWith" _ustr;
break ;
case css::rdf::URIs::OWL_INCOMPATIBLEWITH:
ns = s_nsOWL;
ln = u"incompatibleWith" _ustr;
break ;
case css::rdf::URIs::OWL_DEPRECATEDCLASS:
ns = s_nsOWL;
ln = u"DeprecatedClass" _ustr;
break ;
case css::rdf::URIs::OWL_DEPRECATEDPROPERTY:
ns = s_nsOWL;
ln = u"DeprecatedProperty" _ustr;
break ;
case css::rdf::URIs::OWL_ANNOTATIONPROPERTY:
ns = s_nsOWL;
ln = u"AnnotationProperty" _ustr;
break ;
case css::rdf::URIs::OWL_ONTOLOGYPROPERTY:
ns = s_nsOWL;
ln = u"OntologyProperty" _ustr;
break ;
case css::rdf::URIs::OWL_ONEOF:
ns = s_nsOWL;
ln = u"oneOf" _ustr;
break ;
case css::rdf::URIs::OWL_DATARANGE:
ns = s_nsOWL;
ln = u"dataRange" _ustr;
break ;
case css::rdf::URIs::OWL_DISJOINTWITH:
ns = s_nsOWL;
ln = u"disjointWith" _ustr;
break ;
case css::rdf::URIs::OWL_UNIONOF:
ns = s_nsOWL;
ln = u"unionOf" _ustr;
break ;
case css::rdf::URIs::OWL_COMPLEMENTOF:
ns = s_nsOWL;
ln = u"complementOf" _ustr;
break ;
case css::rdf::URIs::OWL_INTERSECTIONOF:
ns = s_nsOWL;
ln = u"intersectionOf" _ustr;
break ;
case css::rdf::URIs::OWL_HASVALUE:
ns = s_nsOWL;
ln = u"hasValue" _ustr;
break ;
case css::rdf::URIs::PKG_HASPART:
ns = s_nsPkg;
ln = u"hasPart" _ustr;
break ;
case css::rdf::URIs::PKG_MIMETYPE:
ns = s_nsPkg;
ln = u"mimeType" _ustr;
break ;
case css::rdf::URIs::PKG_PACKAGE:
ns = s_nsPkg;
ln = u"Package" _ustr;
break ;
case css::rdf::URIs::PKG_ELEMENT:
ns = s_nsPkg;
ln = u"Element" _ustr;
break ;
case css::rdf::URIs::PKG_FILE:
ns = s_nsPkg;
ln = u"File" _ustr;
break ;
case css::rdf::URIs::PKG_METADATAFILE:
ns = s_nsPkg;
ln = u"MetadataFile" _ustr;
break ;
case css::rdf::URIs::PKG_DOCUMENT:
ns = s_nsPkg;
ln = u"Document" _ustr;
break ;
case css::rdf::URIs::ODF_PREFIX:
ns = s_nsODF;
ln = u"prefix" _ustr;
break ;
case css::rdf::URIs::ODF_SUFFIX:
ns = s_nsODF;
ln = u"suffix" _ustr;
break ;
case css::rdf::URIs::ODF_ELEMENT:
ns = s_nsODF;
ln = u"Element" _ustr;
break ;
case css::rdf::URIs::ODF_CONTENTFILE:
ns = s_nsODF;
ln = u"ContentFile" _ustr;
break ;
case css::rdf::URIs::ODF_STYLESFILE:
ns = s_nsODF;
ln = u"StylesFile" _ustr;
break ;
case css::rdf::URIs::LO_EXT_SHADING:
ns = s_nsLO_EXT;
ln = u"shading" _ustr;
break ;
default :
throw css::lang::IllegalArgumentException(
u"CURI::initialize: invalid URIs constant argument" _ustr, *this , 0);
}
m_Namespace = ns;
m_LocalName = ln;
}
// css::lang::XInitialization:
void SAL_CALL CURI::initialize(const css::uno::Sequence< css::uno::Any > & aArguments)
{
sal_Int32 len = aArguments.getLength();
if ((len < 1) || (len > 2)) {
throw css::lang::IllegalArgumentException(
u"CURI::initialize: must give 1 or 2 argument(s)" _ustr, *this , 2);
}
sal_Int16 arg(0);
OUString arg0;
OUString arg1;
if (aArguments[0] >>= arg) {
// integer argument: constant from rdf::URIs
if (len != 1) {
throw css::lang::IllegalArgumentException(
u"CURI::initialize: must give 1 int argument" _ustr, *this , 1);
}
initFromConstant(arg);
return ;
}
if (!(aArguments[0] >>= arg0)) {
throw css::lang::IllegalArgumentException(
u"CURI::initialize: argument must be string or short" _ustr, *this , 0);
}
if (len > 1) {
if (!(aArguments[1] >>= arg1)) {
throw css::lang::IllegalArgumentException(
u"CURI::initialize: argument must be string" _ustr, *this , 1);
}
// just append the parameters and then split them again; seems simplest
arg0 = arg0 + arg1;
arg1.clear();
}
// split parameter
sal_Int32 idx = arg0.indexOf('#' );
if (idx < 0)
idx = arg0.lastIndexOf('/' );
if (idx < 0)
idx = arg0.lastIndexOf(':' );
if (idx < 0)
{
throw css::lang::IllegalArgumentException(
u"CURI::initialize: argument not splittable: no separator [#/:]" _ustr, *this , 0);
}
if (idx < arg0.getLength() - 1) {
arg1 = arg0.copy(idx+1);
arg0 = arg0.copy(0, idx+1);
}
//FIXME: what is legal?
if (arg0.isEmpty()) {
throw css::lang::IllegalArgumentException(
u"CURI::initialize: argument is not valid namespace" _ustr, *this , 0);
}
m_Namespace = arg0;
//FIXME: what is legal?
if ((false )) {
throw css::lang::IllegalArgumentException(
u"CURI::initialize: argument is not valid local name" _ustr, *this , 1);
}
m_LocalName = arg1;
}
// css::rdf::XNode:
OUString SAL_CALL CURI::getStringValue()
{
return m_Namespace + m_LocalName;
}
// css::rdf::XURI:
OUString SAL_CALL CURI::getNamespace()
{
return m_Namespace;
}
OUString SAL_CALL CURI::getLocalName()
{
return m_LocalName;
}
} // closing anonymous implementation namespace
extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface*
unoxml_CURI_get_implementation(
css::uno::XComponentContext* , css::uno::Sequence<css::uno::Any> const &)
{
return cppu::acquire(new CURI());
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
Messung V0.5 C=90 H=96 G=93
¤ Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.0.14Bemerkung:
(vorverarbeitet)
¤
*Bot Zugriff
2026-04-04