X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=org.simantics.xml.sax%2Fsrc%2Forg%2Fsimantics%2Fxml%2Fsax%2FSchemaConversionBase.java;h=51707cb6d351ca7a04556a8f2404afefd8bab3ed;hb=refs%2Fchanges%2F77%2F2277%2F2;hp=cb0f7629f2ca38f28f16a7d9cc11313f6dc6444c;hpb=12cd5c3850b4907ca8e40286bf8e386b5440be6d;p=simantics%2Finterop.git diff --git a/org.simantics.xml.sax/src/org/simantics/xml/sax/SchemaConversionBase.java b/org.simantics.xml.sax/src/org/simantics/xml/sax/SchemaConversionBase.java index cb0f762..51707cb 100644 --- a/org.simantics.xml.sax/src/org/simantics/xml/sax/SchemaConversionBase.java +++ b/org.simantics.xml.sax/src/org/simantics/xml/sax/SchemaConversionBase.java @@ -204,10 +204,12 @@ public final class SchemaConversionBase { private Map complexTypeName = new HashMap<>(); private Map simpleTypeName = new HashMap<>(); private Map modelGroupName = new HashMap<>(); + private Map attrName = new HashMap<>(); private Map elements = new HashMap<>(); private Map complexTypes = new HashMap<>(); private Map simpleTypes = new HashMap<>(); private Map modelGroups = new HashMap<>(); + private Map attributes = new HashMap<>(); private SchemaObject _getWithName(QName name) { SchemaObject obj = elementName.get(name.getLocalPart()); @@ -215,6 +217,8 @@ public final class SchemaConversionBase { obj = complexTypeName.get(name.getLocalPart()); if (obj == null) obj = simpleTypeName.get(name.getLocalPart()); + if (obj == null) + obj = attrName.get(name.getLocalPart()); return obj; } @@ -360,25 +364,27 @@ public final class SchemaConversionBase { for (OpenAttrs attrs : schema.getSimpleTypeOrComplexTypeOrGroup()) { if (attrs instanceof Element) { Element element = (Element)attrs; - SchemaObject obj = new SchemaObject(element); + SchemaObject obj = new SchemaObject(this,element); obj.setRename(getRename(element)); stack.push(obj); } else if (attrs instanceof ComplexType) { ComplexType complexType = (ComplexType)attrs; - SchemaObject obj = new SchemaObject(complexType); + SchemaObject obj = new SchemaObject(this,complexType); obj.setRename(getRename(complexType)); stack.push(obj); } else if (attrs instanceof SimpleType) { SimpleType simpleType = (SimpleType)attrs; - SchemaObject obj = new SchemaObject(simpleType); + SchemaObject obj = new SchemaObject(this,simpleType); stack.push(obj); } else if (attrs instanceof Attribute) { - // Attributes are not cached + Attribute attribute = (Attribute)attrs; + SchemaObject obj = new SchemaObject(this, attribute); + stack.push(obj); } else if (attrs instanceof AttributeGroup) { // Attribute groups are not cached } else if (attrs instanceof NamedGroup) { NamedGroup group = (NamedGroup)attrs; - SchemaObject obj = new SchemaObject(group); + SchemaObject obj = new SchemaObject(this,group); stack.push(obj); } else { System.out.println(attrs.getClass().getName()); @@ -448,9 +454,9 @@ public final class SchemaConversionBase { elementName.put(e.getName(), object); elements.put(e, object); if (e.getComplexType() != null) - stack.push(new SchemaObject(object,e.getComplexType())); + stack.push(new SchemaObject(this,object,e.getComplexType())); if (e.getSimpleType() != null) - stack.push(new SchemaObject(object,e.getSimpleType())); + stack.push(new SchemaObject(this,object,e.getSimpleType())); break; } case SIMPLE_TYPE:{ @@ -466,6 +472,12 @@ public final class SchemaConversionBase { modelGroups.put(e, object); break; } + case ATTRIBUTE: { + Attribute e = object.getAttribute(); + attrName.put(e.getName(), object); + attributes.put(e, object); + break; + } } } // while } @@ -476,7 +488,7 @@ public final class SchemaConversionBase { JAXBElement element = (JAXBElement)o; Object elemValue = element.getValue(); if (elemValue instanceof Element) { - SchemaObject obj = new SchemaObject(parent,(Element)elemValue); + SchemaObject obj = new SchemaObject(this,parent,(Element)elemValue); obj.setRename(getRename((Element)elemValue)); stack.add(obj); } else if (elemValue instanceof ExplicitGroup) { @@ -497,7 +509,7 @@ public final class SchemaConversionBase { private void preload(SchemaObject parent, RealGroup eg, Deque stack) { System.out.println(eg); if (eg instanceof NamedGroup) { - SchemaObject obj = new SchemaObject(parent,(NamedGroup)eg); + SchemaObject obj = new SchemaObject(this,parent,(NamedGroup)eg); stack.add(obj); } } @@ -730,13 +742,30 @@ public final class SchemaConversionBase { return type; } + private SchemaObject _getAttribute(QName name) { + return attrName.get(name.getLocalPart()); + } + protected Attribute getRefAttribute(QName ref) { - for (OpenAttrs attrs : schema.getSimpleTypeOrComplexTypeOrGroup()) { - if (attrs instanceof TopLevelAttribute) { - TopLevelAttribute attribute = (TopLevelAttribute)attrs; - if (attribute.getName().equals(ref.getLocalPart())) - return attribute; - } +// for (OpenAttrs attrs : schema.getSimpleTypeOrComplexTypeOrGroup()) { +// if (attrs instanceof TopLevelAttribute) { +// TopLevelAttribute attribute = (TopLevelAttribute)attrs; +// if (attribute.getName().equals(ref.getLocalPart())) +// return attribute; +// } +// } + SchemaObject obj = _getAttribute(ref); + if (obj != null) + return obj.getAttribute(); + if (ref.getNamespaceURI() != null) { + for (SchemaConverter sc : converter.getConverter(ref.getNamespaceURI())) { + if (sc.base != null) { + obj = sc.base._getAttribute(ref); + if (obj != null) { + return obj.getAttribute(); + } + } + } } return null; } @@ -952,19 +981,31 @@ public final class SchemaConversionBase { } } - protected String getElementName(Element localElement) { + protected String getName(Element localElement) { if (localElement.getName() != null) { String refName = localElement.getName(); - QName refType = localElement.getType(); - if (refType != null) - return refName; + return refName.replaceAll("\\.", "_"); } else if (localElement.getRef() != null) { QName refType = localElement.getRef(); if (refType != null) - return refType.getLocalPart(); + return getName(refType); + } return null; } + + protected String getName(QName ref) { + String n = ref.getLocalPart(); + return n.replaceAll("\\.", "_"); + } + + protected String getName(Attribute ref) { + String n = ref.getName(); + if (n != null) + return n.replaceAll("\\.", "_"); + else + return null; + } protected String getChoiceName(List elements) { if (elements.size() == 1) { @@ -973,7 +1014,7 @@ public final class SchemaConversionBase { else if (elements.size() > 0 && elements.size() <= 3) { List names = new ArrayList(); for (SchemaElement e : elements) { - String name = getElementName(e.getElement()); + String name = getName(e.getElement()); if (name != null) names.add(name); }