/*
* This is part of Geomajas, a GIS framework, http://www.geomajas.org/.
*
* Copyright 2008-2015 Geosparc nv, http://www.geosparc.com/, Belgium.
*
* The program is available in open source according to the GNU Affero
* General Public License. All contributions in this program are covered
* by the Geomajas Contributors License Agreement. For full licensing
* details, see LICENSE.txt in the project root.
*/
package org.geomajas.widget.searchandfilter.search.dto;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import org.geomajas.command.dto.SearchByLocationRequest;
import org.geomajas.geometry.Geometry;
/**
* Criterion with attribute criteria.
*
* @author Kristof Heirwegh
*/
public class GeometryCriterion implements Criterion {
private static final long serialVersionUID = 100L;
// TODO change to enums
public static final int INTERSECTS = SearchByLocationRequest.QUERY_INTERSECTS;
public static final int TOUCHES = SearchByLocationRequest.QUERY_TOUCHES;
public static final int WITHIN = SearchByLocationRequest.QUERY_WITHIN;
public static final int CONTAINS = SearchByLocationRequest.QUERY_CONTAINS;
private List<String> serverLayerIds;
private Geometry geometry;
private int operator = INTERSECTS;
public GeometryCriterion() {
// no-args constructor as needed for GWT
}
/**
* Constructor using INTERSECTS as operator.
*
* @param serverLayerIds layer ids to search in
* @param geometry geometry to use for search
*/
public GeometryCriterion(List<String> serverLayerIds, Geometry geometry) {
this.serverLayerIds = serverLayerIds;
this.geometry = geometry;
}
/**
* Constructor using INTERSECTS as operator.
*
* @param serverLayerIds layer ids to search in
* @param geometry geometry to use for search
* @param operator operator to use for search
*/
public GeometryCriterion(List<String> serverLayerIds, Geometry geometry, int operator) {
this.serverLayerIds = serverLayerIds;
this.geometry = geometry;
this.operator = operator;
}
// ----------------------------------------------------------
public List<String> getServerLayerIds() {
if (serverLayerIds == null) {
serverLayerIds = new ArrayList<String>();
}
return serverLayerIds;
}
public void setServerLayerIds(List<String> serverLayerIds) {
this.serverLayerIds = serverLayerIds;
}
public Geometry getGeometry() {
return geometry;
}
public void setGeometry(Geometry geometry) {
this.geometry = geometry;
}
public int getOperator() {
return operator;
}
public void setOperator(int operator) {
this.operator = operator;
}
@Override
public boolean isValid() {
return (serverLayerIds != null && serverLayerIds.size() > 0 && geometry != null && operator > 0 && operator < 5)
;
}
@Override
public void serverLayerIdVisitor(Set<String> layerIds) {
layerIds.addAll(serverLayerIds);
}
@Override
public List<Criterion> getCriteria() {
return new ArrayList<Criterion>();
}
@Override
public String getDisplayText() {
StringBuilder sb = new StringBuilder();
switch (operator) {
case INTERSECTS:
sb.append("INTERSECTS");
break;
case TOUCHES:
sb.append("TOUCHES");
break;
case WITHIN:
sb.append("WITHIN");
break;
case CONTAINS:
sb.append("CONTAINS");
break;
default:
sb.append("??");
break;
}
sb.append(" ");
sb.append(geometry.getGeometryType());
return sb.toString();
}
@Override
public String toString() {
return getDisplayText();
}
}