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; public class AddressSourceNS extends AbstractAddressSource { enum NextUgedag { MANDAG,TIRSDAG,ONSDAG,TORSDAG,FREDAG,LORDAG,SONDAG } final Splitter splitter = Splitter.on(',') .trimResults( CharMatcher.is('"') ); List parts; NextUgedag nextUgedag = NextUgedag.MANDAG; public AddressSourceNS(FileItem file) throws Exception { super(file); } @Override public void validate() throws IOException { super.validatNoHeaderLine(22, ','); } @Override public AddressSourceEntry getNextEntry() throws IOException { if (nextUgedag == NextUgedag.MANDAG) { String line = br.readLine(); if (line == null) // end of file return null; if (line.trim().equals("")) return null; parts = splitter.splitToList(line); if (parts.size() != 22) { throw new IOException("Not enough fields in line " + line); } } AddressSourceEntry entry = new AddressSourceEntry( EntryType.TypeAddressRange ); entry.distributor = "NS"; 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 = parts.get(14); entry.ugedage = EntryUgedage.MAN; nextUgedag = NextUgedag.TIRSDAG; break; case TIRSDAG: entry.koreliste = parts.get(15); entry.ugedage = EntryUgedage.TIR; nextUgedag = NextUgedag.ONSDAG; break; case ONSDAG: entry.koreliste = parts.get(16); entry.ugedage = EntryUgedage.ONS; nextUgedag = NextUgedag.TORSDAG; break; case TORSDAG: entry.koreliste = parts.get(17); entry.ugedage = EntryUgedage.TOR; nextUgedag = NextUgedag.FREDAG; break; case FREDAG: entry.koreliste = parts.get(18); entry.ugedage = EntryUgedage.FRE; nextUgedag = NextUgedag.LORDAG; break; case LORDAG: entry.koreliste = parts.get(19); entry.ugedage = EntryUgedage.LOR; nextUgedag = NextUgedag.SONDAG; break; case SONDAG: 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++; return entry; } @Override public String getDistributor() { return "NS"; } @Override public boolean calculateDistances() { return false; //NS skal IKKE beregne afstande } }