/**
  * Extracts the {@link PageComponentInfo} from the URL. The {@link PageComponentInfo} is encoded
  * as the very first query parameter and the parameter consists of name only (no value).
  *
  * @param url
  * @return PageComponentInfo instance if one was encoded in URL, <code>null</code> otherwise.
  */
 protected PageComponentInfo getPageComponentInfo(final Url url) {
   if (url == null) {
     throw new IllegalStateException("Argument 'url' may not be null.");
   } else {
     for (QueryParameter queryParameter : url.getQueryParameters()) {
       if (Strings.isEmpty(queryParameter.getValue())) {
         PageComponentInfo pageComponentInfo = PageComponentInfo.parse(queryParameter.getName());
         if (pageComponentInfo != null) {
           return pageComponentInfo;
         }
       }
     }
   }
   return null;
 }
  /**
   * @see
   *     org.apache.wicket.request.mapper.parameter.IPageParametersEncoder#decodePageParameters(org.apache.wicket.request.Request)
   */
  public PageParameters decodePageParameters(final Request request) {
    PageParameters parameters = new PageParameters();

    int i = 0;
    for (String s : request.getUrl().getSegments()) {
      parameters.set(i, s);
      ++i;
    }

    for (QueryParameter p : request.getUrl().getQueryParameters()) {
      parameters.add(p.getName(), p.getValue());
    }

    return parameters.isEmpty() ? null : parameters;
  }
  private BrixPageParameters createBrixPageParams(Url url, Path path) {
    BrixPageParameters parameters = new BrixPageParameters();
    Path nodePath = path;
    Path requestPath = new Path("/" + url.getPath());

    if (nodePath.isAncestorOf(requestPath)) {
      Path remaining = new Path(requestPath.toString(), false).toRelative(nodePath);
      int i = 0;
      for (String s : remaining) {
        parameters.set(i, BrixNodePageUrlMapper.urlDecode(s));
        ++i;
      }
    }
    for (QueryParameter parameter : url.getQueryParameters()) {
      String parameterName = parameter.getName();
      if (PageComponentInfo.parse(parameterName) == null) {
        parameters.add(parameterName, parameter.getValue());
      }
    }
    return parameters;
  }