All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.eclipse.persistence.jaxb.compiler.ElementDeclaration Maven / Gradle / Ivy

There is a newer version: 4.0.2
Show newest version
/*
 * Copyright (c) 1998, 2021 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:
// mmacivor - June 05/2008 - 1.0 - Initial implementation
package org.eclipse.persistence.jaxb.compiler;

import jakarta.xml.bind.annotation.XmlElementDecl;
import javax.xml.namespace.QName;

import org.eclipse.persistence.jaxb.TypeMappingInfo;
import org.eclipse.persistence.jaxb.javamodel.JavaClass;

import java.util.List;
import java.util.ArrayList;

/**
 * 

An ElementDeclaration object is used to represent the information that is * associated with a global element in XML.

* *

ElementDeclarations will be created for classes with an XMLRootElement annotation, * for TypeMappingInfo objects which have an xml tag name specified.

*/ public class ElementDeclaration { private QName elementName; private QName substitutionHead; private String javaTypeName; private JavaClass javaType; private JavaClass adaptedJavaType; private String adaptedJavaTypeName; private List substitutableElements; private boolean isXmlRootElement = false; private boolean isList = false; private Class javaTypeAdapterClass; private Class scopeClass; private String defaultValue; private TypeMappingInfo typeMappingInfo; private boolean xmlAttachmentRef; private String xmlMimeType; private boolean nillable; /** * Create a new ElementDeclaration. By default the scope of this ElementDeclaration * will be XmlElementDecl.GLOBAL * * @param name The QName of this element * @param javaType The JavaClass of this element * @param javaTypeName The String name of the javaType * @param isList A boolean representing if this corresponds to an xsd:list */ public ElementDeclaration(QName name, JavaClass javaType, String javaTypeName, boolean isList) { this.elementName = name; this.javaTypeName = javaTypeName; this.javaType = javaType; this.substitutableElements = new ArrayList(); this.isList = isList; this.scopeClass = XmlElementDecl.GLOBAL.class; } /** * Create a new ElementDeclaration and set the scope. * @param name The QName of this element * @param javaType The JavaClass of this element * @param javaTypeName The String name of the javaType * @param isList A boolean representing if this corresponds to an xsd:list * @param scopeClass The class representing the scope of this element */ public ElementDeclaration(QName name, JavaClass javaType, String javaTypeName, boolean isList, Class scopeClass) { this(name, javaType, javaTypeName, isList); this.scopeClass = scopeClass; } /** * Get the QName representing this element * @return the QName associated with this element. */ public QName getElementName() { return elementName; } /** * Get the name of the java type associated with this global element. * This may be set through the constructor or will be set when setJavaType(JavaClass) is called. * @return the name of the java type that corresponds to this element */ public String getJavaTypeName() { return javaTypeName; } /** * The list of elements which can be substituted for this element (ie: has this element in their substitutionGroup) * @return the list of element declarations which can be substituted for this element */ public List getSubstitutableElements() { return substitutableElements; } /** * Add an element to the list of elements which can be substituted for this element (ie: has this element in their substitutionGroup) */ public void addSubstitutableElement(ElementDeclaration element) { if (element != this && element != null) { QName elementName = element.getElementName(); for (ElementDeclaration substitutableElement : substitutableElements) { if (substitutableElement.getElementName().equals(elementName)) { return; } } this.substitutableElements.add(element); } } /** * If this element has a substitutionGroup this will be set. * @param rootElement the QName value of the substitutionGroup */ public void setSubstitutionHead(QName rootElement) { this.substitutionHead = rootElement; } /** * If this element has a substitutionGroup this will be set. * @return the value of the substitutionGroup */ public QName getSubstitutionHead() { return substitutionHead; } /** * Track if this element had an @XmlRootElement annotation * @return if the element has an @XmlRootElement */ public boolean isXmlRootElement() { return this.isXmlRootElement; } /** * Mark if this element had an @XmlRootElement annotation * @param isXmlRoot if the element has an @XmlRootElement */ public void setIsXmlRootElement(boolean isXmlRoot) { this.isXmlRootElement = isXmlRoot; } /** * Return if the global element will be marked as nillable */ public boolean isNillable() { return nillable; } /** * Set if the global element should be marked as nillable */ public void setNillable(boolean nillable) { this.nillable = nillable; } /** * The javaType associated with this element. Maybe set by the constructor * or by setJavaType. * @return the javaType associated with this element. */ public JavaClass getJavaType() { return this.javaType; } /** * Set the javaType associated with this element. * This will also set the java type name associated with this element to type.getQualifiedName() * @param type the javaType associated with this element. */ public void setJavaType(JavaClass type) { this.javaType = type; this.javaTypeName = type.getQualifiedName(); } /** * Return if this element is a list * @return isList true if the element is a list */ public boolean isList() { return isList; } /** * Mark if this element is a list * @param isList true if the element is a list */ public void setList(boolean isList) { this.isList = isList; } /** * Get the java type adapter class associated with the element * @return the java type adapater class associated with this element. May return null. */ public Class getJavaTypeAdapterClass() { return javaTypeAdapterClass; } /** * Set the java type adapter class associated with this element if applicable. * @param javaTypeAdapterClass Class of the java type adapter associated with this element. */ public void setJavaTypeAdapterClass(Class javaTypeAdapterClass) { this.javaTypeAdapterClass = javaTypeAdapterClass; } /** * Get the adapted java type. * Only set when an XmlJavaTypeAdapter is present. * @return the JavaClass of the adapted java type. May return null. */ public JavaClass getAdaptedJavaType() { return adaptedJavaType; } /** * Set the adapted java type if there is an XmlJavaTypeAdapter associated with this element * This will also set the adaptedJavaTypeName (getAdaptedJavaTypeName) * @param adaptedJavaType set the JavaClass representing the adapted Java type */ public void setAdaptedJavaType(JavaClass adaptedJavaType) { this.adaptedJavaType = adaptedJavaType; this.adaptedJavaTypeName = adaptedJavaType.getQualifiedName(); } /** * Get the adapted java type name. * Only set when an XmlJavaTypeAdapter is present. * Will be set to adaptedJavaType.getQualifiedName when setAdaptedJavaType is called * @return the name of the class of the adapted java type. May return null. */ public String getAdaptedJavaTypeName() { return adaptedJavaTypeName; } /** * Get the scope class associated with this element. * By default the scope of this ElementDeclaration * will be XmlElementDecl.GLOBAL * @return the scope class associated with this element */ public Class getScopeClass() { return scopeClass; } /** * Set the scope class associated with this element. * Default setting is XmlElementDecl.GLOBAL * @param scopeClass associated with this element. */ public void setScopeClass(Class scopeClass) { this.scopeClass = scopeClass; } /** * This will be set if XmlElementDecl has a defaultValue specified * @return the default value associated with this element. May return null. */ public String getDefaultValue() { return this.defaultValue; } /** * Set the default value associated with this element. * @param value the default value that corresponds to this element. */ public void setDefaultValue(String value) { this.defaultValue = value; } /** * Get the TypeMappingInfo object if this ElementDeclaration was created from a TypeMappingInfo * @return the corresponding TypeMappingInfo. May return null. */ public TypeMappingInfo getTypeMappingInfo() { return this.typeMappingInfo; } /** * Set the TypeMappingInfo object if this ElementDeclaration was created from a TypeMappingInfo * @param info The TypeMappingInfo object used to create this ElementDeclaration */ public void setTypeMappingInfo(TypeMappingInfo info) { this.typeMappingInfo = info; } /** * Return the mimeType specified on this element. * @return the mimeType specified on this element. May return null. */ public String getXmlMimeType() { return xmlMimeType; } /** * Set of this element has an XmlMimeType annotation * @param xmlMimeType set the name of the mime type if specified for this element */ public void setXmlMimeType(String xmlMimeType) { this.xmlMimeType = xmlMimeType; } /** * Return if this element is associated with an XmlAttachmentRef annotation * @return if this element is associated with an XmlAttachmentRef annotation */ public boolean isXmlAttachmentRef() { return xmlAttachmentRef; } /** * Set if there is an XmlAttachmentRef annotations associated with this element. * @param xmlAttachmentRef true if there is an XmlAttachmentRef annotation */ public void setXmlAttachmentRef(boolean xmlAttachmentRef) { this.xmlAttachmentRef = xmlAttachmentRef; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy