rrenkert@310: package de.intevation.lada.data.importer; rrenkert@310: rrenkert@310: import java.text.DateFormat; rrenkert@310: import java.text.ParseException; rrenkert@310: import java.text.SimpleDateFormat; rrenkert@310: import java.util.Date; rrenkert@321: import java.util.List; rrenkert@310: import java.util.regex.Matcher; rrenkert@310: import java.util.regex.Pattern; rrenkert@310: rrenkert@321: import javax.ejb.Stateless; rrenkert@310: import javax.inject.Inject; rrenkert@321: import javax.inject.Named; rrenkert@310: import javax.persistence.EntityManager; rrenkert@310: rrenkert@321: import de.intevation.lada.data.Repository; rrenkert@310: import de.intevation.lada.model.LKommentarM; rrenkert@310: import de.intevation.lada.model.LKommentarP; rrenkert@310: import de.intevation.lada.model.LMessung; rrenkert@310: import de.intevation.lada.model.LMessungId; rrenkert@310: import de.intevation.lada.model.LMesswert; rrenkert@310: import de.intevation.lada.model.LOrt; rrenkert@310: import de.intevation.lada.model.LProbe; rrenkert@321: import de.intevation.lada.model.SMessEinheit; rrenkert@321: import de.intevation.lada.model.SMessgroesse; rrenkert@321: import de.intevation.lada.rest.Response; rrenkert@310: rrenkert@321: @Stateless rrenkert@310: public class AttributeMapper rrenkert@310: { rrenkert@310: @Inject rrenkert@310: private EntityManager em; rrenkert@310: rrenkert@321: @Inject rrenkert@321: @Named("readonlyrepository") rrenkert@321: private Repository sRepository; rrenkert@321: rrenkert@310: public LProbe addAttribute(String key, Object value, LProbe probe) { rrenkert@321: DateFormat format = new SimpleDateFormat("yyyyMMdd HHmm"); rrenkert@310: if ("datenbasis_s".equals(key)) { rrenkert@310: Integer v = Integer.valueOf(value.toString()); rrenkert@310: probe.setDatenbasisId(v); rrenkert@310: } rrenkert@310: else if ("probe_id".equals(key)) { rrenkert@310: probe.setProbeId(value.toString()); rrenkert@310: } rrenkert@310: else if ("hauptprobennummer".equals(key)) { rrenkert@310: probe.setHauptprobenNr(value.toString()); rrenkert@310: } rrenkert@310: else if ("mpr_id".equals(key)) { rrenkert@310: Integer v = Integer.valueOf(value.toString()); rrenkert@310: probe.setMprId(v); rrenkert@310: } rrenkert@321: else if ("netzkennung".equals(key)) { rrenkert@321: probe.setNetzbetreiberId(value.toString()); rrenkert@321: } rrenkert@310: else if ("messprogramm_land".equals(key)) { rrenkert@310: probe.setMplId(value.toString()); rrenkert@310: } rrenkert@310: else if ("messstelle".equals(key)) { rrenkert@310: probe.setMstId(value.toString()); rrenkert@310: } rrenkert@310: else if ("betriebsart".equals(key)) { rrenkert@310: probe.setBaId(value.toString()); rrenkert@310: } rrenkert@310: else if ("soll_datum_uhrzeit_a".equals(key)) { rrenkert@310: try { rrenkert@310: Date d = format.parse(value.toString()); rrenkert@310: probe.setSolldatumBeginn(d); rrenkert@310: } rrenkert@310: catch (ParseException e) { rrenkert@310: //TODO handle warning. rrenkert@310: } rrenkert@310: } rrenkert@310: else if ("soll_datum_uhrzeit_e".equals(key)) { rrenkert@310: try { rrenkert@310: Date d = format.parse(value.toString()); rrenkert@310: probe.setSolldatumEnde(d); rrenkert@310: } rrenkert@310: catch (ParseException e) { rrenkert@310: //TODO handle warning. rrenkert@310: } rrenkert@310: } rrenkert@310: else if ("probenahme_datum_uhrzeit_a".equals(key)) { rrenkert@310: try { rrenkert@310: Date d = format.parse(value.toString()); rrenkert@310: probe.setProbeentnahmeBeginn(d); rrenkert@310: } rrenkert@310: catch (ParseException e) { rrenkert@310: //TODO handle warning. rrenkert@310: } rrenkert@310: } rrenkert@310: else if ("probenahme_datum_uhrzeit_e".equals(key)) { rrenkert@310: try { rrenkert@310: Date d = format.parse(value.toString()); rrenkert@310: probe.setProbeentnahmeEnde(d); rrenkert@310: } rrenkert@310: catch (ParseException e) { rrenkert@310: //TODO handle warning. rrenkert@310: } rrenkert@310: } rrenkert@310: else if ("umweltbereich_s".equals(key)) { rrenkert@310: probe.setUmwId(value.toString()); rrenkert@310: } rrenkert@310: else if ("deskriptoren".equals(key)) { rrenkert@310: probe.setMediaDesk(value.toString()); rrenkert@310: } rrenkert@310: else if ("testdaten".equals(key)) { rrenkert@310: if (!value.toString().equals("0")) { rrenkert@310: probe.setTest(true); rrenkert@310: } rrenkert@310: else { rrenkert@310: probe.setTest(false); rrenkert@310: } rrenkert@310: } rrenkert@321: rrenkert@321: probe.setProbenartId(1); rrenkert@310: return probe; rrenkert@310: } rrenkert@310: rrenkert@310: public LKommentarP addAttribute( rrenkert@310: String key, rrenkert@310: Object values, rrenkert@310: LKommentarP kommentar rrenkert@310: ) { rrenkert@321: DateFormat format = new SimpleDateFormat("yyyyMMdd HHmm"); rrenkert@310: String v = values.toString(); rrenkert@310: String erzeuger = v.substring(1, 5); rrenkert@310: String date = v.substring(8, 21); rrenkert@310: Date d; rrenkert@310: try { rrenkert@310: d = format.parse(date); rrenkert@310: kommentar.setKDatum(d); rrenkert@310: } rrenkert@310: catch (ParseException e) { rrenkert@310: //TODO: handle warning. rrenkert@310: } rrenkert@310: String text = v.substring(23, v.length() -1); rrenkert@310: kommentar.setErzeuger(erzeuger); rrenkert@310: kommentar.setKText(text); rrenkert@310: return kommentar; rrenkert@310: } rrenkert@310: rrenkert@310: public LKommentarM addAttribute( rrenkert@310: String key, rrenkert@310: Object values, rrenkert@310: LKommentarM kommentar rrenkert@310: ) { rrenkert@321: DateFormat format = new SimpleDateFormat("yyyyMMdd HHmm"); rrenkert@310: String v = values.toString(); rrenkert@310: String erzeuger = v.substring(1, 5); rrenkert@310: String date = v.substring(8, 21); rrenkert@310: Date d; rrenkert@310: try { rrenkert@310: d = format.parse(date); rrenkert@310: kommentar.setKDatum(d); rrenkert@310: } rrenkert@310: catch (ParseException e) { rrenkert@310: //TODO: handle warning. rrenkert@310: } rrenkert@310: String text = v.substring(23, v.length() -1); rrenkert@310: kommentar.setErzeuger(erzeuger); rrenkert@310: kommentar.setKText(text); rrenkert@310: return kommentar; rrenkert@310: } rrenkert@310: rrenkert@310: public LMessung addAttribute( rrenkert@310: String key, rrenkert@310: Object values, rrenkert@310: LMessung messung rrenkert@310: ) { rrenkert@321: DateFormat format = new SimpleDateFormat("yyyyMMdd HHmm"); rrenkert@310: if ("messungs_id".equals(key)) { rrenkert@310: LMessungId id = messung.getId(); rrenkert@310: Integer v = Integer.valueOf(values.toString()); rrenkert@310: id.setMessungsId(v); rrenkert@321: messung.setMessungsId(v); rrenkert@310: messung.setId(id); rrenkert@310: } rrenkert@310: else if ("nebenprobennummer".equals(key)) { rrenkert@310: messung.setNebenprobenNr(values.toString()); rrenkert@310: } rrenkert@310: else if ("mess_datum_uhrzeit".equals(key)) { rrenkert@310: try { rrenkert@310: Date d = format.parse(values.toString()); rrenkert@310: messung.setMesszeitpunkt(d); rrenkert@310: } rrenkert@310: catch (ParseException e) { rrenkert@310: //TODO: handle warnings. rrenkert@310: } rrenkert@310: } rrenkert@310: else if ("messzeit_sekunden".equals(key)) { rrenkert@310: Integer i = Integer.valueOf(values.toString()); rrenkert@310: messung.setMessdauer(i); rrenkert@310: } rrenkert@310: else if ("messmethode_s".equals(key)) { rrenkert@310: messung.setMmtId(values.toString()); rrenkert@310: } rrenkert@310: else if ("bearbeitungsstatus".equals(key)) { rrenkert@310: //ignored.!? rrenkert@310: } rrenkert@310: else if ("erfassung_abgeschlossen".equals(key)) { rrenkert@310: if(!values.toString().equals("0")) { rrenkert@310: messung.setFertig(true); rrenkert@310: } rrenkert@310: else { rrenkert@310: messung.setFertig(false); rrenkert@310: } rrenkert@310: } rrenkert@310: return messung; rrenkert@310: } rrenkert@310: rrenkert@310: public LMesswert addAttribute( rrenkert@310: String key, rrenkert@310: Object values, rrenkert@310: LMesswert messwert rrenkert@310: ) { rrenkert@310: Pattern p = Pattern.compile( rrenkert@310: "(\".+\")( .+ )(\".+\")( .*)( .{1,12})( .{1,9})(.{0,9})(.{0,3})"); rrenkert@310: //TODO Does not perfectly match... Use better matching for floats. rrenkert@310: Matcher m = p.matcher(values.toString()); rrenkert@310: if (m.matches()) { rrenkert@321: String messgroesse = m.group(1).substring(1, m.group(1).length() - 1); rrenkert@310: String wert = m.group(2); rrenkert@321: String einheit = m.group(3).substring(1, m.group(3).length() - 1); rrenkert@310: if (wert.startsWith(" <")) { rrenkert@310: wert = wert.substring(2); rrenkert@310: messwert.setGrenzwertueberschreitung(false); rrenkert@310: } rrenkert@310: else if (wert.startsWith(" >")) { rrenkert@310: wert = wert.substring(2); rrenkert@310: messwert.setGrenzwertueberschreitung(true); rrenkert@310: } rrenkert@310: float fWert = Float.valueOf(wert); rrenkert@310: messwert.setMesswert(fWert); rrenkert@321: Response responseEinheit = sRepository.findAll(SMessEinheit.class); rrenkert@321: List einheiten = rrenkert@321: (List)responseEinheit.getData(); rrenkert@321: boolean foundEinheit = false; rrenkert@321: for (SMessEinheit e: einheiten) { rrenkert@321: if(e.getEinheit().equals(einheit)) { rrenkert@321: foundEinheit = true; rrenkert@321: messwert.setMehId((int) e.getMehId()); rrenkert@321: } rrenkert@321: } rrenkert@321: if (!foundEinheit) { rrenkert@321: return null; rrenkert@321: //TODO: handle warning! rrenkert@321: } rrenkert@321: Response responseGroesse = sRepository.findAll(SMessgroesse.class); rrenkert@321: List messgroessen = rrenkert@321: (List)responseGroesse.getData(); rrenkert@321: boolean foundGroesse = false; rrenkert@321: for (SMessgroesse g: messgroessen) { rrenkert@321: if(g.getMessgro0esse().equals(messgroesse)) { rrenkert@321: foundGroesse = true; rrenkert@321: messwert.setMessgroesseId(g.getMessgroesseId()); rrenkert@321: messwert.getId().setMessgroesseId(g.getMessgroesseId()); rrenkert@321: } rrenkert@321: } rrenkert@321: if (!foundGroesse) { rrenkert@321: return null; rrenkert@321: //TODO: handle warning! rrenkert@321: } rrenkert@310: } rrenkert@310: //TODO: Match the other values. rrenkert@310: return messwert; rrenkert@310: } rrenkert@310: rrenkert@310: public LOrt addAttribute( rrenkert@310: String key, rrenkert@310: Object values, rrenkert@310: LOrt ort rrenkert@310: ) { rrenkert@310: if ("ort_id".equals(key)) { rrenkert@310: Integer v = Integer.valueOf(values.toString()); rrenkert@310: ort.setOrtId(v); rrenkert@310: } rrenkert@310: else if ("ort_typ".equals(key)) { rrenkert@310: ort.setOrtsTyp(values.toString()); rrenkert@310: } rrenkert@310: return ort; rrenkert@310: } rrenkert@310: }