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,"",""));
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);
}
}
}
- 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);
}
}
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) {