blob: 5a8dc1809b45773ae46cfc3de8955888bc44c093 [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:
// Oracle - initial API and implementation from Oracle TopLink
package org.eclipse.persistence.jaxb.compiler;
import java.util.ArrayList;
import java.util.List;
import javax.xml.namespace.QName;
import org.eclipse.persistence.jaxb.javamodel.Helper;
import org.eclipse.persistence.jaxb.javamodel.JavaClass;
/**
* INTERNAL:
* <p><b>Purpose:</b>A specialized TypeInfo that stores additional information for a
* Java 5 Enumeration type.
* <p><b>Responsibilities:</b><ul>
* <li>Hold onto the restriction base type for schema generation</li>
* <li>Hold onto a map of Object Enum values to String values for Mapping generation</li>
* </ul>
*
* @see org.eclipse.persistence.jaxb.compiler.TypeInfo
* @see org.eclipse.persistence.jaxb.compiler.AnnotationsProcessor
* @author mmacivor
*
*/
public class EnumTypeInfo extends TypeInfo {
private String m_className;
private QName m_restrictionBase;
private List<String> m_fieldNames;
private List<Object> m_xmlEnumValues;
public EnumTypeInfo(Helper helper, JavaClass javaClass) {
super(helper, javaClass);
m_fieldNames = new ArrayList<>();
m_xmlEnumValues = new ArrayList<>();
}
@Override
public boolean isEnumerationType() {
return true;
}
public String getClassName() {
return m_className;
}
public void setClassName(String className) {
m_className = className;
}
public QName getRestrictionBase() {
return m_restrictionBase;
}
public void setRestrictionBase(QName restrictionBase) {
m_restrictionBase = restrictionBase;
}
/**
* Add a Java field name to XmlEnumValue pair.
*
*/
public void addJavaFieldToXmlEnumValuePair(String fieldName, Object xmlEnumValue) {
m_fieldNames.add(fieldName);
m_xmlEnumValues.add(xmlEnumValue);
}
/**
* Add a Java field name to XmlEnumValue pair. If an entry exists at the specified
* with the same fieldName, its value will be overridden. A value of true for
* 'override' will typically be used when performing overrides via XML metadata
* in XmlProcessor.
*
*/
public void addJavaFieldToXmlEnumValuePair(boolean override, String fieldName, Object xmlEnumValue) {
if (!override) {
addJavaFieldToXmlEnumValuePair(fieldName, xmlEnumValue);
} else {
int idx = getIndexForJavaField(fieldName);
if (idx == -1) {
// the entry doesn't exist, so add a new one
addJavaFieldToXmlEnumValuePair(fieldName, xmlEnumValue);
} else {
// entry already exists, so replace the existing value
m_xmlEnumValues.remove(idx);
m_xmlEnumValues.add(idx, xmlEnumValue);
}
}
}
public List<String> getFieldNames() {
return m_fieldNames;
}
public List<Object> getXmlEnumValues() {
return m_xmlEnumValues;
}
/**
* Return the index in the fieldNames List for a given Java field
* name, or -1 if it doesn't exist.
*
*/
private int getIndexForJavaField(String fieldName) {
for (int i=0; i<m_fieldNames.size(); i++) {
if (m_fieldNames.get(i).equals(fieldName)) {
return i;
}
}
return -1;
}
}