Commit 5fed48d9 by apoorvnaik

ATLAS-2659: IllegalStateException handling in Collection pipeline code

Change-Id: I01d983596ceb55b43e0d999a0e982ec006c9a246
parent 9e3af41b
...@@ -33,11 +33,13 @@ import org.apache.atlas.type.AtlasRelationshipType; ...@@ -33,11 +33,13 @@ import org.apache.atlas.type.AtlasRelationshipType;
import org.apache.atlas.type.AtlasTypeRegistry; import org.apache.atlas.type.AtlasTypeRegistry;
import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.collections.MapUtils; import org.apache.commons.collections.MapUtils;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import java.util.Collection; import java.util.Collection;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.Objects; import java.util.Objects;
import java.util.Set; import java.util.Set;
...@@ -228,11 +230,18 @@ public class GlossaryTermUtils extends GlossaryUtils { ...@@ -228,11 +230,18 @@ public class GlossaryTermUtils extends GlossaryUtils {
} }
private Map<String, AtlasRelatedTermHeader> getRelatedTermHeaders(Map<AtlasGlossaryTerm.Relation, Set<AtlasRelatedTermHeader>> relatedTerms, AtlasGlossaryTerm.Relation relation) { private Map<String, AtlasRelatedTermHeader> getRelatedTermHeaders(Map<AtlasGlossaryTerm.Relation, Set<AtlasRelatedTermHeader>> relatedTerms, AtlasGlossaryTerm.Relation relation) {
return Objects.nonNull(relatedTerms.get(relation)) ? if (Objects.nonNull(relatedTerms.get(relation))) {
relatedTerms.get(relation) Map<String, AtlasRelatedTermHeader> map = new HashMap<>();
.stream() for (AtlasRelatedTermHeader t : relatedTerms.get(relation)) {
.collect(Collectors.toMap(AtlasRelatedTermHeader::getTermGuid, t -> t)) : AtlasRelatedTermHeader header = map.get(t.getTermGuid());
Collections.EMPTY_MAP; if (header == null || (StringUtils.isEmpty(header.getRelationGuid()) && StringUtils.isNotEmpty(t.getRelationGuid()))) {
map.put(t.getTermGuid(), t);
}
}
return map;
} else {
return Collections.emptyMap();
}
} }
private boolean updatedExistingTermRelation(Map<String, AtlasRelatedTermHeader> existingTermHeaders, AtlasRelatedTermHeader header) { private boolean updatedExistingTermRelation(Map<String, AtlasRelatedTermHeader> existingTermHeaders, AtlasRelatedTermHeader header) {
...@@ -301,11 +310,18 @@ public class GlossaryTermUtils extends GlossaryUtils { ...@@ -301,11 +310,18 @@ public class GlossaryTermUtils extends GlossaryUtils {
} }
private Map<String, AtlasTermCategorizationHeader> getAssociatedCategories(final AtlasGlossaryTerm term) { private Map<String, AtlasTermCategorizationHeader> getAssociatedCategories(final AtlasGlossaryTerm term) {
return Objects.nonNull(term.getCategories()) ? if (Objects.nonNull(term.getCategories())) {
term.getCategories() Map<String, AtlasTermCategorizationHeader> map = new HashMap<>();
.stream() for (AtlasTermCategorizationHeader c : term.getCategories()) {
.collect(Collectors.toMap(AtlasTermCategorizationHeader::getCategoryGuid, c -> c)) : AtlasTermCategorizationHeader header = map.get(c.getCategoryGuid());
Collections.EMPTY_MAP; if (header == null || (StringUtils.isEmpty(header.getRelationGuid()) && StringUtils.isNotEmpty(c.getRelationGuid()))) {
map.put(c.getCategoryGuid(), c);
}
}
return map;
} else {
return Collections.emptyMap();
}
} }
private void createTermCategorizationRelationships(AtlasGlossaryTerm existing, Collection<AtlasTermCategorizationHeader> categories) throws AtlasBaseException { private void createTermCategorizationRelationships(AtlasGlossaryTerm existing, Collection<AtlasTermCategorizationHeader> categories) throws AtlasBaseException {
...@@ -354,12 +370,19 @@ public class GlossaryTermUtils extends GlossaryUtils { ...@@ -354,12 +370,19 @@ public class GlossaryTermUtils extends GlossaryUtils {
if (CollectionUtils.isNotEmpty(terms)) { if (CollectionUtils.isNotEmpty(terms)) {
Map<String, AtlasRelatedTermHeader> existingRelations; Map<String, AtlasRelatedTermHeader> existingRelations;
if (Objects.nonNull(existing.getRelatedTerms()) && Objects.nonNull(existing.getRelatedTerms().get(relation))) { if (Objects.nonNull(existing.getRelatedTerms()) && Objects.nonNull(existing.getRelatedTerms().get(relation))) {
existingRelations = existing.getRelatedTerms().get(relation).stream().collect(Collectors.toMap(AtlasRelatedTermHeader::getTermGuid, t -> t)); Map<String, AtlasRelatedTermHeader> map = new HashMap<>();
for (AtlasRelatedTermHeader t : existing.getRelatedTerms().get(relation)) {
AtlasRelatedTermHeader header = map.get(t.getTermGuid());
if (header == null || (StringUtils.isEmpty(header.getRelationGuid()) && StringUtils.isNotEmpty(t.getRelationGuid()))) {
map.put(t.getTermGuid(), t);
}
}
existingRelations = map;
} else { } else {
existingRelations = Collections.emptyMap(); existingRelations = Collections.emptyMap();
} }
for (AtlasRelatedTermHeader term : terms) { for (AtlasRelatedTermHeader term : terms) {
if (Objects.nonNull(existingRelations) && existingRelations.containsKey(term.getTermGuid())) { if (existingRelations.containsKey(term.getTermGuid())) {
if (DEBUG_ENABLED) { if (DEBUG_ENABLED) {
LOG.debug("Skipping existing term relation termGuid={}", term.getTermGuid()); LOG.debug("Skipping existing term relation termGuid={}", term.getTermGuid());
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment