view src/main/java/de/intevation/lada/importer/ProbeIdentifier.java @ 1047:1b6adb3971d4 schema-update

Added identifier for probe and messung objects for use in LAF importer.
author Raimund Renkert <raimund.renkert@intevation.de>
date Fri, 09 Sep 2016 15:35:09 +0200
parents
children 625b0adcba45
line wrap: on
line source
/* Copyright (C) 2013 by Bundesamt fuer Strahlenschutz
 * Software engineering by Intevation GmbH
 *
 * This file is Free Software under the GNU GPL (v>=3)
 * and comes with ABSOLUTELY NO WARRANTY! Check out
 * the documentation coming with IMIS-Labordaten-Application for details.
 */
package de.intevation.lada.importer;

import java.util.List;

import javax.inject.Inject;
import javax.management.modelmbean.InvalidTargetObjectTypeException;

import de.intevation.lada.model.land.Probe;
import de.intevation.lada.model.land.ZusatzWert;
import de.intevation.lada.util.annotation.RepositoryConfig;
import de.intevation.lada.util.data.QueryBuilder;
import de.intevation.lada.util.data.Repository;
import de.intevation.lada.util.data.RepositoryType;

@IdentifierConfig(type="Probe")
public class ProbeIdentifier implements Identifier {

    @Inject
    @RepositoryConfig(type=RepositoryType.RO)
    private Repository repository;

    @Override
    public Identified find(Object object)
    throws InvalidTargetObjectTypeException
    {
        if (!(object instanceof Probe)) {
            throw new InvalidTargetObjectTypeException(
                "Object is not of type Probe");
        }
        Probe probe = (Probe)object;
        QueryBuilder<Probe> builder = new QueryBuilder<Probe>(
            repository.entityManager("land"),
            Probe.class
        );

        // idAlt null and hauptprobenNr not null and mstId not null.
        if (probe.getIdAlt() == null &&
            probe.getHauptprobenNr() != null &&
            probe.getMstId() != null
        ) {
            builder.and("mstId", probe.getMstId());
            builder.and("hauptprobenNr", probe.getHauptprobenNr());
            List<Probe> proben = repository.filterPlain(builder.getQuery(), "land");
            if (proben.size() > 1) {
                // Should never happen. DB has unique constraint for
                // "hauptprobenNr"
                return Identified.REJECT;
            }
            if (proben.isEmpty()) {
                return Identified.NEW;
            }
            return Identified.UPDATE;
        }
        else if (probe.getIdAlt() != null &&
            (probe.getHauptprobenNr() == null ||
            probe.getMstId() == null)
        ) {
            builder.and("idAlt", probe.getIdAlt());
            List<Probe> proben =
                repository.filterPlain(builder.getQuery(), "land");
            if (proben.size() > 1) {
                // Should never happen. DB has unique constraint for "idAlt"
                return Identified.REJECT;
            }
            if (proben.isEmpty()) {
                return Identified.NEW;
            }
            return Identified.UPDATE;
        }
        else {
            builder.and("idAlt", probe.getIdAlt());
            List<Probe> proben =
                repository.filterPlain(builder.getQuery(), "land");
            if (proben.size() > 1) {
                // Should never happen. DB has unique constraint for "idAlt"
                return Identified.REJECT;
            }
            if (proben.isEmpty()) {
                return Identified.NEW;
            }
            if (proben.get(0).getHauptprobenNr().equals(
                    probe.getHauptprobenNr()) ||
                probe.getHauptprobenNr().isEmpty() ||
                proben.get(0).getHauptprobenNr().isEmpty()
            ) {
                return Identified.UPDATE;
            }
            else {
                return Identified.REJECT;
            }
        }
    }

    // TODO move the following functions to the correct class to have a clean
    // interface impl.
    public boolean merge(Probe result, Probe tomerge) {
        result.setBaId(tomerge.getBaId());
        result.setDatenbasisId(tomerge.getDatenbasisId());
        result.setErzeugerId(tomerge.getErzeugerId());
        result.setHauptprobenNr(tomerge.getHauptprobenNr());
        result.setLaborMstId(tomerge.getLaborMstId());
        result.setMedia(tomerge.getMedia());
        result.setMediaDesk(tomerge.getMediaDesk());
        result.setMittelungsdauer(tomerge.getMittelungsdauer());
        result.setMplId(tomerge.getMplId());
        result.setMprId(tomerge.getMprId());
        result.setProbeentnahmeBeginn(tomerge.getProbeentnahmeBeginn());
        result.setProbeentnahmeEnde(tomerge.getProbeentnahmeEnde());
        result.setProbenartId(tomerge.getProbenartId());
        result.setProbeNehmerId(tomerge.getProbeNehmerId());
        result.setSolldatumBeginn(tomerge.getSolldatumBeginn());
        result.setSolldatumEnde(tomerge.getSolldatumEnde());
        result.setTest(tomerge.getTest());
        result.setUmwId(tomerge.getUmwId());
        return true;
    }

    public boolean mergeZusatzwerte(Probe probe, List<ZusatzWert> zusatzwerte) {
        return true;
    }
}
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)