org.eclipse.persistence.jaxb.compiler.ElementDeclaration Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of eclipselink Show documentation
Show all versions of eclipselink Show documentation
EclipseLink build based upon Git transaction f2b9fc5
/*
* 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;
}
}