(struts) branch feature/WW-5371-modern-upload updated: WW-5371 Document how to use the new file upload logic

2023-12-11 Thread lukaszlenart
This is an automated email from the ASF dual-hosted git repository.

lukaszlenart pushed a commit to branch feature/WW-5371-modern-upload
in repository https://gitbox.apache.org/repos/asf/struts.git


The following commit(s) were added to refs/heads/feature/WW-5371-modern-upload 
by this push:
 new 3ef9ade89 WW-5371 Document how to use the new file upload logic
3ef9ade89 is described below

commit 3ef9ade8902a63bb560892453eeca02bfddefc78
Author: Lukasz Lenart 
AuthorDate: Tue Dec 12 08:35:31 2023 +0100

WW-5371 Document how to use the new file upload logic
---
 .../apache/struts2/action/UploadedFilesAware.java  |   2 +-
 .../multipart/JakartaStreamMultiPartRequest.java   |  13 +--
 .../interceptor/ActionFileUploadInterceptor.java   | 117 +++--
 .../struts2/interceptor/FileUploadInterceptor.java |   3 +
 4 files changed, 45 insertions(+), 90 deletions(-)

diff --git 
a/core/src/main/java/org/apache/struts2/action/UploadedFilesAware.java 
b/core/src/main/java/org/apache/struts2/action/UploadedFilesAware.java
index 635e0b2d4..92ec9c98b 100644
--- a/core/src/main/java/org/apache/struts2/action/UploadedFilesAware.java
+++ b/core/src/main/java/org/apache/struts2/action/UploadedFilesAware.java
@@ -33,7 +33,7 @@ public interface UploadedFilesAware {
  * Notifies action about the multiple uploaded files, when a single file 
is uploaded
  * the list will have just one element
  *
- * @param uploadedFiles a list of {@link UploadedFile}.
+ * @param uploadedFiles a list of {@link UploadedFile}, cannot be null. It 
can be empty.
  */
 void withUploadedFiles(List uploadedFiles);
 
diff --git 
a/core/src/main/java/org/apache/struts2/dispatcher/multipart/JakartaStreamMultiPartRequest.java
 
b/core/src/main/java/org/apache/struts2/dispatcher/multipart/JakartaStreamMultiPartRequest.java
index 2618d6ace..763b5d634 100644
--- 
a/core/src/main/java/org/apache/struts2/dispatcher/multipart/JakartaStreamMultiPartRequest.java
+++ 
b/core/src/main/java/org/apache/struts2/dispatcher/multipart/JakartaStreamMultiPartRequest.java
@@ -44,6 +44,7 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.UUID;
+import java.util.stream.Collectors;
 
 /**
  * Multi-part form data request adapter for Jakarta Commons FileUpload package 
that
@@ -109,16 +110,12 @@ public class JakartaStreamMultiPartRequest extends 
AbstractMultiPartRequest {
 return null;
 }
 
-List files = new ArrayList<>(infos.size());
-for (FileInfo fileInfo : infos) {
-UploadedFile file = 
StrutsUploadedFile.Builder.create(fileInfo.getFile())
+return infos.stream().map(fileInfo ->
+StrutsUploadedFile.Builder.create(fileInfo.getFile())
 .withContentType(fileInfo.contentType)
 .withOriginalName(fileInfo.originalName)
-.build();
-files.add(file);
-}
-
-return files.toArray(new UploadedFile[0]);
+.build()
+).toArray(UploadedFile[]::new);
 }
 
 /* (non-Javadoc)
diff --git 
a/core/src/main/java/org/apache/struts2/interceptor/ActionFileUploadInterceptor.java
 
b/core/src/main/java/org/apache/struts2/interceptor/ActionFileUploadInterceptor.java
index 1642a890b..c42d125af 100644
--- 
a/core/src/main/java/org/apache/struts2/interceptor/ActionFileUploadInterceptor.java
+++ 
b/core/src/main/java/org/apache/struts2/interceptor/ActionFileUploadInterceptor.java
@@ -33,105 +33,62 @@ import java.util.Enumeration;
 import java.util.List;
 
 /**
- * 
  * 
  * Interceptor that is based off of {@link MultiPartRequestWrapper}, which is 
automatically applied for any request that
- * includes a file. It adds the following parameters, where [File Name] is the 
name given to the file uploaded by the
- * HTML form:
+ * includes a file when the support for multi-part request is enabled,
+ * see https://struts.apache.org/core-developers/file-upload.html#disabling-file-upload-support";>Disabling
 file upload.
  * 
- * 
- *
- * [File Name] : File - the actual File
- *
- * [File Name]ContentType : String - the content type of the file
  *
- * [File Name]FileName : String - the actual name of the file uploaded 
(not the HTML name)
- *
- * 
- *
- * You can get access to these files by merely providing setters in your 
action that correspond to any of the three
- * patterns above, such as setDocument(File document), 
setDocumentContentType(String contentType), etc.
- * See the example code section.
+ * 
+ * You can get access to these files by implementing {@link 
UploadedFilesAware} interface. The interceptor will then
+ * call {@link UploadedFilesAware#withUploadedFiles(List)} when there are 
files which were accepted during the upload process.
  * 
  *
- *  This interceptor will add several field errors, assuming that the 
action implements {@link ValidationAware}.
+ * 
+ * This interceptor will add several field errors, assuming that the action

(struts) branch feature/http-params-case updated: WW-5370 Uses TreeMap with case-insensitive comparator

2023-12-11 Thread lukaszlenart
This is an automated email from the ASF dual-hosted git repository.

lukaszlenart pushed a commit to branch feature/http-params-case
in repository https://gitbox.apache.org/repos/asf/struts.git


The following commit(s) were added to refs/heads/feature/http-params-case by 
this push:
 new c40978f8c WW-5370 Uses TreeMap with case-insensitive comparator
c40978f8c is described below

commit c40978f8cd29d510f6b9d214db141dc6becc7342
Author: Lukasz Lenart 
AuthorDate: Tue Dec 12 08:52:57 2023 +0100

WW-5370 Uses TreeMap with case-insensitive comparator
---
 .../java/org/apache/struts2/dispatcher/HttpParameters.java   | 12 +---
 1 file changed, 5 insertions(+), 7 deletions(-)

diff --git 
a/core/src/main/java/org/apache/struts2/dispatcher/HttpParameters.java 
b/core/src/main/java/org/apache/struts2/dispatcher/HttpParameters.java
index f35d47583..e44f06273 100644
--- a/core/src/main/java/org/apache/struts2/dispatcher/HttpParameters.java
+++ b/core/src/main/java/org/apache/struts2/dispatcher/HttpParameters.java
@@ -34,7 +34,8 @@ public class HttpParameters implements Map 
{
 final private Map parameters;
 
 private HttpParameters(Map parameters) {
-this.parameters = parameters;
+this.parameters = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
+this.parameters.putAll(parameters);
 }
 
 @SuppressWarnings("rawtypes")
@@ -43,7 +44,7 @@ public class HttpParameters implements Map 
{
 }
 
 public static Builder create() {
-return new Builder(new HashMap<>());
+return new Builder(new TreeMap<>(String.CASE_INSENSITIVE_ORDER));
 }
 
 public HttpParameters remove(Set paramsToRemove) {
@@ -60,7 +61,7 @@ public class HttpParameters implements Map 
{
 }
 
 public boolean contains(String name) {
-return parameters.keySet().stream().anyMatch(p -> 
p.equalsIgnoreCase(name));
+return parameters.containsKey(name);
 }
 
 /**
@@ -112,10 +113,7 @@ public class HttpParameters implements Map {
 @Override
 public Parameter get(Object key) {
 if (key != null && contains(String.valueOf(key))) {
-return parameters.entrySet().stream()
-.filter(p -> p.getKey().equalsIgnoreCase(String.valueOf(key)))
-.findFirst().map(Entry::getValue)
-.orElse(new Parameter.Empty(String.valueOf(key)));
+return parameters.get(key);
 } else {
 return new Parameter.Empty(String.valueOf(key));
 }