public void handleAction(final FlowModel flowModel) throws OgcFlowException {

    WFSLayer wfsLayer = findWFSLayer(flowModel);
    log.debug("Drawing image for wfs layer '" + wfsLayer.getName(locale) + "'");
    List<Future<WFSResponseCapsule>> futures = new ArrayList<Future<WFSResponseCapsule>>();
    /* Create workers */
    log.debug("We have " + wfsLayer.getSelectedFeatureTypes().size() + " selected feature types");
    for (SelectedFeatureType sft : wfsLayer.getSelectedFeatureTypes()) {
      FeatureType ft = sft.getFeatureType();
      log.debug("Processing featuretype '", ft.getTitle(locale), "'...");

      /* Create filter */
      String geomName = ft.getBboxParameterName();
      FilterFactory2 ff = CommonFactoryFinder.getFilterFactory2(GeoTools.getDefaultHints());

      GetFeaturesWorker worker =
          new GetFeaturesWorker(sft, getExtendedMapViewBbox(ff, geomName, flowModel), false);
      Future<WFSResponseCapsule> future = WfsExecutorService.schedule(worker);
      futures.add(future);
    }

    /* collect results */
    FeatureCollection<SimpleFeatureType, SimpleFeature> features =
        WfsExecutorService.collectFeaturesFromFutures(futures);
    String[] bbox = getBbox(flowModel);
    Double bboxMinX = Double.parseDouble(bbox[0]);
    Double bboxMinY = Double.parseDouble(bbox[1]);
    Double bboxMaxX = Double.parseDouble(bbox[2]);
    Double bboxMaxY = Double.parseDouble(bbox[3]);

    MapContext mapContext = buildMapContext();
    ReferencedEnvelope bounds =
        new ReferencedEnvelope(
            bboxMaxX, bboxMinX, bboxMaxY, bboxMinY, mapContext.getCoordinateReferenceSystem());

    /* Add all found features */
    if (features != null && features.size() > 0) {
      log.debug("Parsing found " + features.size() + " features.");
      String styleString = wfsLayer.getStyle();

      // TODO: sld styles should be stored in the database
      if (styleString == null || "".equals(styleString)) {
        styleString =
            SLDStore.getSLD(
                wfsLayer
                    .getWmsName()); // MapLayerServiceNoDbImpl.getSldStyle(wfsLayer.getWmsName());
      }

      Style style = SLD.styles(createSLDStyle(styleString))[0];
      mapContext.addLayer(features, style);
    } else {
      log.debug("Parsing found no features.");
    }

    BufferedImage image = renderImageFromFeatures(flowModel, mapContext, bounds);
    /*image.getGraphics().setColor(new Color(1f, 0, 0));
    image.getGraphics().drawRect(1, 1, image.getWidth()-1, image.getHeight()-1);*/
    flowModel.put("image", image);
  }