Skip to content

Commit

Permalink
Added support to xsd import tool for extensions of simple types and X… (
Browse files Browse the repository at this point in the history
#652)

* Added support to xsd import tool for extensions of simple types and XSD attributes

* Cleaned

* Cleaned
  • Loading branch information
SimonCockx authored Sep 19, 2023
1 parent 56348ff commit 75d1725
Show file tree
Hide file tree
Showing 18 changed files with 206 additions and 332 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -515,12 +515,14 @@ checkrule CheckOnlyExistsExpression for RosettaOnlyExistsExpression e from {
source e
}
}
val parentData = (parentType.itemType as RDataType).^data
if (parentData !== null) {
mayBeEmpty(parentData)
or
fail error "The `only exists` operator is not applicable to instances of `" + parentData.name + "`."
source parent
if (parentType !== null) {
val parentData = (parentType.itemType as RDataType).^data
if (parentData !== null) {
mayBeEmpty(parentData)
or
fail error "The `only exists` operator is not applicable to instances of `" + parentData.name + "`."
source parent
}
}
}
checkrule CheckOneOfOperation for OneOfOperation e from {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1605,6 +1605,7 @@ class RosettaSimpleValidator extends AbstractDeclarativeValidator {
@Check
def checkFilterOperation(FilterOperation o) {
checkBodyType(o.function, BOOLEAN)
checkBodyIsSingleCardinality(o.function)
}

@Check
Expand Down
2 changes: 1 addition & 1 deletion rosetta-tools/.classpath
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11">
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-17">
<attributes>
<attribute name="maven.pomderived" value="true"/>
</attributes>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,39 +6,15 @@ public class GenerationProperties {

private static final String NAMESPACE = "header.namespace";
private static final String NAMESPACE_DEFINITION = "header.namespace.definition";
private static final String BODY_TYPE = "body.type";
private static final String BODY_NAME = "body.name";
private static final String BODY_DEFINITION = "body.definition";
private static final String CORPUS_TYPE = "corpus.type";
private static final String CORPUS_NAME = "corpus.name";
private static final String CORPUS_DISPLAY_NAME = "corpus.displayName";
private static final String CORPUS_DEFINITION = "corpus.definition";
private static final String SEGMENT_NAME = "segment.name";
private static final String SYNONYM_SOURCE_NAME = "synonymSource.name";

//
private final String namespace;
private final String namespaceDefinition;
private final String bodyType;
private final String bodyName;
private final String bodyDefinition;
private final String corpusType;
private final String corpusName;
private final String corpusDisplayName;
private final String corpusDefinition;
private final String segmentName;
private final String synonymSourceName;

public GenerationProperties(Properties properties) {
this.namespace = properties.getProperty(NAMESPACE);
this.namespaceDefinition = properties.getProperty(NAMESPACE_DEFINITION);
this.bodyType = properties.getProperty(BODY_TYPE);
this.bodyName = properties.getProperty(BODY_NAME);
this.bodyDefinition = properties.getProperty(BODY_DEFINITION);
this.corpusType = properties.getProperty(CORPUS_TYPE);
this.corpusName = properties.getProperty(CORPUS_NAME);
this.corpusDisplayName = properties.getProperty(CORPUS_DISPLAY_NAME);
this.corpusDefinition = properties.getProperty(CORPUS_DEFINITION);
this.segmentName = properties.getProperty(SEGMENT_NAME);
this.synonymSourceName = properties.getProperty(SYNONYM_SOURCE_NAME);
}

Expand All @@ -55,14 +31,6 @@ public GenerationProperties(String namespace,
String synonymSourceName) {
this.namespace = namespace;
this.namespaceDefinition = namespaceDefinition;
this.bodyType = bodyType;
this.bodyName = bodyName;
this.bodyDefinition = bodyDefinition;
this.corpusType = corpusType;
this.corpusName = corpusName;
this.corpusDisplayName = corpusDisplayName;
this.corpusDefinition = corpusDefinition;
this.segmentName = segmentName;
this.synonymSourceName = synonymSourceName;
}

Expand All @@ -74,38 +42,6 @@ public String getNamespaceDefinition() {
return namespaceDefinition;
}

public String getBodyType() {
return bodyType;
}

public String getBodyName() {
return bodyName;
}

public String getBodyDefinition() {
return bodyDefinition;
}

public String getCorpusType() {
return corpusType;
}

public String getCorpusName() {
return corpusName;
}

public String getCorpusDisplayName() {
return corpusDisplayName;
}

public String getCorpusDefinition() {
return corpusDefinition;
}

public String getSegmentName() {
return segmentName;
}

public String getSynonymSourceName() {
return synonymSourceName;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,9 @@
package com.regnosys.rosetta.tools.modelimport;

import com.regnosys.rosetta.rosetta.RosettaBasicType;
import com.regnosys.rosetta.rosetta.RosettaBody;
import com.regnosys.rosetta.rosetta.RosettaCorpus;
import com.regnosys.rosetta.rosetta.RosettaEnumValue;
import com.regnosys.rosetta.rosetta.RosettaEnumeration;
import com.regnosys.rosetta.rosetta.RosettaModel;
import com.regnosys.rosetta.rosetta.RosettaSegment;
import com.regnosys.rosetta.rosetta.RosettaRecordType;
import com.regnosys.rosetta.rosetta.RosettaType;
import com.regnosys.rosetta.rosetta.RosettaTypeAlias;
Expand All @@ -22,7 +19,6 @@
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.xmlet.xsdparser.xsdelements.XsdBuiltInDataType;
import org.xmlet.xsdparser.xsdelements.XsdComplexType;
import org.xmlet.xsdparser.xsdelements.XsdElement;
import org.xmlet.xsdparser.xsdelements.XsdNamedElements;
import org.xmlet.xsdparser.xsdelements.XsdSimpleType;
import org.xmlet.xsdparser.xsdelements.xsdrestrictions.XsdEnumeration;
Expand All @@ -44,20 +40,14 @@ public class RosettaXsdMapping {
public final URI xsdTypesURI = URI.createHierarchicalURI("classpath", null, null, xsdTypesPath, null, null);
public final URL xsdTypesURL = Objects.requireNonNull(this.getClass().getResource(xsdTypesURI.path()));

@Deprecated
private Optional<RosettaBody> body = Optional.empty();
@Deprecated
private Optional<RosettaCorpus> corpus = Optional.empty();
@Deprecated
private Optional<RosettaSegment> segment = Optional.empty();
private Optional<RosettaExternalSynonymSource> synonymSource = Optional.empty();

private final Map<String, RosettaType> builtinTypesMap = new HashMap<>();
private final Map<XsdSimpleType, RosettaTypeAlias> simpleTypesMap = new HashMap<>();
private final Map<XsdSimpleType, RosettaEnumeration> enumTypesMap = new HashMap<>();
private final Map<XsdComplexType, Data> complexTypesMap = new HashMap<>();

private final Map<XsdElement, Attribute> attributeMap = new HashMap<>();
private final Map<XsdNamedElements, Attribute> attributeMap = new HashMap<>();
private final Map<XsdEnumeration, RosettaEnumValue> enumValueMap = new HashMap<>();

private final RBuiltinTypeService builtins;
Expand Down Expand Up @@ -85,6 +75,7 @@ public void initializeBuiltinTypeMap(ResourceSet resourceSet) {
throw new RuntimeException(e);
}
RosettaModel xsdModel = (RosettaModel)xsdResource.getContents().get(0);
resourceSet.getResources().remove(xsdResource);

RosettaBasicType string = builtins.toRosettaType(builtins.UNCONSTRAINED_STRING, RosettaBasicType.class, resourceSet);
RosettaBasicType number = builtins.toRosettaType(builtins.UNCONSTRAINED_NUMBER, RosettaBasicType.class, resourceSet);
Expand Down Expand Up @@ -173,7 +164,7 @@ public void registerComplexType(XsdComplexType complexType, Data data) {
}
complexTypesMap.put(complexType, data);
}
public void registerAttribute(XsdElement elem, Attribute attr) {
public void registerAttribute(XsdNamedElements elem, Attribute attr) {
if (attributeMap.containsKey(elem)) {
throw new IllegalArgumentException("There is already a registered attribute with the name " + elem.getName() + ".");
}
Expand All @@ -185,27 +176,6 @@ public void registerEnumValue(XsdEnumeration elem, RosettaEnumValue value) {
}
enumValueMap.put(elem, value);
}
@Deprecated
public void registerBody(RosettaBody body) {
if (this.body.isPresent()) {
throw new IllegalArgumentException("There is already a registered body.");
}
this.body = Optional.of(body);
}
@Deprecated
public void registerCorpus(RosettaCorpus corpus) {
if (this.corpus.isPresent()) {
throw new IllegalArgumentException("There is already a registered corpus.");
}
this.corpus = Optional.of(corpus);
}
@Deprecated
public void registerSegment(RosettaSegment segment) {
if (this.segment.isPresent()) {
throw new IllegalArgumentException("There is already a registered segment.");
}
this.segment = Optional.of(segment);
}
public void registerSynonymSource(RosettaExternalSynonymSource source) {
if (this.synonymSource.isPresent()) {
throw new IllegalArgumentException("There is already a registered synonym source.");
Expand Down Expand Up @@ -255,7 +225,7 @@ public Data getRosettaTypeFromComplex(XsdComplexType complexType) {
}
return t;
}
public Attribute getAttribute(XsdElement elem) {
public Attribute getAttribute(XsdNamedElements elem) {
Attribute a = attributeMap.get(elem);
if (a == null) {
throw new RuntimeException("No registered attribute " + elem.getName() + " was found.");
Expand All @@ -270,18 +240,6 @@ public RosettaEnumValue getEnumValue(XsdEnumeration elem) {
return v;
}

@Deprecated
public RosettaBody getBody() {
return this.body.get();
}
@Deprecated
public RosettaCorpus getCorpus() {
return this.corpus.get();
}
@Deprecated
public RosettaSegment getSegment() {
return this.segment.get();
}
public RosettaExternalSynonymSource getSynonymSource() {
return this.synonymSource.get();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,25 +21,22 @@ public class XsdImport {
private final XsdEnumImport xsdEnumImport;
private final XsdSynonymImport xsdSynonymImport;
private final XsdTypeAliasImport xsdTypeAliasImport;
private final XsdRegulatoryImport xsdRegulatoryImport;
private final RosettaXsdMapping typeMapping;

@Inject
public XsdImport(RosettaModelFactory rosettaModelFactory, XsdTypeImport xsdTypeImport, XsdEnumImport xsdEnumImport, XsdSynonymImport xsdSynonymImport, XsdTypeAliasImport xsdTypeAliasImport, XsdRegulatoryImport xsdRegulatoryImport, RosettaXsdMapping typeMapping) {
public XsdImport(RosettaModelFactory rosettaModelFactory, XsdTypeImport xsdTypeImport, XsdEnumImport xsdEnumImport, XsdSynonymImport xsdSynonymImport, XsdTypeAliasImport xsdTypeAliasImport, RosettaXsdMapping typeMapping) {
this.rosettaModelFactory = rosettaModelFactory;
this.xsdTypeImport = xsdTypeImport;
this.xsdEnumImport = xsdEnumImport;
this.xsdSynonymImport = xsdSynonymImport;
this.xsdTypeAliasImport = xsdTypeAliasImport;
this.xsdRegulatoryImport = xsdRegulatoryImport;
this.typeMapping = typeMapping;
}

public ResourceSet generateRosetta(List<XsdAbstractElement> xsdElements, GenerationProperties properties, List<String> namespaces) {
// First register all rosetta types, which makes it possible to support
// forward references and self-references.
typeMapping.initializeBuiltinTypeMap(rosettaModelFactory.getResourceSet());
// List<? extends RosettaRootElement> regElems = xsdRegulatoryImport.registerTypes(xsdElements, typeMapping, properties);
List<? extends RosettaRootElement> enums = xsdEnumImport.registerTypes(xsdElements, typeMapping, properties);
List<? extends RosettaRootElement> aliases = xsdTypeAliasImport.registerTypes(xsdElements, typeMapping, properties);
List<? extends RosettaRootElement> types = xsdTypeImport.registerTypes(xsdElements, typeMapping, properties);
Expand All @@ -53,7 +50,6 @@ public ResourceSet generateRosetta(List<XsdAbstractElement> xsdElements, Generat

if (aliases.size() > 0 || types.size() > 0) {
RosettaModel typeModel = rosettaModelFactory.createRosettaModel(TYPE, properties, namespaces);
// typeModel.getElements().addAll(regElems);
typeModel.getElements().addAll(aliases);
typeModel.getElements().addAll(types);
}
Expand All @@ -64,7 +60,6 @@ public ResourceSet generateRosetta(List<XsdAbstractElement> xsdElements, Generat
}

// Then fill in the contents of these types.
// xsdRegulatoryImport.completeTypes(xsdElements, typeMapping);
xsdEnumImport.completeTypes(xsdElements, typeMapping);
xsdTypeAliasImport.completeTypes(xsdElements, typeMapping);
xsdTypeImport.completeTypes(xsdElements, typeMapping);
Expand Down

This file was deleted.

Loading

0 comments on commit 75d1725

Please sign in to comment.