/// <summary> /// The internals for setProperty() and related calls, used after the node is /// found or created. /// </summary> /// <param name="node">the newly created node</param> /// <param name="value">the node value, can be <code>null</code></param> /// <param name="newOptions">options for the new node, must not be <code>null</code>. /// </param> /// <param name="deleteExisting">flag if the existing value is to be overwritten</param> /// <exception cref="iText.Kernel.XMP.XMPException">thrown if options and value do not correspond</exception> internal virtual void SetNode(XMPNode node, Object value, PropertyOptions newOptions , bool deleteExisting) { if (deleteExisting) { node.Clear(); } // its checked by setOptions(), if the merged result is a valid options set node.GetOptions().MergeWith(newOptions); if (!node.GetOptions().IsCompositeProperty()) { // This is setting the value of a leaf node. XMPNodeUtils.SetNodeValue(node, value); } else { if (value != null && value.ToString().Length > 0) { throw new XMPException("Composite nodes can't have values", XMPError.BADXPATH); } node.RemoveChildren(); } }