Skip to content

Commit d8dde3c

Browse files
committed
improvements
1 parent 51e61ae commit d8dde3c

File tree

3 files changed

+17
-6
lines changed

3 files changed

+17
-6
lines changed

cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/applicationservice/UpdateAttachmentsHandler.java

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55

66
import static java.util.Objects.requireNonNull;
77

8+
import java.io.IOException;
9+
810
import com.sap.cds.CdsData;
911
import com.sap.cds.CdsDataProcessor;
1012
import com.sap.cds.CdsDataProcessor.Filter;
@@ -34,8 +36,6 @@
3436
import java.util.Map;
3537
import java.util.concurrent.atomic.AtomicBoolean;
3638
import java.util.concurrent.atomic.AtomicReference;
37-
import java.util.regex.Matcher;
38-
import java.util.regex.Pattern;
3939

4040
import org.slf4j.Logger;
4141
import org.slf4j.LoggerFactory;
@@ -52,7 +52,7 @@
5252
public class UpdateAttachmentsHandler implements EventHandler {
5353

5454
private static final Logger logger = LoggerFactory.getLogger(UpdateAttachmentsHandler.class);
55-
public static final Filter VALMAX_FILTER = (path, element, type) -> element.findAnnotation("Validation.Maximum")
55+
public static final Filter VALMAX_FILTER = (path, element, type) -> element.getName().contentEquals("content") && element.findAnnotation("Validation.Maximum")
5656
.isPresent();
5757

5858
private final ModifyAttachmentEventFactory eventFactory;
@@ -88,10 +88,20 @@ void processBefore(CdsUpdateEventContext context, List<CdsData> data) {
8888
boolean associationsAreUnchanged = associationsAreUnchanged(target, data);
8989

9090
if (ApplicationHandlerHelper.containsContentField(target, data) || !associationsAreUnchanged) {
91-
9291
// Check here for size of new attachments
9392
if (containsValMaxAnnotation(target, data)) {
93+
List<Attachments> attachments = ApplicationHandlerHelper.condenseAttachments(data, target);
9494
long maxSizeValue = FileSizeUtils.convertValMaxToInt(getValMaxValue(target, data));
95+
attachments.forEach(attachment -> {
96+
try {
97+
int size = attachment.getContent().available();
98+
if (size > maxSizeValue) {
99+
throw new IllegalArgumentException("Attachment " + attachment.getFileName() + " exceeds the maximum allowed size of " + maxSizeValue + " bytes.");
100+
}
101+
} catch (IOException e) {
102+
throw new RuntimeException("Failed to read attachment content size", e);
103+
}
104+
});
95105
logger.debug("Validation.Maximum annotation found with value: {}", maxSizeValue);
96106
}
97107

cds-feature-attachments/src/main/java/com/sap/cds/feature/attachments/handler/applicationservice/helper/FileSizeUtils.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package com.sap.cds.feature.attachments.handler.applicationservice.helper;
22

33
import java.math.BigDecimal;
4-
import java.util.Locale;
54
import java.util.Map;
65
import java.util.regex.Matcher;
76
import java.util.regex.Pattern;

samples/bookshop/srv/attachments.cds

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,9 @@ extend my.Books with {
77
attachments : Composition of many Attachments;
88
}
99

10-
annotate my.Books.attachments with @Validation.Maximum: '2MB';
10+
annotate my.Books.attachments with {
11+
content @Validation.Maximum: '20MB';
12+
}
1113

1214

1315
// Add UI component for attachments table to the Browse Books App

0 commit comments

Comments
 (0)