}\r
}\r
\r
- protected Map<String,SchemaObject> elementName = new HashMap<>();\r
- protected Map<String,SchemaObject> complexTypeName = new HashMap<>();\r
- protected Map<String,SchemaObject> simpleTypeName = new HashMap<>();\r
- protected Map<String,SchemaObject> modelGroupName = new HashMap<>();\r
- protected Map<Element,SchemaObject> elements = new HashMap<>();\r
- protected Map<ComplexType,SchemaObject> complexTypes = new HashMap<>();\r
- protected Map<SimpleType,SchemaObject> simpleTypes = new HashMap<>();\r
- protected Map<NamedGroup,SchemaObject> modelGroups = new HashMap<>();\r
- \r
- \r
- protected SchemaObject getWithName(SchemaObject referrer, String name) {\r
- SchemaObject obj = elementName.get(name);\r
+ private Map<String,SchemaObject> elementName = new HashMap<>();\r
+ private Map<String,SchemaObject> complexTypeName = new HashMap<>();\r
+ private Map<String,SchemaObject> simpleTypeName = new HashMap<>();\r
+ private Map<String,SchemaObject> modelGroupName = new HashMap<>();\r
+ private Map<Element,SchemaObject> elements = new HashMap<>();\r
+ private Map<ComplexType,SchemaObject> complexTypes = new HashMap<>();\r
+ private Map<SimpleType,SchemaObject> simpleTypes = new HashMap<>();\r
+ private Map<NamedGroup,SchemaObject> modelGroups = new HashMap<>();\r
+ \r
+ private SchemaObject _getWithName(QName name) {\r
+ SchemaObject obj = elementName.get(name.getLocalPart());\r
if (obj == null)\r
- obj = complexTypeName.get(name);\r
+ obj = complexTypeName.get(name.getLocalPart());\r
if (obj == null)\r
- obj = simpleTypeName.get(name);\r
- if (obj == null) {\r
- throw new RuntimeException("Cannot locate referred type " + name + " when handling " + referrer.getName());\r
- }\r
+ obj = simpleTypeName.get(name.getLocalPart());\r
return obj;\r
}\r
\r
- protected SchemaObject getWithName(String name) {\r
- SchemaObject obj = elementName.get(name);\r
- if (obj == null)\r
- obj = complexTypeName.get(name);\r
- if (obj == null)\r
- obj = simpleTypeName.get(name);\r
- if (obj == null) {\r
- throw new RuntimeException("Cannot locate referred type " + name);\r
+ protected SchemaObject getWithName(QName name) {\r
+ SchemaObject obj = _getWithName(name);\r
+ if (obj != null)\r
+ return obj;\r
+ if (name.getNamespaceURI() != null) {\r
+ for (SchemaConverter sc : converter.getConverter(name.getNamespaceURI())) {\r
+ if (sc.base != null) {\r
+ obj = sc.base._getWithName(name);\r
+ if (obj != null) {\r
+ return obj;\r
+ }\r
+ }\r
+ } \r
}\r
- return obj;\r
+ return null;\r
+ }\r
+ \r
+ private NamedAttributeGroup _getAttributeGroup(QName name) {\r
+ for (OpenAttrs attrs : schema.getSimpleTypeOrComplexTypeOrGroup()) {\r
+ if (attrs instanceof NamedAttributeGroup) {\r
+ NamedAttributeGroup group = (NamedAttributeGroup)attrs;\r
+ if (group.getName().equals(name.getLocalPart()))\r
+ return group;\r
+ }\r
+ }\r
+ return null;\r
+ }\r
+\r
+ public NamedAttributeGroup getAttributeGroup(QName name) {\r
+ NamedAttributeGroup group = _getAttributeGroup(name);\r
+ if (group != null)\r
+ return group;\r
+ if (name.getNamespaceURI() != null) {\r
+ for (SchemaConverter sc : converter.getConverter(name.getNamespaceURI())) {\r
+ if (sc.base != null) {\r
+ group = sc.base._getAttributeGroup(name);\r
+ if (group != null) {\r
+ return group;\r
+ }\r
+ }\r
+ } \r
+ }\r
+ return null;\r
+ }\r
+ \r
+ private SchemaObject _getElement(QName name) {\r
+ return elementName.get(name.getLocalPart());\r
+ }\r
+ \r
+ protected SchemaObject getElement(QName name) {\r
+ SchemaObject obj = _getElement(name);\r
+ if (obj != null)\r
+ return obj;\r
+ if (name.getNamespaceURI() != null) {\r
+ for (SchemaConverter sc : converter.getConverter(name.getNamespaceURI())) {\r
+ if (sc.base != null) {\r
+ obj = sc.base._getElement(name);\r
+ if (obj != null) {\r
+ return obj;\r
+ }\r
+ }\r
+ } \r
+ }\r
+ return null;\r
+ }\r
+ \r
+ protected SchemaObject getElement(Element element) {\r
+ return elements.get(element);\r
+ }\r
+ \r
+ \r
+ private SchemaObject _getComplexType(QName name) {\r
+ return complexTypeName.get(name.getLocalPart());\r
+ }\r
+ \r
+ protected SchemaObject getComplexType(QName name) {\r
+ SchemaObject obj = _getComplexType(name);\r
+ if (obj != null)\r
+ return obj;\r
+ if (name.getNamespaceURI() != null) {\r
+ for (SchemaConverter sc : converter.getConverter(name.getNamespaceURI())) {\r
+ if (sc.base != null) {\r
+ obj = sc.base._getComplexType(name);\r
+ if (obj != null) {\r
+ return obj;\r
+ }\r
+ }\r
+ } \r
+ }\r
+ return null;\r
+ }\r
+ \r
+ protected SchemaObject getComplexType(ComplexType complexType) {\r
+ return complexTypes.get(complexType);\r
+ }\r
+ \r
+ private SchemaObject _getSimpleType(QName name) {\r
+ return simpleTypeName.get(name.getLocalPart());\r
+ }\r
+ \r
+ protected SchemaObject getSimpleType(QName name) {\r
+ SchemaObject obj = _getSimpleType(name);\r
+ if (obj != null)\r
+ return obj;\r
+ if (name.getNamespaceURI() != null) {\r
+ for (SchemaConverter sc : converter.getConverter(name.getNamespaceURI())) {\r
+ if (sc.base != null) {\r
+ obj = sc.base._getSimpleType(name);\r
+ if (obj != null) {\r
+ return obj;\r
+ }\r
+ }\r
+ } \r
+ }\r
+ return null;\r
+ }\r
+ \r
+ protected SchemaObject getSimpleType(SimpleType simpleType) {\r
+ return simpleTypes.get(simpleType);\r
}\r
\r
protected SchemaObject getWithObj(SchemaObject referrer, OpenAttrs attrs) {\r
+ // FIXME : this method cannot handle references to other schemas.\r
SchemaObject obj = null;\r
if (attrs instanceof Element)\r
obj = elements.get(attrs);\r
return null;\r
}\r
\r
-\r
- \r
- \r
- \r
- \r
- \r
- \r
private void handleAttributes(SchemaObject complexType, List<Annotated> attributeOrAttributeGroup) {\r
//name = getComplexTypePrefix()+complexType.getName()\r
\r
}\r
}\r
} else {\r
+ if (choices.size() == 1 && sequences.size() == 0 && alls.size() == 0 && groups.size() == 0) {\r
+ // special case: handle lone choice inside sequence with maxOccurs > 1 \r
+ SchemaElement choice = choices.get(0);\r
+ // move multiplicity restrictions to choice\r
+ if (indicator.getRestriction().max == -1 || (choice.getRestriction().max > 0 && indicator.getRestriction().max > choice.getRestriction().max))\r
+ choice.getRestriction().max = indicator.getRestriction().max;\r
+ if (indicator.getRestriction().min == 0 || choice.getRestriction().min > indicator.getRestriction().min)\r
+ choice.getRestriction().min = indicator.getRestriction().min;\r
+ handle(parent, choice, elements);\r
+ return;\r
+ }\r
if (sequences.size() > 0 || choices.size() > 0 || alls.size() > 0 || groups.size() > 0) {\r
throw new RuntimeException("Cannot handle Sequence with inner ExplicitGroups");\r
}\r
return simpleTypeName.containsKey(ref);\r
}\r
\r
- public NamedAttributeGroup getAttributeGroup(String name) {\r
- for (OpenAttrs attrs : schema.getSimpleTypeOrComplexTypeOrGroup()) {\r
- if (attrs instanceof NamedAttributeGroup) {\r
- NamedAttributeGroup group = (NamedAttributeGroup)attrs;\r
- if (group.getName().equals(name))\r
- return group;\r
- }\r
- }\r
- return null;\r
- }\r
- \r
public IDProvider getIDProvider(Element element) {\r
List<IDProvider> idProviders = new ArrayList<IDProvider>(2);\r
for (JAXBElement<?> e : configuration.getConversionRule()) {\r
QName type = getElementBase(topLevelElement);\r
if (type != null) {\r
if (!type.getNamespaceURI().equals(SCHEMA_NS)) {\r
- SchemaObject obj = getWithName(topLevelObj, type.getLocalPart());\r
+ SchemaObject obj = getWithName(type);\r
inheritance.baseClass = getName(obj);\r
inheritance.type = InheritanceType.ComplexType;\r
} else {\r
QName type = topLevelElement.getSubstitutionGroup();\r
if (type != null) {\r
if (!type.getNamespaceURI().equals(SCHEMA_NS)) {\r
- SchemaObject obj = getWithName(topLevelObj, type.getLocalPart());\r
+ SchemaObject obj = getWithName(type);\r
inheritance.baseClass = getName(obj);\r
inheritance.type = InheritanceType.ComplexType;\r
} else {\r
*/\r
public void getAtomicTypeInheritance(QName type, Inheritance inheritance) {\r
if (!type.getNamespaceURI().equals(SCHEMA_NS)) {\r
- SchemaObject obj = getWithName(type.getLocalPart());\r
+ SchemaObject obj = getWithName(type);\r
+ System.out.println();\r
if (obj.getType() != ObjectType.SIMPLE_TYPE)\r
throw new RuntimeException("SimpleContent does not use SimpleType definition");\r
SimpleType simpleType = obj.getSimpleType();\r