@Override
  public void type(
      Resource type,
      List<Pair<Resource, XSDDatatype>> simpleProperties,
      List<Pair<Resource, Object>> linkProperties,
      List<Pair<Resource, String>> geometryProperties)
      throws IOException {
    requestResponse.setFeatureIri(type);

    log.debug("[fe] registering (generic) output type for " + type);

    /*
     * List<String> layerSelectedProperties = layer
     * .getSelectedFeatureParams(session.getLanguage());
     */
    selectedProperties.add(0, "__fid");
    log.debug("- Property:" + "__fid" + " as 0");
    for (Pair<Resource, XSDDatatype> prop : simpleProperties) {

      log.debug("- Property:" + prop.getKey() + " as " + selectedProperties.size());
      selectedPropertiesIndex.put(prop.getKey(), selectedProperties.size());
      selectedProperties.add(prop.getKey().getLocalPart());
    }
    selectedProperties.add("__centerX");
    log.debug("- Property:" + "__centerX" + " as " + selectedProperties.size());
    selectedProperties.add("__centerY");
    log.debug("- Property:" + "__centerY" + " as " + selectedProperties.size());
  }
  public void vertex(
      Resource iri,
      Resource type,
      List<Pair<Resource, Object>> simpleProperties,
      List<Pair<Resource, Object>> linkProperties,
      List<Pair<Resource, Geometry>> geometryProperties)
      throws IOException {

    SimpleFeatureBuilder sfb = getAndSetFeatureBuilder(type);
    List<SimpleFeature> sfc = getAndSetListSimpleFeature(type);

    for (Pair<Resource, Geometry> geomPair : geometryProperties) {
      Geometry geom = geomPair.getValue();

      try {
        geom = JTS.transform(geom, transform);
      } catch (MismatchedDimensionException e) {

        throw new IOException(e);
      } catch (TransformException e) {

        throw new IOException(e);
      }

      sfb.add(geom);

      SimpleFeature f = sfb.buildFeature(iri.toString());

      sfc.add(f);
    }

    if (!(type.getNs().equals(requestResponse.getFeatureIri().getNs())
        && type.getLocalPart().equals(requestResponse.getFeatureIri().getLocalPart()))) {
      log.debug(
          "[fe] type mismatch for Transport regd "
              + requestResponse.getFeatureIri()
              + " vs added "
              + type
              + " -> properties discarded");
      return;
    }

    if (selectedProperties != null && selectedProperties.size() > 0) {
      ArrayList<Object> props = new ArrayList<Object>(selectedProperties.size());
      for (String field : selectedProperties) {
        props.add(null);
      }
      props.set(0, iri.toString());
      for (Pair<Resource, ?> pair : simpleProperties) {
        Integer keyIndex = selectedPropertiesIndex.get(pair.getKey());
        if (keyIndex == null) {
          /*
           * log.debug("KEY INDEX FOR " + pair.getKey() +
           * " not found");
           */
          continue;
        }
        props.set(keyIndex, pair.getValue());
      }

      list.add(props);
    }
  }