raimund@785: /* Copyright (C) 2013 by Bundesamt fuer Strahlenschutz
raimund@785: * Software engineering by Intevation GmbH
raimund@785: *
raimund@785: * This file is Free Software under the GNU GPL (v>=3)
raimund@785: * and comes with ABSOLUTELY NO WARRANTY! Check out
raimund@785: * the documentation coming with IMIS-Labordaten-Application for details.
raimund@785: */
raimund@785: package de.intevation.lada.validation.rules.status;
raimund@785:
raimund@785: import java.util.List;
raimund@785:
raimund@785: import javax.inject.Inject;
raimund@785:
tom@1097: import org.apache.log4j.Logger;
tom@1097:
tom@1097: import de.intevation.lada.model.land.StatusProtokoll;
tom@1097: import de.intevation.lada.model.stammdaten.StatusReihenfolge;
raimund@785: import de.intevation.lada.util.annotation.RepositoryConfig;
raimund@785: import de.intevation.lada.util.data.QueryBuilder;
raimund@785: import de.intevation.lada.util.data.Repository;
raimund@785: import de.intevation.lada.util.data.RepositoryType;
raimund@785: import de.intevation.lada.validation.Violation;
raimund@785: import de.intevation.lada.validation.annotation.ValidationRule;
raimund@785: import de.intevation.lada.validation.rules.Rule;
raimund@785:
raimund@785: /**
raimund@785: * Validation rule for status.
raimund@785: *
raimund@785: * @author Raimund Renkert
raimund@785: */
raimund@785: @ValidationRule("Status")
raimund@785: public class StatusFolge implements Rule {
raimund@785:
tom@1097: @Inject Logger logger;
tom@1097:
raimund@785: @Inject
raimund@785: @RepositoryConfig(type=RepositoryType.RO)
raimund@785: private Repository repository;
raimund@785:
raimund@785: @Override
raimund@785: public Violation execute(Object object) {
tom@1097: StatusProtokoll status = (StatusProtokoll)object;
raimund@785:
raimund@785: // Get the previous status
tom@1097: QueryBuilder lastFilter =
tom@1097: new QueryBuilder(
raimund@785: repository.entityManager("land"),
tom@1097: StatusProtokoll.class);
raimund@785:
raimund@785: lastFilter.and("messungsId", status.getMessungsId());
raimund@785: lastFilter.orderBy("datum", true);
tom@1097: List protos =
raimund@785: repository.filterPlain(lastFilter.getQuery(), "land");
raimund@794: if (protos.isEmpty()) {
raimund@794: return null;
raimund@794: }
tom@1097: StatusProtokoll last = protos.get(protos.size() - 1);
raimund@785: QueryBuilder folgeFilter =
raimund@785: new QueryBuilder(
raimund@785: repository.entityManager("stamm"),
raimund@785: StatusReihenfolge.class);
tom@1097: folgeFilter.and("vonId", last.getStatusKombi());
tom@1097: folgeFilter.and("zuId", status.getStatusKombi());
raimund@785: List reihenfolge =
raimund@785: repository.filterPlain(folgeFilter.getQuery(), "stamm");
raimund@785: if (reihenfolge.isEmpty()) {
raimund@785: Violation violation = new Violation();
raimund@785: violation.addError("status", 632);
raimund@785: return violation;
raimund@785: }
raimund@785:
raimund@785: return null;
raimund@785: }
raimund@785: }