package dk.daoas.adressevedligehold.fileupload; import java.io.IOException; import java.util.List; import org.apache.commons.fileupload.FileItem; import com.google.common.base.CharMatcher; import com.google.common.base.Splitter; import dk.daoas.adressevedligehold.fileupload.AddressSourceEntry.EntryType; import dk.daoas.adressevedligehold.util.SafeParsers; public class AddressSourceBK extends AbstractAddressSource { Splitter splitter = Splitter.on(';').trimResults( CharMatcher.is('"') ); public AddressSourceBK(FileItem file) throws Exception { super(file); } @Override public void validate() throws IOException { super.validatNoHeaderLine(14, ';'); } @Override public AddressSourceEntry getNextEntry() throws IOException { String line = br.readLine(); if (line == null) // end of file return null; if (line.trim().equals("")) return null; AddressSourceEntry entry = new AddressSourceEntry( EntryType.TypeSingleAddress); entry.distributor = "BK"; List parts = splitter.splitToList(line); if (parts.size() != 14) { throw new IOException("Not enough fields in CSV file. Found " + parts.size() + ", expected 14"); } entry.postnr = Short.parseShort( parts.get(0) ); entry.vejnavn = parts.get( 1 ); entry.husnr = Short.parseShort( parts.get( 2 ) ); entry.litra = parts.get( 3 ); entry.vejkode = SafeParsers.parseShort( parts.get( 4) ); entry.kommunekode = SafeParsers.parseShort( parts.get( 5) ); entry.gadeid = Integer.parseInt( parts.get( 6 ) ); String ugedage = parts.get( 7 ); String laesnr = parts.get( 8 ); //String distnr = parts.get( 9 ); //Bruges ikke String foede = parts.get( 10 ); String jobnr = parts.get( 11 ); String tklaes = parts.get( 12 ); entry.rute = laesnr; entry.koreliste = "/" + foede + "/" + tklaes + "/" + jobnr; entry.rute = dirigeringsCache.getInstance(entry.rute); entry.koreliste = dirigeringsCache.getInstance(entry.koreliste); switch (ugedage) { case "1234000": entry.ugedage = EntryUgedage.MAN_TOR; break; case "0000500": entry.ugedage = EntryUgedage.FRE; break; case "0000060": entry.ugedage = EntryUgedage.LOR; break; case "0000007": entry.ugedage = EntryUgedage.SON; break; default: throw new IOException("Ukendt ugedag:" + ugedage); } lineCount++; return entry; } @Override public String getDistributor() { return "BK"; } @Override public boolean calculateDistances() { return true; //BK skal beregne afstande } }