raimund@711: /* Copyright (C) 2013 by Bundesamt fuer Strahlenschutz
raimund@711: * Software engineering by Intevation GmbH
raimund@711: *
raimund@711: * This file is Free Software under the GNU GPL (v>=3)
raimund@711: * and comes with ABSOLUTELY NO WARRANTY! Check out
raimund@711: * the documentation coming with IMIS-Labordaten-Application for details.
raimund@711: */
raimund@661: package de.intevation.lada.validation.rules.probe;
raimund@661:
raimund@661: import java.util.List;
raimund@661:
raimund@661: import javax.inject.Inject;
raimund@661:
raimund@661: import de.intevation.lada.model.land.LProbe;
raimund@661: import de.intevation.lada.model.stamm.Deskriptoren;
raimund@661: import de.intevation.lada.util.annotation.RepositoryConfig;
raimund@661: import de.intevation.lada.util.data.QueryBuilder;
raimund@661: import de.intevation.lada.util.data.Repository;
raimund@661: import de.intevation.lada.util.data.RepositoryType;
raimund@661: import de.intevation.lada.util.rest.Response;
raimund@661: import de.intevation.lada.validation.Violation;
raimund@661: import de.intevation.lada.validation.annotation.ValidationRule;
raimund@661: import de.intevation.lada.validation.rules.Rule;
raimund@661:
raimund@711: /**
raimund@711: * Validation rule for probe.
raimund@711: * Validates if the probe has a valid deskriptor string.
raimund@711: *
raimund@711: * @author Raimund Renkert
raimund@711: */
raimund@661: @ValidationRule("Probe")
raimund@661: public class Deskriptor implements Rule {
raimund@661:
raimund@661: @Inject
raimund@661: @RepositoryConfig(type=RepositoryType.RO)
raimund@661: private Repository repository;
raimund@661:
raimund@661: @Override
raimund@661: public Violation execute(Object object) {
raimund@661: LProbe probe = (LProbe)object;
raimund@701: if (probe.getMediaDesk() == null || probe.getMediaDesk().equals("")) {
raimund@701: return null;
raimund@701: }
raimund@661: String[] mediaDesk = probe.getMediaDesk().split(" ");
raimund@664: if (mediaDesk.length <= 1) {
raimund@664: Violation violation = new Violation();
raimund@664: violation.addWarning("mediaDesk", 631);
raimund@664: return violation;
raimund@664: }
raimund@661: boolean zebs = false;
raimund@661: Integer parent = null;
raimund@661: Integer hdParent = null;
raimund@661: Integer ndParent = null;
raimund@661: if ("01".equals(mediaDesk[1])) {
raimund@661: zebs = true;
raimund@661: }
raimund@661: for (int i = 1; i < mediaDesk.length; i++) {
raimund@661: if ("00".equals(mediaDesk[i])) {
raimund@661: continue;
raimund@661: }
raimund@661: if (zebs && i < 5) {
raimund@661: parent = hdParent;
raimund@661: }
raimund@661: else if (!zebs && i < 3) {
raimund@661: parent = hdParent;
raimund@661: }
raimund@661: else {
raimund@661: parent = ndParent;
raimund@661: }
raimund@661: QueryBuilder builder = new QueryBuilder(
raimund@661: repository.entityManager("stamm"), Deskriptoren.class);
raimund@661: if (parent != null) {
raimund@661: builder.and("vorgaenger", parent);
raimund@661: }
raimund@661: builder.and("sn", mediaDesk[i]);
raimund@661: builder.and("ebene", i - 1);
raimund@661: Response response = repository.filter(builder.getQuery(), "stamm");
raimund@685: @SuppressWarnings("unchecked")
raimund@661: List data = (List)response.getData();
raimund@661: if (data.isEmpty()) {
raimund@661: Violation violation = new Violation();
raimund@661: violation.addWarning("mediaDesk", 633);
raimund@661: return violation;
raimund@661: }
raimund@661: hdParent = data.get(0).getId();
raimund@661: if (i == 2) {
raimund@661: ndParent = data.get(0).getId();
raimund@661: }
raimund@661: }
raimund@661: return null;
raimund@661: }
raimund@661: }