mirror of
https://github.com/open-metadata/OpenMetadata.git
synced 2026-01-08 05:26:19 +00:00
Bug Fix - Glossary export returns null values in relatedTerms column (#19173)
* Bug Fix - Glossary export returns null values in relatedTerms column * Add coverage test
This commit is contained in:
parent
6142f24bca
commit
15ea84a873
@ -803,26 +803,31 @@ public class GlossaryTermRepository extends EntityRepository<GlossaryTerm> {
|
||||
allRecords.addAll(fromRecords);
|
||||
allRecords.addAll(toRecords);
|
||||
|
||||
Map<UUID, List<EntityReference>> relatedTermsMap = new HashMap<>();
|
||||
Map<UUID, Set<UUID>> relatedTermIdsMap = new HashMap<>();
|
||||
|
||||
for (CollectionDAO.EntityRelationshipObject rec : allRecords) {
|
||||
UUID termId;
|
||||
UUID relatedTermId;
|
||||
UUID termId = UUID.fromString(rec.getFromId());
|
||||
UUID relatedTermId = UUID.fromString(rec.getToId());
|
||||
|
||||
if (termIdsSet.contains(rec.getFromId())) {
|
||||
termId = UUID.fromString(rec.getFromId());
|
||||
relatedTermId = UUID.fromString(rec.getToId());
|
||||
} else {
|
||||
termId = UUID.fromString(rec.getToId());
|
||||
relatedTermId = UUID.fromString(rec.getFromId());
|
||||
}
|
||||
|
||||
EntityReference relatedTermRef =
|
||||
new EntityReference().withId(relatedTermId).withType(Entity.GLOSSARY_TERM);
|
||||
|
||||
relatedTermsMap.computeIfAbsent(termId, k -> new ArrayList<>()).add(relatedTermRef);
|
||||
// store the bidirectional relationship in related-term map
|
||||
relatedTermIdsMap.computeIfAbsent(termId, k -> new HashSet<>()).add(relatedTermId);
|
||||
relatedTermIdsMap.computeIfAbsent(relatedTermId, k -> new HashSet<>()).add(termId);
|
||||
}
|
||||
|
||||
Map<UUID, List<EntityReference>> relatedTermsMap =
|
||||
relatedTermIdsMap.entrySet().stream()
|
||||
.collect(
|
||||
Collectors.toMap(
|
||||
Map.Entry::getKey,
|
||||
entry ->
|
||||
entry.getValue().stream()
|
||||
.map(
|
||||
id ->
|
||||
Entity.getEntityReferenceById(
|
||||
Entity.GLOSSARY_TERM, id, Include.ALL))
|
||||
.sorted(EntityUtil.compareEntityReference)
|
||||
.toList()));
|
||||
|
||||
if (!allRecords.isEmpty()) {
|
||||
for (GlossaryTerm term : entities) {
|
||||
List<EntityReference> relatedTerms =
|
||||
|
||||
@ -908,28 +908,28 @@ public class GlossaryResourceTest extends EntityResourceTest<Glossary, CreateGlo
|
||||
}
|
||||
// CSV Header "parent", "name", "displayName", "description", "synonyms", "relatedTerms",
|
||||
// "references",
|
||||
// "tags", "reviewers", "owners", "status", "extension"
|
||||
// "tags", "reviewers", "owner", "glossaryStatus", "extension"
|
||||
// Create two records
|
||||
List<String> createRecords =
|
||||
listOf(
|
||||
String.format(
|
||||
",g1,dsp1,\"dsc1,1\",h1;h2;h3,,term1;http://term1,PII.None,user:%s,user:%s,%s,\"glossaryTermDateCp:18-09-2024;glossaryTermDateTimeCp:18-09-2024 01:09:34;glossaryTermDurationCp:PT5H30M10S;glossaryTermEmailCp:admin@open-metadata.org;glossaryTermEntRefCp:team:\"\"%s\"\";glossaryTermEntRefListCp:user:\"\"%s\"\"|user:\"\"%s\"\"\"",
|
||||
",g1,dsp1,\"dsc1,1\",h1;h2;h3,g1.g1t1;g2.g2t1,term1;http://term1,PII.None,user:%s,user:%s,%s,\"glossaryTermDateCp:18-09-2024;glossaryTermDateTimeCp:18-09-2024 01:09:34;glossaryTermDurationCp:PT5H30M10S;glossaryTermEmailCp:admin@open-metadata.org;glossaryTermEntRefCp:team:\"\"%s\"\";glossaryTermEntRefListCp:user:\"\"%s\"\"|user:\"\"%s\"\"\"",
|
||||
reviewerRef.get(0), user1, "Approved", team11, user1, user2),
|
||||
String.format(
|
||||
",g2,dsp2,dsc3,h1;h3;h3,,term2;https://term2,PII.NonSensitive,,user:%s,%s,\"glossaryTermEnumCpMulti:val3|val2|val1|val4|val5;glossaryTermEnumCpSingle:single1;glossaryTermIntegerCp:7777;glossaryTermMarkdownCp:# Sample Markdown Text;glossaryTermNumberCp:123456;\"\"glossaryTermQueryCp:select col,row from table where id ='30';\"\";glossaryTermStringCp:sample string content;glossaryTermTimeCp:10:08:45;glossaryTermTimeIntervalCp:1726142300000:17261420000;glossaryTermTimestampCp:1726142400000\"",
|
||||
",g2,dsp2,dsc3,h1;h3;h3,g1.g1t1;g2.g2t1,term2;https://term2,PII.NonSensitive,,user:%s,%s,\"glossaryTermEnumCpMulti:val3|val2|val1|val4|val5;glossaryTermEnumCpSingle:single1;glossaryTermIntegerCp:7777;glossaryTermMarkdownCp:# Sample Markdown Text;glossaryTermNumberCp:123456;\"\"glossaryTermQueryCp:select col,row from table where id ='30';\"\";glossaryTermStringCp:sample string content;glossaryTermTimeCp:10:08:45;glossaryTermTimeIntervalCp:1726142300000:17261420000;glossaryTermTimestampCp:1726142400000\"",
|
||||
user1, "Approved"),
|
||||
String.format(
|
||||
"importExportTest.g1,g11,dsp2,dsc11,h1;h3;h3,,,,user:%s,team:%s,%s,",
|
||||
"importExportTest.g1,g11,dsp2,dsc11,h1;h3;h3,g1.g1t1;g2.g2t1,,,user:%s,team:%s,%s,",
|
||||
reviewerRef.get(0), team11, "Draft"));
|
||||
|
||||
// Update terms with change in description
|
||||
List<String> updateRecords =
|
||||
listOf(
|
||||
String.format(
|
||||
",g1,dsp1,new-dsc1,h1;h2;h3,,term1;http://term1,PII.None,user:%s,user:%s,%s,\"glossaryTermDateCp:18-09-2024;glossaryTermDateTimeCp:18-09-2024 01:09:34;glossaryTermDurationCp:PT5H30M10S;glossaryTermEmailCp:admin@open-metadata.org;glossaryTermEntRefCp:team:\"\"%s\"\";glossaryTermEntRefListCp:user:\"\"%s\"\"|user:\"\"%s\"\"\"",
|
||||
",g1,dsp1,new-dsc1,h1;h2;h3,g1.g1t1;importExportTest.g2;g2.g2t1,term1;http://term1,PII.None,user:%s,user:%s,%s,\"glossaryTermDateCp:18-09-2024;glossaryTermDateTimeCp:18-09-2024 01:09:34;glossaryTermDurationCp:PT5H30M10S;glossaryTermEmailCp:admin@open-metadata.org;glossaryTermEntRefCp:team:\"\"%s\"\";glossaryTermEntRefListCp:user:\"\"%s\"\"|user:\"\"%s\"\"\"",
|
||||
reviewerRef.get(0), user1, "Approved", team11, user1, user2),
|
||||
String.format(
|
||||
",g2,dsp2,new-dsc3,h1;h3;h3,,term2;https://term2,PII.NonSensitive,user:%s,user:%s,%s,\"glossaryTermEnumCpMulti:val3|val2|val1|val4|val5;glossaryTermEnumCpSingle:single1;glossaryTermIntegerCp:7777;glossaryTermMarkdownCp:# Sample Markdown Text;glossaryTermNumberCp:123456;\"\"glossaryTermQueryCp:select col,row from table where id ='30';\"\";glossaryTermStringCp:sample string content;glossaryTermTimeCp:10:08:45;glossaryTermTimeIntervalCp:1726142300000:17261420000;glossaryTermTimestampCp:1726142400000\"",
|
||||
",g2,dsp2,new-dsc3,h1;h3;h3,importExportTest.g1;g1.g1t1;g2.g2t1,term2;https://term2,PII.NonSensitive,user:%s,user:%s,%s,\"glossaryTermEnumCpMulti:val3|val2|val1|val4|val5;glossaryTermEnumCpSingle:single1;glossaryTermIntegerCp:7777;glossaryTermMarkdownCp:# Sample Markdown Text;glossaryTermNumberCp:123456;\"\"glossaryTermQueryCp:select col,row from table where id ='30';\"\";glossaryTermStringCp:sample string content;glossaryTermTimeCp:10:08:45;glossaryTermTimeIntervalCp:1726142300000:17261420000;glossaryTermTimestampCp:1726142400000\"",
|
||||
user1, user2, "Approved"),
|
||||
String.format(
|
||||
"importExportTest.g1,g11,dsp2,new-dsc11,h1;h3;h3,,,,user:%s,team:%s,%s,\"\"\"glossaryTermTableCol1Cp:row_1_col1_Value,,\"\";\"\"glossaryTermTableCol3Cp:row_1_col1_Value,row_1_col2_Value,row_1_col3_Value|row_2_col1_Value,row_2_col2_Value,row_2_col3_Value\"\"\"",
|
||||
@ -938,7 +938,7 @@ public class GlossaryResourceTest extends EntityResourceTest<Glossary, CreateGlo
|
||||
// Add new row to existing rows
|
||||
List<String> newRecords =
|
||||
listOf(
|
||||
",g3,dsp0,dsc0,h1;h2;h3,,term0;http://term0,PII.Sensitive,,,Approved,\"\"\"glossaryTermTableCol1Cp:row_1_col1_Value,,\"\";\"\"glossaryTermTableCol3Cp:row_1_col1_Value,row_1_col2_Value,row_1_col3_Value|row_2_col1_Value,row_2_col2_Value,row_2_col3_Value\"\"\"");
|
||||
",g3,dsp0,dsc0,h1;h2;h3,g1.g1t1;g2.g2t1,term0;http://term0,PII.Sensitive,,,Approved,\"\"\"glossaryTermTableCol1Cp:row_1_col1_Value,,\"\";\"\"glossaryTermTableCol3Cp:row_1_col1_Value,row_1_col2_Value,row_1_col3_Value|row_2_col1_Value,row_2_col2_Value,row_2_col3_Value\"\"\"");
|
||||
testImportExport(
|
||||
glossary.getName(), GlossaryCsv.HEADERS, createRecords, updateRecords, newRecords);
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user