ingo@2828: package de.intevation.flys.importer.parsers; ingo@2828: ingo@2828: import java.math.BigDecimal; ingo@2828: import java.text.NumberFormat; ingo@2828: import java.text.ParseException; ingo@2828: import java.util.ArrayList; ingo@2828: import java.util.List; ingo@2828: import java.util.regex.Matcher; ingo@2828: import java.util.regex.Pattern; ingo@2828: ingo@2828: import java.text.ParseException; ingo@2828: ingo@2828: import org.apache.log4j.Logger; ingo@2828: ingo@2828: import de.intevation.flys.importer.ImportFlowVelocityModel; ingo@2828: import de.intevation.flys.importer.ImportFlowVelocityModelValue; ingo@2828: ingo@2828: ingo@2828: public class FlowVelocityModelParser extends LineParser { ingo@2828: ingo@2828: private static final Logger log = ingo@2828: Logger.getLogger(FlowVelocityModelParser.class); ingo@2828: ingo@2828: private static final Pattern META_REGEX = ingo@2828: Pattern.compile(".*Rechnung (.*) \\(Pegel (.*)\\).*"); ingo@2828: ingo@2828: private static final NumberFormat nf = ingo@2828: NumberFormat.getInstance(DEFAULT_LOCALE); ingo@2828: ingo@2828: ingo@2828: private List models; ingo@2828: ingo@2828: private ImportFlowVelocityModel current; ingo@2828: ingo@2828: ingo@2828: public FlowVelocityModelParser() { ingo@2828: models = new ArrayList(); ingo@2828: } ingo@2828: ingo@2828: ingo@2828: public List getModels() { ingo@2828: return models; ingo@2828: } ingo@2828: ingo@2828: @Override ingo@2828: protected void reset() { ingo@2828: current = new ImportFlowVelocityModel(); ingo@2828: } ingo@2828: ingo@2828: ingo@2828: @Override ingo@2828: protected void finish() { ingo@2828: models.add(current); ingo@2828: } ingo@2828: ingo@2828: ingo@2828: @Override ingo@2828: protected void handleLine(String line) { ingo@2828: if (line.startsWith(START_META_CHAR)) { ingo@2828: handleMetaLine(stripMetaLine(line)); ingo@2828: } ingo@2828: else { ingo@2828: handleDataLine(line); ingo@2828: } ingo@2828: } ingo@2828: ingo@2828: ingo@2828: public void handleMetaLine(String line) { ingo@2828: Matcher m = META_REGEX.matcher(line); ingo@2828: ingo@2828: if (m.matches()) { ingo@2828: String zoneStr = m.group(1); ingo@2828: String gaugeStr = m.group(2); ingo@2828: ingo@2828: log.debug("Found zone string: '" + zoneStr + "'"); ingo@2828: log.debug("Found gauge string: '" + gaugeStr + "'"); ingo@2828: ingo@2828: // TODO Do something with these information ingo@2828: } ingo@2828: } ingo@2828: ingo@2828: ingo@2828: public void handleDataLine(String line) { ingo@2828: String[] cols = line.split(SEPERATOR_CHAR); ingo@2828: ingo@2828: if (cols.length < 5) { ingo@2828: log.warn("skip invalid data line: '" + line + "'"); ingo@2828: return; ingo@2828: } ingo@2828: ingo@2828: try { ingo@2828: double km = nf.parse(cols[0]).doubleValue(); ingo@2828: double q = nf.parse(cols[1]).doubleValue(); ingo@2828: double total = nf.parse(cols[2]).doubleValue(); ingo@2828: double main = nf.parse(cols[3]).doubleValue(); ingo@2828: double stress = nf.parse(cols[4]).doubleValue(); ingo@2828: ingo@2828: current.addValue(new ImportFlowVelocityModelValue( ingo@2828: new BigDecimal(km), ingo@2828: new BigDecimal(q), ingo@2828: new BigDecimal(total), ingo@2828: new BigDecimal(main), ingo@2828: new BigDecimal(stress) ingo@2828: )); ingo@2828: } ingo@2828: catch (ParseException pe) { ingo@2828: log.warn("Error while parsing flow velocity values.", pe); ingo@2828: } ingo@2828: } ingo@2828: } ingo@2828: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :