From dec8f40fc35c8406a862101cf142ef6eeeae0c61 Mon Sep 17 00:00:00 2001 From: TruongQuangSB <131350493+TruongQuangSB@users.noreply.github.com> Date: Thu, 20 Aug 2026 17:13:14 +0200 Subject: [PATCH 1/4] standarized overwrite handling by export multi file --- .../export/AdditionalExportService.java | 13 +- .../export/parts/DocumentExportPart.java | 34 ++--- .../table/export/PlanProExportPart.java | 133 +++++++++++++----- .../table/overview/TableOverviewPart.java | 74 +++------- .../set/services/export/ExportService.java | 54 +++++++ 5 files changed, 192 insertions(+), 116 deletions(-) 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.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..8fbcdf5d15 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,9 +305,12 @@ 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()) { + return; + } // runnable for the transformation final IRunnableWithProgress exportThread = new IRunnableWithProgress() { @Override @@ -329,13 +321,7 @@ public void run(final IProgressMonitor monitor) // 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 +344,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 +407,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/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..046ede660b 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,35 +231,18 @@ 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(), @@ -260,10 +250,89 @@ modelSession, compileService, getDialogService(), .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/overview/TableOverviewPart.java b/java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/overview/TableOverviewPart.java index 910c4f4a65..1e82e2ae66 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,7 @@ private void exportAllRelevantTable( .toList(); try { final List filterConfirmOverwriteTable = filterConfirmOverwriteTable( - tablesToExport, getToolboxShell(), getDialogService(), - outputDir); + tablesToExport, getToolboxShell(), getDialogService()); final IRunnableWithProgress exportThread = new IRunnableWithProgress() { @Override public void run(final IProgressMonitor monitor) @@ -368,59 +364,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() - .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())) + 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(); - 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..22b2f08b06 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.Function; +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 Function, List> 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 From 43dfaf42b0cefd9ca781280cdff5eecab7375570 Mon Sep 17 00:00:00 2001 From: TruongQuangSB <131350493+TruongQuangSB@users.noreply.github.com> Date: Tue, 25 Aug 2026 09:43:35 +0200 Subject: [PATCH 2/4] Update java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/export/PlanProExportPart.java Co-authored-by: Marius Heine --- .../eclipse/set/feature/table/export/PlanProExportPart.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) 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 046ede660b..9d25fa3898 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 @@ -257,9 +257,9 @@ modelSession, compileService, getDialogService(), @Override protected List filterOverwriteConfirmationFiles( final Object[] checkedElements) { - final List treeElementWIthExportPaths = toTreeElementWithExportPaths( + final List treeElementWithExportPaths = toTreeElementWithExportPaths( checkedElements); - final Map pathsAndDisplayName = treeElementWIthExportPaths + final Map pathsAndDisplayName = treeElementWithExportPaths .stream() .flatMap(ele -> ele.exportFilePaths.stream() .map(p -> Map.entry(p, ele.treeElement.getName()))) @@ -272,7 +272,7 @@ protected List filterOverwriteConfirmationFiles( IDialogConstants.OK_LABEL, null)) .entrySet(); - return treeElementWIthExportPaths.stream() + return treeElementWithExportPaths.stream() .filter(ele -> confirmationOverwriteFiles.stream() .anyMatch(file -> file.getValue() .equals(ele.treeElement.getName()))) From 5f551bccce35482d7c8967ef156cc5b4aa9ca695 Mon Sep 17 00:00:00 2001 From: Quang Truong Date: Tue, 25 Aug 2026 09:57:48 +0200 Subject: [PATCH 3/4] Sorted items --- .../set/core/dialogservice/SelectionMultiValueDialog.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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); From ae1c4b2ca66b8e8c6df22c98c534ba2948867a0e Mon Sep 17 00:00:00 2001 From: Quang Truong Date: Tue, 25 Aug 2026 16:59:27 +0200 Subject: [PATCH 4/4] open information dialog, when no file to export --- .../OSGI-INF/l10n/bundle.properties | 2 +- .../src/org/eclipse/set/feature/export/Messages.java | 6 ++++++ .../export/exportservice/ExportServiceImpl.java | 4 +--- .../set/feature/export/parts/DocumentExportPart.java | 5 ++++- .../OSGI-INF/l10n/bundle.properties | 2 +- .../set/feature/table/export/PlanProExportPart.java | 3 +-- .../eclipse/set/feature/table/messages/Messages.java | 5 +++++ .../set/feature/table/overview/TableOverviewPart.java | 9 +++++++-- .../org/eclipse/set/services/export/ExportService.java | 10 +++++----- 9 files changed, 31 insertions(+), 15 deletions(-) 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 8fbcdf5d15..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 @@ -309,6 +309,8 @@ private void startExport(final Shell shell, final List filterOverwriteConfirmationFiles = filterOverwriteConfirmationFiles( checkedElements); if (filterOverwriteConfirmationFiles.isEmpty()) { + getDialogService().openInformation(getToolboxShell(), + getTaskMessage(), messages.DocumentExportPart_NoDocument); return; } // runnable for the transformation @@ -317,7 +319,8 @@ private void startExport(final Shell shell, 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); 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 9d25fa3898..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 @@ -244,8 +244,7 @@ monitor, getSelectedDirectory(), getExportType(), elements, modelSession); monitor.setTaskName(getTaskMessage()); getExportService().exportMultiTable(getExportType(), tablesToExport, - modelSession, compileService, getDialogService(), - getTableType(), + modelSession, compileService, getTableType(), modelSession.getSelectedControlAreas() .stream() .map(Pair::getSecond) 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 1e82e2ae66..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 @@ -326,6 +326,12 @@ private void exportAllRelevantTable( try { final List filterConfirmOverwriteTable = filterConfirmOverwriteTable( 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) @@ -335,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())); 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 22b2f08b06..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 @@ -18,7 +18,7 @@ import java.util.Objects; import java.util.Set; import java.util.function.Consumer; -import java.util.function.Function; +import java.util.function.UnaryOperator; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -139,7 +139,7 @@ public static TableToExportPath createInstance( */ default Map getConfirmationOverwriteFiles( final Map pathsWithDisplayName, final Shell shell, - final Function, List> overwriteConfirmation) { + final UnaryOperator> overwriteConfirmation) { final Map needOverwriteConfirmationFiles = new HashMap<>(); final Map result = new HashMap<>(); pathsWithDisplayName.forEach((path, displayName) -> { @@ -291,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); }