@@ -49,6 +49,7 @@ public class ImportFile {
4949 private boolean isExcel ;
5050 private Pattern filterLine ;
5151 private String defaultGlobTypeName = "DefaultCsv" ;
52+ private HeaderToField headerResolver ;
5253
5354 public static InputStreamReader createReaderWithBomCheck (InputStream inputStream , Charset defaultCharset ) throws IOException {
5455 BOMInputStream in = new BOMInputStream (inputStream , ByteOrderMark .UTF_8 , ByteOrderMark .UTF_16LE , ByteOrderMark .UTF_16BE ,
@@ -147,7 +148,7 @@ static public GlobType extractHeader(InputStream inputStream, Character separato
147148 for (String s1 : headerMap .keySet ()) {
148149 globTypeBuilder .declareStringField (s1 );
149150 }
150- return globTypeBuilder .get ();
151+ return globTypeBuilder .build ();
151152 }
152153
153154 private static String getValue (CsvLine record , int index , boolean trim ) {
@@ -206,6 +207,11 @@ public ImportFile withNameFrom(String name) {
206207 return this ;
207208 }
208209
210+ public ImportFile withHeaderResolver (HeaderToField headerResolver ){
211+ this .headerResolver = headerResolver ;
212+ return this ;
213+ }
214+
209215 public ImportFile withCharSet (Charset charSet ) {
210216 this .charSet = charSet ;
211217 return this ;
@@ -262,7 +268,7 @@ interface CsvDocument {
262268
263269
264270 public Importer createExcel (InputStream inputStream , GlobType globType ) throws IOException {
265- final DefaultDataRead dataRead = new DefaultDataRead (loadExcel (inputStream ), trim , reNameFrom );
271+ final DefaultDataRead dataRead = new DefaultDataRead (loadExcel (inputStream ), trim , reNameFrom , headerResolver );
266272 if (globType == null ) {
267273 globType = dataRead .createDefault (defaultGlobTypeName );
268274 }
@@ -281,7 +287,7 @@ public Importer create(Reader reader, GlobType globType) throws IOException {
281287 } else {
282288 parse = readFix (reader , globType );
283289 }
284- DefaultDataRead dataRead = new DefaultDataRead (parse , trim , reNameFrom );
290+ DefaultDataRead dataRead = new DefaultDataRead (parse , trim , reNameFrom , headerResolver );
285291 if (globType == null ) {
286292 globType = dataRead .createDefault (defaultGlobTypeName );
287293 }
@@ -543,7 +549,7 @@ public void importContentExcel(InputStream inputStream, Consumer<Glob> consumer,
543549 }
544550
545551 public DataRead getDataReader (InputStream inputStream ) throws IOException {
546- return new DefaultDataRead (load (createReaderFromStream (inputStream )), trim , reNameFrom );
552+ return new DefaultDataRead (load (createReaderFromStream (inputStream )), trim , reNameFrom , headerResolver );
547553 }
548554
549555 private CsvDocument loadExcel (InputStream inputStream ) {
@@ -650,14 +656,16 @@ interface FieldReader {
650656
651657 static class DefaultDataRead implements DataRead {
652658 private final String reNameFrom ;
659+ private final HeaderToField headerResolver ;
653660 private CsvDocument parse ;
654661 private boolean trim ;
655662 private int countLine = 0 ;
656663
657- public DefaultDataRead (CsvDocument parse , boolean trim , String reNameFrom ) {
664+ public DefaultDataRead (CsvDocument parse , boolean trim , String reNameFrom , HeaderToField headerResolver ) {
658665 this .parse = parse ;
659666 this .trim = trim ;
660667 this .reNameFrom = reNameFrom ;
668+ this .headerResolver = headerResolver ;
661669 }
662670
663671 GlobType createDefault (String defaultGlobTypeName ) {
@@ -666,15 +674,21 @@ GlobType createDefault(String defaultGlobTypeName) {
666674 for (String s1 : headerMap .keySet ()) {
667675 globTypeBuilder .declareStringField (s1 );
668676 }
669- return globTypeBuilder .get ();
677+ return globTypeBuilder .build ();
670678 }
671679
672680 public void read (Consumer <Glob > consumer , GlobType globType ) {
673681 ImportReaderBuilder readerBuilder = new ImportReaderBuilder (globType , trim , parse );
674682 RemapName remapName = new RemapName (globType , reNameFrom );
675683 Map <String , Integer > headerMap = parse .getHeader ();
676684 for (Map .Entry <String , Integer > stringIntegerEntry : headerMap .entrySet ()) {
677- Field field = remapName .headNameToField .get (stringIntegerEntry .getKey ());
685+ Field field = null ;
686+ if (headerResolver != null ) {
687+ field = headerResolver .getField (stringIntegerEntry .getKey ());
688+ }
689+ if (field == null ) {
690+ field = remapName .headNameToField .get (stringIntegerEntry .getKey ());
691+ }
678692 if (field == null ) {
679693 field = findField (globType , stringIntegerEntry .getKey ());
680694 }
@@ -1303,7 +1317,13 @@ private ImportReader initImportReader(GlobType targetType, Glob csvHeader, CsvLi
13031317 DefaultDataRead .RemapName remapName = new DefaultDataRead .RemapName (targetType , reNameFrom );
13041318 for (int i = 1 ; i < record .size (); i ++) {
13051319 String key = record .getAt (i );
1306- Field field = remapName .headNameToField .get (key );
1320+ Field field = null ;
1321+ if (headerResolver != null ) {
1322+ field = headerResolver .getField (key );
1323+ }
1324+ if (field == null ) {
1325+ field = remapName .headNameToField .get (key );
1326+ }
13071327 if (field == null ) {
13081328 field = findField (targetType , key );
13091329 }
0 commit comments