From e1ec388993929768696a82c3426bce7a3c227e77 Mon Sep 17 00:00:00 2001 From: Rishi Kunnath <82925475+rishikunnath2747@users.noreply.github.com> Date: Mon, 17 Nov 2025 10:20:27 +0530 Subject: [PATCH 1/9] Adding logs --- .../applicationservice/SDMCreateAttachmentsHandler.java | 3 +++ .../applicationservice/SDMUpdateAttachmentsHandler.java | 3 +++ .../applicationservice/helper/AttachmentsHandlerUtils.java | 6 ++++++ 3 files changed, 12 insertions(+) diff --git a/sdm/src/main/java/com/sap/cds/sdm/handler/applicationservice/SDMCreateAttachmentsHandler.java b/sdm/src/main/java/com/sap/cds/sdm/handler/applicationservice/SDMCreateAttachmentsHandler.java index c8468ccd..7a5ad129 100644 --- a/sdm/src/main/java/com/sap/cds/sdm/handler/applicationservice/SDMCreateAttachmentsHandler.java +++ b/sdm/src/main/java/com/sap/cds/sdm/handler/applicationservice/SDMCreateAttachmentsHandler.java @@ -54,6 +54,9 @@ public SDMCreateAttachmentsHandler( @HandlerOrder(HandlerOrder.EARLY) public void processBefore(CdsCreateEventContext context, List data) throws IOException { // Get the combined mapping of attachment composition paths and names + logger.info("Processing SDM Create Attachments Handler Before Create Event"); + logger.info("CDS Target Entity: " + context.getTarget().getQualifiedName()); + logger.info("CDS Data : " + data); Map compositionPathMapping = AttachmentsHandlerUtils.getAttachmentPathMapping( context.getModel(), context.getTarget(), persistenceService); diff --git a/sdm/src/main/java/com/sap/cds/sdm/handler/applicationservice/SDMUpdateAttachmentsHandler.java b/sdm/src/main/java/com/sap/cds/sdm/handler/applicationservice/SDMUpdateAttachmentsHandler.java index b87c4aec..3f508815 100644 --- a/sdm/src/main/java/com/sap/cds/sdm/handler/applicationservice/SDMUpdateAttachmentsHandler.java +++ b/sdm/src/main/java/com/sap/cds/sdm/handler/applicationservice/SDMUpdateAttachmentsHandler.java @@ -48,6 +48,9 @@ public SDMUpdateAttachmentsHandler( @Before @HandlerOrder(HandlerOrder.EARLY) public void processBefore(CdsUpdateEventContext context, List data) throws IOException { + logger.info("Processing SDM Update Attachments Handler Before Update Event"); + logger.info("CDS Target Entity: " + context.getTarget().getQualifiedName()); + logger.info("CDS Data : " + data); Map compositionPathMapping = AttachmentsHandlerUtils.getAttachmentPathMapping( context.getModel(), context.getTarget(), persistenceService); diff --git a/sdm/src/main/java/com/sap/cds/sdm/handler/applicationservice/helper/AttachmentsHandlerUtils.java b/sdm/src/main/java/com/sap/cds/sdm/handler/applicationservice/helper/AttachmentsHandlerUtils.java index 2a67f668..84c6a626 100644 --- a/sdm/src/main/java/com/sap/cds/sdm/handler/applicationservice/helper/AttachmentsHandlerUtils.java +++ b/sdm/src/main/java/com/sap/cds/sdm/handler/applicationservice/helper/AttachmentsHandlerUtils.java @@ -92,6 +92,9 @@ public static Map getAttachmentPathMapping( private static void processDirectAttachmentComposition( CdsEntity entity, Map pathMapping, Object composition) { + logger.info("Processing direct attachment composition for entity: " + entity.getQualifiedName()); + logger.info("Composition details: " + composition.toString()); + logger.info("Current path mapping: " + pathMapping.toString()); String compositionName = ((com.sap.cds.reflect.CdsElement) composition).getName(); if (((com.sap.cds.reflect.CdsElement) composition).getType().isAssociation()) { CdsAssociationType associationType = @@ -116,6 +119,9 @@ private static void processNestedAttachmentComposition( SDMAttachmentsReader reader, Map pathMapping, Object composition) { + logger.info("Processing nested attachment composition for entity: " + entity.getQualifiedName()); + logger.info("Composition details: " + composition.toString()); + logger.info("Current path mapping: " + pathMapping.toString()); String compositionName = ((com.sap.cds.reflect.CdsElement) composition).getName(); String compositionTargetEntityName = ""; From cad21d160fad1fa414ea4cd7b84e4434fbe3a586 Mon Sep 17 00:00:00 2001 From: Rishi Kunnath <82925475+rishikunnath2747@users.noreply.github.com> Date: Tue, 18 Nov 2025 09:55:03 +0530 Subject: [PATCH 2/9] fix namespace bug --- .../helper/AttachmentsHandlerUtils.java | 40 +++++++++---------- 1 file changed, 19 insertions(+), 21 deletions(-) diff --git a/sdm/src/main/java/com/sap/cds/sdm/handler/applicationservice/helper/AttachmentsHandlerUtils.java b/sdm/src/main/java/com/sap/cds/sdm/handler/applicationservice/helper/AttachmentsHandlerUtils.java index 61c41987..2138e3b0 100644 --- a/sdm/src/main/java/com/sap/cds/sdm/handler/applicationservice/helper/AttachmentsHandlerUtils.java +++ b/sdm/src/main/java/com/sap/cds/sdm/handler/applicationservice/helper/AttachmentsHandlerUtils.java @@ -92,7 +92,8 @@ public static Map getAttachmentPathMapping( private static void processDirectAttachmentComposition( CdsEntity entity, Map pathMapping, Object composition) { - logger.info("Processing direct attachment composition for entity: " + entity.getQualifiedName()); + logger.info( + "Processing direct attachment composition for entity: " + entity.getQualifiedName()); logger.info("Composition details: " + composition.toString()); logger.info("Current path mapping: " + pathMapping.toString()); String compositionName = ((com.sap.cds.reflect.CdsElement) composition).getName(); @@ -105,9 +106,7 @@ private static void processDirectAttachmentComposition( : null; if (isDirectAttachmentTargetAspect(targetAspect)) { - String serviceName = entity.getQualifiedName().split("\\.")[0]; - String entityName = entity.getName(); - String directPath = serviceName + "." + entityName + "." + compositionName; + String directPath = entity.getQualifiedName() + "." + compositionName; pathMapping.put(directPath, directPath); } } @@ -119,7 +118,8 @@ private static void processNestedAttachmentComposition( SDMAttachmentsReader reader, Map pathMapping, Object composition) { - logger.info("Processing nested attachment composition for entity: " + entity.getQualifiedName()); + logger.info( + "Processing nested attachment composition for entity: " + entity.getQualifiedName()); logger.info("Composition details: " + composition.toString()); logger.info("Current path mapping: " + pathMapping.toString()); String compositionName = ((com.sap.cds.reflect.CdsElement) composition).getName(); @@ -172,7 +172,11 @@ private static void processAttachmentPaths( String actualPath = buildActualPath(entity, compositionName, attachmentPath); if (entityPath != null && actualPath != null) { - pathMapping.put(entityPath, actualPath); + // Only add the mapping if the key doesn't already exist + // This preserves direct attachment mappings from being overwritten by nested ones + if (!pathMapping.containsKey(entityPath)) { + pathMapping.put(entityPath, actualPath); + } } } } @@ -225,17 +229,11 @@ private static String buildEntityPath( try { String[] pathParts = attachmentPath.split("\\."); if (pathParts.length >= 3) { - // Get the service name (first part) - String serviceName = pathParts[0]; - - // Get the target entity name (without service prefix) - String targetEntityName = targetEntity.getName(); - // Get the attachment part (last part) String attachmentPart = pathParts[pathParts.length - 1]; - // Build the entity path: ServiceName.EntityName.attachments - return serviceName + "." + targetEntityName + "." + attachmentPart; + // Build the entity path using the full qualified name of the parent entity + return parentEntity.getQualifiedName() + "." + attachmentPart; } } catch (Exception e) { logger.warn(SDMConstants.FETCH_ATTACHMENT_COMPOSITION_ERROR, e.getMessage()); @@ -248,15 +246,15 @@ private static String buildActualPath( try { String[] pathParts = attachmentPath.split("\\."); if (pathParts.length >= 3) { - // Get the service name (first part) - String serviceName = pathParts[0]; - - // Replace the entity name with the composition property name - // Keep the attachment part (last part) + // Get the attachment part (last part) String attachmentPart = pathParts[pathParts.length - 1]; - // Build the new path: ServiceName.compositionPropertyName.attachments - return serviceName + "." + compositionPropertyName + "." + attachmentPart; + // Build the new path using parent entity qualified name + composition property name + return parentEntity.getQualifiedName() + + "." + + compositionPropertyName + + "." + + attachmentPart; } } catch (Exception e) { logger.warn(SDMConstants.FETCH_ATTACHMENT_COMPOSITION_ERROR, e.getMessage()); From bdf7fbf5507b3b7b14a22a8f8c3cb82ee052e1e6 Mon Sep 17 00:00:00 2001 From: Rishi Kunnath <82925475+rishikunnath2747@users.noreply.github.com> Date: Tue, 18 Nov 2025 09:56:39 +0530 Subject: [PATCH 3/9] adding logs --- .../applicationservice/SDMCreateAttachmentsHandler.java | 3 +++ .../applicationservice/helper/AttachmentsHandlerUtils.java | 2 ++ 2 files changed, 5 insertions(+) diff --git a/sdm/src/main/java/com/sap/cds/sdm/handler/applicationservice/SDMCreateAttachmentsHandler.java b/sdm/src/main/java/com/sap/cds/sdm/handler/applicationservice/SDMCreateAttachmentsHandler.java index a56a7d2a..3ef5f8d6 100644 --- a/sdm/src/main/java/com/sap/cds/sdm/handler/applicationservice/SDMCreateAttachmentsHandler.java +++ b/sdm/src/main/java/com/sap/cds/sdm/handler/applicationservice/SDMCreateAttachmentsHandler.java @@ -54,6 +54,9 @@ public SDMCreateAttachmentsHandler( @HandlerOrder(HandlerOrder.EARLY) public void processBefore(CdsCreateEventContext context, List data) throws IOException { // Get comprehensive attachment composition details for each entity + logger.info("CDS Data : " + data); + logger.info("Target Entity : " + context.getTarget().getQualifiedName()); + logger.info("CDS Model : " + context.getModel()); for (CdsData entityData : data) { Map> attachmentCompositionDetails = AttachmentsHandlerUtils.getAttachmentCompositionDetails( diff --git a/sdm/src/main/java/com/sap/cds/sdm/handler/applicationservice/helper/AttachmentsHandlerUtils.java b/sdm/src/main/java/com/sap/cds/sdm/handler/applicationservice/helper/AttachmentsHandlerUtils.java index 2138e3b0..b22db7e6 100644 --- a/sdm/src/main/java/com/sap/cds/sdm/handler/applicationservice/helper/AttachmentsHandlerUtils.java +++ b/sdm/src/main/java/com/sap/cds/sdm/handler/applicationservice/helper/AttachmentsHandlerUtils.java @@ -74,6 +74,8 @@ public static Map getAttachmentPathMapping( .compositions() .forEach( composition -> processDirectAttachmentComposition(entity, pathMapping, composition)); + + logger.info("Path mapping after direct attachments: " + pathMapping.toString()); // Process nested attachments entity From 1f86175c0677583979a301cc59dc9b9f88bf83fa Mon Sep 17 00:00:00 2001 From: Rishi Kunnath <82925475+rishikunnath2747@users.noreply.github.com> Date: Tue, 18 Nov 2025 09:57:55 +0530 Subject: [PATCH 4/9] fix spotless --- .../applicationservice/helper/AttachmentsHandlerUtils.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdm/src/main/java/com/sap/cds/sdm/handler/applicationservice/helper/AttachmentsHandlerUtils.java b/sdm/src/main/java/com/sap/cds/sdm/handler/applicationservice/helper/AttachmentsHandlerUtils.java index b22db7e6..062f35e3 100644 --- a/sdm/src/main/java/com/sap/cds/sdm/handler/applicationservice/helper/AttachmentsHandlerUtils.java +++ b/sdm/src/main/java/com/sap/cds/sdm/handler/applicationservice/helper/AttachmentsHandlerUtils.java @@ -74,7 +74,7 @@ public static Map getAttachmentPathMapping( .compositions() .forEach( composition -> processDirectAttachmentComposition(entity, pathMapping, composition)); - + logger.info("Path mapping after direct attachments: " + pathMapping.toString()); // Process nested attachments From 1abc86ea8d074e83a3ab767b8b3cba0aec32edee Mon Sep 17 00:00:00 2001 From: Rishi Kunnath <82925475+rishikunnath2747@users.noreply.github.com> Date: Tue, 18 Nov 2025 11:32:48 +0530 Subject: [PATCH 5/9] removing logs --- .../SDMCreateAttachmentsHandler.java | 3 --- .../helper/AttachmentsHandlerUtils.java | 10 ---------- 2 files changed, 13 deletions(-) diff --git a/sdm/src/main/java/com/sap/cds/sdm/handler/applicationservice/SDMCreateAttachmentsHandler.java b/sdm/src/main/java/com/sap/cds/sdm/handler/applicationservice/SDMCreateAttachmentsHandler.java index 3ef5f8d6..b1f79db0 100644 --- a/sdm/src/main/java/com/sap/cds/sdm/handler/applicationservice/SDMCreateAttachmentsHandler.java +++ b/sdm/src/main/java/com/sap/cds/sdm/handler/applicationservice/SDMCreateAttachmentsHandler.java @@ -53,10 +53,7 @@ public SDMCreateAttachmentsHandler( @Before @HandlerOrder(HandlerOrder.EARLY) public void processBefore(CdsCreateEventContext context, List data) throws IOException { - // Get comprehensive attachment composition details for each entity - logger.info("CDS Data : " + data); logger.info("Target Entity : " + context.getTarget().getQualifiedName()); - logger.info("CDS Model : " + context.getModel()); for (CdsData entityData : data) { Map> attachmentCompositionDetails = AttachmentsHandlerUtils.getAttachmentCompositionDetails( diff --git a/sdm/src/main/java/com/sap/cds/sdm/handler/applicationservice/helper/AttachmentsHandlerUtils.java b/sdm/src/main/java/com/sap/cds/sdm/handler/applicationservice/helper/AttachmentsHandlerUtils.java index 062f35e3..64bbc588 100644 --- a/sdm/src/main/java/com/sap/cds/sdm/handler/applicationservice/helper/AttachmentsHandlerUtils.java +++ b/sdm/src/main/java/com/sap/cds/sdm/handler/applicationservice/helper/AttachmentsHandlerUtils.java @@ -75,8 +75,6 @@ public static Map getAttachmentPathMapping( .forEach( composition -> processDirectAttachmentComposition(entity, pathMapping, composition)); - logger.info("Path mapping after direct attachments: " + pathMapping.toString()); - // Process nested attachments entity .compositions() @@ -94,10 +92,6 @@ public static Map getAttachmentPathMapping( private static void processDirectAttachmentComposition( CdsEntity entity, Map pathMapping, Object composition) { - logger.info( - "Processing direct attachment composition for entity: " + entity.getQualifiedName()); - logger.info("Composition details: " + composition.toString()); - logger.info("Current path mapping: " + pathMapping.toString()); String compositionName = ((com.sap.cds.reflect.CdsElement) composition).getName(); if (((com.sap.cds.reflect.CdsElement) composition).getType().isAssociation()) { CdsAssociationType associationType = @@ -120,10 +114,6 @@ private static void processNestedAttachmentComposition( SDMAttachmentsReader reader, Map pathMapping, Object composition) { - logger.info( - "Processing nested attachment composition for entity: " + entity.getQualifiedName()); - logger.info("Composition details: " + composition.toString()); - logger.info("Current path mapping: " + pathMapping.toString()); String compositionName = ((com.sap.cds.reflect.CdsElement) composition).getName(); String compositionTargetEntityName = ""; From 24932b2c6f54c922bdfb283aa94a0b0682d6f754 Mon Sep 17 00:00:00 2001 From: Rishi Kunnath <82925475+rishikunnath2747@users.noreply.github.com> Date: Tue, 18 Nov 2025 11:46:55 +0530 Subject: [PATCH 6/9] update pom for testing --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index cd23fc4b..d5a84cfb 100644 --- a/pom.xml +++ b/pom.xml @@ -23,7 +23,7 @@ - 1.6.1-SNAPSHOT + 1.0.0-RC1 17 ${java.version} ${java.version} From 4bd39e4cade85ffdf41027e49dd6ebebf6ef1614 Mon Sep 17 00:00:00 2001 From: Rishi Kunnath <82925475+rishikunnath2747@users.noreply.github.com> Date: Tue, 18 Nov 2025 11:53:34 +0530 Subject: [PATCH 7/9] sonar fix --- .../helper/AttachmentsHandlerUtils.java | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/sdm/src/main/java/com/sap/cds/sdm/handler/applicationservice/helper/AttachmentsHandlerUtils.java b/sdm/src/main/java/com/sap/cds/sdm/handler/applicationservice/helper/AttachmentsHandlerUtils.java index 64bbc588..55b693aa 100644 --- a/sdm/src/main/java/com/sap/cds/sdm/handler/applicationservice/helper/AttachmentsHandlerUtils.java +++ b/sdm/src/main/java/com/sap/cds/sdm/handler/applicationservice/helper/AttachmentsHandlerUtils.java @@ -163,12 +163,10 @@ private static void processAttachmentPaths( String entityPath = buildEntityPath(entity, targetEntity, attachmentPath); String actualPath = buildActualPath(entity, compositionName, attachmentPath); - if (entityPath != null && actualPath != null) { - // Only add the mapping if the key doesn't already exist - // This preserves direct attachment mappings from being overwritten by nested ones - if (!pathMapping.containsKey(entityPath)) { - pathMapping.put(entityPath, actualPath); - } + // Only add the mapping if both paths are non-null and the key doesn't already exist + // This preserves direct attachment mappings from being overwritten by nested ones + if (entityPath != null && actualPath != null && !pathMapping.containsKey(entityPath)) { + pathMapping.put(entityPath, actualPath); } } } From 8ceba4769ae0a6f5070e652dc83861f018b82afc Mon Sep 17 00:00:00 2001 From: Rishi Kunnath <82925475+rishikunnath2747@users.noreply.github.com> Date: Tue, 18 Nov 2025 13:16:24 +0530 Subject: [PATCH 8/9] fix nested entities issue --- .../helper/AttachmentsHandlerUtils.java | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/sdm/src/main/java/com/sap/cds/sdm/handler/applicationservice/helper/AttachmentsHandlerUtils.java b/sdm/src/main/java/com/sap/cds/sdm/handler/applicationservice/helper/AttachmentsHandlerUtils.java index 55b693aa..a55a3e5f 100644 --- a/sdm/src/main/java/com/sap/cds/sdm/handler/applicationservice/helper/AttachmentsHandlerUtils.java +++ b/sdm/src/main/java/com/sap/cds/sdm/handler/applicationservice/helper/AttachmentsHandlerUtils.java @@ -222,8 +222,17 @@ private static String buildEntityPath( // Get the attachment part (last part) String attachmentPart = pathParts[pathParts.length - 1]; - // Build the entity path using the full qualified name of the parent entity - return parentEntity.getQualifiedName() + "." + attachmentPart; + // For nested compositions, use the full target entity path to ensure uniqueness + // For direct attachments on the parent entity, the targetEntity equals parentEntity + String entityPath; + if (targetEntity.getQualifiedName().equals(parentEntity.getQualifiedName())) { + // Direct attachment: use parent entity path + entityPath = parentEntity.getQualifiedName() + "." + attachmentPart; + } else { + // Nested attachment: use target entity path to ensure uniqueness + entityPath = targetEntity.getQualifiedName() + "." + attachmentPart; + } + return entityPath; } } catch (Exception e) { logger.warn(SDMConstants.FETCH_ATTACHMENT_COMPOSITION_ERROR, e.getMessage()); From dd46f24f176476d556b12694eacd6ec26c9e1f8e Mon Sep 17 00:00:00 2001 From: Rishi Kunnath <82925475+rishikunnath2747@users.noreply.github.com> Date: Tue, 18 Nov 2025 18:43:30 +0530 Subject: [PATCH 9/9] fix pom --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index d5a84cfb..cd23fc4b 100644 --- a/pom.xml +++ b/pom.xml @@ -23,7 +23,7 @@ - 1.0.0-RC1 + 1.6.1-SNAPSHOT 17 ${java.version} ${java.version}