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(",".replaceAll(\"\\n\", \"\").getBytes(java.nio.charset.StandardCharsets.UTF_8))","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) {
public static class Inheritance {
public String baseClass;
+ public String additionalClass;
public InheritanceType type;
public TypeEntry atomicType;
QName type = topLevelElement.getType();
if (!type.getNamespaceURI().equals(SCHEMA_NS)) {
SchemaObject obj = complexTypeName.get(type.getLocalPart());
- // if (obj == null)
- // obj = simpleTypeName.get(type.getLocalPart());
if (obj != null) {
inheritance.baseClass = getName(obj);
inheritance.type = InheritanceType.ComplexType;
}
+ else {
+ obj = simpleTypeName.get(type.getLocalPart());
+ if (obj != null)
+ getAtomicTypeInheritance(type, inheritance);
+ }
} else {
TypeEntry entry = getTypeEntry(type);
if (entry != null) {
ExtensionType extensionType = simpleContent.getExtension();
if (extensionType != null) {
type = extensionType.getBase();
+ SchemaObject simpleType = getSimpleType(type);
+ if (simpleType != null)
+ inheritance.additionalClass = getName(simpleType);
getAtomicTypeInheritance(type, inheritance);
}
}
*/
public void getAtomicTypeInheritance(QName type, Inheritance inheritance) {
if (!type.getNamespaceURI().equals(SCHEMA_NS)) {
- SchemaObject obj = getWithName(type);
- if (obj.getType() != ObjectType.SIMPLE_TYPE)
- throw new RuntimeException("SimpleContent does not use SimpleType definition");
+ SchemaObject obj = getSimpleType(type);
+ if (obj == null)
+ throw new RuntimeException("Cannot locate SimpleType " + type.getLocalPart());
SimpleType simpleType = obj.getSimpleType();
type = getSimpleTypeBase(simpleType);
getAtomicTypeInheritance(type, inheritance);