]> gerrit.simantics Code Review - simantics/interop.git/blobdiff - org.simantics.xml.sax/src/org/simantics/xml/sax/SchemaConversionBase.java
Several updates to interoperability.
[simantics/interop.git] / org.simantics.xml.sax / src / org / simantics / xml / sax / SchemaConversionBase.java
index 1e13951da7d8f522c47558e872534da51a474fb4..f349cde8960667c3ac33004c6fd1c5d62c538c5f 100644 (file)
@@ -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<SchemaElement> 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<SchemaElement> elements) {
                if (elements.size() == 1) {
-                       return getElementName(elements.get(0).getElement());
+                       return null;
                }
-               List<String> names = new ArrayList<String>();
-               for (SchemaElement e : elements) {
-                       String name = getElementName(e.getElement());
-                       if (name != null)
-                               names.add(name);
+               else if (elements.size() > 0 && elements.size() <= 3) {
+                       List<String> names = new ArrayList<String>();
+                       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) {