| /* |
| * Copyright (c) 1998, 2020 Oracle and/or its affiliates. All rights reserved. |
| * |
| * This program and the accompanying materials are made available under the |
| * terms of the Eclipse Public License v. 2.0 which is available at |
| * http://www.eclipse.org/legal/epl-2.0, |
| * or the Eclipse Distribution License v. 1.0 which is available at |
| * http://www.eclipse.org/org/documents/edl-v10.php. |
| * |
| * SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause |
| */ |
| |
| // Contributors: |
| // Oracle - initial API and implementation from Oracle TopLink |
| package org.eclipse.persistence.sdo; |
| |
| import commonj.sdo.DataObject; |
| import commonj.sdo.helper.XMLDocument; |
| import org.eclipse.persistence.oxm.NamespaceResolver; |
| import org.eclipse.persistence.oxm.XMLRoot; |
| |
| /** |
| * <p><b>Purpose</b>: Represents an XML Document containing a tree of DataObjects. |
| * |
| * <p>An example XMLDocument fragment is:<br> |
| * {@literal <?xml version="1.0"?>}<br> |
| * {@literal <purchaseOrder orderDate="1999-10-20">} |
| * |
| * <p>created from this XML Schema fragment:<br> |
| * {@literal <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">}<br> |
| * {@literal <xsd:element name="purchaseOrder" type="PurchaseOrderType"/>}<br> |
| * {@literal <xsd:complexType name="PurchaseOrderType">} |
| * |
| * <p>Upon loading this XMLDocument:<br> |
| * DataObject is an instance of Type PurchaseOrderType.<br> |
| * RootElementURI is null because the XSD has no targetNamespace URI.<br> |
| * RootElementName is purchaseOrder.<br> |
| * Encoding is null because the document did not specify an encoding.<br> |
| * XMLDeclaration is true because the document contained an XML declaration.<br> |
| * XMLVersion is 1.0<br> |
| * SchemaLocation and noNamespaceSchemaLocation are null because they are |
| * not specified in the document. |
| * |
| * <p>When saving the root element, if the type of the root dataObject is not the |
| * type of global element specified by rootElementURI and rootElementName, |
| * or if a global element does not exist for rootElementURI and rootElementName, |
| * then an xsi:type declaration is written to record the root DataObject's Type. |
| * |
| * <p>When loading the root element and an xsi:type declaration is found |
| * it is used as the type of the root DataObject. In this case, |
| * if validation is not being performed, it is not an error if the |
| * rootElementName is not a global element. |
| */ |
| public class SDOXMLDocument extends XMLRoot implements XMLDocument { |
| //default values defined in the spec |
| public final static String DEFAULT_XML_ENCODING = "UTF-8"; |
| public final static String DEFAULT_XML_VERSION = "1.0"; |
| private boolean xmlDeclaration; |
| private NamespaceResolver namespaceResolver; |
| |
| public SDOXMLDocument() { |
| xmlDeclaration = true; |
| namespaceResolver = new NamespaceResolver(); |
| } |
| |
| /** |
| * Return the root DataObject for the XMLDocument. |
| * @return root DataObject for the XMLDocument. |
| */ |
| @Override |
| public DataObject getRootObject() { |
| return (DataObject)rootObject; |
| } |
| |
| /** |
| * Return the targetNamespace URI for the root element. |
| * If there is no targetNamespace URI, the value is null. |
| * The root element is a global element of the XML Schema |
| * with a type compatible to the DataObject. |
| * @return the targetNamespace URI for the root element. |
| */ |
| @Override |
| public String getRootElementURI() { |
| return super.getNamespaceURI(); |
| } |
| |
| /** |
| * Return the name of the root element. |
| * The root element is a global element of the XML Schema |
| * with a type compatible to the DataObject. |
| * @return the name of the root element. |
| */ |
| @Override |
| public String getRootElementName() { |
| return super.getLocalName(); |
| } |
| |
| /** |
| * Return the XML encoding of the document, or null if not specified. |
| * The default value is "UTF-8". |
| * Specification of other values is implementation-dependent. |
| * @return the XML encoding of the document, or null if not specified. |
| */ |
| @Override |
| public String getEncoding() { |
| return encoding; |
| } |
| |
| /** |
| * Set the XML encoding of the document, or null if not specified. |
| * @param encoding |
| */ |
| @Override |
| public void setEncoding(String encoding) { |
| this.encoding = encoding; |
| } |
| |
| /** |
| * Return the XML declaration of the document. If true, |
| * XMLHelper save() will produce a declaration of the form: |
| * {@literal <?xml version="1.0" encoding="UTF-8"?>} |
| * Encoding will be suppressed if getEncoding() is null. |
| * The default value is true. |
| * @return the XML declaration of the document. |
| */ |
| @Override |
| public boolean isXMLDeclaration() { |
| return xmlDeclaration; |
| } |
| |
| /** |
| * Set the XML declaration version of the document. |
| * @param xmlDeclaration the XML declaration version of the document. |
| */ |
| @Override |
| public void setXMLDeclaration(boolean xmlDeclaration) { |
| this.xmlDeclaration = xmlDeclaration; |
| } |
| |
| /** |
| * Return the XML version of the document, or null if not specified. |
| * The default value is "1.0". |
| * Specification of other values is implementation-dependent. |
| * @return the XML version of the document, or null if not specified. |
| */ |
| @Override |
| public String getXMLVersion() { |
| return xmlVersion; |
| } |
| |
| /** |
| * Set the XML version of the document, or null if not specified. |
| * @param xmlVersion the XML version of the document, or null if not specified. |
| */ |
| @Override |
| public void setXMLVersion(String xmlVersion) { |
| this.xmlVersion = xmlVersion; |
| } |
| |
| /** |
| * Return the value of the schemaLocation declaration |
| * for the http://www.w3.org/2001/XMLSchema-instance namespace in the |
| * root element, or null if not present. |
| * @return the value of the schemaLocation declaration, |
| * or null if not present. |
| */ |
| @Override |
| public String getSchemaLocation() { |
| return schemaLocation; |
| } |
| |
| /** |
| * Sets the value of the schemaLocation declaration |
| * for the http://www.w3.org/2001/XMLSchema-instance namespace in the |
| * root element, or null if it should not be present. |
| * @param schemaLocation the value of the schemaLocation declaration, or null. |
| */ |
| @Override |
| public void setSchemaLocation(String schemaLocation) { |
| this.schemaLocation = schemaLocation; |
| |
| } |
| |
| /** |
| * Return the value of the noNamespaceSchemaLocation declaration |
| * for the http://www.w3.org/2001/XMLSchema-instance namespace in the |
| * root element, or null if not present. |
| * @return the value of the noNamespaceSchemaLocation declaration, |
| * or null if not present. |
| */ |
| @Override |
| public String getNoNamespaceSchemaLocation() { |
| return noNamespaceSchemaLocation; |
| } |
| |
| /** |
| * Sets the value of the noNamespaceSchemaLocation declaration |
| * for the http://www.w3.org/2001/XMLSchema-instance namespace in the |
| * root element, or null if it should not be present. |
| * @param schemaLocation the value of the noNamespaceSchemaLocation declaration, or null. |
| */ |
| @Override |
| public void setNoNamespaceSchemaLocation(String schemaLocation) { |
| noNamespaceSchemaLocation = schemaLocation; |
| } |
| |
| /** |
| * INTERNAL: |
| * Set the root data object corresponding to the document |
| * @param rootObject the root DataObject corresponding to the document |
| */ |
| public void setRootObject(DataObject rootObject) { |
| this.rootObject = rootObject; |
| } |
| |
| /** |
| * INTERNAL: |
| * Set the root element name of the document |
| * @param rootElementName the root element name of the document |
| */ |
| public void setRootElementName(String rootElementName) { |
| super.setLocalName(rootElementName); |
| } |
| |
| /** |
| * INTERNAL: |
| * Set the root element uri of the document |
| * @param rootElementUri the root element uri of the document |
| */ |
| public void setRootElementURI(String rootElementUri) { |
| super.setNamespaceURI(rootElementUri); |
| } |
| |
| /** |
| * INTERNAL: |
| * Set the namespaceresolver of the document |
| * @param namespaceResolver the namespaceResolver to be used with the document |
| */ |
| public void setNamespaceResolver(NamespaceResolver namespaceResolver) { |
| this.namespaceResolver = namespaceResolver; |
| } |
| |
| /** |
| * INTERNAL: |
| * Return the namespaceResolver to be used with this document. |
| * @return the value of the namespaceResolver being used with this document |
| */ |
| public NamespaceResolver getNamespaceResolver() { |
| return namespaceResolver; |
| } |
| } |