/* (c) 2014 Open Source Geospatial Foundation - all rights reserved
* (c) 2001 - 2013 OpenPlans
* This code is licensed under the GPL 2.0 license, available at the root
* application directory.
*/
package org.geoserver.feature;
import java.util.HashSet;
import java.util.Set;
import javax.xml.namespace.QName;
import org.geoserver.catalog.Catalog;
import org.geoserver.catalog.ResourceInfo;
import org.geotools.filter.visitor.DefaultFilterVisitor;
import org.opengis.filter.Id;
import org.opengis.filter.identity.FeatureId;
import org.opengis.filter.identity.Identifier;
/**
* Extracts feature type names from any Id filters.
*
* @author Justin Deoliveira, OpenGeo
*/
public class TypeNameExtractingVisitor extends DefaultFilterVisitor {
Catalog catalog;
Set<QName> typeNames = new HashSet<QName>();
public TypeNameExtractingVisitor(Catalog catalog) {
this.catalog = catalog;
}
@Override
public Object visit(Id filter, Object data) {
for (Identifier id : filter.getIdentifiers()) {
if (id instanceof FeatureId) {
FeatureId fid = (FeatureId) id;
if (fid.getID() != null) {
String[] split = fid.getID().split("\\.");
if (split.length > 1) {
ResourceInfo r = catalog.getResourceByName(split[0], ResourceInfo.class);
if (r != null) {
typeNames.add(new QName(r.getNamespace().getURI(), r.getName()));
}
}
}
}
}
return data;
}
public Set<QName> getTypeNames() {
return typeNames;
}
}