final QName typeName = query.getTypeName();
final FeatureTypeInfo featureTypeInfo = getFeatureTypeInfo(typeName);
final WfsFactory factory = WfsFactory.eINSTANCE;
GetFeatureType getFeature = factory.createGetFeatureType();
getFeature.setService("WFS");
getFeature.setVersion(getVersion());
String outputFormat = query.getOutputFormat();
getFeature.setOutputFormat(outputFormat);
getFeature.setHandle(query.getHandle());
Integer maxFeatures = query.getMaxFeatures();
if (maxFeatures != null) {
getFeature.setMaxFeatures(BigInteger.valueOf(maxFeatures.intValue()));
}
ResultType resultType = query.getResultType();
getFeature.setResultType(RESULTS == resultType ? ResultTypeType.RESULTS_LITERAL
: ResultTypeType.HITS_LITERAL);
QueryType wfsQuery = factory.createQueryType();
wfsQuery.setTypeName(Collections.singletonList(typeName));
final Filter supportedFilter;
final Filter unsupportedFilter;
{
final Filter filter = query.getFilter();
Filter[] splitFilters = splitFilters(typeName, filter);
supportedFilter = splitFilters[0];
unsupportedFilter = splitFilters[1];
}
query.setUnsupportedFilter(unsupportedFilter);
if (!Filter.INCLUDE.equals(supportedFilter)) {
wfsQuery.setFilter(supportedFilter);
}
String srsName = query.getSrsName();
if (null == srsName) {
srsName = featureTypeInfo.getDefaultSRS();
}
try {
wfsQuery.setSrsName(new URI(srsName));
} catch (URISyntaxException e) {
throw new RuntimeException("Can't create a URI from the query CRS: " + srsName, e);
}
String[] propertyNames = query.getPropertyNames();
boolean retrieveAllProperties = propertyNames == null;
if (!retrieveAllProperties) {
List<String> propertyName = wfsQuery.getPropertyName();
for (String propName : propertyNames) {
propertyName.add(propName);
}
}
SortBy[] sortByList = query.getSortBy();
if (sortByList != null) {
for (SortBy sortBy : sortByList) {
wfsQuery.getSortBy().add(sortBy);
}
}
getFeature.getQuery().add(wfsQuery);
return getFeature;
}