Mercurial > lada > lada-server
diff src/main/java/de/intevation/lada/data/importer/AttributeMapper.java @ 310:821557a17e5e
First version of the LAF importer.
The importer module currently only runs with the test application (comming in the next commit)!
* LAF Parser:
- Uses a small implementation of a state machine.
- Extracts the keys with its value or multi value.
- Uses the producer interface to generate objects.
* Attribute mapper:
- Maps the attributes defined in the configuration file to object attributes.
- Generates objects from multi value attributes.
* LAF format:
- Reads the config file
* LAF importer:
- Implemetation of the importer interface for LAF format.
author | Raimund Renkert <rrenkert@intevation.de> |
---|---|
date | Tue, 20 Aug 2013 16:13:17 +0200 |
parents | |
children | 5844d7457dde |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/de/intevation/lada/data/importer/AttributeMapper.java Tue Aug 20 16:13:17 2013 +0200 @@ -0,0 +1,238 @@ +package de.intevation.lada.data.importer; + +import java.text.DateFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import javax.inject.Inject; +import javax.persistence.EntityManager; + +import de.intevation.lada.model.LKommentarM; +import de.intevation.lada.model.LKommentarP; +import de.intevation.lada.model.LMessung; +import de.intevation.lada.model.LMessungId; +import de.intevation.lada.model.LMesswert; +import de.intevation.lada.model.LOrt; +import de.intevation.lada.model.LProbe; + + +public class AttributeMapper +{ + @Inject + private EntityManager em; + + public LProbe addAttribute(String key, Object value, LProbe probe) { + DateFormat format = new SimpleDateFormat("yyyyMMDD hhmm"); + if ("datenbasis_s".equals(key)) { + Integer v = Integer.valueOf(value.toString()); + probe.setDatenbasisId(v); + } + else if ("probe_id".equals(key)) { + probe.setProbeId(value.toString()); + } + else if ("hauptprobennummer".equals(key)) { + probe.setHauptprobenNr(value.toString()); + } + else if ("mpr_id".equals(key)) { + Integer v = Integer.valueOf(value.toString()); + probe.setMprId(v); + } + else if ("messprogramm_land".equals(key)) { + probe.setMplId(value.toString()); + } + else if ("messstelle".equals(key)) { + probe.setMstId(value.toString()); + } + else if ("betriebsart".equals(key)) { + probe.setBaId(value.toString()); + } + else if ("soll_datum_uhrzeit_a".equals(key)) { + try { + Date d = format.parse(value.toString()); + probe.setSolldatumBeginn(d); + } + catch (ParseException e) { + //TODO handle warning. + } + } + else if ("soll_datum_uhrzeit_e".equals(key)) { + try { + Date d = format.parse(value.toString()); + probe.setSolldatumEnde(d); + } + catch (ParseException e) { + //TODO handle warning. + } + } + else if ("probenahme_datum_uhrzeit_a".equals(key)) { + try { + Date d = format.parse(value.toString()); + probe.setProbeentnahmeBeginn(d); + } + catch (ParseException e) { + //TODO handle warning. + } + } + else if ("probenahme_datum_uhrzeit_e".equals(key)) { + try { + Date d = format.parse(value.toString()); + probe.setProbeentnahmeEnde(d); + } + catch (ParseException e) { + //TODO handle warning. + } + } + else if ("umweltbereich_s".equals(key)) { + probe.setUmwId(value.toString()); + } + else if ("deskriptoren".equals(key)) { + probe.setMediaDesk(value.toString()); + } + else if ("testdaten".equals(key)) { + if (!value.toString().equals("0")) { + probe.setTest(true); + } + else { + probe.setTest(false); + } + } + return probe; + } + + public LKommentarP addAttribute( + String key, + Object values, + LKommentarP kommentar + ) { + DateFormat format = new SimpleDateFormat("yyyyMMDD hhmm"); + String v = values.toString(); + String erzeuger = v.substring(1, 5); + String date = v.substring(8, 21); + Date d; + try { + d = format.parse(date); + kommentar.setKDatum(d); + } + catch (ParseException e) { + //TODO: handle warning. + } + String text = v.substring(23, v.length() -1); + kommentar.setErzeuger(erzeuger); + kommentar.setKText(text); + return kommentar; + } + + public LKommentarM addAttribute( + String key, + Object values, + LKommentarM kommentar + ) { + DateFormat format = new SimpleDateFormat("yyyyMMDD hhmm"); + String v = values.toString(); + String erzeuger = v.substring(1, 5); + String date = v.substring(8, 21); + Date d; + try { + d = format.parse(date); + kommentar.setKDatum(d); + } + catch (ParseException e) { + //TODO: handle warning. + } + String text = v.substring(23, v.length() -1); + kommentar.setErzeuger(erzeuger); + kommentar.setKText(text); + return kommentar; + } + + public LMessung addAttribute( + String key, + Object values, + LMessung messung + ) { + DateFormat format = new SimpleDateFormat("yyyyMMDD hhmm"); + if ("messungs_id".equals(key)) { + LMessungId id = messung.getId(); + Integer v = Integer.valueOf(values.toString()); + id.setMessungsId(v); + messung.setId(id); + } + else if ("nebenprobennummer".equals(key)) { + messung.setNebenprobenNr(values.toString()); + } + else if ("mess_datum_uhrzeit".equals(key)) { + try { + Date d = format.parse(values.toString()); + messung.setMesszeitpunkt(d); + } + catch (ParseException e) { + //TODO: handle warnings. + } + } + else if ("messzeit_sekunden".equals(key)) { + Integer i = Integer.valueOf(values.toString()); + messung.setMessdauer(i); + } + else if ("messmethode_s".equals(key)) { + messung.setMmtId(values.toString()); + } + else if ("bearbeitungsstatus".equals(key)) { + //ignored.!? + } + else if ("erfassung_abgeschlossen".equals(key)) { + if(!values.toString().equals("0")) { + messung.setFertig(true); + } + else { + messung.setFertig(false); + } + } + return messung; + } + + public LMesswert addAttribute( + String key, + Object values, + LMesswert messwert + ) { + Pattern p = Pattern.compile( + "(\".+\")( .+ )(\".+\")( .*)( .{1,12})( .{1,9})(.{0,9})(.{0,3})"); + //TODO Does not perfectly match... Use better matching for floats. + Matcher m = p.matcher(values.toString()); + if (m.matches()) { + String messgroesse = m.group(1); + String wert = m.group(2); + String einheit = m.group(3); + if (wert.startsWith(" <")) { + wert = wert.substring(2); + messwert.setGrenzwertueberschreitung(false); + } + else if (wert.startsWith(" >")) { + wert = wert.substring(2); + messwert.setGrenzwertueberschreitung(true); + } + float fWert = Float.valueOf(wert); + messwert.setMesswert(fWert); + } + //TODO: Match the other values. + return messwert; + } + + public LOrt addAttribute( + String key, + Object values, + LOrt ort + ) { + if ("ort_id".equals(key)) { + Integer v = Integer.valueOf(values.toString()); + ort.setOrtId(v); + } + else if ("ort_typ".equals(key)) { + ort.setOrtsTyp(values.toString()); + } + return ort; + } +}