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