gernotbelger@9481: /** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde gernotbelger@9481: * Software engineering by gernotbelger@9481: * Björnsen Beratende Ingenieure GmbH gernotbelger@9481: * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt gernotbelger@9481: * gernotbelger@9481: * This file is Free Software under the GNU AGPL (>=v3) gernotbelger@9481: * and comes with ABSOLUTELY NO WARRANTY! Check out the gernotbelger@9481: * documentation coming with Dive4Elements River for details. gernotbelger@9481: */ gernotbelger@9481: package org.dive4elements.river.artifacts.sinfo.tkhstate; gernotbelger@9481: gernotbelger@9481: import java.io.BufferedReader; gernotbelger@9481: import java.io.File; gernotbelger@9481: import java.io.FileReader; gernotbelger@9481: import java.io.IOException; gernotbelger@9481: import java.util.ArrayList; gernotbelger@9481: import java.util.List; gernotbelger@9481: gernotbelger@9481: import org.dive4elements.artifacts.common.utils.Config; gernotbelger@9481: gernotbelger@9481: import au.com.bytecode.opencsv.CSVReader; gernotbelger@9481: gernotbelger@9481: /** gernotbelger@9481: * @author Domenico Nardi Tironi gernotbelger@9481: * gernotbelger@9481: */ gernotbelger@9481: public class TsvHelper { gernotbelger@9481: gernotbelger@9481: public static class TsvReaderException extends Exception { gernotbelger@9481: private static final long serialVersionUID = 1L; gernotbelger@9481: gernotbelger@9481: public TsvReaderException(final String message) { gernotbelger@9481: super(message); gernotbelger@9481: } gernotbelger@9481: } gernotbelger@9481: gernotbelger@9559: public static List readTsv(final File inputFile, final int maxLength) throws IOException, TsvReaderException { gernotbelger@9481: gernotbelger@9481: final List result = new ArrayList<>(); gernotbelger@9481: gernotbelger@9481: final byte[] BOM = new byte[] { (byte) 0xEF, (byte) 0xBB, (byte) 0xBF }; gernotbelger@9481: final String bomChar = new String(BOM, "UTF-8"); gernotbelger@9481: gernotbelger@9481: try (final BufferedReader bReader = new BufferedReader(new FileReader(inputFile))) { gernotbelger@9481: gernotbelger@9481: try (final CSVReader reader = new CSVReader(bReader, '\t')) { gernotbelger@9481: String[] line; gernotbelger@9481: while ((line = reader.readNext()) != null) { gernotbelger@9481: if (line == null || line[0].startsWith("#") || line[0].trim().equals("") || (line[0].startsWith(bomChar) && line[0].contains("#"))) { gernotbelger@9481: continue; gernotbelger@9481: } gernotbelger@9481: gernotbelger@9559: if (line.length > maxLength) { gernotbelger@9481: reader.close(); gernotbelger@9559: throw new TsvReaderException("Invalid number of Tokens; should not be more than" + maxLength + "!"); gernotbelger@9481: } gernotbelger@9481: result.add(line); gernotbelger@9481: } gernotbelger@9481: } gernotbelger@9481: return result; gernotbelger@9481: } gernotbelger@9481: } gernotbelger@9481: gernotbelger@9481: public static final File makeFile2(final String fileNameRaw, final String rivername) { gernotbelger@9481: final File configDir = Config.getModulesConfigDirectory(); gernotbelger@9481: final String filename = String.format(fileNameRaw, rivername); gernotbelger@9481: return new File(configDir, filename); gernotbelger@9481: } gernotbelger@9481: gernotbelger@9481: public static final File checkFile(final File file) { gernotbelger@9481: if (!file.canRead() && !file.isFile()) { gernotbelger@9481: return null; // no config-file specified or spelling mistake etc. (not necessarily an error) gernotbelger@9481: } gernotbelger@9481: return file; gernotbelger@9481: } gernotbelger@9481: }