package dk.daoas.adressevedligehold; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.nio.charset.Charset; import org.apache.commons.fileupload.FileItem; import dk.daoas.adressevedligehold.AddressSourceEntry.EntryType; import dk.daoas.adressevedligehold.util.DeduplicateHelper; import dk.daoas.adressevedligehold.util.SafeParsers; public class AddressSourceBK implements AddressSource { DeduplicateHelper dirigeringsCache = new DeduplicateHelper(); FileItem file; InputStream is; InputStreamReader isr; BufferedReader br; int lineCount = 0; public AddressSourceBK(FileItem file) throws Exception { this.file = file; } @Override public String getFilename() { return file.getName(); } @Override public void validate() throws IOException { try ( InputStream is1 = file.getInputStream(); InputStreamReader isr1 = new InputStreamReader(is1, Charset.forName("ISO-8859-1") ); BufferedReader br1 = new BufferedReader(isr1) ) { String line = br1.readLine(); if (line == null) { throw new IOException("Can't read 1st line - is file empty?"); } String[] parts = line.split(";"); if (parts.length != 13) { throw new IOException("Not enough fields in CSV file. Found " + parts.length + ", expected 13"); } } is = file.getInputStream(); isr = new InputStreamReader(is, Charset.forName("ISO-8859-1") ); br = new BufferedReader(isr); } //TODO: Skal csv parsning klares med Apache Commons CSV ? @Override public AddressSourceEntry getNextEntry() throws IOException { String line = br.readLine(); if (line == null) // end of file return null; if (line.trim().equals("")) return null; //System.out.println(line); AddressSourceEntry entry = new AddressSourceEntry( EntryType.TypeSingleAddress); entry.distributor = "BK"; String[] parts = line.split(";"); if (parts.length != 13) { throw new IOException("Not enough fields in CSV file. Found " + parts.length + ", expected 13"); } 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("\"", ""); //String distnr = parts[9].replace("\"", ""); //Bruges ikke String foede = parts[10].replace("\"", ""); String jobnr = parts[11].replace("\"", ""); String tklaes = parts[12].replace("\"", ""); 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 //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() ); } } }