blob: bd90fa28a427a03b137a25288fb7d5ce3fd9829c [file] [log] [blame]
/*
* 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 November 17/2009 - 2.0 - Initial implementation
package org.eclipse.persistence.jaxb;
import java.lang.annotation.Annotation;
import java.lang.reflect.Type;
import javax.xml.namespace.QName;
import org.eclipse.persistence.internal.core.helper.CoreClassConstants;
import org.eclipse.persistence.internal.oxm.Constants;
import org.eclipse.persistence.internal.oxm.mappings.Descriptor;
import org.w3c.dom.Element;
/**
* <p><b>Purpose</b>: Provides a wrapper for a java type to be used when creating a JAXB context. This allows for
* additional information (such as parameter level annotations and element tag names) to be included in addition
* to the type itself.
*
* @author mmacivor
*/
public class TypeMappingInfo {
private ElementScope elementScope = ElementScope.Local;
private QName xmlTagName;
private Type type;
private Annotation[] annotations;
private Element xmlElement;
private boolean nillable;
private Descriptor xmlDescriptor;
private QName schemaType;
/**
* INTERNAL:
* Indicates the schema type to be used during marshal
*/
public QName getSchemaType() {
return schemaType;
}
/**
* Indicates if a global element should be generated for this type.
*/
public ElementScope getElementScope() {
return this.elementScope;
}
public void setElementScope(ElementScope scope) {
this.elementScope = scope;
}
/**
* 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;
}
/**
* Root element name associated with this type;
*/
public QName getXmlTagName() {
return this.xmlTagName;
}
public void setXmlTagName(QName tagName) {
this.xmlTagName = tagName;
}
/**
* The type to be bound.
*/
public Type getType() {
return this.type;
}
public void setType(Type t) {
this.type = t;
if(type instanceof Class){
if (type == CoreClassConstants.ABYTE || type == CoreClassConstants.APBYTE ||
((Class)type).getCanonicalName().equals("jakarta.activation.DataHandler")) {
schemaType = Constants.BASE_64_BINARY_QNAME;
}
}
}
/**
* Representing parameter level annotations that should be applied to this
* type.
*/
public Annotation[] getAnnotations() {
return this.annotations;
}
public void setAnnotations(Annotation[] annotations) {
this.annotations = annotations;
}
public enum ElementScope {
Global,
Local;
}
/**
* INTERNAL
* Returns the Descriptor associated with this TypeMappingInfo. This is
* set when the metadata is initialized.
*/
public Descriptor getXmlDescriptor() {
return xmlDescriptor;
}
/**
* INTERNAL
* Sets the Descriptor associated with this TypeMappingInfo. This is
* set when the metadata is initialized.
*/
public void setXmlDescriptor(Descriptor xmlDescriptor) {
this.xmlDescriptor = xmlDescriptor;
}
/**
* Returns the xml-element as a <code>Element</code> which represents the
* parameter level annotations that should be applied to this type.
*
* @return <code>Element</code> which represents the parameter level
* annotations that should be applied to this type if set, otherwise
* null
*/
public Element getXmlElement() {
return xmlElement;
}
/**
* Set the xml-element <code>Element</code> representing parameter level
* annotations that should be applied to this type. If
* <code>xmlElement</code> is non-null, any annotations set on this instance
* will be completely ignored.
*
* The following XML representations of parameter level annotations will be
* supported:
* <ul>
* <li>xml-element</li> <li>xml-attachment-ref</li> <li>xml-list</li> <li>
* xml-mime-type</li> <li>xml-java-type-adapter</li>
* </ul>
*
* @param xmlElement
* <code>Element</code> created from an xml-element
*
* @see org.w3c.dom.Element
* @see org.eclipse.persistence.jaxb.xmlmodel.XmlElement
*/
public void setXmlElement(Element xmlElement) {
this.xmlElement = xmlElement;
}
}