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@652: package de.intevation.lada.validation.rules.ort;
raimund@652:
raimund@677: import java.util.List;
raimund@677:
raimund@677: import javax.inject.Inject;
raimund@677:
raimund@677: import com.vividsolutions.jts.geom.Point;
raimund@677:
tom@1251: import org.apache.log4j.Logger;
tom@1251:
tom@1097: import de.intevation.lada.model.stammdaten.Ort;
tom@1097: import de.intevation.lada.model.stammdaten.Verwaltungseinheit;
raimund@1194: import de.intevation.lada.model.stammdaten.Verwaltungsgrenze;
raimund@677: import de.intevation.lada.util.annotation.RepositoryConfig;
raimund@677: import de.intevation.lada.util.data.QueryBuilder;
raimund@677: import de.intevation.lada.util.data.Repository;
raimund@677: import de.intevation.lada.util.data.RepositoryType;
raimund@652: import de.intevation.lada.validation.Violation;
raimund@652: import de.intevation.lada.validation.annotation.ValidationRule;
raimund@652: import de.intevation.lada.validation.rules.Rule;
raimund@652:
raimund@711: /**
raimund@711: * Validation rule for ort.
raimund@711: * Validates if the coordinates are in the specified "Verwaltungseinheit".
raimund@711: *
raimund@711: * @author Raimund Renkert
raimund@711: */
tom@1251: @ValidationRule("Ort")
raimund@652: public class CoordinatesInVE implements Rule {
raimund@652:
raimund@677: @Inject
tom@1251: private Logger logger;
tom@1251:
tom@1251: @Inject
raimund@677: @RepositoryConfig(type=RepositoryType.RO)
raimund@677: private Repository repository;
raimund@677:
raimund@685: @SuppressWarnings("unchecked")
raimund@652: @Override
raimund@652: public Violation execute(Object object) {
tom@1251: Ort ort = (Ort)object;
tom@1219:
tom@1251: String gemId = "".equals(ort.getGemId())
tom@1251: ? null
tom@1251: : ort.getGemId();
tom@1219:
tom@1251: if (gemId != null) {
tom@1251:
tom@1251: QueryBuilder vg =
tom@1251: new QueryBuilder(
tom@1251: repository.entityManager("stamm"),
tom@1251: Verwaltungsgrenze.class);
tom@1251: vg.and("gemId", gemId);
tom@1251: List vgs = repository.filterPlain(
tom@1251: vg.getQuery(), "stamm");
tom@1251: if (vgs == null || vgs.isEmpty()) {
tom@1251: Violation violation = new Violation();
tom@1251: violation.addWarning("verwaltungsgrenze", 600);
tom@1251: return violation;
raimund@677: }
tom@1251:
tom@1251: Point p = ort.getGeom();
tom@1251: if (p == null) {
tom@1251: logger.error("geom is null. "
tom@1251: + "Probably OrtFactory.transformCoordinates() has not "
tom@1251: + "been called on this ort.");
tom@1251: }
tom@1251: for (Verwaltungsgrenze singlevg : vgs) {
tom@1251: if(singlevg.getShape().contains(p)) {
tom@1251: return null;
tom@1251: }
tom@1251: }
raimund@677: Violation violation = new Violation();
tom@1219: violation.addWarning("verwaltungsgrenze", 651);
raimund@677: return violation;
raimund@677: }
tom@1251:
raimund@652: return null;
raimund@652: }
raimund@652:
raimund@652: }