Пример #1
0
  /**
   * Asks user to perform "save layer" operations (save on disk and/or upload data to server) before
   * data layers deletion.
   *
   * @param selectedLayers The layers to check. Only instances of {@link AbstractModifiableLayer}
   *     are considered.
   * @param reason the cause for requesting an action on unsaved modifications
   * @return {@code true} if there was nothing to save, or if the user wants to proceed to save
   *     operations. {@code false} if the user cancels.
   * @since 11093
   */
  public static boolean saveUnsavedModifications(
      Iterable<? extends Layer> selectedLayers, Reason reason) {
    if (!GraphicsEnvironment.isHeadless()) {
      SaveLayersDialog dialog = new SaveLayersDialog(Main.parent);
      List<AbstractModifiableLayer> layersWithUnmodifiedChanges = new ArrayList<>();
      for (Layer l : selectedLayers) {
        if (!(l instanceof AbstractModifiableLayer)) {
          continue;
        }
        AbstractModifiableLayer odl = (AbstractModifiableLayer) l;
        if (odl.isModified()
            && ((!odl.isSavable() && !odl.isUploadable())
                || odl.requiresSaveToFile()
                || (odl.requiresUploadToServer() && !odl.isUploadDiscouraged()))) {
          layersWithUnmodifiedChanges.add(odl);
        }
      }
      dialog.prepareForSavingAndUpdatingLayers(reason);
      if (!layersWithUnmodifiedChanges.isEmpty()) {
        dialog.getModel().populate(layersWithUnmodifiedChanges);
        dialog.setVisible(true);
        switch (dialog.getUserAction()) {
          case PROCEED:
            return true;
          case CANCEL:
          default:
            return false;
        }
      }
    }

    return true;
  }