This is an automated email from the ASF dual-hosted git repository. nixon pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/atlas.git
commit c5c73250b48217c0cdcc706ac654f352938bea41 Author: Mandar Ambawane <mandar.ambaw...@freestoneinfotech.com> AuthorDate: Wed Feb 10 18:12:53 2021 +0530 ATLAS-4146 [Atlas: Glossary] On updating the related terms, UI allows the user to add the already added term --- .../org/apache/atlas/glossary/GlossaryService.java | 29 ++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/repository/src/main/java/org/apache/atlas/glossary/GlossaryService.java b/repository/src/main/java/org/apache/atlas/glossary/GlossaryService.java index 1da3279..df5fcbd 100644 --- a/repository/src/main/java/org/apache/atlas/glossary/GlossaryService.java +++ b/repository/src/main/java/org/apache/atlas/glossary/GlossaryService.java @@ -407,6 +407,11 @@ public class GlossaryService { throw new AtlasBaseException(AtlasErrorCode.INVALID_DISPLAY_NAME); } + String qualifiedName = getDuplicateGlossaryRelatedTerm(atlasGlossaryTerm); + if (StringUtils.isNotEmpty(qualifiedName)) { + throw new AtlasBaseException(AtlasErrorCode.GLOSSARY_TERM_ALREADY_EXISTS, qualifiedName); + } + AtlasGlossaryTerm storeObject = dataAccess.load(atlasGlossaryTerm); if (!storeObject.equals(atlasGlossaryTerm)) { atlasGlossaryTerm.setGuid(storeObject.getGuid()); @@ -1030,6 +1035,30 @@ public class GlossaryService { return StringUtils.containsAny(name, invalidNameChars); } + private String getDuplicateGlossaryRelatedTerm(AtlasGlossaryTerm atlasGlossaryTerm) throws AtlasBaseException { + + Map<AtlasGlossaryTerm.Relation, Set<AtlasRelatedTermHeader>> relatedTermsMap = atlasGlossaryTerm.getRelatedTerms(); + for (Map.Entry<AtlasGlossaryTerm.Relation, Set<AtlasRelatedTermHeader>> relatedTermsMapEntry : relatedTermsMap.entrySet()) { + Set<AtlasRelatedTermHeader> termHeaders = relatedTermsMapEntry.getValue(); + + if (CollectionUtils.isNotEmpty(termHeaders)) { + List<AtlasRelatedTermHeader> duplicateTermHeaders = termHeaders.stream() + .collect(Collectors.groupingBy(AtlasRelatedTermHeader::getTermGuid)) + .values().stream() + .filter(duplicates -> duplicates.size() > 1) + .flatMap(Collection::stream) + .collect(Collectors.toList()); + + if (CollectionUtils.isNotEmpty(duplicateTermHeaders) && duplicateTermHeaders.size() > 0) { + String dupTermGuid = duplicateTermHeaders.get(0).getTermGuid(); + AtlasGlossaryTerm glossaryTerm = getTerm(dupTermGuid); + return glossaryTerm.getQualifiedName(); + } + } + } + return StringUtils.EMPTY; + } + private String getDisplayText(AtlasGlossaryTerm term) { return term != null ? term.getName() : null; }