# HG changeset patch # User Raimund Renkert # Date 1371035829 -7200 # Node ID 30e3ae65cd942b4db1136afaeb140d302fc6ee77 # Parent a2427e766398de2709d751a20a21c00c9f728f38 Added validation for LProbe attributes. Now validates: - Hauptprobennummer - Entnahmeort - Probeentnahmebegin - Umweltbereich diff -r a2427e766398 -r 30e3ae65cd94 src/main/java/de/intevation/lada/validation/LProbeValidator.java --- a/src/main/java/de/intevation/lada/validation/LProbeValidator.java Wed Jun 12 13:15:19 2013 +0200 +++ b/src/main/java/de/intevation/lada/validation/LProbeValidator.java Wed Jun 12 13:17:09 2013 +0200 @@ -1,10 +1,21 @@ package de.intevation.lada.validation; +import java.util.Date; import java.util.HashMap; +import java.util.List; import java.util.Map; +import javax.inject.Inject; import javax.inject.Named; +import javax.persistence.EntityManager; +import javax.persistence.criteria.CriteriaBuilder; +import javax.persistence.criteria.CriteriaQuery; +import javax.persistence.criteria.Predicate; +import javax.persistence.criteria.Root; +import de.intevation.lada.data.LOrtRepository; +import de.intevation.lada.data.LProbeRepository; +import de.intevation.lada.model.LOrt; import de.intevation.lada.model.LProbe; /** @@ -22,6 +33,14 @@ */ private Map warnings; + @Inject + private EntityManager em; + + @Inject + private LProbeRepository probeRepository; + @Inject + private LOrtRepository ortRepository; + /** * Validate a LProbe object. * @@ -36,26 +55,62 @@ errors.put("lprobe", 610); throw new ValidationException(errors); } - // Dummy warning. - //warnings.put("entnahmeort", 612); - validateId(probe); + LProbe p = (LProbe)probe; + + validateHauptProbenNummer(p); + validateEntnahmeOrt(p); + validateProbenahmeBegin(p); + validateUWB(p); } - /** - * Validate the LProbe id. - * - * @param probe The LProbe object. - * @throws ValidationException - */ - private void validateId(Object probe) - throws ValidationException{ - Map errors = new HashMap(); - // TODO Implement me! + private void validateHauptProbenNummer(LProbe p) + throws ValidationException { + String hpn = p.getHauptprobenNr(); + CriteriaBuilder cb = em.getCriteriaBuilder(); + CriteriaQuery criteria = cb.createQuery(LProbe.class); + Root member = criteria.from(LProbe.class); + Predicate mstId = cb.equal(member.get("mstId"), p.getMstId()); + Predicate hpNr = cb.equal(member.get("hauptprobenNr"), hpn); + criteria.where(cb.and(mstId, hpNr)); - //// Dummy error. - //errors.put("probeId", 611); - //ValidationException ve = new ValidationException(errors); - //throw ve; + List proben = probeRepository.filter(criteria); + if (!proben.isEmpty()) { + Map errors = new HashMap(); + errors.put("hauptprobenNr", 611); + throw new ValidationException(errors); + } + } + + private void validateEntnahmeOrt(LProbe probe) { + String pid = probe.getProbeId(); + + CriteriaBuilder cb = em.getCriteriaBuilder(); + CriteriaQuery criteria = cb.createQuery(LOrt.class); + Root member = criteria.from(LOrt.class); + Predicate probeId = cb.equal(member.get("probeId"), pid); + criteria.where(probeId); + + List orte = ortRepository.filter(criteria); + if(orte.isEmpty()) { + this.warnings.put("entnahmeOrt", 631); + } + } + + private void validateProbenahmeBegin(LProbe probe) { + Date begin = probe.getProbeentnahmeBeginn(); + if (begin == null) { + this.warnings.put("probeentnahmeBegin", 631); + } + else if (begin.after(new Date())){ + this.warnings.put("probeentnahmeBegin", 661); + } + } + + private void validateUWB(LProbe probe) { + String uwb = probe.getUmwId(); + if (uwb == null || uwb.equals("")) { + this.warnings.put("uwb", 631); + } } /**