diff --git a/java/bundles/org.eclipse.set.core.services/src/org/eclipse/set/core/services/export/AdditionalExportService.java b/java/bundles/org.eclipse.set.core.services/src/org/eclipse/set/core/services/export/AdditionalExportService.java index 338c9188bb..c7bfb9bcd8 100644 --- a/java/bundles/org.eclipse.set.core.services/src/org/eclipse/set/core/services/export/AdditionalExportService.java +++ b/java/bundles/org.eclipse.set.core.services/src/org/eclipse/set/core/services/export/AdditionalExportService.java @@ -36,8 +36,6 @@ public interface AdditionalExportService { /** * Create an additional export. * - * @param id - * the id for the export * @param modelSession * the model session * @param monitor @@ -49,9 +47,9 @@ public interface AdditionalExportService { * @param overwriteHandling * what to do when overwriting files */ - public void createAdditionalExport(String id, - final IModelSession modelSession, final IProgressMonitor monitor, - final Path exportDirectory, final ExportType exportType, + public void createAdditionalExport(final IModelSession modelSession, + final IProgressMonitor monitor, final Path exportDirectory, + final ExportType exportType, final OverwriteHandling overwriteHandling); /** @@ -61,4 +59,9 @@ public void createAdditionalExport(String id, * @return whether the given ID is an additional export ID */ public boolean isAdditionalExportId(String id); + + /** + * @return the export path + */ + public List getExportPaths(); } diff --git a/java/bundles/org.eclipse.set.core/src/org/eclipse/set/core/dialogservice/SelectionMultiValueDialog.java b/java/bundles/org.eclipse.set.core/src/org/eclipse/set/core/dialogservice/SelectionMultiValueDialog.java index 57fb587f29..91b0eff222 100644 --- a/java/bundles/org.eclipse.set.core/src/org/eclipse/set/core/dialogservice/SelectionMultiValueDialog.java +++ b/java/bundles/org.eclipse.set.core/src/org/eclipse/set/core/dialogservice/SelectionMultiValueDialog.java @@ -98,7 +98,7 @@ public SelectionMultiValueDialog(final Shell parentShell, setMessage(dialogMessage); this.selectAllButtonLabel = selectAllButtonLabel; this.deselectAllButtonLabel = deselectAllButtonLabel; - this.items = items; + this.items = items.stream().sorted(String::compareTo).toList(); this.okButtonLabel = okButtonLabel; this.cancelButtonLabel = cancelButtonLabel; setInitialSelection(items); diff --git a/java/bundles/org.eclipse.set.feature.export/OSGI-INF/l10n/bundle.properties b/java/bundles/org.eclipse.set.feature.export/OSGI-INF/l10n/bundle.properties index e4af7a7692..597a602d02 100644 --- a/java/bundles/org.eclipse.set.feature.export/OSGI-INF/l10n/bundle.properties +++ b/java/bundles/org.eclipse.set.feature.export/OSGI-INF/l10n/bundle.properties @@ -21,7 +21,7 @@ titleDocExportError=Fehler beim Dokumentenexport fileNotFoundPattern=Eine Datei konnte nicht geöffnet werden:\n\n%s.\n\nDer Export wurde abgebrochen. Bitte Prüfen Sie, ob die Datei in einer anderen Anwendung geöffnet ist und starten Sie den Export nach Beendigung des Zugriffs erneut. DocumentExportPart_checkOverrideLabel=Vorhandene Dateien im Ausgabeverzeichnis werden überschrieben (mit gleichem Dateinamen) - +DocumentExportPart_NoDocument=Kein Dokument wurde zum Exportieren ausgewählt. toolbox.view.name.titlebox.normal=Schriftfeld toolbox.view.name.titlebox.image=Schriftfeld (Bild) diff --git a/java/bundles/org.eclipse.set.feature.export/src/org/eclipse/set/feature/export/Messages.java b/java/bundles/org.eclipse.set.feature.export/src/org/eclipse/set/feature/export/Messages.java index 799824ae37..f6ef525737 100644 --- a/java/bundles/org.eclipse.set.feature.export/src/org/eclipse/set/feature/export/Messages.java +++ b/java/bundles/org.eclipse.set.feature.export/src/org/eclipse/set/feature/export/Messages.java @@ -99,4 +99,10 @@ public class Messages { * Erstelle Schriftfeld */ public String TitleBoxPdfPart_LoadTitlebox; + + /** + * Kein Dokument wurde zum Exportieren ausgewählt. + */ + public String DocumentExportPart_NoDocument; + } diff --git a/java/bundles/org.eclipse.set.feature.export/src/org/eclipse/set/feature/export/exportservice/ExportServiceImpl.java b/java/bundles/org.eclipse.set.feature.export/src/org/eclipse/set/feature/export/exportservice/ExportServiceImpl.java index c26b96562a..1f02d9adcc 100644 --- a/java/bundles/org.eclipse.set.feature.export/src/org/eclipse/set/feature/export/exportservice/ExportServiceImpl.java +++ b/java/bundles/org.eclipse.set.feature.export/src/org/eclipse/set/feature/export/exportservice/ExportServiceImpl.java @@ -24,7 +24,6 @@ import org.eclipse.set.basis.constants.ExportType; import org.eclipse.set.basis.constants.TableType; import org.eclipse.set.basis.guid.Guid; -import org.eclipse.set.core.services.dialog.DialogService; import org.eclipse.set.core.services.session.SessionService; import org.eclipse.set.model.tablemodel.Table; import org.eclipse.set.model.titlebox.Titlebox; @@ -73,8 +72,7 @@ public void addTableExportBuilder(final TableExport builder) { public void exportMultiTable(final ExportType exportType, final List tablesToExport, final IModelSession modelSession, - final TableCompileService compileService, - final DialogService dialogService, final TableType tableType, + final TableCompileService compileService, final TableType tableType, final Set controlAreaIds, final IProgressMonitor monitor, final OverwriteHandling overwriteHandling, final Consumer errorHandler) { diff --git a/java/bundles/org.eclipse.set.feature.export/src/org/eclipse/set/feature/export/parts/DocumentExportPart.java b/java/bundles/org.eclipse.set.feature.export/src/org/eclipse/set/feature/export/parts/DocumentExportPart.java index f972f63b95..e6ee72d02d 100644 --- a/java/bundles/org.eclipse.set.feature.export/src/org/eclipse/set/feature/export/parts/DocumentExportPart.java +++ b/java/bundles/org.eclipse.set.feature.export/src/org/eclipse/set/feature/export/parts/DocumentExportPart.java @@ -11,7 +11,6 @@ import java.lang.reflect.InvocationTargetException; import java.nio.file.Path; import java.nio.file.Paths; -import java.util.Arrays; import java.util.List; import java.util.function.Consumer; @@ -27,7 +26,6 @@ import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.ViewerComparator; import org.eclipse.set.basis.IModelSession; -import org.eclipse.set.basis.OverwriteHandling; import org.eclipse.set.basis.export.CheckBoxTreeElement; import org.eclipse.set.basis.export.CheckboxModelElement; import org.eclipse.set.basis.extensions.Exceptions; @@ -79,8 +77,6 @@ public abstract class DocumentExportPart extends BasePart { @Inject UserConfigurationService userConfigService; - Button checkOverrideButton; - @Inject ExportService exportService; @@ -289,13 +285,6 @@ private void createExportSection(final Composite parent) { .setText(getSelectedDirectory().toString()); userConfigService.setLastExportPath(selectedDir); })); - - // check override - checkOverrideButton = new Button(section, SWT.CHECK); - checkOverrideButton.setSelection(true); - final Label checkOverrideLabel = new Label(section, SWT.NONE); - checkOverrideLabel - .setText(messages.DocumentExportPart_checkOverrideLabel); } private Composite createSection(final Composite parent, @@ -316,26 +305,26 @@ private Composite createSection(final Composite parent, private void startExport(final Shell shell, final IModelSession modelSession) { - final OverwriteHandling overwriteHandling = OverwriteHandling - .forCheckbox(checkOverrideButton.getSelection()); final Object[] checkedElements = viewer.getCheckedElements(); + final List filterOverwriteConfirmationFiles = filterOverwriteConfirmationFiles( + checkedElements); + if (filterOverwriteConfirmationFiles.isEmpty()) { + getDialogService().openInformation(getToolboxShell(), + getTaskMessage(), messages.DocumentExportPart_NoDocument); + return; + } // runnable for the transformation final IRunnableWithProgress exportThread = new IRunnableWithProgress() { @Override public void run(final IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { // start a single task with unknown timeframe - monitor.beginTask(getTaskMessage(), IProgressMonitor.UNKNOWN); + monitor.beginTask(getTaskMessage(), + filterOverwriteConfirmationFiles.size()); // listen to cancel Threads.stopCurrentOnCancel(monitor); - final List checkboxElements = Arrays - .stream(checkedElements) - .filter(CheckboxModelElement.class::isInstance) - .map(CheckboxModelElement.class::cast) - .toList(); - export(checkboxElements, modelSession, overwriteHandling, - monitor); + export(filterOverwriteConfirmationFiles, modelSession, monitor); // stop progress monitor.done(); } @@ -358,9 +347,8 @@ public void run(final IProgressMonitor monitor) } } - protected abstract void export(List element, - IModelSession modelSession, OverwriteHandling overwriteHandling, - IProgressMonitor monitor); + protected abstract void export(List element, + IModelSession modelSession, IProgressMonitor monitor); protected abstract CheckboxTreeModel createTreeModelData(); @@ -422,4 +410,7 @@ protected void validateExportButton() { exportButton.setEnabled( viewer.getCheckedElements().length > 0 && !isSessionDirty); } + + protected abstract List filterOverwriteConfirmationFiles( + Object[] checkedElements); } diff --git a/java/bundles/org.eclipse.set.feature.table/OSGI-INF/l10n/bundle.properties b/java/bundles/org.eclipse.set.feature.table/OSGI-INF/l10n/bundle.properties index f5faaaaee2..ce71ac32a0 100644 --- a/java/bundles/org.eclipse.set.feature.table/OSGI-INF/l10n/bundle.properties +++ b/java/bundles/org.eclipse.set.feature.table/OSGI-INF/l10n/bundle.properties @@ -32,7 +32,7 @@ TableErrorTableColumns_Message=technischer Fehlertext TableErrorTableColumns_RowNumber=Zeilennummer TableExportPart_TaskMsg=Tabellenexport - +TableExportPart_NoTable=Keine Tabelle wurde zum Exportieren ausgewählt. TableExportPart_ExportPlanningRecordsDescriptionService_ViewName=Dokumentensatz erstellen TableExportPart_ExportInventoryDescriptionService_ViewName=Bestandsdokumente erstellen TableExportPart_ExportInventoryRecords=Bestandsdokumente erstellen diff --git a/java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/export/PlanProExportPart.java b/java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/export/PlanProExportPart.java index fb59a67ebd..bd9afa5fe0 100644 --- a/java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/export/PlanProExportPart.java +++ b/java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/export/PlanProExportPart.java @@ -8,12 +8,15 @@ */ package org.eclipse.set.feature.table.export; +import java.nio.file.Path; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Map.Entry; +import java.util.Objects; import java.util.Set; import java.util.stream.Collectors; @@ -21,13 +24,13 @@ import org.eclipse.e4.core.di.annotations.Optional; import org.eclipse.e4.core.services.nls.Translation; import org.eclipse.emf.common.notify.Notification; +import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.set.basis.IModelSession; import org.eclipse.set.basis.OverwriteHandling; import org.eclipse.set.basis.Pair; import org.eclipse.set.basis.constants.ExportType; import org.eclipse.set.basis.constants.TableType; import org.eclipse.set.basis.export.CheckBoxTreeElement; -import org.eclipse.set.basis.export.CheckboxModelElement; import org.eclipse.set.core.services.export.AdditionalExportService; import org.eclipse.set.core.services.part.ToolboxPartService; import org.eclipse.set.feature.export.checkboxmodel.CheckboxTreeModel; @@ -68,6 +71,11 @@ */ public abstract class PlanProExportPart extends DocumentExportPart { + private record TreeElementWithExportPaths(CheckBoxTreeElement treeElement, + List exportFilePaths) { + + } + protected static final Logger logger = LoggerFactory .getLogger(PlanProExportPart.class); protected static final String EMPTY_TABLE = "leer"; //$NON-NLS-1$ @@ -184,7 +192,6 @@ protected CheckboxTreeModel createTreeModelData() { final List elements = new ArrayList<>(); final Collection availableTables = tableService .getAvailableTables(); - availableTables.forEach(tableInfo -> { final TableNameInfo nameInfo = tableInfo.nameInfo(); CheckBoxTreeElement parentElement = elements.stream() @@ -224,46 +231,107 @@ messages.TableExportPart_FilterEmptyButton, getTreeDataModel(), } @Override - protected void export(final List elements, - final IModelSession modelSession, - final OverwriteHandling overwriteHandling, - final IProgressMonitor monitor) { - final List tablesToExport = new ArrayList<>(); - elements.stream() - .filter(ele -> TableInfo.Pt1TableCategory - .getCategoryEnum(ele.getId()) == null) - .forEach(ele -> { - final String id = ele.getId(); - if (additionalExportService != null - && additionalExportService - .isAdditionalExportId(id)) { - additionalExportService.createAdditionalExport(id, - modelSession, monitor, getSelectedDirectory(), - getExportType(), overwriteHandling); - } else if (ele instanceof final CheckBoxTreeElement treeElement - && getTreeDataModel() instanceof final TableCheckboxTreeModel tableCheckboxTreeModel) { - final TableInfo tableInfo = tableCheckboxTreeModel - .getTableInfo(treeElement) - .orElse(null); - if (tableInfo == null) { - return; - } - tablesToExport.add(TableToExportPath.createInstance( - tableInfo, modelSession, getExportType(), - getSelectedDirectory(), getExportFormats())); - } - }); + protected void export(final List elements, + final IModelSession modelSession, final IProgressMonitor monitor) { + if (additionalExportService != null && elements.stream() + .anyMatch(ele -> additionalExportService + .isAdditionalExportId(ele.getId()))) { + additionalExportService.createAdditionalExport(modelSession, + monitor, getSelectedDirectory(), getExportType(), + OverwriteHandling.forCheckbox(true)); + } + final List tablesToExport = getTablesToExport( + elements, modelSession); + monitor.setTaskName(getTaskMessage()); getExportService().exportMultiTable(getExportType(), tablesToExport, - modelSession, compileService, getDialogService(), - getTableType(), + modelSession, compileService, getTableType(), modelSession.getSelectedControlAreas() .stream() .map(Pair::getSecond) .collect(Collectors.toSet()), - monitor, overwriteHandling, + monitor, OverwriteHandling.forCheckbox(true), new ExceptionHandler(getToolboxShell(), getDialogService())); } + @Override + protected List filterOverwriteConfirmationFiles( + final Object[] checkedElements) { + final List treeElementWithExportPaths = toTreeElementWithExportPaths( + checkedElements); + final Map pathsAndDisplayName = treeElementWithExportPaths + .stream() + .flatMap(ele -> ele.exportFilePaths.stream() + .map(p -> Map.entry(p, ele.treeElement.getName()))) + .collect(Collectors.toMap(Entry::getKey, Entry::getValue)); + final Set> confirmationOverwriteFiles = getExportService() + .getConfirmationOverwriteFiles(pathsAndDisplayName, + getToolboxShell(), + files -> getDialogService().confirmOverwriteMultiFile( + getToolboxShell(), files, + IDialogConstants.OK_LABEL, null)) + .entrySet(); + + return treeElementWithExportPaths.stream() + .filter(ele -> confirmationOverwriteFiles.stream() + .anyMatch(file -> file.getValue() + .equals(ele.treeElement.getName()))) + .map(TreeElementWithExportPaths::treeElement) + .toList(); + } + + private List toTreeElementWithExportPaths( + final Object[] elements) { + return Arrays.stream(elements) + .filter(CheckBoxTreeElement.class::isInstance) + .map(CheckBoxTreeElement.class::cast) + .map(treeElement -> { + if (additionalExportService != null + && additionalExportService.isAdditionalExportId( + treeElement.getId())) { + return new TreeElementWithExportPaths(treeElement, + additionalExportService.getExportPaths()); + } + if (getTreeDataModel() instanceof final TableCheckboxTreeModel tableCheckboxTreeModel) { + final TableInfo tableInfo = tableCheckboxTreeModel + .getTableInfo(treeElement) + .orElse(null); + if (tableInfo != null) { + final TableToExportPath instance = TableToExportPath + .createInstance(tableInfo, + getModelSession(), getExportType(), + getSelectedDirectory(), + getExportFormats()); + return new TreeElementWithExportPaths(treeElement, + List.copyOf( + instance.getExportFormatAndPaths() + .values())); + } + } + return null; + }) + .filter(Objects::nonNull) + .toList(); + } + + private List getTablesToExport( + final List elements, + final IModelSession modelSession) { + return elements.stream().map(treeElement -> { + if (getTreeDataModel() instanceof final TableCheckboxTreeModel tableCheckboxTreeModel) { + final TableInfo tableInfo = tableCheckboxTreeModel + .getTableInfo(treeElement) + .orElse(null); + if (tableInfo == null) { + return null; + } + return TableToExportPath.createInstance(tableInfo, modelSession, + getExportType(), getSelectedDirectory(), + getExportFormats()); + } + return null; + }).filter(Objects::nonNull).toList(); + } + protected abstract ExportType getExportType(); @Override diff --git a/java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/messages/Messages.java b/java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/messages/Messages.java index 49b0ed837e..a378d91f0e 100644 --- a/java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/messages/Messages.java +++ b/java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/messages/Messages.java @@ -223,4 +223,9 @@ public class Messages { */ public String TableTransform_Error_Msg; + /** + * Keine Tabelle wurde zum Exportieren ausgewählt. + */ + public String TableExportPart_NoTable; + } diff --git a/java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/overview/TableOverviewPart.java b/java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/overview/TableOverviewPart.java index 910c4f4a65..8b21fd5a1e 100644 --- a/java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/overview/TableOverviewPart.java +++ b/java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/overview/TableOverviewPart.java @@ -10,9 +10,7 @@ import static org.eclipse.set.basis.constants.ToolboxConstants.*; -import java.io.IOException; import java.lang.reflect.InvocationTargetException; -import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.ArrayList; @@ -27,7 +25,6 @@ import java.util.function.Consumer; import java.util.function.Predicate; import java.util.stream.Collectors; -import java.util.stream.Stream; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.e4.core.services.events.IEventBroker; @@ -328,8 +325,13 @@ private void exportAllRelevantTable( .toList(); try { final List filterConfirmOverwriteTable = filterConfirmOverwriteTable( - tablesToExport, getToolboxShell(), getDialogService(), - outputDir); + tablesToExport, getToolboxShell(), getDialogService()); + if (filterConfirmOverwriteTable.isEmpty()) { + getDialogService().openInformation(getToolboxShell(), + messages.TableExportPart_TaskMsg, + messages.TableExportPart_NoTable); + return; + } final IRunnableWithProgress exportThread = new IRunnableWithProgress() { @Override public void run(final IProgressMonitor monitor) @@ -339,8 +341,7 @@ public void run(final IProgressMonitor monitor) Threads.stopCurrentOnCancel(monitor); exportService.exportMultiTable(ExportType.INVENTORY_RECORDS, filterConfirmOverwriteTable, getModelSession(), - compileService, getDialogService(), tableType, - controlAreaIds, monitor, + compileService, tableType, controlAreaIds, monitor, OverwriteHandling.forCheckbox(true), new ExceptionHandler(getToolboxShell(), getDialogService())); @@ -368,59 +369,25 @@ compileService, getDialogService(), tableType, } } - private static List filterConfirmOverwriteTable( + private List filterConfirmOverwriteTable( final List tablesToExport, final Shell shell, - final DialogService dialogService, final String outputDir) - throws IOException { - final Set alreadyExistExport = getAlreadyExistExport( - tablesToExport, outputDir); - if (alreadyExistExport.isEmpty()) { - return tablesToExport; - } - final List result = new ArrayList<>(tablesToExport); - result.removeIf(t -> alreadyExistExport.stream() - .anyMatch(exported -> exported.tableInfo() - .shortcut() - .equals(t.tableInfo().shortcut()))); - final List selectItems = alreadyExistExport.stream() - - .map(t -> t.tableInfo().nameInfo().getFullDisplayName()) - .sorted() + final DialogService dialogService) { + final Map collect = tablesToExport.stream() + .flatMap(t -> t.toPathAndDisplayName().entrySet().stream()) + .collect(Collectors.toMap(Entry::getKey, Entry::getValue)); + final Collection confirmationOverwriteFiles = exportService + .getConfirmationOverwriteFiles(collect, shell, + files -> dialogService.confirmOverwriteMultiFile(shell, + files, IDialogConstants.OK_LABEL, null)) + .values(); + + return tablesToExport.stream() + .filter(t -> confirmationOverwriteFiles.stream() + .anyMatch(name -> t.tableInfo() + .nameInfo() + .getFullDisplayName() + .equals(name))) .toList(); - final List confirmedOverwirteFiles = dialogService - .confirmOverwriteMultiFile(shell, selectItems, - IDialogConstants.OK_LABEL, null); - final List confirmOverwrite = alreadyExistExport - .stream() - .filter(table -> confirmedOverwirteFiles.contains( - table.tableInfo().nameInfo().getFullDisplayName())) - .toList(); - result.addAll(confirmOverwrite); - return result; - } - - private static Set getAlreadyExistExport( - final List tablesToExport, - final String outputDir) throws IOException { - final Path outDir = Path.of(outputDir); - if (!Files.exists(outDir) || !Files.isDirectory(outDir)) { - throw new IllegalArgumentException("outputDir should be Directory"); //$NON-NLS-1$ - } - final Set alreadyExistExportTable = new HashSet<>(); - try (Stream filesPath = Files.walk(Path.of(outputDir))) { - filesPath.forEach(p -> { - final String exportedFileName = p.getFileName().toString(); - final Optional exportedTable = tablesToExport - .stream() - .filter(t -> t.getExportFilesName() - .contains(exportedFileName)) - .findFirst(); - if (exportedTable.isPresent()) { - alreadyExistExportTable.add(exportedTable.get()); - } - }); - } - return alreadyExistExportTable; } private Pt1TableCategory getTableCategory() { diff --git a/java/bundles/org.eclipse.set.services/src/org/eclipse/set/services/export/ExportService.java b/java/bundles/org.eclipse.set.services/src/org/eclipse/set/services/export/ExportService.java index 7283905763..1b0cf2c299 100644 --- a/java/bundles/org.eclipse.set.services/src/org/eclipse/set/services/export/ExportService.java +++ b/java/bundles/org.eclipse.set.services/src/org/eclipse/set/services/export/ExportService.java @@ -11,11 +11,15 @@ import java.awt.image.BufferedImage; import java.nio.file.Path; import java.util.EnumMap; +import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Map.Entry; import java.util.Objects; import java.util.Set; import java.util.function.Consumer; +import java.util.function.UnaryOperator; +import java.util.stream.Collectors; import java.util.stream.Stream; import org.eclipse.core.runtime.IProgressMonitor; @@ -77,6 +81,16 @@ public List getExportFilesName() { .toList(); } + /** + * @return get export file paths and display name + */ + public Map toPathAndDisplayName() { + return Stream.of(pdfPath, excelPath) + .filter(Objects::nonNull) + .collect(Collectors.toMap(p -> p, + p -> tableInfo().nameInfo().getFullDisplayName())); + } + /** * @param tableInfo * the {@link TableInfo} @@ -114,6 +128,46 @@ public static TableToExportPath createInstance( } } + /** + * @param pathsWithDisplayName + * the file path and display name + * @param shell + * the shell + * @param overwriteConfirmation + * overwrite confirmation function + * @return the confirmed overwrite files + */ + default Map getConfirmationOverwriteFiles( + final Map pathsWithDisplayName, final Shell shell, + final UnaryOperator> overwriteConfirmation) { + final Map needOverwriteConfirmationFiles = new HashMap<>(); + final Map result = new HashMap<>(); + pathsWithDisplayName.forEach((path, displayName) -> { + if (path.toFile().exists()) { + needOverwriteConfirmationFiles.put(path, displayName); + } else { + result.put(path, displayName); + } + }); + if (needOverwriteConfirmationFiles.isEmpty()) { + return pathsWithDisplayName; + } + final Set filesDisplayName = needOverwriteConfirmationFiles + .entrySet() + .stream() + .map(Entry::getValue) + .collect(Collectors.toSet()); + + final List confirmOverwriteFiles = overwriteConfirmation + .apply(List.copyOf(filesDisplayName)); + needOverwriteConfirmationFiles.forEach((path, displayName) -> { + if (confirmOverwriteFiles.contains(displayName)) { + result.put(path, displayName); + } + }); + return result; + } + /** * Whether an implementation exports all, none or some of the provided * tables depends on the functional context and requirements of the concrete @@ -237,8 +291,8 @@ void exportSiteplanPdf(List imagesData, Titlebox titleBox, */ void exportMultiTable(ExportType exportType, List tablesToExport, IModelSession modelSession, - TableCompileService compileService, DialogService dialogService, - TableType tableType, Set controlAreaIds, - IProgressMonitor monitor, OverwriteHandling overwriteHandling, + TableCompileService compileService, TableType tableType, + Set controlAreaIds, IProgressMonitor monitor, + OverwriteHandling overwriteHandling, Consumer errorHandler); }