--- dao/DaoAdresseVedligehold/src/main/java/dk/daoas/adressevedligehold/AbstractAddressSource.java 2016/01/28 16:12:28 2868 +++ dao/DaoAdresseVedligehold/src/main/java/dk/daoas/adressevedligehold/fileupload/AbstractAddressSource.java 2016/02/16 09:38:13 2949 @@ -1,15 +1,23 @@ -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 com.google.common.base.Splitter; + +import dk.daoas.adressevedligehold.tasks.TaskLogger; import dk.daoas.adressevedligehold.util.DeduplicateHelper; public abstract class AbstractAddressSource implements AddressSource { + private TaskLogger logger = TaskLogger.getInstance(); + protected DeduplicateHelper dirigeringsCache = new DeduplicateHelper(); protected FileItem file; @@ -26,13 +34,12 @@ @Override public String getFilename() { - // TODO Auto-generated method stub return file.getName(); } @Override //AutoCloseable public void close() throws Exception { - System.out.println("Closing BK after lines " + lineCount); + logger.info("Closing BK after lines " + lineCount); try { if (br != null) br.close(); @@ -44,7 +51,70 @@ file.delete(); } catch (Exception e) { - System.out.println("Error on closing " + e.getMessage() ); + logger.warning("Error on closing ", e ); } } + /** + * Reads the first line, validates that there are the expected number of fields, and then + * re-initilze the inputstream - this is for file formats that does not use a header line. + * + * @param exptectedFieldCount + * @param seperator + * @throws IOException + */ + protected void validatNoHeaderLine(int exptectedFieldCount, char seperator) 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?"); + } + + List parts = Splitter.on(seperator).splitToList(line); + if (parts.size() != exptectedFieldCount) { + throw new IOException("Not enough fields in CSV file. Found " + parts.size() + ", expected " + exptectedFieldCount); + } + } + + + is = file.getInputStream(); + isr = new InputStreamReader(is, Charset.forName("ISO-8859-1") ); + br = new BufferedReader(isr); + } + + + protected void validateWithHeader(int expectedFieldCount, char seperator) throws IOException { + try { + is = file.getInputStream(); + isr = new InputStreamReader(is, Charset.forName("ISO-8859-1") ); + br = new BufferedReader(isr); + + String line = br.readLine(); + if (line == null) { + throw new IOException("Can't read 1st line - is file empty?"); + } + + List parts = Splitter.on(seperator).splitToList(line); + if (parts.size() != expectedFieldCount) { + throw new IOException("Not enough fields in CSV file. Found " + parts.size() + ", expected " + expectedFieldCount); + } + + + + } catch (Exception e) { + try { + br.close(); + isr.close(); + is.close(); + } catch (Exception e2) { + logger.warning("Error cleaning up resources", e2); + } + + throw e; // Re-throw + } + } }