This is an automated email from the ASF dual-hosted git repository.

psxjoy pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/fesod.git


The following commit(s) were added to refs/heads/main by this push:
     new bf3d23b5 fix: custom converters not being inherited from parent write 
holders (#893)
bf3d23b5 is described below

commit bf3d23b5a3770ffe6a96db6b846218847fa25f93
Author: Uğur Tafralı <[email protected]>
AuthorDate: Fri Apr 10 06:10:33 2026 +0300

    fix: custom converters not being inherited from parent write holders (#893)
    
    * Fix custom converters not being inherited from parent write holders
    
    * Address review feedback
---
 .../write/metadata/holder/AbstractWriteHolder.java | 17 ++++++++++-
 .../fesod/sheet/converter/CustomConverterTest.java | 35 ++++++++++++++++++++++
 .../sheet/converter/GlobalConverterWriteData.java  | 34 +++++++++++++++++++++
 3 files changed, 85 insertions(+), 1 deletion(-)

diff --git 
a/fesod-sheet/src/main/java/org/apache/fesod/sheet/write/metadata/holder/AbstractWriteHolder.java
 
b/fesod-sheet/src/main/java/org/apache/fesod/sheet/write/metadata/holder/AbstractWriteHolder.java
index e67aee33..be35c494 100644
--- 
a/fesod-sheet/src/main/java/org/apache/fesod/sheet/write/metadata/holder/AbstractWriteHolder.java
+++ 
b/fesod-sheet/src/main/java/org/apache/fesod/sheet/write/metadata/holder/AbstractWriteHolder.java
@@ -129,6 +129,11 @@ public abstract class AbstractWriteHolder extends 
AbstractHolder implements Writ
      */
     private Boolean orderByIncludeColumn;
 
+    /**
+     * Custom converters for this holder
+     */
+    private List<Converter<?>> customConverterList;
+
     /**
      * Write handler
      */
@@ -261,12 +266,22 @@ public abstract class AbstractWriteHolder extends 
AbstractHolder implements Writ
 
         // Set converterMap
         if (parentAbstractWriteHolder == null) {
-            
setConverterMap(DefaultConverterLoader.loadDefaultWriteConverter());
+            setConverterMap(new 
HashMap<>(DefaultConverterLoader.loadDefaultWriteConverter()));
         } else {
             setConverterMap(new 
HashMap<>(parentAbstractWriteHolder.getConverterMap()));
+            if 
(CollectionUtils.isNotEmpty(parentAbstractWriteHolder.getCustomConverterList()))
 {
+                for (Converter<?> converter : 
parentAbstractWriteHolder.getCustomConverterList()) {
+                    getConverterMap()
+                            .put(
+                                    ConverterKeyBuild.buildKey(
+                                            converter.supportJavaTypeKey(), 
converter.supportExcelTypeKey()),
+                                    converter);
+                }
+            }
         }
         if (writeBasicParameter.getCustomConverterList() != null
                 && !writeBasicParameter.getCustomConverterList().isEmpty()) {
+            this.customConverterList = 
writeBasicParameter.getCustomConverterList();
             for (Converter<?> converter : 
writeBasicParameter.getCustomConverterList()) {
                 getConverterMap()
                         .put(
diff --git 
a/fesod-sheet/src/test/java/org/apache/fesod/sheet/converter/CustomConverterTest.java
 
b/fesod-sheet/src/test/java/org/apache/fesod/sheet/converter/CustomConverterTest.java
index 52714caa..2c7801c5 100644
--- 
a/fesod-sheet/src/test/java/org/apache/fesod/sheet/converter/CustomConverterTest.java
+++ 
b/fesod-sheet/src/test/java/org/apache/fesod/sheet/converter/CustomConverterTest.java
@@ -30,6 +30,7 @@ import org.apache.fesod.sheet.converters.Converter;
 import org.apache.fesod.sheet.converters.ConverterKeyBuild;
 import org.apache.fesod.sheet.util.TestFileUtil;
 import org.apache.fesod.sheet.write.builder.ExcelWriterSheetBuilder;
+import org.apache.fesod.sheet.write.metadata.holder.WriteSheetHolder;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.MethodOrderer;
@@ -42,12 +43,16 @@ public class CustomConverterTest {
     private static File converterCsvFile10;
     private static File converterExcelFile11;
     private static File converterExcelFile12;
+    private static File converterExcelFile13;
+    private static File converterCsvFile14;
 
     @BeforeAll
     static void init() {
         converterCsvFile10 = TestFileUtil.createNewFile("converter10.csv");
         converterExcelFile11 = TestFileUtil.createNewFile("converter11.xls");
         converterExcelFile12 = TestFileUtil.createNewFile("converter12.xlsx");
+        converterExcelFile13 = TestFileUtil.createNewFile("converter13.xlsx");
+        converterCsvFile14 = TestFileUtil.createNewFile("converter14.csv");
     }
 
     @Test
@@ -83,6 +88,28 @@ public class CustomConverterTest {
         writeFile(converterExcelFile12);
     }
 
+    @Test
+    void t05GlobalConverterInSheetHolder() throws Exception {
+        TimestampStringConverter timestampStringConverter = new 
TimestampStringConverter();
+        ExcelWriter excelWriter = FesodSheet.write(converterExcelFile13)
+                .registerConverter(timestampStringConverter)
+                .build();
+        excelWriter.write(data(), new 
ExcelWriterSheetBuilder().sheetNo(0).build());
+        WriteSheetHolder sheetHolder = 
excelWriter.writeContext().writeSheetHolder();
+        Map<ConverterKeyBuild.ConverterKey, Converter<?>> sheetConverterMap = 
sheetHolder.converterMap();
+        excelWriter.finish();
+        
Assertions.assertTrue(sheetConverterMap.containsKey(ConverterKeyBuild.buildKey(
+                timestampStringConverter.supportJavaTypeKey(), 
timestampStringConverter.supportExcelTypeKey())));
+    }
+
+    @Test
+    void t06GlobalConverterWriteWithoutFieldLevelConverter() throws Exception {
+        FesodSheet.write(converterCsvFile14)
+                .registerConverter(new TimestampStringConverter())
+                .sheet()
+                .doWrite(globalData());
+    }
+
     private void writeFile(File file) throws Exception {
         FesodSheet.write(file)
                 .registerConverter(new TimestampNumberConverter())
@@ -91,6 +118,14 @@ public class CustomConverterTest {
                 .doWrite(data());
     }
 
+    private List<GlobalConverterWriteData> globalData() throws Exception {
+        List<GlobalConverterWriteData> list = new ArrayList<>();
+        GlobalConverterWriteData writeData = new GlobalConverterWriteData();
+        writeData.setTimestampData(Timestamp.valueOf("2020-01-01 01:00:00"));
+        list.add(writeData);
+        return list;
+    }
+
     private List<CustomConverterWriteData> data() throws Exception {
         List<CustomConverterWriteData> list = new ArrayList<>();
         CustomConverterWriteData writeData = new CustomConverterWriteData();
diff --git 
a/fesod-sheet/src/test/java/org/apache/fesod/sheet/converter/GlobalConverterWriteData.java
 
b/fesod-sheet/src/test/java/org/apache/fesod/sheet/converter/GlobalConverterWriteData.java
new file mode 100644
index 00000000..c13f7fbe
--- /dev/null
+++ 
b/fesod-sheet/src/test/java/org/apache/fesod/sheet/converter/GlobalConverterWriteData.java
@@ -0,0 +1,34 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.fesod.sheet.converter;
+
+import java.sql.Timestamp;
+import lombok.EqualsAndHashCode;
+import lombok.Getter;
+import lombok.Setter;
+import org.apache.fesod.sheet.annotation.ExcelProperty;
+
+@Getter
+@Setter
+@EqualsAndHashCode
+public class GlobalConverterWriteData {
+    @ExcelProperty("时间戳-字符串")
+    private Timestamp timestampData;
+}


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to