view src/main/java/de/intevation/lada/validation/LProbeValidator.java @ 344:976f4e4df363

Validate haputprobennummer on probe update and create.
author Raimund Renkert <rrenkert@intevation.de>
date Fri, 30 Aug 2013 10:31:30 +0200
parents aadc0bb0dc1d
children f3d0894d9bfc
line wrap: on
line source
package de.intevation.lada.validation;

import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.enterprise.context.ApplicationScoped;
import javax.inject.Inject;
import javax.inject.Named;

import com.sun.istack.Builder;

import de.intevation.lada.data.LOrtRepository;
import de.intevation.lada.data.LProbeRepository;
import de.intevation.lada.data.QueryBuilder;
import de.intevation.lada.model.LOrt;
import de.intevation.lada.model.LProbe;
import de.intevation.lada.model.LProbeInfo;
import de.intevation.lada.rest.Response;

/**
 * Validator for LProbe objects.
 *
 * @author <a href="mailto:rrenkert@intevation.de">Raimund Renkert</a>
 */
@Named("lprobevalidator")
@ApplicationScoped
public class LProbeValidator
implements Validator
{
    /**
     * The repositories used in this validator.
     */
    @Inject
    private LProbeRepository probeRepository;
    @Inject
    private LOrtRepository ortRepository;

    /**
     * Validate a LProbe object.
     *
     * @param probe     The LProbe object.
     * @param update    The database operation.
     *                  TRUE indicates that the object should be updated, FALSE
     *                  if the object is a new Object.
     * @return Map containing warnings.
     */
    @Override
    public Map<String, Integer> validate(Object probe, boolean update)
    throws ValidationException {
        Map<String, Integer>warnings = new HashMap<String, Integer>();
        if (!(probe instanceof LProbe)) {
            Map<String, Integer> errors = new HashMap<String, Integer>();
            errors.put("lprobe", 610);
            throw new ValidationException(errors);
        }
        LProbe p = (LProbe)probe;

        validateEntnahmeOrt(p, warnings);
        validateProbenahmeBegin(p, warnings);
        validateUWB(p, warnings);
        validateHauptProbenNummer(p, warnings);
        return warnings;
    }

    /**
     * Check if the 'Hauptproben Nr' is unique.
     *
     * @param p         The LProbe object.
     * @param warnings  The map containing warnings.
     * @throws ValidationException
     */
    private void validateHauptProbenNummer(LProbe p, Map<String, Integer> warnings)
    throws ValidationException {
        Response pInfo =
            probeRepository.findById(LProbeInfo.class, p.getProbeId());
        List<LProbeInfo> pList = (List<LProbeInfo>)pInfo.getData();
        if (!(pList == null) && !pList.isEmpty()) {
            LProbeInfo probe = pList.get(0);
            if (probe.getHauptprobenNr().equals(p.getHauptprobenNr())) {
                return;
            }
        }
        String hpn = p.getHauptprobenNr();
        QueryBuilder<LProbe> builder =
            new QueryBuilder<LProbe>(
                probeRepository.getEntityManager(), LProbe.class);
        builder.and("mstId", p.getMstId()).and("hauptprobenNr", hpn);

        Response response = probeRepository.filter(builder.getQuery());
        if (!((List<LProbe>)response.getData()).isEmpty()) {
            Map<String, Integer> errors = new HashMap<String, Integer>();
            errors.put("hauptprobenNr", 611);
            throw new ValidationException(errors, warnings);
        }
    }

    /**
     * Check if the LProbe object has 'Entnahmeort'.
     *
     * @param probe
     * @param warnings
     */
    private void validateEntnahmeOrt(LProbe probe, Map<String, Integer> warnings) {
        String pid = probe.getProbeId();

        QueryBuilder<LOrt> builder =
            new QueryBuilder<LOrt>(
                ortRepository.getEntityManager(), LOrt.class);
        builder.and("probeId", pid);

        Response response = ortRepository.filter(builder.getQuery());
        if (((List<LOrt>)response.getData()).isEmpty()) {
            warnings.put("entnahmeOrt", 631);
        }
    }

    /**
     * Check if 'Probenahmeende' is after 'Probenahmebeginn'.
     *
     * @param probe     The LProbe object.
     * @param warnings  The map containing warnings.
     */
    private void validateProbenahmeBegin(LProbe probe, Map<String, Integer> warnings) {
        Date begin = probe.getProbeentnahmeBeginn();
        if (begin == null) {
            warnings.put("probeentnahmeBegin", 631);
        }
        else if (begin.after(new Date())){
            warnings.put("probeentnahmeBegin", 661);
        }
    }

    /**
     * Check if the LProbe object has a 'Umweltbereich'.
     *
     * @param probe     The LProbe object.
     * @param warnings  The map containing warnings.
     */
    private void validateUWB(LProbe probe, Map<String, Integer> warnings) {
        String uwb = probe.getUmwId();
        if (uwb == null || uwb.equals("")) {
            warnings.put("uwb", 631);
        }
    }
}
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)