public void deleteNote(
      final String canonicalName,
      Note currentNote,
      AssessmentData assessment,
      GenericCallback<String> callback) {

    if (!AuthorizationCache.impl.hasRight(
        SimpleSISClient.currentUser, AuthorizableObject.WRITE, assessment)) {
      WindowUtils.errorAlert(
          "You do not have sufficient permissions to perform " + "this operation.");
      return;
    }

    NativeDocument doc = SimpleSISClient.getHttpBasicNativeDocument();
    String type = AssessmentCache.impl.getCurrentAssessment().getType();
    String url = "/notes/" + type;
    url += "/" + AssessmentCache.impl.getCurrentAssessment().getAssessmentID();
    url += "/" + canonicalName;

    if (type.equals(BaseAssessment.USER_ASSESSMENT_STATUS)) url += "/" + currentNote.getUser();

    removeNoteFromCache(canonicalName, currentNote, assessment);

    doc.post(url + "?option=remove", currentNote.toXML(), callback);
  }
  public void fetchNotes(final AssessmentData assessment, final GenericCallback<String> callback) {
    if (!noteMap.containsKey(getNoteMapID(assessment))) {
      final NativeDocument ndoc = SimpleSISClient.getHttpBasicNativeDocument();
      ndoc.get(
          "/notes/" + assessment.getType() + "/" + assessment.getAssessmentID(),
          new GenericCallback<String>() {
            public void onFailure(Throwable caught) {
              callback.onSuccess("OK");
            }

            public void onSuccess(String result) {
              HashMap<String, ArrayList<Note>> assessNotes = new HashMap<String, ArrayList<Note>>();
              NativeNodeList nodeList = ndoc.getDocumentElement().getElementsByTagName("notes");

              for (int i = 0; i < nodeList.getLength(); i++) {
                NativeElement el = nodeList.elementAt(i);
                String canonicalName = el.getAttribute("id");
                assessNotes.put(canonicalName, Note.notesFromXML(el));
              }

              noteMap.put(getNoteMapID(assessment), assessNotes);

              callback.onSuccess(result);
            }
          });
    } else callback.onSuccess("OK");
  }
  private void search(String searchQuery) {
    String searchOptions = "";

    if (searchQuery.matches("^[0-9]+$")) {
      SysDebugger.getInstance().println("We gots a number to jump to.....");
      panelManager.taxonomicSummaryPanel.update(searchQuery);
      searchButton.setEnabled(true);
      WindowManager.get().hideAll();
      return;
    }

    final NativeDocument ndoc = SimpleSISClient.getHttpBasicNativeDocument();

    ndoc.post(
        "/search",
        searchToXML(searchQuery),
        new GenericCallback<String>() {
          public void onFailure(Throwable caught) {
            WindowUtils.hideLoadingAlert();
            WindowUtils.errorAlert("Error loading results. Inconsistency in index table.");
          }

          public void onSuccess(String result) {

            currentResults = ndoc.getDocumentElement().getElementsByTagName("result");
            if (currentResults.getLength() > NUMBER_OF_RESULTS) next.setVisible(true);
            expandableResults.setHeading(
                "Search Results [" + currentResults.getLength() + " results]");

            fillTable();

            if (currentResults.getLength() > 0) {
              next.setVisible(true);
              next.setEnabled(true);
              if (!(currentResults.getLength() > NUMBER_OF_RESULTS)) next.setEnabled(false);
              prev.setVisible(true);
              prev.setEnabled(false);
            } else {
              // expandableResults.add(new HTML("No Results."));
              prev.setEnabled(false);
              next.setEnabled(false);
            }

            setSelectionModelForTable();
            searchButton.setEnabled(true);
          }
        });
  }