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: }