LineMapper 예제

import static org.junit.Assert.assertEquals;

import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;

import org.junit.Before;
import org.junit.Test;
import org.springframework.batch.item.file.LineMapper;
import org.springframework.batch.item.file.mapping.DefaultLineMapper;
import org.springframework.batch.item.file.mapping.FieldSetMapper;
import org.springframework.batch.item.file.transform.DelimitedLineTokenizer;
import org.springframework.batch.item.file.transform.FieldSet;

import sample.Player;

public class LineMapperTest {
    
    Player expected = null;
    String line = "이대호,3루수,32";
    @Before
    public void setUp(){
        expected = new Player();
        expected.setName("이대호");
        expected.setPosition("3루수");
        expected.setAge(32);
    }
    
    private void assertLineMapper(LineMapper<Player> mapper) throws Exception {
        Player actural = mapper.mapLine(line, 0);    
        assertEquals(expected.getName(), actural.getName());
        System.out.println(actural);
    }    
    @Test
    public void testCustomLineMapper() throws Exception{
        LineMapper<Player> mapper = getPlayerLineMapper();
        assertLineMapper(mapper);
    }

    @Test
    public void testDefaultLineMapper() throws Exception{
        DefaultLineMapper<Player> mapper = getPlayerLineMapperByDeafultImpl();
        assertLineMapper(mapper);
    }
    
    private LineMapper<Player> getPlayerLineMapper() {
        return new LineMapper<Player>(){
            public Player mapLine(String line, int arg1) throws Exception {
                
                StringTokenizer tokenizer = new StringTokenizer(line, ",");
                List<Object> resultList = new ArrayList<Object>();
                while(tokenizer.hasMoreElements()){
                    resultList.add(tokenizer.nextElement());
                }
                Player player = new Player();
                player.setName(resultList.get(0).toString());
                player.setPosition(resultList.get(1).toString());
                player.setAge(Integer.parseInt(resultList.get(2).toString()));
                return player;
            }
        };
    }
    
    private DefaultLineMapper<Player> getPlayerLineMapperByDeafultImpl() {
        DefaultLineMapper<Player> mapper = new DefaultLineMapper<Player>();
        mapper.setLineTokenizer(new DelimitedLineTokenizer(',') );
        
        FieldSetMapper<Player> fieldSetMapper = new FieldSetMapper<Player>(){
            public Player mapFieldSet(FieldSet fs) {
                Player player = new Player();
                player.setName(fs.readString(0));
                player.setPosition(fs.readString(1));
                player.setAge(fs.readInt(2));
                return player;
            }
        };
        mapper.setFieldSetMapper(fieldSetMapper);

        return mapper;
    }

}