Improved: Improve FileUtil to generate a zip fil with multiple entries

Add a new function zipFileStreams to extend a current zipFileStream (that permit to generate a zip file from a single file) to support the zip file creation from multiple file.

The function take a map as fileName attendee in the zip and as value the inputStream related.
diff --git a/framework/base/src/main/java/org/apache/ofbiz/base/util/FileUtil.java b/framework/base/src/main/java/org/apache/ofbiz/base/util/FileUtil.java
index 972d83e..774ae88 100644
--- a/framework/base/src/main/java/org/apache/ofbiz/base/util/FileUtil.java
+++ b/framework/base/src/main/java/org/apache/ofbiz/base/util/FileUtil.java
@@ -39,6 +39,7 @@
 import java.util.HashSet;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 import java.util.UUID;
 import java.util.zip.Deflater;
@@ -342,8 +343,28 @@
      * @throws IOException
      */
     public static ByteArrayInputStream zipFileStream(InputStream fileStream, String fileName) throws IOException {
-        if (fileStream == null) return null;
-        if (fileName == null) fileName = UUID.randomUUID().toString();
+        if (fileStream == null) {
+            return null;
+        }
+        if (fileName == null) {
+            fileName = UUID.randomUUID().toString();
+        }
+
+        // Create zip file from content input stream
+        return zipFileStreams(Map.of(fileName, fileStream));
+    }
+
+    /**
+     * For map with entries as [fileName: inputStream], create a zip stream containing all given files
+     * @param files
+     * @return
+     * @throws IOException
+     */
+    public static ByteArrayInputStream zipFileStreams(Map<String, InputStream> files) throws IOException {
+        if (files == null) {
+            return null;
+        }
+
         // Create zip file from content input stream
         String zipFileName = UUID.randomUUID().toString() + ".zip";
         String zipFilePath = UtilProperties.getPropertyValue("general", "http.upload.tmprepository", "runtime/tmp");
@@ -351,12 +372,16 @@
         ZipOutputStream zos = new ZipOutputStream(fos);
         zos.setMethod(ZipOutputStream.DEFLATED);
         zos.setLevel(Deflater.BEST_COMPRESSION);
-        ZipEntry ze = new ZipEntry(fileName);
-        zos.putNextEntry(ze);
-        int len;
-        byte[] bufferData = new byte[8192];
-        while ((len = fileStream.read(bufferData)) > 0) {
-            zos.write(bufferData, 0, len);
+
+        // parse all map to set in the zip stream
+        for (String fileName : files.keySet()) {
+            ZipEntry ze = new ZipEntry(fileName);
+            zos.putNextEntry(ze);
+            int len;
+            byte[] bufferData = new byte[8192];
+            while ((len = files.get(fileName).read(bufferData)) > 0) {
+                zos.write(bufferData, 0, len);
+            }
         }
         zos.closeEntry();
         zos.close();