Skip to content

Commit 4b9d1bb

Browse files
External Format Java Gen: generate code for qualified properties (finos#3409)
1 parent dc8be5c commit 4b9d1bb

File tree

3 files changed

+35
-1
lines changed
  • legend-engine-xts-java/legend-engine-xt-javaPlatformBinding-externalFormat-pure/src/main/resources/core_java_platform_binding_external_format/legendJavaPlatformBinding/externalFormat
  • legend-engine-xts-xml/legend-engine-xt-xml-pure/src/main/resources/core_external_format_xml/executionPlan/tests

3 files changed

+35
-1
lines changed

legend-engine-xts-java/legend-engine-xt-javaPlatformBinding-externalFormat-pure/src/main/resources/core_java_platform_binding_external_format/legendJavaPlatformBinding/externalFormat/shared.pure

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -330,7 +330,8 @@ function meta::external::format::shared::executionPlan::platformBinding::legendJ
330330

331331
let constraintChecking = if($constraintContext.enableConstraints, | $dataClass->createConstraintCheckingForClass($class, $path, $context, $constraintContext, $debug), | newProject());
332332
let instanceSizing = $dataClass->updateImplementationClassWithInstanceSizeMethods($context);
333-
mergeProjects(newProject()->concatenate([$constraintChecking, $instanceSizing])->toOneMany());
333+
let withQPs = $dataClass->meta::pure::executionPlan::platformBinding::legendJava::shared::createQualifiedPropertiesForClass($context.typeInfos->allQualifiedProperties($class), $context.conventions, $debug->indent());
334+
mergeProjects(newProject()->concatenate([$constraintChecking, $instanceSizing, $withQPs])->toOneMany());
334335
}
335336

336337
function meta::external::format::shared::executionPlan::platformBinding::legendJava::addIExternalData(javaClass:meta::external::language::java::metamodel::Class[1], class:meta::pure::metamodel::type::Class<Any>[1], context:GenerationContext[1]): meta::external::language::java::metamodel::Class[1]

legend-engine-xts-xml/legend-engine-xt-xml-pure/src/main/resources/core_external_format_xml/executionPlan/tests/executionPlanTest.pure

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ Class meta::external::format::xml::executionPlan::test::PersonWithFirmConstraint
5353
dateOfBirth : StrictDate[0..1];
5454
firm : Firm[1];
5555
addresses : Address[1..*];
56+
firmLegalName() { $this.firm.legalName} : String[1];
5657
}
5758

5859
Class meta::external::format::xml::executionPlan::test::Firm

legend-engine-xts-xml/legend-engine-xt-xml-pure/src/main/resources/core_external_format_xml/executionPlan/tests/simple.pure

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,3 +141,35 @@ function <<meta::pure::profiles::test.Test, meta::pure::profiles::test.AlloyOnl
141141
// TODO [internalize] should only fetch primitive properties
142142
assertEquals('{"builder":{"_type":"json"},"values":{"defects":[],"source":{"number":1,"record":"<personWithFirmConstraint firstName=\\"John\\" lastName=\\"Doe\\"><age>23</age><dateOfBirth>2000-01-01</dateOfBirth><firm><legalName>FirmName</legalName><firmAddress><street>Mapletree</street></firmAddress><firmAddress><street>Anson</street></firmAddress><active>true</active></firm><addresses><street>Raffles</street></addresses><addresses><street>Link</street></addresses></personWithFirmConstraint>"},"value":{"firstName":"John","lastName":"Doe","age":23,"dateOfBirth":"2000-01-01","firm":{"legalName":"FirmName","firmAddress":[{"street":"Mapletree"},{"street":"Anson"}],"active":true},"addresses":[{"street":"Raffles"},{"street":"Link"}]}}}', $result);
143143
}
144+
145+
function <<meta::pure::profiles::test.Test, meta::pure::profiles::test.AlloyOnly>> meta::external::format::xml::executionPlan::test::testXmlConstraintPassWithQP(): Boolean[0..1]
146+
{
147+
let tree = #{meta::external::format::xml::executionPlan::test::PersonWithFirmConstraint{firstName, lastName, age, dateOfBirth, 'Firm Legal Name' : firmLegalName, firm{legalName, firmAddress{street}, active}, addresses{street}}}#;
148+
let binding = compileLegendGrammar(readFile('/core_external_format_xml/executionPlan/tests/resources/constraint.txt')->toOne())->filter(e | $e->instanceOf(Binding))->cast(@Binding)->toOne();
149+
let query = {data:String[1]| meta::external::format::xml::executionPlan::test::PersonWithFirmConstraint->internalize($binding, $data)->checked()->serialize($tree)};
150+
let data = '<personWithFirmConstraint firstName="John" lastName="Doe">\n'+
151+
' <age>23</age>\n'+
152+
' <dateOfBirth>2000-01-01</dateOfBirth>\n'+
153+
' <firm>\n'+
154+
' <legalName>FirmName</legalName>\n'+
155+
' <firmAddress>\n' +
156+
' <street>Mapletree</street>\n'+
157+
' </firmAddress>\n'+
158+
' <firmAddress>\n' +
159+
' <street>Anson</street>\n'+
160+
' </firmAddress>\n'+
161+
' <active>true</active>\n'+
162+
' </firm>\n'+
163+
' <addresses>\n'+
164+
' <street>Raffles</street>\n'+
165+
' </addresses>\n'+
166+
' <addresses>\n'+
167+
' <street>Link</street>\n'+
168+
' </addresses>\n'+
169+
'</personWithFirmConstraint>';
170+
171+
let result = meta::external::format::xml::executionPlan::test::executeXsdSchemaBindingQuery($query, pair('data', $data));
172+
173+
// TODO [internalize] should only fetch primitive properties
174+
assertEquals('{"builder":{"_type":"json"},"values":{"defects":[],"source":{"number":1,"record":"<personWithFirmConstraint firstName=\\"John\\" lastName=\\"Doe\\"><age>23</age><dateOfBirth>2000-01-01</dateOfBirth><firm><legalName>FirmName</legalName><firmAddress><street>Mapletree</street></firmAddress><firmAddress><street>Anson</street></firmAddress><active>true</active></firm><addresses><street>Raffles</street></addresses><addresses><street>Link</street></addresses></personWithFirmConstraint>"},"value":{"firstName":"John","lastName":"Doe","age":23,"dateOfBirth":"2000-01-01","Firm Legal Name":"FirmName","firm":{"legalName":"FirmName","firmAddress":[{"street":"Mapletree"},{"street":"Anson"}],"active":true},"addresses":[{"street":"Raffles"},{"street":"Link"}]}}}', $result);
175+
}

0 commit comments

Comments
 (0)