@SuppressWarnings("unchecked") private void setFilter(WebMapServer wms, GetMapRequest request) { Filter mapFilter = null; Map<ILayer, Filter> filters = new HashMap<ILayer, Filter>(); List<ILayer> layers = getContext().getLayers(); for (ILayer layer : layers) { Object layerFilter = layer.getStyleBlackboard().get(ProjectBlackboardConstants.LAYER__DATA_QUERY); Filter filter; if (layerFilter instanceof Query) { filter = (Filter) ((Query) layerFilter).getFilter(); } else if (layerFilter instanceof Filter) { filter = (Filter) layerFilter; } else { filter = mapFilter; } if (filter != null && filter != Filter.INCLUDE) { filters.put(layer, filter); } } if (filters.isEmpty()) return; StringBuilder builder = new StringBuilder(); HashMap hashMap = new HashMap(); for (Map.Entry<ILayer, Filter> entry : filters.entrySet()) { if (entry.getValue() == null) builder.append('('); try { StringWriter writer = new StringWriter(); DocumentWriter.writeDocument(entry.getValue(), FilterSchema.getInstance(), writer, hashMap); builder.append(writer.toString()); } catch (OperationNotSupportedException e) { WMSPlugin.log( "Error writing filter for layer: " + entry.getKey().getID(), e); // $NON-NLS-1$ builder.append("<Filter/>"); // $NON-NLS-1$ } catch (IOException e) { // SHOULDN'T Happen I don't think... assert false; WMSPlugin.log( "Error writing filter for layer: " + entry.getKey().getID(), e); // $NON-NLS-1$ builder.append("<Filter/>"); // $NON-NLS-1$ } builder.append(')'); } try { String encode = URLEncoder.encode(builder.toString(), "UTF-8"); // $NON-NLS-1$ request.setVendorSpecificParameter("filter", encode); // $NON-NLS-1$ } catch (UnsupportedEncodingException e) { // better not happen! throw (RuntimeException) new RuntimeException().initCause(e); } }