ingo@2815: package de.intevation.flys.importer.parsers;
ingo@2815:
ingo@2815: import java.io.File;
ingo@2815:
ingo@2815: import java.util.Calendar;
ingo@2815: import java.util.Date;
ingo@2815: import java.util.Locale;
ingo@2815:
ingo@2815: import java.io.IOException;
ingo@2815: import java.io.LineNumberReader;
ingo@2815: import java.io.FileInputStream;
ingo@2815: import java.io.InputStreamReader;
ingo@2815:
ingo@2815: import org.apache.log4j.Logger;
ingo@2815:
ingo@2815:
ingo@2815: public abstract class LineParser {
ingo@2815:
ingo@2815: private static final Logger log = Logger.getLogger(LineParser.class);
ingo@2815:
ingo@2815: public static final String ENCODING = "ISO-8859-1";
ingo@2815:
ingo@2815: public static final Locale DEFAULT_LOCALE = Locale.GERMAN;
ingo@2815:
ingo@2815: public static final String START_META_CHAR = "#";
ingo@2815: public static final String SEPERATOR_CHAR = ";";
ingo@2815:
ingo@2815:
ingo@2815: protected abstract void handleLine(String line);
ingo@2815:
ingo@2815: protected abstract void reset();
ingo@2815:
ingo@2815: protected abstract void finish();
ingo@2815:
ingo@2815:
ingo@2815: /**
ingo@2815: * This method reads each line of file. At the beginning,
ingo@2815: * reset() is called; afterwars for each line handleLine() is
ingo@2815: * called; at the end finish is called.
ingo@2815: *
ingo@2815: * @param file The file which should be parsed.
ingo@2815: */
ingo@2815: public void parse(File file) throws IOException {
ingo@2815: log.info("Parsing file '" + file + "'");
ingo@2815:
ingo@2815: reset();
ingo@2815:
ingo@2815: LineNumberReader in = null;
ingo@2815: try {
ingo@2815: in =
ingo@2815: new LineNumberReader(
ingo@2815: new InputStreamReader(
ingo@2815: new FileInputStream(file), ENCODING));
ingo@2815:
ingo@2815: String line = null;
ingo@2815: while ((line = in.readLine()) != null) {
ingo@2815: if ((line = line.trim()).length() == 0) {
ingo@2815: continue;
ingo@2815: }
ingo@2815:
ingo@2815: handleLine(line);
ingo@2815: }
ingo@2815: }
ingo@2815: finally {
ingo@2815: if (in != null) {
ingo@2815: in.close();
ingo@2815: }
ingo@2815: }
ingo@2815:
ingo@2815: finish();
ingo@2815: }
ingo@2815:
ingo@2815:
ingo@2815: protected static String stripMetaLine(String line) {
ingo@2815: String tmp = line.substring(1, line.length());
ingo@2815:
ingo@2815: if (tmp.startsWith(" ")) {
ingo@2815: return tmp.substring(1, tmp.length());
ingo@2815: }
ingo@2815: else {
ingo@2815: return tmp;
ingo@2815: }
ingo@2815: }
ingo@2815:
ingo@2815:
ingo@2815: public static Date getDateFromYear(int year) {
ingo@2815: Calendar cal = Calendar.getInstance();
ingo@2815: cal.set(year, 0, 1);
ingo@2815:
ingo@2815: return cal.getTime();
ingo@2815: }
ingo@2815: }
ingo@2815: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :