/** * 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; }