Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,6 @@ public interface AdditionalExportService<T extends CheckboxModelElement> {
/**
* Create an additional export.
*
* @param id
* the id for the export
* @param modelSession
* the model session
* @param monitor
Expand All @@ -49,9 +47,9 @@ public interface AdditionalExportService<T extends CheckboxModelElement> {
* @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);

/**
Expand All @@ -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<Path> getExportPaths();
}
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -99,4 +99,10 @@ public class Messages {
* Erstelle Schriftfeld
*/
public String TitleBoxPdfPart_LoadTitlebox;

/**
* Kein Dokument wurde zum Exportieren ausgewählt.
*/
public String DocumentExportPart_NoDocument;

}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -73,8 +72,7 @@ public void addTableExportBuilder(final TableExport builder) {
public void exportMultiTable(final ExportType exportType,
final List<TableToExportPath> tablesToExport,
final IModelSession modelSession,
final TableCompileService compileService,
final DialogService dialogService, final TableType tableType,
final TableCompileService compileService, final TableType tableType,
final Set<String> controlAreaIds, final IProgressMonitor monitor,
final OverwriteHandling overwriteHandling,
final Consumer<Exception> errorHandler) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand All @@ -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;
Expand Down Expand Up @@ -79,8 +77,6 @@ public abstract class DocumentExportPart extends BasePart {
@Inject
UserConfigurationService userConfigService;

Button checkOverrideButton;

@Inject
ExportService exportService;

Expand Down Expand Up @@ -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,
Expand All @@ -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<CheckBoxTreeElement> 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<CheckboxModelElement> 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();
}
Expand All @@ -358,9 +347,8 @@ public void run(final IProgressMonitor monitor)
}
}

protected abstract void export(List<CheckboxModelElement> element,
IModelSession modelSession, OverwriteHandling overwriteHandling,
IProgressMonitor monitor);
protected abstract void export(List<CheckBoxTreeElement> element,
IModelSession modelSession, IProgressMonitor monitor);

protected abstract CheckboxTreeModel createTreeModelData();

Expand Down Expand Up @@ -422,4 +410,7 @@ protected void validateExportButton() {
exportButton.setEnabled(
viewer.getCheckedElements().length > 0 && !isSessionDirty);
}

protected abstract List<CheckBoxTreeElement> filterOverwriteConfirmationFiles(
Object[] checkedElements);
}
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,26 +8,29 @@
*/
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;

import org.eclipse.core.runtime.IProgressMonitor;
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;
Expand Down Expand Up @@ -68,6 +71,11 @@
*/
public abstract class PlanProExportPart extends DocumentExportPart {

private record TreeElementWithExportPaths(CheckBoxTreeElement treeElement,
List<Path> exportFilePaths) {

}

protected static final Logger logger = LoggerFactory
.getLogger(PlanProExportPart.class);
protected static final String EMPTY_TABLE = "leer"; //$NON-NLS-1$
Expand Down Expand Up @@ -184,7 +192,6 @@ protected CheckboxTreeModel createTreeModelData() {
final List<CheckBoxTreeElement> elements = new ArrayList<>();
final Collection<TableInfo> availableTables = tableService
.getAvailableTables();

availableTables.forEach(tableInfo -> {
final TableNameInfo nameInfo = tableInfo.nameInfo();
CheckBoxTreeElement parentElement = elements.stream()
Expand Down Expand Up @@ -224,46 +231,107 @@ messages.TableExportPart_FilterEmptyButton, getTreeDataModel(),
}

@Override
protected void export(final List<CheckboxModelElement> elements,
final IModelSession modelSession,
final OverwriteHandling overwriteHandling,
final IProgressMonitor monitor) {
final List<TableToExportPath> 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<CheckBoxTreeElement> 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<TableToExportPath> 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<CheckBoxTreeElement> filterOverwriteConfirmationFiles(
final Object[] checkedElements) {
final List<TreeElementWithExportPaths> treeElementWithExportPaths = toTreeElementWithExportPaths(
checkedElements);
final Map<Path, String> 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<Entry<Path, String>> 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<TreeElementWithExportPaths> 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<TableToExportPath> getTablesToExport(
final List<CheckBoxTreeElement> 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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -223,4 +223,9 @@ public class Messages {
*/
public String TableTransform_Error_Msg;

/**
* Keine Tabelle wurde zum Exportieren ausgewählt.
*/
public String TableExportPart_NoTable;

}
Loading
Loading