2020package org .apache .fesod .sheet .converter ;
2121
2222import java .io .File ;
23+ import java .nio .charset .StandardCharsets ;
24+ import java .nio .file .Files ;
2325import java .sql .Timestamp ;
2426import java .util .ArrayList ;
2527import java .util .List ;
2628import java .util .Map ;
2729import org .apache .fesod .sheet .ExcelWriter ;
2830import org .apache .fesod .sheet .FesodSheet ;
31+ import org .apache .fesod .sheet .annotation .ExcelProperty ;
2932import org .apache .fesod .sheet .converters .Converter ;
3033import org .apache .fesod .sheet .converters .ConverterKeyBuild ;
34+ import org .apache .fesod .sheet .enums .CellDataTypeEnum ;
35+ import org .apache .fesod .sheet .metadata .GlobalConfiguration ;
36+ import org .apache .fesod .sheet .metadata .data .WriteCellData ;
37+ import org .apache .fesod .sheet .metadata .property .ExcelContentProperty ;
3138import org .apache .fesod .sheet .util .TestFileUtil ;
3239import org .apache .fesod .sheet .write .builder .ExcelWriterSheetBuilder ;
3340import org .apache .fesod .sheet .write .metadata .holder .WriteSheetHolder ;
@@ -45,6 +52,7 @@ public class CustomConverterTest {
4552 private static File converterExcelFile12 ;
4653 private static File converterExcelFile13 ;
4754 private static File converterCsvFile14 ;
55+ private static File converterCsvFile15 ;
4856
4957 @ BeforeAll
5058 static void init () {
@@ -53,6 +61,7 @@ static void init() {
5361 converterExcelFile12 = TestFileUtil .createNewFile ("converter12.xlsx" );
5462 converterExcelFile13 = TestFileUtil .createNewFile ("converter13.xlsx" );
5563 converterCsvFile14 = TestFileUtil .createNewFile ("converter14.csv" );
64+ converterCsvFile15 = TestFileUtil .createNewFile ("converter15.csv" );
5665 }
5766
5867 @ Test
@@ -110,6 +119,23 @@ void t06GlobalConverterWriteWithoutFieldLevelConverter() throws Exception {
110119 .doWrite (globalData ());
111120 }
112121
122+ @ Test
123+ void t07FieldLevelConverterTakesPrecedenceOverRegisteredConverter () throws Exception {
124+ FieldLevelConverterWriteData writeData = new FieldLevelConverterWriteData ();
125+ writeData .setFieldValue ("value" );
126+ writeData .setRegisteredValue ("value" );
127+ List <FieldLevelConverterWriteData > list = new ArrayList <>();
128+ list .add (writeData );
129+
130+ FesodSheet .write (converterCsvFile15 , FieldLevelConverterWriteData .class )
131+ .registerConverter (new RegisteredStringConverter ())
132+ .sheet ()
133+ .doWrite (list );
134+
135+ String csvContent = new String (Files .readAllBytes (converterCsvFile15 .toPath ()), StandardCharsets .UTF_8 );
136+ Assertions .assertTrue (csvContent .contains ("field:value,registered:value" ));
137+ }
138+
113139 private void writeFile (File file ) throws Exception {
114140 FesodSheet .write (file )
115141 .registerConverter (new TimestampNumberConverter ())
@@ -134,4 +160,64 @@ private List<CustomConverterWriteData> data() throws Exception {
134160 list .add (writeData );
135161 return list ;
136162 }
163+
164+ public static class FieldLevelConverterWriteData {
165+ @ ExcelProperty (value = "fieldValue" , converter = FieldLevelStringConverter .class )
166+ private String fieldValue ;
167+
168+ @ ExcelProperty ("registeredValue" )
169+ private String registeredValue ;
170+
171+ public String getFieldValue () {
172+ return fieldValue ;
173+ }
174+
175+ public void setFieldValue (String fieldValue ) {
176+ this .fieldValue = fieldValue ;
177+ }
178+
179+ public String getRegisteredValue () {
180+ return registeredValue ;
181+ }
182+
183+ public void setRegisteredValue (String registeredValue ) {
184+ this .registeredValue = registeredValue ;
185+ }
186+ }
187+
188+ public static class FieldLevelStringConverter implements Converter <String > {
189+ @ Override
190+ public Class <?> supportJavaTypeKey () {
191+ return String .class ;
192+ }
193+
194+ @ Override
195+ public CellDataTypeEnum supportExcelTypeKey () {
196+ return CellDataTypeEnum .STRING ;
197+ }
198+
199+ @ Override
200+ public WriteCellData <?> convertToExcelData (
201+ String value , ExcelContentProperty contentProperty , GlobalConfiguration globalConfiguration ) {
202+ return new WriteCellData <>("field:" + value );
203+ }
204+ }
205+
206+ public static class RegisteredStringConverter implements Converter <String > {
207+ @ Override
208+ public Class <?> supportJavaTypeKey () {
209+ return String .class ;
210+ }
211+
212+ @ Override
213+ public CellDataTypeEnum supportExcelTypeKey () {
214+ return CellDataTypeEnum .STRING ;
215+ }
216+
217+ @ Override
218+ public WriteCellData <?> convertToExcelData (
219+ String value , ExcelContentProperty contentProperty , GlobalConfiguration globalConfiguration ) {
220+ return new WriteCellData <>("registered:" + value );
221+ }
222+ }
137223}
0 commit comments