XSSimpleType simpleType = pType.getSimpleType();
XSEnumeration[] enumerations = simpleType.getEnumerations();
List enums = new ArrayList();
for (int i = 0; i < enumerations.length; i++) {
XSEnumeration en = enumerations[i];
String name = null;
String value = en.getValue();
if (en instanceof JAXBEnumeration) {
JAXBEnumeration jaxbEnumeration = (JAXBEnumeration) en;
JAXBTypesafeEnumMember member = jaxbEnumeration.getJAXBTypesafeEnumMember();
if (member != null) {
name = member.getName();
}
}
if (name == null) {
if (simpleType instanceof JAXBSimpleType) {
JAXBSimpleType jaxbSimpleType = (JAXBSimpleType) simpleType;
JAXBTypesafeEnumClass jaxbTypesafeEnumClass = jaxbSimpleType.getJAXBTypesafeEnumClass();
if (jaxbTypesafeEnumClass != null) {
for (Iterator iter = jaxbTypesafeEnumClass.getTypesafeEnumMember(); iter.hasNext(); ) {
JAXBTypesafeEnumMember member = (JAXBTypesafeEnumMember) iter.next();
if (value.equals(member.getValue())) {
name = member.getName();
break;
}
}
}
}
if (name == null) {
if ("".equals(value)) {
name = "EMPTY";
} else {
StringBuffer sb = new StringBuffer();
char c = value.charAt(0);
int offset;
if (Character.isJavaIdentifierStart(c)) {
sb.append(Character.toUpperCase(c));
offset = 1;
} else {
sb.append("V");
offset = 0;
}
for (int j = offset; j < value.length(); j++) {
c = value.charAt(j);
if (Character.isJavaIdentifierPart(c)) {
sb.append(Character.toUpperCase(c));
} else {
sb.append('_');
}
}
name = sb.toString();
}
}
}
for (int j = 0; j < enums.size(); j++) {
EnumValue ev = (EnumValue) enums.get(j);
if (name.equals(ev.getName())) {
throw new LocSAXException("An enumeration value named " + name + " already exists.", en.getLocator());
}
if (value.equals(ev.getValue())) {
throw new LocSAXException("An enumeration value " + value + " already exists.", en.getLocator());
}
}
enums.add(new EnumValue(value, name));
}
values = (EnumValue[]) enums.toArray(new EnumValue[enums.size()]);