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]