--- dao/DaoAdresseVedligehold/src/main/java/dk/daoas/adressevedligehold/AddressSourceBK.java 2016/01/24 21:48:55 2838 +++ dao/DaoAdresseVedligehold/src/main/java/dk/daoas/adressevedligehold/fileupload/AddressSourceBK.java 2016/02/16 09:40:51 2950 @@ -1,45 +1,30 @@ -package dk.daoas.adressevedligehold; +package dk.daoas.adressevedligehold.fileupload; -import java.io.BufferedReader; import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.nio.charset.Charset; +import java.util.List; import org.apache.commons.fileupload.FileItem; -import dk.daoas.adressevedligehold.AddressSourceEntry.EntryType; -import dk.daoas.adressevedligehold.util.DeduplicateHelper; +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 implements AddressSource { - - DeduplicateHelper dirigeringsCache = new DeduplicateHelper(); - - FileItem file; +public class AddressSourceBK extends AbstractAddressSource { - InputStream is; - InputStreamReader isr; - BufferedReader br; - - int lineCount = 0; + Splitter splitter = Splitter.on(';').trimResults( CharMatcher.is('"') ); public AddressSourceBK(FileItem file) throws Exception { - this.file = file; - - - is = file.getInputStream(); - isr = new InputStreamReader(is, Charset.forName("ISO-8859-1") ); - br = new BufferedReader(isr); - + super(file); } + @Override - public String getFilename() { - return file.getName(); + public void validate() throws IOException { + super.validatNoHeaderLine(14, ';'); } - - //TODO: Skal csv parsning klares med Apache Commons CSV ? + @Override public AddressSourceEntry getNextEntry() throws IOException { @@ -50,28 +35,32 @@ if (line.trim().equals("")) return null; - //System.out.println(line); AddressSourceEntry entry = new AddressSourceEntry( EntryType.TypeSingleAddress); entry.distributor = "BK"; - String[] parts = line.split(";"); - entry.postnr = Short.parseShort( parts[0]); - entry.vejnavn = parts[1].replace("\"", ""); - entry.husnr = Short.parseShort( parts[2] ); - entry.litra = parts[3].replace("\"", ""); - entry.vejkode = SafeParsers.parseShort( parts[4] ); - entry.kommunekode = SafeParsers.parseShort( parts[5] ); - entry.gadeid = Integer.parseInt( parts[6] ); - - String ugedage = parts[7].replace("\"", ""); - - String laesnr = parts[8].replace("\"", ""); - - @SuppressWarnings("unused") String distnr = parts[9].replace("\"", ""); - String foede = parts[10].replace("\"", ""); - String jobnr = parts[11].replace("\"", ""); - String tklaes = parts[12].replace("\"", ""); + 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; @@ -107,21 +96,4 @@ return "BK"; } - @Override //AutoCloseable - public void close() throws Exception { - System.out.println("Closing BK after lines " + lineCount); - try { - br.close(); - isr.close(); - is.close(); - - file.delete(); - - } catch (Exception e) { - System.out.println("Error on closing " + e.getMessage() ); - } - - - } - }