1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 24 #include "CNodes.hxx" 25 26 #include <cppuhelper/implbase3.hxx> 27 #include <com/sun/star/lang/XServiceInfo.hpp> 28 #include <com/sun/star/lang/XInitialization.hpp> 29 #include <com/sun/star/rdf/XBlankNode.hpp> 30 31 #include <com/sun/star/lang/IllegalArgumentException.hpp> 32 33 34 /// anonymous implementation namespace 35 namespace { 36 37 namespace css = ::com::sun::star; 38 39 class CBlankNode: 40 public ::cppu::WeakImplHelper3< 41 css::lang::XServiceInfo, 42 css::lang::XInitialization, 43 css::rdf::XBlankNode> 44 { 45 public: 46 explicit CBlankNode(css::uno::Reference< css::uno::XComponentContext > const & context); 47 virtual ~CBlankNode() {} 48 49 // ::com::sun::star::lang::XServiceInfo: 50 virtual ::rtl::OUString SAL_CALL getImplementationName() throw (css::uno::RuntimeException); 51 virtual ::sal_Bool SAL_CALL supportsService(const ::rtl::OUString & ServiceName) throw (css::uno::RuntimeException); 52 virtual css::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames() throw (css::uno::RuntimeException); 53 54 // ::com::sun::star::lang::XInitialization: 55 virtual void SAL_CALL initialize(const css::uno::Sequence< ::com::sun::star::uno::Any > & aArguments) throw (css::uno::RuntimeException, css::uno::Exception); 56 57 // ::com::sun::star::rdf::XNode: 58 virtual ::rtl::OUString SAL_CALL getStringValue() throw (css::uno::RuntimeException); 59 60 private: 61 CBlankNode(const CBlankNode &); // not defined 62 CBlankNode& operator=(const CBlankNode &); // not defined 63 64 css::uno::Reference< css::uno::XComponentContext > m_xContext; 65 66 ::rtl::OUString m_NodeID; 67 }; 68 69 CBlankNode::CBlankNode(css::uno::Reference< css::uno::XComponentContext > const & context) : 70 m_xContext(context), m_NodeID() 71 {} 72 73 // com.sun.star.uno.XServiceInfo: 74 ::rtl::OUString SAL_CALL CBlankNode::getImplementationName() throw (css::uno::RuntimeException) 75 { 76 return comp_CBlankNode::_getImplementationName(); 77 } 78 79 ::sal_Bool SAL_CALL CBlankNode::supportsService(::rtl::OUString const & serviceName) throw (css::uno::RuntimeException) 80 { 81 css::uno::Sequence< ::rtl::OUString > serviceNames = comp_CBlankNode::_getSupportedServiceNames(); 82 for (::sal_Int32 i = 0; i < serviceNames.getLength(); ++i) { 83 if (serviceNames[i] == serviceName) 84 return sal_True; 85 } 86 return sal_False; 87 } 88 89 css::uno::Sequence< ::rtl::OUString > SAL_CALL CBlankNode::getSupportedServiceNames() throw (css::uno::RuntimeException) 90 { 91 return comp_CBlankNode::_getSupportedServiceNames(); 92 } 93 94 // ::com::sun::star::lang::XInitialization: 95 void SAL_CALL CBlankNode::initialize(const css::uno::Sequence< ::com::sun::star::uno::Any > & aArguments) throw (css::uno::RuntimeException, css::uno::Exception) 96 { 97 if (aArguments.getLength() != 1) { 98 throw css::lang::IllegalArgumentException( 99 ::rtl::OUString::createFromAscii("CBlankNode::initialize: " 100 "must give exactly 1 argument"), *this, 1); 101 } 102 103 ::rtl::OUString arg; 104 if (!(aArguments[0] >>= arg)) { 105 throw css::lang::IllegalArgumentException( 106 ::rtl::OUString::createFromAscii("CBlankNode::initialize: " 107 "argument must be string"), *this, 0); 108 } 109 110 //FIXME: what is legal? 111 if (arg.getLength() > 0) { 112 m_NodeID = arg; 113 } else { 114 throw css::lang::IllegalArgumentException( 115 ::rtl::OUString::createFromAscii("CBlankNode::initialize: " 116 "argument is not valid blank node ID"), *this, 0); 117 } 118 } 119 120 // ::com::sun::star::rdf::XNode: 121 ::rtl::OUString SAL_CALL CBlankNode::getStringValue() throw (css::uno::RuntimeException) 122 { 123 return m_NodeID; 124 } 125 126 } // closing anonymous implementation namespace 127 128 129 130 // component helper namespace 131 namespace comp_CBlankNode { 132 133 ::rtl::OUString SAL_CALL _getImplementationName() { 134 return ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( 135 "CBlankNode")); 136 } 137 138 css::uno::Sequence< ::rtl::OUString > SAL_CALL _getSupportedServiceNames() 139 { 140 css::uno::Sequence< ::rtl::OUString > s(1); 141 s[0] = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( 142 "com.sun.star.rdf.BlankNode")); 143 return s; 144 } 145 146 css::uno::Reference< css::uno::XInterface > SAL_CALL _create( 147 const css::uno::Reference< css::uno::XComponentContext > & context) 148 SAL_THROW((css::uno::Exception)) 149 { 150 return static_cast< ::cppu::OWeakObject * >(new CBlankNode(context)); 151 } 152 153 } // closing component helper namespace 154 155