private void savePrivateWorkingSet(final WorkingSetData currentWorkingSet, final int saveMode) {

    final String name = currentWorkingSet.getWorkingSetName();
    AssessmentFilter filter = filterPanel.getFilter();
    currentWorkingSet.setFilter(filter);
    if (id == null) {

      WorkingSetCache.impl.addToPrivateWorkingSets(
          currentWorkingSet,
          new GenericCallback<String>() {
            public void onFailure(Throwable caught) {
              Info.display(
                  "ERROR",
                  "Error saving working set " + name + ".",
                  "Please" + " try saving again.");
              enableSaveButtons(true);
            }

            public void onSuccess(String arg0) {
              id = currentWorkingSet.getId();
              WSStore.getStore().update();
              ClientUIContainer.bodyContainer.tabManager.panelManager.workingSetHierarchy
                  .setCurrentlySelected(id);
              if (saveMode == SAVE) {
                Info.display(
                    new InfoConfig("Successful Save", "Successfully saved working set " + name));
                manager.workingSetBrowser.setEditWorkingSetTab();
              } else if (saveMode == SAVEANDEXIT) {
                Info.display(
                    new InfoConfig("Successful Save", "Successfully saved working set " + name));
                manager.workingSetBrowser.setManagerTab();
              } else {
                manager.workingSetBrowser.setEditTaxaTab();
                manager.workingSetOptionsPanel.forceRefreshTaxaList(
                    WorkingSetOptionsPanel.ADDBROWSE);
              }
              enableSaveButtons(true);
            }
          });

    } else {

      WorkingSetCache.impl.editWorkingSet(
          currentWorkingSet,
          new GenericCallback<String>() {
            public void onFailure(Throwable caught) {
              Info.display(
                  "ERROR",
                  "Error saving working set " + name + ".",
                  "Please" + " try saving again.");
              enableSaveButtons(true);
            }

            public void onSuccess(String arg0) {
              id = currentWorkingSet.getId();
              WSStore.getStore().update();
              ClientUIContainer.bodyContainer.tabManager.panelManager.workingSetHierarchy
                  .setCurrentlySelected(id);
              if (saveMode == SAVE) {
                Info.display(
                    new InfoConfig("Successful Save", "Successfully saved working set " + name));
              } else if (saveMode == SAVEANDEXIT) {
                Info.display(
                    new InfoConfig("Successful Save", "Successfully saved working set " + name));
                manager.workingSetBrowser.setManagerTab();
              } else {
                manager.workingSetBrowser.setEditTaxaTab();
                manager.workingSetOptionsPanel.forceRefreshTaxaList(
                    WorkingSetOptionsPanel.ADDBROWSE);
              }
              enableSaveButtons(true);
            }
          });
    }
  }
  private void savePublicWorkingSet(final WorkingSetData currentWorkingSet, final int saveMode) {

    final String name = currentWorkingSet.getWorkingSetName();
    currentWorkingSet.setFilter(filterPanel.getFilter());
    if (id == null) {

      WorkingSetCache.impl.addToPublicWorkingSets(
          currentWorkingSet,
          new GenericCallback<String>() {
            public void onFailure(Throwable caught) {
              Info.display(
                  "ERROR",
                  "Error saving working set " + name + ".",
                  "Please" + " try saving again.");
            }

            public void onSuccess(String arg0) {
              id = currentWorkingSet.getId();
              WSStore.getStore().update();
              ClientUIContainer.bodyContainer.tabManager.panelManager.workingSetHierarchy
                  .setCurrentlySelected(id);
              if (saveMode == SAVE) {
                Info.display(
                    new InfoConfig("Successful Save", "Successfully saved working set " + name));
                manager.workingSetBrowser.setEditWorkingSetTab();
              } else if (saveMode == SAVEANDEXIT) {
                Info.display(
                    new InfoConfig("Successful Save", "Successfully saved working set " + name));
                manager.workingSetBrowser.setManagerTab();
              } else {
                manager.workingSetBrowser.setEditTaxaTab();
                manager.workingSetOptionsPanel.forceRefreshTaxaList(
                    WorkingSetOptionsPanel.ADDBROWSE);
              }

              enableSaveButtons(true);
            }
          });

    } else if (AuthorizationCache.impl.hasRight(
        SimpleSISClient.currentUser,
        AuthorizableObject.WRITE,
        WorkingSetCache.impl.getCurrentWorkingSet())) {
      WorkingSetCache.impl.editWorkingSet(
          currentWorkingSet,
          new GenericCallback<String>() {
            public void onFailure(Throwable caught) {
              Info.display(
                  "ERROR",
                  "Error saving working set " + name + ".",
                  "Please" + " try saving again.");
            }

            public void onSuccess(String arg0) {
              WSStore.getStore().update();
              ClientUIContainer.bodyContainer.tabManager.panelManager.workingSetHierarchy
                  .setCurrentlySelected(id);
              if (saveMode == SAVE) {
                Info.display(
                    new InfoConfig("Successful Save", "Successfully saved working set " + name));
              } else if (saveMode == SAVEANDEXIT) {
                Info.display(
                    new InfoConfig("Successful Save", "Successfully saved working set " + name));
                manager.workingSetBrowser.setManagerTab();
              } else {
                manager.workingSetBrowser.setEditTaxaTab();
                manager.workingSetOptionsPanel.forceRefreshTaxaList(
                    WorkingSetOptionsPanel.ADDBROWSE);
              }
              enableSaveButtons(true);
            }
          });

    } else {
      WindowUtils.errorAlert("You do not have permissions to edit this working set.");
      enableSaveButtons(true);
    }
  }
  private void save(final int saveMode) {
    enableSaveButtons(false);

    String date = dateCreatedHTML.getText();
    String manager = managerHTML.getText();
    String descriptionText = XMLUtils.clean(description.getText());
    String notesText = XMLUtils.clean(notes.getText());
    final String name = XMLUtils.clean(workingSetName.getText());
    final String errorFilter = filterPanel.checkValidity();

    // CHECK TO MAKE SURE FIELDS ARE ENTERED IN
    if (name == null || name.trim().equals("")) {
      WindowUtils.errorAlert("Please enter a working set name.");
      enableSaveButtons(true);
      return;
    }

    if (errorFilter != null) {
      WindowUtils.errorAlert(errorFilter);
    } else if (descriptionText == null || descriptionText.trim().equals("")) {
      WindowUtils.errorAlert("Please enter a working set description.");
      enableSaveButtons(true);
      return;
    } else if (workingSetMode.getSelectedIndex() != PRIVATEINDEX
        && workingSetMode.getSelectedIndex() != PUBLICINDEX) {
      WindowUtils.errorAlert("Please select the working set type.");
      enableSaveButtons(true);
      return;
    }

    // HAVEN'T SAVED BEFORE
    if (id == null) {
      final WorkingSetData currentWorkingSet = new WorkingSetData();
      currentWorkingSet.setDate(date);
      currentWorkingSet.setCreator(manager);
      currentWorkingSet.setDescription(descriptionText);
      currentWorkingSet.setNotes(notesText);
      currentWorkingSet.setWorkingSetName(name);
      currentWorkingSet.setMode(workingSetMode.getItemText(workingSetMode.getSelectedIndex()));
      currentWorkingSet.setPeople(people.getItemsInList());
      currentWorkingSet.setFilter(filterPanel.getFilter());

      if (currentWorkingSet.getMode().equalsIgnoreCase(WorkingSetData.PRIVATE)) {
        savePrivateWorkingSet(currentWorkingSet, saveMode);
        workingSetMode.setEnabled(false);
      } else {
        savePublicWorkingSet(currentWorkingSet, saveMode);
        workingSetMode.setEnabled(false);
      }

      // this.manager.workingSetHierarchy.update();
      WSStore.getStore().update();
    }
    // ALREADY HAVE BEEN SAVED BEFORE, REALLY EDITTING
    else {

      final WorkingSetData currentWorkingSet =
          (WorkingSetData) WorkingSetCache.impl.getWorkingSets().get(id);

      if (currentWorkingSet != null) {
        currentWorkingSet.setDescription(descriptionText);
        currentWorkingSet.setNotes(notesText);
        currentWorkingSet.setWorkingSetName(name);
        currentWorkingSet.setPeople(people.getItemsInList());
        currentWorkingSet.setFilter(filterPanel.getFilter());
        String mode = currentWorkingSet.getMode();
        String newMode = workingSetMode.getItemText(workingSetMode.getSelectedIndex());

        if (!mode.equalsIgnoreCase(newMode)) {

          // CHANGING TO PRIVATE
          if (newMode.equalsIgnoreCase(WorkingSetData.PRIVATE)) {

            WindowUtils.confirmAlert(
                "Warning",
                "Changing a working set from public to private creates"
                    + " a copy of the working set into your private directory but does not"
                    + " delete the working set out of the public directory.",
                new Listener<MessageBoxEvent>() {
                  public void handleEvent(MessageBoxEvent be) {
                    if (be.getType() == Events.Close) {
                      if (be.getButtonClicked().getType().equals(MessageBox.OK)) {
                        savePublicToPrivateWorkingSet(currentWorkingSet, saveMode);
                      }
                    }
                  }
                });
          }

          // CHANGING TO PUBLIC
          if (newMode.equalsIgnoreCase(WorkingSetData.PRIVATE)) {

            WindowUtils.confirmAlert(
                "Warning",
                "Changing a working set from private to public will allow your "
                    + "working set to be viewed by other people.",
                new Listener<MessageBoxEvent>() {
                  public void handleEvent(MessageBoxEvent be) {
                    if (be.getType() == Events.Close) {
                      if (be.getButtonClicked().getType().equals(MessageBox.OK)) {
                        savePrivateToPublicWorkingSet(currentWorkingSet, saveMode);
                      }
                    }
                  }
                });
          }
        } else if (currentWorkingSet.getMode().equalsIgnoreCase(WorkingSetData.PRIVATE))
          savePrivateWorkingSet(currentWorkingSet, saveMode);
        else savePublicWorkingSet(currentWorkingSet, saveMode);
      }
    }
  }