/**
   * @param route
   * @param vehicle
   */
  protected void updateRouteParameter(Object route, Object vehicle) {

    /* throw exception if route is not of type Route */
    if (!(route instanceof Route)) {
      throw new RuntimeException("MobileTSMRouteParameter.updateRouteParameter(): Not a Route");
    }

    /* throw exception if vehicle is not of type Vehicle */
    if (vehicle != null && !(vehicle instanceof Vehicle)) {
      throw new RuntimeException("MobileTSMRouteParameter.updateRouteParameter(): Not a Vehicle");
    }

    /* duration of travel of the route in minutes */
    double duration = 0;
    /* length of the route in meters */
    double length = 0;
    /* maximum speed on a routing step in km/h */
    double maxSpeed;
    /* distance of a routing step in meters */
    double dist;

    /* get the routing steps */
    List<RoutingStep> steps = ((Route) route).getRoutingSteps();
    Iterator<RoutingStep> steps_itr = steps.iterator();

    String lastStreetName = null;

    /* iterate over all routing steps */
    while (steps_itr.hasNext()) {
      RoutingStep step = steps_itr.next();
      Way way = step.getWay();

      if (way instanceof MobileWay) {
        dist =
            ((MobileWay) way).getPathLength(step.getStartNode().getId(), step.getEndNode().getId());
        length += dist;
      } else {
        dist = step.distanceInMeters();
        length += dist;
      }

      if (vehicle != null) {
        /* add duration of travel for this routing step */
        maxSpeed = ((Vehicle) vehicle).getMaxSpeedOnWay(way);
        duration += (dist / 1000) / (maxSpeed / 60);
        String wayName = WayHelper.getTag(way.getTags(), Tags.TAG_NAME);

        /* add 15 seconds for every corner */
        if (lastStreetName != null && wayName != null) {
          if (!lastStreetName.equals(wayName)) {
            duration += (15.0 / 60.0);
          }
        } else if (lastStreetName != null || wayName != null) {
          duration += (15.0 / 60.0);
        }
        lastStreetName = wayName;
      }
    }

    this.length = length;
    if (vehicle == null) {
      this.durationOfTravel = PARAMETER_UNDEFINED;
    } else {
      this.durationOfTravel = duration;
    }
  }
 /** ${@inheritDoc}. */
 @Override
 public boolean isAllowed(final IDataSet aMap, final Way aWay) {
   return (WayHelper.getTag(aWay, Tags.TAG_HIGHWAY) != null)
       && (WayHelper.getTag(aWay, Tags.TAG_NAME) != null);
 }