--- dao/DaoAdresseVedligehold/src/main/java/dk/daoas/adressevedligehold/AddressSourceNS.java 2016/01/26 21:34:15 2851 +++ dao/DaoAdresseVedligehold/src/main/java/dk/daoas/adressevedligehold/fileupload/AddressSourceNS.java 2016/02/16 09:40:51 2950 @@ -1,68 +1,40 @@ -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 dk.daoas.adressevedligehold.util.SafeParsers; +import com.google.common.base.CharMatcher; +import com.google.common.base.Splitter; -public class AddressSourceNS implements AddressSource { +import dk.daoas.adressevedligehold.fileupload.AddressSourceEntry.EntryType; + +public class AddressSourceNS extends AbstractAddressSource { enum NextUgedag { MANDAG,TIRSDAG,ONSDAG,TORSDAG,FREDAG,LORDAG,SONDAG } + - DeduplicateHelper dirigeringsCache = new DeduplicateHelper(); - - FileItem file; - - InputStream is; - InputStreamReader isr; - BufferedReader br; + final Splitter splitter = Splitter.on(',') + .trimResults( CharMatcher.is('"') ); - String parts[]; + List parts; - int lineCount = 0; NextUgedag nextUgedag = NextUgedag.MANDAG; public AddressSourceNS(FileItem file) throws Exception { - this.file = file; + super(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(); - String[] parts = line.split(","); - int numFields = parts.length; - if (numFields != 22) { - throw new IOException("Not enough fields in CSV file. Found " + numFields + ", expected 22"); - } - } - - - is = file.getInputStream(); - isr = new InputStreamReader(is, Charset.forName("ISO-8859-1") ); - br = new BufferedReader(isr); + super.validatNoHeaderLine(22, ','); } - //TODO: Skal csv parsning klares med Apache Commons CSV ? @Override public AddressSourceEntry getNextEntry() throws IOException { @@ -73,10 +45,9 @@ if (line.trim().equals("")) return null; - parts = line.split(","); + parts = splitter.splitToList(line); - if (parts.length != 22) { - System.out.println( line ); + if (parts.size() != 22) { throw new IOException("Not enough fields in line " + line); } } @@ -88,61 +59,68 @@ entry.distributor = "NS"; - entry.gadeid = Integer.parseInt( parts[0] ); - entry.vejnavn = parts[1].replace("\"", ""); - //stednavn = parts[2]; - //ukendtt = parts[3]; - entry.postnr = Short.parseShort( parts[4] ); - entry.rute = dirigeringsCache.getInstance( parts[5].replace("\"", "") ); - entry.husnr = Short.parseShort( parts[6] ); - entry.litra = parts[7].replace("\"", ""); - entry.tilHusnr = Short.parseShort( parts[8] ); - entry.tilLitra = parts[9].replace("\"", ""); - //sekvens = parts[10] - //fradato = parts[11] - //tildato = parts[12] - //distributor = parts[13] - //inspektorkode = parts[21] + entry.gadeid = Integer.parseInt( parts.get(0) ); + entry.vejnavn = parts.get(1); + //stednavn = parts.get(2); + //ukendtt = parts.get(3); + entry.postnr = Short.parseShort( parts.get(4) ); + entry.rute = parts.get(5); + entry.husnr = Short.parseShort( parts.get(6) ); + entry.litra = parts.get(7); + entry.tilHusnr = Short.parseShort( parts.get(8) ); + entry.tilLitra = parts.get(9); + //sekvens = parts.get(10) + //fradato = parts.get(11) + //tildato = parts.get(12) + //distributor = parts.get(13) + //inspektorkode = parts.get(21) + + if (entry.tilLitra.equals("")) { + entry.tilLitra = "Z"; // hvis der ikke er angivet en slut litra, så dækker de alle litra kombinationer + } switch (nextUgedag) { case MANDAG: - entry.koreliste = dirigeringsCache.getInstance( parts[14] ); + entry.koreliste = parts.get(14); entry.ugedage = EntryUgedage.MAN; nextUgedag = NextUgedag.TIRSDAG; break; case TIRSDAG: - entry.koreliste = dirigeringsCache.getInstance( parts[15] ); + entry.koreliste = parts.get(15); entry.ugedage = EntryUgedage.TIR; nextUgedag = NextUgedag.ONSDAG; break; case ONSDAG: - entry.koreliste = dirigeringsCache.getInstance( parts[16] ); + entry.koreliste = parts.get(16); entry.ugedage = EntryUgedage.ONS; nextUgedag = NextUgedag.TORSDAG; break; case TORSDAG: - entry.koreliste = dirigeringsCache.getInstance( parts[17] ); + entry.koreliste = parts.get(17); entry.ugedage = EntryUgedage.TOR; nextUgedag = NextUgedag.FREDAG; break; case FREDAG: - entry.koreliste = dirigeringsCache.getInstance( parts[18] ); + entry.koreliste = parts.get(18); entry.ugedage = EntryUgedage.FRE; nextUgedag = NextUgedag.LORDAG; break; case LORDAG: - entry.koreliste = dirigeringsCache.getInstance( parts[19] ); + entry.koreliste = parts.get(19); entry.ugedage = EntryUgedage.LOR; nextUgedag = NextUgedag.SONDAG; break; case SONDAG: - entry.koreliste = dirigeringsCache.getInstance( parts[20] ); + entry.koreliste = parts.get(20); entry.ugedage = EntryUgedage.SON; nextUgedag = NextUgedag.MANDAG; break; default: throw new IOException("Ukendt ugedag:" + nextUgedag); } + + entry.rute = dirigeringsCache.getInstance(entry.rute); + entry.koreliste = dirigeringsCache.getInstance(entry.koreliste); lineCount++; @@ -155,21 +133,4 @@ return "NS"; } - @Override //AutoCloseable - public void close() throws Exception { - System.out.println("Closing NS after lines " + lineCount); - try { - br.close(); - isr.close(); - is.close(); - - file.delete(); - - } catch (Exception e) { - System.out.println("Error on closing " + e.getMessage() ); - } - - - } - }