From 377c9d3446b4de862ac70b1d6a57ed3e3cb4fdf9 Mon Sep 17 00:00:00 2001 From: "Ramani, Yash [Engineering]" Date: Mon, 1 Jul 2024 09:51:29 -0400 Subject: [PATCH] Fix source info for mappingTest StoreTestData store and add source info to profile tags and stereotypes --- .../toPureGraph/HelperMappingBuilder.java | 4 +- .../PackageableElementFirstPassBuilder.java | 12 ++--- .../validator/ProfileValidator.java | 5 +- .../TestDomainCompilationFromGrammar.java | 2 +- .../from/domain/DomainParseTreeWalker.java | 6 ++- .../domain/GraphFetchTreeParseTreeWalker.java | 2 +- .../from/mapping/MappingParseTreeWalker.java | 6 ++- .../DEPRECATED_PureGrammarComposerCore.java | 4 +- .../to/HelperMappingGrammarComposer.java | 2 +- .../test/parser/TestDomainGrammarParser.java | 49 +++++++++++++++++++ .../packageableElement/domain/Profile.java | 7 ++- .../domain/ProfileStereotype.java | 45 +++++++++++++++++ .../packageableElement/domain/ProfileTag.java | 45 +++++++++++++++++ .../mapping/mappingTest/StoreTestData.java | 6 ++- .../mapping/extension/MappingTestRunner.java | 2 +- 15 files changed, 175 insertions(+), 22 deletions(-) create mode 100644 legend-engine-core/legend-engine-core-base/legend-engine-core-language-pure/legend-engine-protocol-pure/src/main/java/org/finos/legend/engine/protocol/pure/v1/model/packageableElement/domain/ProfileStereotype.java create mode 100644 legend-engine-core/legend-engine-core-base/legend-engine-core-language-pure/legend-engine-protocol-pure/src/main/java/org/finos/legend/engine/protocol/pure/v1/model/packageableElement/domain/ProfileTag.java diff --git a/legend-engine-core/legend-engine-core-base/legend-engine-core-language-pure/legend-engine-language-pure-compiler/src/main/java/org/finos/legend/engine/language/pure/compiler/toPureGraph/HelperMappingBuilder.java b/legend-engine-core/legend-engine-core-base/legend-engine-core-language-pure/legend-engine-language-pure-compiler/src/main/java/org/finos/legend/engine/language/pure/compiler/toPureGraph/HelperMappingBuilder.java index 17425c42335..08ad180f774 100644 --- a/legend-engine-core/legend-engine-core-base/legend-engine-core-language-pure/legend-engine-language-pure-compiler/src/main/java/org/finos/legend/engine/language/pure/compiler/toPureGraph/HelperMappingBuilder.java +++ b/legend-engine-core/legend-engine-core-base/legend-engine-core-language-pure/legend-engine-language-pure-compiler/src/main/java/org/finos/legend/engine/language/pure/compiler/toPureGraph/HelperMappingBuilder.java @@ -556,13 +556,13 @@ static Root_meta_pure_data_StoreTestData processMappingElementTestData(StoreTest .filter(Objects::nonNull) .findFirst() .orElseThrow(() -> new UnsupportedOperationException("Unsupported data"))); - if (testData.store.equals("ModelStore")) + if (testData.store.path.equals("ModelStore")) { mappingStoreTestData._store(new Root_meta_external_store_model_ModelStore_Impl("")); } else { - mappingStoreTestData._store(context.resolveStore(testData.store)); + mappingStoreTestData._store(context.resolveStore(testData.store.path, testData.store.sourceInformation)); } return mappingStoreTestData; } diff --git a/legend-engine-core/legend-engine-core-base/legend-engine-core-language-pure/legend-engine-language-pure-compiler/src/main/java/org/finos/legend/engine/language/pure/compiler/toPureGraph/PackageableElementFirstPassBuilder.java b/legend-engine-core/legend-engine-core-base/legend-engine-core-language-pure/legend-engine-language-pure-compiler/src/main/java/org/finos/legend/engine/language/pure/compiler/toPureGraph/PackageableElementFirstPassBuilder.java index bea535b7adc..0c7b4b91796 100644 --- a/legend-engine-core/legend-engine-core-base/legend-engine-core-language-pure/legend-engine-language-pure-compiler/src/main/java/org/finos/legend/engine/language/pure/compiler/toPureGraph/PackageableElementFirstPassBuilder.java +++ b/legend-engine-core/legend-engine-core-base/legend-engine-core-language-pure/legend-engine-language-pure-compiler/src/main/java/org/finos/legend/engine/language/pure/compiler/toPureGraph/PackageableElementFirstPassBuilder.java @@ -95,8 +95,8 @@ public PackageableElement visit(Profile profile) this.context.pureModel.profilesIndex.put(fullPath, targetProfile); setNameAndPackage(targetProfile, profile); return targetProfile - ._p_stereotypes(ListIterate.collect(profile.stereotypes, st -> newStereotype(targetProfile, st))) - ._p_tags(ListIterate.collect(profile.tags, t -> newTag(targetProfile, t))); + ._p_stereotypes(ListIterate.collect(profile.stereotypes, st -> newStereotype(targetProfile, st.value, st.sourceInformation))) + ._p_tags(ListIterate.collect(profile.tags, t -> newTag(targetProfile, t.value, t.sourceInformation))); } @Override @@ -281,16 +281,16 @@ private GenericType newGenericType(Type rawType, RichIterable elements) { elements.values().forEach(el -> { - MutableMultimap tags = Iterate.groupBy(el.tags, p -> p); + MutableMultimap tags = Iterate.groupBy(el.tags.stream().map(t -> t.value).collect(Collectors.toList()), p -> p); pureModel.addWarnings(tags.multiValuesView().flatCollect(a -> a.size() > 1 ? Lists.mutable.with(new Warning(el.sourceInformation, "Found duplicated tag '" + a.getFirst() + "' in profile '" + pureModel.buildPackageString(el._package, el.name) + "'")) : Lists.mutable.empty())); }); } @@ -52,7 +53,7 @@ private void validateStereotypes(PureModel pureModel, Map eleme { elements.values().forEach(el -> { - MutableMultimap stereotypes = Iterate.groupBy(el.stereotypes, p -> p); + MutableMultimap stereotypes = Iterate.groupBy(el.stereotypes.stream().map(st -> st.value).collect(Collectors.toList()), p -> p); pureModel.addWarnings(stereotypes.multiValuesView().flatCollect(a -> a.size() > 1 ? Lists.mutable.with(new Warning(el.sourceInformation, "Found duplicated stereotype '" + a.getFirst() + "' in profile '" + pureModel.buildPackageString(el._package, el.name) + "'")) : Lists.mutable.empty())); }); } diff --git a/legend-engine-core/legend-engine-core-base/legend-engine-core-language-pure/legend-engine-language-pure-compiler/src/test/java/org/finos/legend/engine/language/pure/compiler/test/fromGrammar/TestDomainCompilationFromGrammar.java b/legend-engine-core/legend-engine-core-base/legend-engine-core-language-pure/legend-engine-language-pure-compiler/src/test/java/org/finos/legend/engine/language/pure/compiler/test/fromGrammar/TestDomainCompilationFromGrammar.java index 6873d355eb9..1242440ee54 100644 --- a/legend-engine-core/legend-engine-core-base/legend-engine-core-language-pure/legend-engine-language-pure-compiler/src/test/java/org/finos/legend/engine/language/pure/compiler/test/fromGrammar/TestDomainCompilationFromGrammar.java +++ b/legend-engine-core/legend-engine-core-base/legend-engine-core-language-pure/legend-engine-language-pure-compiler/src/test/java/org/finos/legend/engine/language/pure/compiler/test/fromGrammar/TestDomainCompilationFromGrammar.java @@ -2857,7 +2857,7 @@ public void testCompilationForGraphFetchTreeWithSubTypeTreeAtRootLevel() " }\n" + " }\n" + " }#\n" + - "}\n", "COMPILATION error at [16:7-18:7]: The type Street is not a subtype of Address" + "}\n", "COMPILATION error at [16:18-29]: The type Street is not a subtype of Address" ); test("Class test::Address\n" + diff --git a/legend-engine-core/legend-engine-core-base/legend-engine-core-language-pure/legend-engine-language-pure-grammar/src/main/java/org/finos/legend/engine/language/pure/grammar/from/domain/DomainParseTreeWalker.java b/legend-engine-core/legend-engine-core-base/legend-engine-core-language-pure/legend-engine-language-pure-grammar/src/main/java/org/finos/legend/engine/language/pure/grammar/from/domain/DomainParseTreeWalker.java index 2df7449f84f..bca07b270a5 100644 --- a/legend-engine-core/legend-engine-core-base/legend-engine-core-language-pure/legend-engine-language-pure-grammar/src/main/java/org/finos/legend/engine/language/pure/grammar/from/domain/DomainParseTreeWalker.java +++ b/legend-engine-core/legend-engine-core-base/legend-engine-core-language-pure/legend-engine-language-pure-grammar/src/main/java/org/finos/legend/engine/language/pure/grammar/from/domain/DomainParseTreeWalker.java @@ -63,6 +63,8 @@ import org.finos.legend.engine.protocol.pure.v1.model.packageableElement.domain.Multiplicity; import org.finos.legend.engine.protocol.pure.v1.model.packageableElement.domain.ParameterValue; import org.finos.legend.engine.protocol.pure.v1.model.packageableElement.domain.Profile; +import org.finos.legend.engine.protocol.pure.v1.model.packageableElement.domain.ProfileStereotype; +import org.finos.legend.engine.protocol.pure.v1.model.packageableElement.domain.ProfileTag; import org.finos.legend.engine.protocol.pure.v1.model.packageableElement.domain.Property; import org.finos.legend.engine.protocol.pure.v1.model.packageableElement.domain.QualifiedProperty; import org.finos.legend.engine.protocol.pure.v1.model.packageableElement.domain.StereotypePtr; @@ -175,11 +177,11 @@ private Profile visitProfile(DomainParserGrammar.ProfileContext ctx) // stereotypes DomainParserGrammar.StereotypeDefinitionsContext stereotypeDefinitionsContext = PureGrammarParserUtility.validateAndExtractOptionalField(ctx.stereotypeDefinitions(), "stereotypes", profile.sourceInformation); - profile.stereotypes = stereotypeDefinitionsContext != null ? ListIterate.collect(stereotypeDefinitionsContext.identifier(), PureGrammarParserUtility::fromIdentifier) : Lists.mutable.empty(); + profile.stereotypes = stereotypeDefinitionsContext != null ? ListIterate.collect(stereotypeDefinitionsContext.identifier(), identifierContext -> new ProfileStereotype(PureGrammarParserUtility.fromIdentifier(identifierContext), this.walkerSourceInformation.getSourceInformation(identifierContext))) : Lists.mutable.empty(); // tags DomainParserGrammar.TagDefinitionsContext tagDefinitionsContext = PureGrammarParserUtility.validateAndExtractOptionalField(ctx.tagDefinitions(), "tags", profile.sourceInformation); - profile.tags = tagDefinitionsContext != null ? ListIterate.collect(tagDefinitionsContext.identifier(), PureGrammarParserUtility::fromIdentifier) : Lists.mutable.empty(); + profile.tags = tagDefinitionsContext != null ? ListIterate.collect(tagDefinitionsContext.identifier(), identifierContext -> new ProfileTag(PureGrammarParserUtility.fromIdentifier(identifierContext), this.walkerSourceInformation.getSourceInformation(identifierContext))) : Lists.mutable.empty(); return profile; } diff --git a/legend-engine-core/legend-engine-core-base/legend-engine-core-language-pure/legend-engine-language-pure-grammar/src/main/java/org/finos/legend/engine/language/pure/grammar/from/domain/GraphFetchTreeParseTreeWalker.java b/legend-engine-core/legend-engine-core-base/legend-engine-core-language-pure/legend-engine-language-pure-grammar/src/main/java/org/finos/legend/engine/language/pure/grammar/from/domain/GraphFetchTreeParseTreeWalker.java index 3c58b8f7b02..eb59afff0dc 100644 --- a/legend-engine-core/legend-engine-core-base/legend-engine-core-language-pure/legend-engine-language-pure-grammar/src/main/java/org/finos/legend/engine/language/pure/grammar/from/domain/GraphFetchTreeParseTreeWalker.java +++ b/legend-engine-core/legend-engine-core-base/legend-engine-core-language-pure/legend-engine-language-pure-grammar/src/main/java/org/finos/legend/engine/language/pure/grammar/from/domain/GraphFetchTreeParseTreeWalker.java @@ -120,7 +120,7 @@ private SubTypeGraphFetchTree visitSubTypeGraphPathContext(GraphFetchTreeParserG } SubTypeGraphFetchTree result = new SubTypeGraphFetchTree(); - result.sourceInformation = walkerSourceInformation.getSourceInformation(subTypeGraphPathContext); + result.sourceInformation = walkerSourceInformation.getSourceInformation(subTypeGraphPathContext.subtype().qualifiedName()); result.subTrees = subTrees; result.subTypeClass = PureGrammarParserUtility.fromIdentifier(subTypeGraphPathContext.subtype().qualifiedName()); return result; diff --git a/legend-engine-core/legend-engine-core-base/legend-engine-core-language-pure/legend-engine-language-pure-grammar/src/main/java/org/finos/legend/engine/language/pure/grammar/from/mapping/MappingParseTreeWalker.java b/legend-engine-core/legend-engine-core-base/legend-engine-core-language-pure/legend-engine-language-pure-grammar/src/main/java/org/finos/legend/engine/language/pure/grammar/from/mapping/MappingParseTreeWalker.java index 255e502c36f..a5d501f0e33 100644 --- a/legend-engine-core/legend-engine-core-base/legend-engine-core-language-pure/legend-engine-language-pure-grammar/src/main/java/org/finos/legend/engine/language/pure/grammar/from/mapping/MappingParseTreeWalker.java +++ b/legend-engine-core/legend-engine-core-base/legend-engine-core-language-pure/legend-engine-language-pure-grammar/src/main/java/org/finos/legend/engine/language/pure/grammar/from/mapping/MappingParseTreeWalker.java @@ -30,6 +30,7 @@ import org.finos.legend.engine.language.pure.grammar.from.test.assertion.HelperTestAssertionGrammarParser; import org.finos.legend.engine.protocol.pure.v1.model.SourceInformation; import org.finos.legend.engine.protocol.pure.v1.model.context.EngineErrorType; +import org.finos.legend.engine.protocol.pure.v1.model.context.PackageableElementType; import org.finos.legend.engine.protocol.pure.v1.model.packageableElement.PackageableElement; import org.finos.legend.engine.protocol.pure.v1.model.packageableElement.mapping.AssociationMapping; import org.finos.legend.engine.protocol.pure.v1.model.packageableElement.mapping.ClassMapping; @@ -43,6 +44,7 @@ import org.finos.legend.engine.protocol.pure.v1.model.packageableElement.mapping.mappingTest.MappingTest_Legacy; import org.finos.legend.engine.protocol.pure.v1.model.packageableElement.mapping.mappingTest.StoreTestData; import org.finos.legend.engine.protocol.pure.v1.model.packageableElement.section.ImportAwareCodeSection; +import org.finos.legend.engine.protocol.pure.v1.model.packageableElement.store.StoreProviderPointer; import org.finos.legend.engine.protocol.pure.v1.model.test.assertion.TestAssertion; import org.finos.legend.engine.protocol.pure.v1.model.valueSpecification.ValueSpecification; import org.finos.legend.engine.protocol.pure.v1.model.valueSpecification.raw.Lambda; @@ -184,7 +186,9 @@ private StoreTestData visitMappingStoreTestData(MappingParserGrammar.MappingTest { StoreTestData testData = new StoreTestData(); testData.data = HelperEmbeddedDataGrammarParser.parseEmbeddedData(ctx.embeddedData(), this.walkerSourceInformation, this.parserContext.getPureGrammarParserExtensions()); - testData.store = ctx.qualifiedName().packagePath() == null ? ctx.qualifiedName().getText() : PureGrammarParserUtility.fromQualifiedName(ctx.qualifiedName().packagePath().identifier(), ctx.qualifiedName().identifier()); //build store + String path = ctx.qualifiedName().packagePath() == null ? ctx.qualifiedName().getText() : PureGrammarParserUtility.fromQualifiedName(ctx.qualifiedName().packagePath().identifier(), ctx.qualifiedName().identifier()); //build store + testData.store = new StoreProviderPointer(PackageableElementType.STORE, path, this.walkerSourceInformation.getSourceInformation(ctx.qualifiedName())); + testData.sourceInformation = this.walkerSourceInformation.getSourceInformation(ctx); return testData; } diff --git a/legend-engine-core/legend-engine-core-base/legend-engine-core-language-pure/legend-engine-language-pure-grammar/src/main/java/org/finos/legend/engine/language/pure/grammar/to/DEPRECATED_PureGrammarComposerCore.java b/legend-engine-core/legend-engine-core-base/legend-engine-core-language-pure/legend-engine-language-pure-grammar/src/main/java/org/finos/legend/engine/language/pure/grammar/to/DEPRECATED_PureGrammarComposerCore.java index 11a88de022a..e7981cc2a35 100644 --- a/legend-engine-core/legend-engine-core-base/legend-engine-core-language-pure/legend-engine-language-pure-grammar/src/main/java/org/finos/legend/engine/language/pure/grammar/to/DEPRECATED_PureGrammarComposerCore.java +++ b/legend-engine-core/legend-engine-core-base/legend-engine-core-language-pure/legend-engine-language-pure-grammar/src/main/java/org/finos/legend/engine/language/pure/grammar/to/DEPRECATED_PureGrammarComposerCore.java @@ -319,11 +319,11 @@ public String visit(Profile profile) builder.append("Profile ").append(PureGrammarComposerUtility.convertPath(profile.getPath())).append("\n").append("{\n"); if (profile.stereotypes != null && !profile.stereotypes.isEmpty()) { - builder.append(getTabString()).append("stereotypes: [").append(Lists.mutable.withAll(profile.stereotypes).collect(PureGrammarComposerUtility::convertIdentifier).makeString(", ")).append("];\n"); + builder.append(getTabString()).append("stereotypes: [").append(Lists.mutable.withAll(profile.stereotypes).collect(profileStereoType -> PureGrammarComposerUtility.convertIdentifier(profileStereoType.value)).makeString(", ")).append("];\n"); } if (profile.tags != null && !profile.tags.isEmpty()) { - builder.append(getTabString()).append("tags: [").append(Lists.mutable.withAll(profile.tags).collect(PureGrammarComposerUtility::convertIdentifier).makeString(", ")).append("];\n"); + builder.append(getTabString()).append("tags: [").append(Lists.mutable.withAll(profile.tags).collect(profileTag -> PureGrammarComposerUtility.convertIdentifier(profileTag.value)).makeString(", ")).append("];\n"); } return builder.append("}").toString(); } diff --git a/legend-engine-core/legend-engine-core-base/legend-engine-core-language-pure/legend-engine-language-pure-grammar/src/main/java/org/finos/legend/engine/language/pure/grammar/to/HelperMappingGrammarComposer.java b/legend-engine-core/legend-engine-core-base/legend-engine-core-language-pure/legend-engine-language-pure-grammar/src/main/java/org/finos/legend/engine/language/pure/grammar/to/HelperMappingGrammarComposer.java index 63940905404..b12f7e7bcea 100644 --- a/legend-engine-core/legend-engine-core-base/legend-engine-core-language-pure/legend-engine-language-pure-grammar/src/main/java/org/finos/legend/engine/language/pure/grammar/to/HelperMappingGrammarComposer.java +++ b/legend-engine-core/legend-engine-core-base/legend-engine-core-language-pure/legend-engine-language-pure-grammar/src/main/java/org/finos/legend/engine/language/pure/grammar/to/HelperMappingGrammarComposer.java @@ -253,7 +253,7 @@ public static String renderStoreTestData(List storeTestData, DEPR public static String renderStoreElementTestData(StoreTestData mappingStoreTestData, DEPRECATED_PureGrammarComposerCore transformer, int baseIndentation) { StringBuilder str = new StringBuilder(); - str.append(getTabString(baseIndentation)).append(mappingStoreTestData.store).append(":\n"); + str.append(getTabString(baseIndentation)).append(mappingStoreTestData.store.path).append(":\n"); str.append(HelperEmbeddedDataGrammarComposer.composeEmbeddedData(mappingStoreTestData.data, PureGrammarComposerContext.Builder.newInstance(transformer.toContext()).withIndentationString(getTabString(baseIndentation + 1)).build())); return str.toString(); } diff --git a/legend-engine-core/legend-engine-core-base/legend-engine-core-language-pure/legend-engine-language-pure-grammar/src/test/java/org/finos/legend/engine/language/pure/grammar/test/parser/TestDomainGrammarParser.java b/legend-engine-core/legend-engine-core-base/legend-engine-core-language-pure/legend-engine-language-pure-grammar/src/test/java/org/finos/legend/engine/language/pure/grammar/test/parser/TestDomainGrammarParser.java index 1cfe0ccdb12..f1ece9d4f19 100644 --- a/legend-engine-core/legend-engine-core-base/legend-engine-core-language-pure/legend-engine-language-pure-grammar/src/test/java/org/finos/legend/engine/language/pure/grammar/test/parser/TestDomainGrammarParser.java +++ b/legend-engine-core/legend-engine-core-base/legend-engine-core-language-pure/legend-engine-language-pure-grammar/src/test/java/org/finos/legend/engine/language/pure/grammar/test/parser/TestDomainGrammarParser.java @@ -26,6 +26,7 @@ import org.finos.legend.engine.protocol.pure.v1.model.context.PureModelContextData; import org.finos.legend.engine.protocol.pure.v1.model.packageableElement.PackageableElement; import org.finos.legend.engine.protocol.pure.v1.model.packageableElement.domain.Class; +import org.finos.legend.engine.protocol.pure.v1.model.packageableElement.domain.Profile; import org.junit.Assert; import org.junit.Test; @@ -114,4 +115,52 @@ public void testClass() Assert.assertEquals(1, aClass.superTypes.get(0).sourceInformation.startLine); Assert.assertEquals(71, aClass.superTypes.get(0).sourceInformation.startColumn); } + + @Test + public void testProfile() + { + PureModelContextData pureModelContextData = test("Profile test::A\n" + + "{\n" + + " tags : [tag1, tag2];\n" + + " stereotypes : [stereotype1, stereotype2];\n" + + "}\n"); + + Map elementMap = pureModelContextData.getElements().stream().collect(Collectors.toMap(x -> x.getPath(), Function.identity())); + + Profile profile = (Profile) elementMap.get("test::A"); + + Assert.assertNotNull(profile.sourceInformation); + Assert.assertEquals(1, profile.sourceInformation.startLine); + Assert.assertEquals(5, profile.sourceInformation.endLine); + Assert.assertEquals(1, profile.sourceInformation.startColumn); + Assert.assertEquals(1, profile.sourceInformation.endColumn); + Assert.assertEquals(2, profile.stereotypes.size()); + Assert.assertEquals(2, profile.tags.size()); + + Assert.assertEquals("stereotype1", profile.stereotypes.get(0).value); + Assert.assertEquals("stereotype2", profile.stereotypes.get(1).value); + + Assert.assertNotNull(profile.stereotypes.get(0).sourceInformation); + Assert.assertEquals(4, profile.stereotypes.get(0).sourceInformation.startLine); + Assert.assertEquals(4, profile.stereotypes.get(0).sourceInformation.endLine); + Assert.assertEquals(19, profile.stereotypes.get(0).sourceInformation.startColumn); + Assert.assertEquals(29, profile.stereotypes.get(0).sourceInformation.endColumn); + Assert.assertEquals(4, profile.stereotypes.get(1).sourceInformation.startLine); + Assert.assertEquals(4, profile.stereotypes.get(1).sourceInformation.endLine); + Assert.assertEquals(32, profile.stereotypes.get(1).sourceInformation.startColumn); + Assert.assertEquals(42, profile.stereotypes.get(1).sourceInformation.endColumn); + + Assert.assertEquals("tag1", profile.tags.get(0).value); + Assert.assertEquals("tag2", profile.tags.get(1).value); + + Assert.assertNotNull(profile.tags.get(0).sourceInformation); + Assert.assertEquals(3, profile.tags.get(0).sourceInformation.startLine); + Assert.assertEquals(3, profile.tags.get(0).sourceInformation.endLine); + Assert.assertEquals(12, profile.tags.get(0).sourceInformation.startColumn); + Assert.assertEquals(15, profile.tags.get(0).sourceInformation.endColumn); + Assert.assertEquals(3, profile.tags.get(1).sourceInformation.startLine); + Assert.assertEquals(3, profile.tags.get(1).sourceInformation.endLine); + Assert.assertEquals(18, profile.tags.get(1).sourceInformation.startColumn); + Assert.assertEquals(21, profile.tags.get(1).sourceInformation.endColumn); + } } diff --git a/legend-engine-core/legend-engine-core-base/legend-engine-core-language-pure/legend-engine-protocol-pure/src/main/java/org/finos/legend/engine/protocol/pure/v1/model/packageableElement/domain/Profile.java b/legend-engine-core/legend-engine-core-base/legend-engine-core-language-pure/legend-engine-protocol-pure/src/main/java/org/finos/legend/engine/protocol/pure/v1/model/packageableElement/domain/Profile.java index 26f3065047f..e493d2f4337 100644 --- a/legend-engine-core/legend-engine-core-base/legend-engine-core-language-pure/legend-engine-protocol-pure/src/main/java/org/finos/legend/engine/protocol/pure/v1/model/packageableElement/domain/Profile.java +++ b/legend-engine-core/legend-engine-core-base/legend-engine-core-language-pure/legend-engine-protocol-pure/src/main/java/org/finos/legend/engine/protocol/pure/v1/model/packageableElement/domain/Profile.java @@ -14,6 +14,7 @@ package org.finos.legend.engine.protocol.pure.v1.model.packageableElement.domain; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; import org.finos.legend.engine.protocol.pure.v1.model.packageableElement.PackageableElement; import org.finos.legend.engine.protocol.pure.v1.model.packageableElement.PackageableElementVisitor; @@ -22,8 +23,10 @@ public class Profile extends PackageableElement { - public List stereotypes = Collections.emptyList(); - public List tags = Collections.emptyList(); + @JsonSerialize(contentConverter = ProfileStereotype.ToPathSerializerConverter.class) + public List stereotypes = Collections.emptyList(); + @JsonSerialize(contentConverter = ProfileTag.ToPathSerializerConverter.class) + public List tags = Collections.emptyList(); @Override public T accept(PackageableElementVisitor visitor) diff --git a/legend-engine-core/legend-engine-core-base/legend-engine-core-language-pure/legend-engine-protocol-pure/src/main/java/org/finos/legend/engine/protocol/pure/v1/model/packageableElement/domain/ProfileStereotype.java b/legend-engine-core/legend-engine-core-base/legend-engine-core-language-pure/legend-engine-protocol-pure/src/main/java/org/finos/legend/engine/protocol/pure/v1/model/packageableElement/domain/ProfileStereotype.java new file mode 100644 index 00000000000..91f48e64de5 --- /dev/null +++ b/legend-engine-core/legend-engine-core-base/legend-engine-core-language-pure/legend-engine-protocol-pure/src/main/java/org/finos/legend/engine/protocol/pure/v1/model/packageableElement/domain/ProfileStereotype.java @@ -0,0 +1,45 @@ +// Copyright 2024 Goldman Sachs +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package org.finos.legend.engine.protocol.pure.v1.model.packageableElement.domain; + +import com.fasterxml.jackson.databind.util.StdConverter; +import org.finos.legend.engine.protocol.pure.v1.model.SourceInformation; + +public class ProfileStereotype +{ + public String value; + public SourceInformation sourceInformation; + + public ProfileStereotype(String value, SourceInformation sourceInformation) + { + this.value = value; + this.sourceInformation = sourceInformation; + } + + public ProfileStereotype(String value) + { + this.value = value; + this.sourceInformation = null; + } + + public static class ToPathSerializerConverter extends StdConverter + { + @Override + public String convert(ProfileStereotype stereotype) + { + return stereotype.value; + } + } +} diff --git a/legend-engine-core/legend-engine-core-base/legend-engine-core-language-pure/legend-engine-protocol-pure/src/main/java/org/finos/legend/engine/protocol/pure/v1/model/packageableElement/domain/ProfileTag.java b/legend-engine-core/legend-engine-core-base/legend-engine-core-language-pure/legend-engine-protocol-pure/src/main/java/org/finos/legend/engine/protocol/pure/v1/model/packageableElement/domain/ProfileTag.java new file mode 100644 index 00000000000..c3cd3e6728f --- /dev/null +++ b/legend-engine-core/legend-engine-core-base/legend-engine-core-language-pure/legend-engine-protocol-pure/src/main/java/org/finos/legend/engine/protocol/pure/v1/model/packageableElement/domain/ProfileTag.java @@ -0,0 +1,45 @@ +// Copyright 2024 Goldman Sachs +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package org.finos.legend.engine.protocol.pure.v1.model.packageableElement.domain; + +import com.fasterxml.jackson.databind.util.StdConverter; +import org.finos.legend.engine.protocol.pure.v1.model.SourceInformation; + +public class ProfileTag +{ + public String value; + public SourceInformation sourceInformation; + + public ProfileTag(String value, SourceInformation sourceInformation) + { + this.value = value; + this.sourceInformation = sourceInformation; + } + + public ProfileTag(String value) + { + this.value = value; + this.sourceInformation = null; + } + + public static class ToPathSerializerConverter extends StdConverter + { + @Override + public String convert(ProfileTag tag) + { + return tag.value; + } + } +} diff --git a/legend-engine-core/legend-engine-core-base/legend-engine-core-language-pure/legend-engine-protocol-pure/src/main/java/org/finos/legend/engine/protocol/pure/v1/model/packageableElement/mapping/mappingTest/StoreTestData.java b/legend-engine-core/legend-engine-core-base/legend-engine-core-language-pure/legend-engine-protocol-pure/src/main/java/org/finos/legend/engine/protocol/pure/v1/model/packageableElement/mapping/mappingTest/StoreTestData.java index b8090bf8c06..6cc22c0ae5c 100644 --- a/legend-engine-core/legend-engine-core-base/legend-engine-core-language-pure/legend-engine-protocol-pure/src/main/java/org/finos/legend/engine/protocol/pure/v1/model/packageableElement/mapping/mappingTest/StoreTestData.java +++ b/legend-engine-core/legend-engine-core-base/legend-engine-core-language-pure/legend-engine-protocol-pure/src/main/java/org/finos/legend/engine/protocol/pure/v1/model/packageableElement/mapping/mappingTest/StoreTestData.java @@ -15,13 +15,17 @@ package org.finos.legend.engine.protocol.pure.v1.model.packageableElement.mapping.mappingTest; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; import org.finos.legend.engine.protocol.pure.v1.model.SourceInformation; +import org.finos.legend.engine.protocol.pure.v1.model.context.PackageableElementPointer; import org.finos.legend.engine.protocol.pure.v1.model.data.EmbeddedData; +import org.finos.legend.engine.protocol.pure.v1.model.packageableElement.store.StoreProviderPointer; public class StoreTestData { public String doc; - public String store; + @JsonSerialize(converter = PackageableElementPointer.ToPathSerializerConverter.class) + public StoreProviderPointer store; public EmbeddedData data; public SourceInformation sourceInformation; } diff --git a/legend-engine-core/legend-engine-core-testable/legend-engine-test-runner-mapping/src/main/java/org/finos/legend/engine/testable/mapping/extension/MappingTestRunner.java b/legend-engine-core/legend-engine-core-testable/legend-engine-test-runner-mapping/src/main/java/org/finos/legend/engine/testable/mapping/extension/MappingTestRunner.java index e84c3488fd8..9910a98788a 100644 --- a/legend-engine-core/legend-engine-core-testable/legend-engine-test-runner-mapping/src/main/java/org/finos/legend/engine/testable/mapping/extension/MappingTestRunner.java +++ b/legend-engine-core/legend-engine-core-testable/legend-engine-test-runner-mapping/src/main/java/org/finos/legend/engine/testable/mapping/extension/MappingTestRunner.java @@ -237,7 +237,7 @@ private List>> generateExecutionPlan(MappingTes { Root_meta_core_runtime_Runtime_Impl runtime = new Root_meta_core_runtime_Runtime_Impl(""); - List> connectionInfo = mappingTest.storeTestData.stream().map(testData -> Tuples.pair(testData.store, EmbeddedDataHelper.resolveEmbeddedDataInPMCD(context.getPureModelContextData(), testData.data))).collect(Collectors.toList()); + List> connectionInfo = mappingTest.storeTestData.stream().map(testData -> Tuples.pair(testData.store.path, EmbeddedDataHelper.resolveEmbeddedDataInPMCD(context.getPureModelContextData(), testData.data))).collect(Collectors.toList()); List>> connections = connectionInfo.stream() .map(pair -> this.factories.collect(f -> f.tryBuildTestConnectionsForStore(context.getDataElementIndex(), resolveStore(context.getPureModelContextData(), pair.getOne()), pair.getTwo())).select(Objects::nonNull).select(Optional::isPresent) .collect(Optional::get).getFirstOptional().orElseThrow(() -> new UnsupportedOperationException("Unsupported store type for:'" + pair.getOne() + "' mentioned while running the mapping tests"))).collect(Collectors.toList());