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