sheetalshah1007 commented on code in PR #478:
URL: https://github.com/apache/atlas/pull/478#discussion_r3189354287
##########
repository/src/main/java/org/apache/atlas/repository/store/graph/v2/EntityGraphMapper.java:
##########
@@ -1533,6 +1527,89 @@ private void mapRelationshipAttributes(AtlasEntity
entity, AtlasEntityType entit
LOG.debug("<== mapRelationshipAttributes({}, {})", op,
entity.getTypeName());
}
+ private void mapRelationshipAttribute(AtlasEntityType entityType, String
attrName, Object attrValue, AtlasVertex vertex, EntityOperation op,
EntityMutationContext context) throws AtlasBaseException {
+ LOG.debug("==> mapRelationshipAttribute({}, {})", attrName,
entityType.getTypeName());
+ Set<String> relationshipTypeNames =
entityType.getAttributeRelationshipTypes(attrName);
+
+ if
(shouldMapRelationshipAttributeUsingInferredType(relationshipTypeNames,
attrValue)) {
+ mapRelationshipAttributeUsingInferredType(entityType, attrName,
attrValue, vertex, op, context);
+ return;
+ }
+
+ if (attrValue instanceof Collection) {
+ Collection<?> relatedObjects = (Collection<?>) attrValue;
+
+ // Group related objects by their appropriate relationship type
+ // e.g., hive_table elements should use hive_table_db
relationship, delta_table elements should use delta_table_db
+ Map<String, List<Object>> elementsByRelationshipType =
groupElementsByRelationshipType(
+ relatedObjects, attrName, relationshipTypeNames);
+
+ for (Map.Entry<String, List<Object>> entry :
elementsByRelationshipType.entrySet()) {
+ String relationshipTypeName = entry.getKey();
+ List<Object> filteredElements = entry.getValue();
+
+ AtlasAttribute attribute =
entityType.getRelationshipAttribute(attrName, relationshipTypeName);
+
+ if (attribute != null &&
CollectionUtils.isNotEmpty(filteredElements)) {
+ // Use the same collection type as the original (List or
Set)
+ Object filteredValue =
createCollectionOfSameType(attrValue, filteredElements);
+
+ LOG.debug("Processing relationship type {} for attribute
{} with {} elements", relationshipTypeName, attrName, filteredElements.size());
+
+ mapAttribute(attribute, filteredValue, vertex, op,
context);
+ }
+ }
+ } else if (attrValue instanceof Map) {
+ LOG.warn("mapRelationshipAttribute: attribute {} on {}: Map-valued
relationship attribute is not supported; use a list or set of references",
+ attrName, entityType.getTypeName());
+ }
+
+ LOG.debug("<== mapRelationshipAttribute({}, {})", attrName,
entityType.getTypeName());
+ }
+
+ private boolean isAttributeWithMultipleRelationshipTypes(Set<String>
relationshipTypeNames) {
+ return CollectionUtils.isNotEmpty(relationshipTypeNames) &&
relationshipTypeNames.size() > 1;
+ }
+
+ private boolean
shouldMapRelationshipAttributeUsingInferredType(Set<String>
relationshipTypeNames, Object attrValue) {
+ return CollectionUtils.isEmpty(relationshipTypeNames)
Review Comment:
Removed it
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]