X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=org.simantics.xml.sax%2Fsrc%2Forg%2Fsimantics%2Fxml%2Fsax%2FSchemaConversionBase.java;fp=org.simantics.xml.sax%2Fsrc%2Forg%2Fsimantics%2Fxml%2Fsax%2FSchemaConversionBase.java;h=f349cde8960667c3ac33004c6fd1c5d62c538c5f;hb=04f3fb6796cd6225be090e1e1feb866ae0d03173;hp=1e13951da7d8f522c47558e872534da51a474fb4;hpb=cbc22e9a30434bca2d197a3b6cbbdbced19aed4e;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 1e13951..f349cde 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 @@ -111,7 +111,7 @@ public final class SchemaConversionBase { schemaTypes.put("unsignedByte", new TypeEntry("L0.Byte", "Bindings.BYTE", "byte", "0","java.lang.Byte.parseByte(",")","java.lang.Byte.toString(",")")); schemaTypes.put("long", new TypeEntry("L0.Long", "Bindings.LONG", "long", "0","java.lang.Long.parseLong(",")","java.lang.Long.toString(",")")); schemaTypes.put("unsignedLong", new TypeEntry("L0.Long", "Bindings.LONG", "long", "0","java.lang.Long.parseLong(",")","java.lang.Long.toString(",")")); - schemaTypes.put("base64Binary", new TypeEntry("L0.ByteArray", "Bindings.BYTE_ARRAY", "byte[]", "new byte[0]","",".getBytes(org.simantics.databoard.util.binary.UTF8.CHARSET)","new java.lang.String(",", org.simantics.databoard.util.binary.UTF8.CHARSET)")); + schemaTypes.put("base64Binary", new TypeEntry("L0.ByteArray", "Bindings.BYTE_ARRAY", "byte[]", "new byte[0]","java.util.Base64.getDecoder().decode(",")","java.util.Base64.getEncoder().encodeToString(",")")); l0Types.put("doubleArray", new TypeEntry("L0.DoubleArray", "Bindings.DOUBLE_ARRAY", "double[]", null,null,null,"java.lang.Double.toString(",")")); l0Types.put("stringArray", new TypeEntry("L0.StringArray", "Bindings.STRING_ARRAY", "string[]", null,null,null,"","")); @@ -769,21 +769,26 @@ public final class SchemaConversionBase { protected enum RefType{Element,Reference,Type}; - protected void handleIndicator(SchemaObject parent, SchemaElement indicator, SchemaElement element, String refName, RefType refType) { - component.handleIndicator(parent, indicator, element, refName, refType); + protected void handleIndicator(SchemaObject parent, SchemaElement indicator, SchemaElement element, String refName, RefType refType, String baseRelationName) { + component.handleIndicator(parent, indicator, element, refName, refType, baseRelationName); } protected void handleIndicator(SchemaObject parent, SchemaElement indicator, SchemaElement any) { component.handleIndicator(parent, indicator, any); } protected void handle(SchemaObject parent, SchemaElement indicator, List elements) { //component.handle(parent, indicator, elements); - if (indicator.getType() == SchemaElement.ElementType.SEQUENCE || (indicator.getType() == SchemaElement.ElementType.CHOICE && indicator.getRestriction().many())) { + // Generate combined relation + String baseRelationName = null; + if (indicator.getType() == SchemaElement.ElementType.CHOICE) { + String name = getChoiceName(elements); + if (name != null) + baseRelationName = component.handleChoice(parent, indicator, elements, name); + } + + if (indicator.getType() == SchemaElement.ElementType.SEQUENCE || indicator.getType() == SchemaElement.ElementType.CHOICE) { for (SchemaElement e : elements) { - handle(parent, indicator, e); + handle(parent, indicator, e, baseRelationName); } - } else if (indicator.getType() == SchemaElement.ElementType.CHOICE) { - String name = getChoiceName(elements); - component.handleChoice(parent, indicator, elements, name); } } @@ -931,19 +936,19 @@ public final class SchemaConversionBase { } - protected void handle(SchemaObject parent, SchemaElement indicator, SchemaElement element) { + protected void handle(SchemaObject parent, SchemaElement indicator, SchemaElement element, String baseRelationName) { Element localElement = element.getElement(); if (localElement.getName() != null) { - SchemaObject eObj = elements.get(localElement); + SchemaObject eObj = elements.get(localElement); QName refType = localElement.getType(); if (refType != null) - handleIndicator(parent, indicator, element, null, RefType.Type); + handleIndicator(parent, indicator, element, null, RefType.Type, baseRelationName); else { handleElement(eObj); - handleIndicator(parent, indicator, element, null, RefType.Element); - } + handleIndicator(parent, indicator, element, null, RefType.Element, baseRelationName); + } } else if (localElement.getRef() != null) { - handleIndicator(parent, indicator,element, null, RefType.Reference); + handleIndicator(parent, indicator,element, null, RefType.Reference, baseRelationName); } } @@ -963,22 +968,27 @@ public final class SchemaConversionBase { protected String getChoiceName(List elements) { if (elements.size() == 1) { - return getElementName(elements.get(0).getElement()); + return null; } - List names = new ArrayList(); - for (SchemaElement e : elements) { - String name = getElementName(e.getElement()); - if (name != null) - names.add(name); + else if (elements.size() > 0 && elements.size() <= 3) { + List names = new ArrayList(); + for (SchemaElement e : elements) { + String name = getElementName(e.getElement()); + if (name != null) + names.add(name); + } + String name = ""; + for (int i = 0; i < names.size(); i++) { + if (i == 0) + name = names.get(i); + else + name += "Or"+names.get(i); + } + return name; } - String name = ""; - for (int i = 0; i < names.size(); i++) { - if (i == 0) - name = names.get(i); - else - name += "Or"+names.get(i); + else { + return "SubElement"; } - return name; } protected void handle(SchemaObject parent, Attribute attribute) {