This is an automated email from the ASF dual-hosted git repository.

nixon pushed a commit to branch branch-2.0
in repository https://gitbox.apache.org/repos/asf/atlas.git

commit d63812a9367cde73e91f7be32a10af0fcf0d5cf2
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
    
    (cherry picked from commit c5c73250b48217c0cdcc706ac654f352938bea41)
---
 .../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;
     }

Reply via email to