1 /************************************************************************* 2 * 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * Copyright 2000, 2010 Oracle and/or its affiliates. 6 * 7 * OpenOffice.org - a multi-platform office productivity suite 8 * 9 * This file is part of OpenOffice.org. 10 * 11 * OpenOffice.org is free software: you can redistribute it and/or modify 12 * it under the terms of the GNU Lesser General Public License version 3 13 * only, as published by the Free Software Foundation. 14 * 15 * OpenOffice.org is distributed in the hope that it will be useful, 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 * GNU Lesser General Public License version 3 for more details 19 * (a copy is included in the LICENSE file that accompanied this code). 20 * 21 * You should have received a copy of the GNU Lesser General Public License 22 * version 3 along with OpenOffice.org. If not, see 23 * <http://www.openoffice.org/license.html> 24 * for a copy of the LGPLv3 License. 25 * 26 ************************************************************************/ 27 28 #include "precompiled_configmgr.hxx" 29 #include "sal/config.h" 30 31 #include "com/sun/star/beans/Optional.hpp" 32 #include "com/sun/star/uno/Any.hxx" 33 #include "osl/diagnose.h" 34 #include "rtl/ref.hxx" 35 #include "rtl/ustring.h" 36 #include "rtl/ustring.hxx" 37 38 #include "components.hxx" 39 #include "node.hxx" 40 #include "propertynode.hxx" 41 #include "type.hxx" 42 43 namespace configmgr { 44 45 namespace { 46 47 namespace css = com::sun::star; 48 49 } 50 51 PropertyNode::PropertyNode( 52 int layer, Type staticType, bool nillable, css::uno::Any const & value, 53 bool extension): 54 Node(layer), staticType_(staticType), nillable_(nillable), value_(value), 55 extension_(extension) 56 {} 57 58 rtl::Reference< Node > PropertyNode::clone(bool) const { 59 return new PropertyNode(*this); 60 } 61 62 Type PropertyNode::getStaticType() const { 63 return staticType_; 64 } 65 66 bool PropertyNode::isNillable() const { 67 return nillable_; 68 } 69 70 css::uno::Any PropertyNode::getValue(Components & components) { 71 if (externalDescriptor_.getLength() != 0) { 72 css::beans::Optional< css::uno::Any > val( 73 components.getExternalValue(externalDescriptor_)); 74 if (val.IsPresent) { 75 value_ = val.Value; //TODO: check value type 76 } 77 externalDescriptor_ = rtl::OUString(); // must not throw 78 } 79 return value_; 80 } 81 82 void PropertyNode::setValue(int layer, css::uno::Any const & value) { 83 setLayer(layer); 84 value_ = value; 85 externalDescriptor_ = rtl::OUString(); 86 } 87 88 void PropertyNode::setExternal(int layer, rtl::OUString const & descriptor) { 89 OSL_ASSERT(descriptor.getLength() != 0); 90 setLayer(layer); 91 externalDescriptor_ = descriptor; 92 } 93 94 bool PropertyNode::isExtension() const { 95 return extension_; 96 } 97 98 PropertyNode::PropertyNode(PropertyNode const & other): 99 Node(other), staticType_(other.staticType_), nillable_(other.nillable_), 100 value_(other.value_), externalDescriptor_(other.externalDescriptor_), 101 extension_(other.extension_) 102 {} 103 104 PropertyNode::~PropertyNode() {} 105 106 Node::Kind PropertyNode::kind() const { 107 return KIND_PROPERTY; 108 } 109 110 } 111