private String getCanonicalName(FileNode node) {
   String path = node.getPath();
   String result;
   if (isNullOrBlank(path)) {
     result = node.getName();
   } else {
     result = path + node.getName();
   }
   return result;
 }
  /** @param node */
  public void makePublic(final FileNode node, boolean isPublic) {
    String url = node.getRepository() + "/permissions";
    RequestBuilder builder = AuthenticatedRequestFactory.newRequest(RequestBuilder.POST, url);
    builder.setHeader("Content-type", "application/x-www-form-urlencoded");
    StringBuilder args = new StringBuilder();
    args.append("isPublic=");
    args.append(URL.encodeQueryString(Boolean.toString(isPublic)));
    args.append("&filename=");
    args.append(URL.encodeQueryString(getCanonicalName(node)));
    try {
      Request request =
          builder.sendRequest(
              args.toString(),
              new RequestCallback() {
                public void onError(Request request, Throwable exception) {
                  // displayError("Couldn't retrieve JSON "+exception.getMessage());
                }

                public void onResponseReceived(Request request, Response response) {
                  GWT.log("Got reply");
                  if (200 == response.getStatusCode()) {
                    GWT.log("Reply is" + response.getText());
                    GWT.log("Headers is " + response.getHeadersAsString());
                    GWT.log("Status Text " + response.getStatusText());
                    fetchFiles(repositoryUri, node.getPath());
                  } else {
                    Window.alert(
                        "Update failure: " + response.getStatusText() + " " + response.getText());
                  }
                }
              });
    } catch (RequestException e) {
      Window.alert("Update exception: " + e.toString());
    }
  }
  /** @param value */
  public void selectFolder(FileNode value) {
    if (!value.getMime().equals("application/vnd.com.n3phele.Repository+json")) {
      String path =
          value.getPath() == null
              ? value.getName() + "/"
              : (value.getPath() + value.getName() + "/");
      if (path.startsWith("/")) GWT.log("FileNode " + value + " produces query with leading /");
      fetchFiles(value.getRepository(), path);

      History.newItem(historyMapper.getToken(new RepoContentPlace(value.getRepository(), path)));
    } else {
      fetchFiles(value.getRepository(), null);
      History.newItem(historyMapper.getToken(new RepoContentPlace(value.getRepository(), null)));
    }
  }
  /**
   * @param node
   * @param fileDetailsPanel
   */
  public void getOrigin(final FileNode node, final FileDetailsPanel fileDetailsPanel) {

    String url =
        node.getRepository() + "/origin" + "?name=" + URL.encodeQueryString(node.getName());
    if (!isNullOrBlank(node.getPath())) {
      url += "&path=" + URL.encodeQueryString(node.getPath());
    }

    RequestBuilder builder = AuthenticatedRequestFactory.newRequest(RequestBuilder.GET, url);
    try {
      Request request =
          builder.sendRequest(
              null,
              new RequestCallback() {
                public void onError(Request request, Throwable exception) {
                  // displayError("Couldn't retrieve JSON "+exception.getMessage());
                }

                public void onResponseReceived(Request request, Response response) {
                  GWT.log(response.getStatusCode() + " " + response.getText());
                  if (200 == response.getStatusCode()) {
                    Origin origin = Origin.asOrigin(response.getText());
                    provideOrigin(node, origin, fileDetailsPanel);
                  } else {
                    Window.alert(
                        "Origin fetch failure: "
                            + response.getStatusText()
                            + " "
                            + response.getText());
                  }
                }
              });
    } catch (RequestException e) {
      Window.alert("Origin fetch exception: " + e.toString());
    }
  }
 /** @param folder */
 public void addPlaceholder(FileNode folder) {
   if (placeholderMap == null) this.placeholderMap = new HashMap<String, Map<String, FileNode>>();
   String folderPath = folder.getPath();
   if (!this.placeholderMap.containsKey(folderPath)) {
     this.placeholderMap.put(folderPath, new HashMap<String, FileNode>());
   }
   this.placeholderMap.get(folderPath).put(folder.getName(), folder);
   GWT.log("get " + folder.getRepository() + " " + folderPath);
   fetchFiles(folder.getRepository(), isNullOrBlank(folder.getPath()) ? null : folder.getPath());
 }