From 8bee9b73e539d5afa0c2d0acef41de7ab01ece2e Mon Sep 17 00:00:00 2001 From: Quang Truong Date: Mon, 30 Mar 2026 14:59:05 +0200 Subject: [PATCH 1/2] Initial --- .../set/feature/plazmodel/PlazModelPart.java | 59 ++++++++----------- .../set/feature/table/ToolboxTableView.java | 16 +++++ .../table/internal/TableServiceImpl.java | 7 +-- 3 files changed, 44 insertions(+), 38 deletions(-) diff --git a/java/bundles/org.eclipse.set.feature.plazmodel/src/org/eclipse/set/feature/plazmodel/PlazModelPart.java b/java/bundles/org.eclipse.set.feature.plazmodel/src/org/eclipse/set/feature/plazmodel/PlazModelPart.java index 1a71c10e78..d62d094242 100644 --- a/java/bundles/org.eclipse.set.feature.plazmodel/src/org/eclipse/set/feature/plazmodel/PlazModelPart.java +++ b/java/bundles/org.eclipse.set.feature.plazmodel/src/org/eclipse/set/feature/plazmodel/PlazModelPart.java @@ -44,8 +44,6 @@ import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Shell; -import org.osgi.service.event.Event; -import org.osgi.service.event.EventHandler; import jakarta.annotation.PostConstruct; import jakarta.inject.Inject; @@ -83,40 +81,33 @@ public class PlazModelPart extends AbstractEmfFormsPart { @SuppressWarnings("unchecked") @PostConstruct private void postConstruct() { - getBroker().subscribe(Events.DO_PLAZ_CHECK, new EventHandler() { - - @Override - public void handleEvent(final Event event) { - final Object property = event.getProperty(IEventBroker.DATA); - if (property instanceof final Class clazz - && PlazCheck.class.isAssignableFrom(clazz)) { - final PlazReport newReport = plazModelService.runPlazModel( - getModelSession(), - (Class) clazz); - if (plazReport == null - || plazReport.getEntries().isEmpty()) { - tableView.updateView(newReport); - return; - } - - final List objectArts = newReport.getEntries() - .stream() - .map(ValidationProblem::getObjectArt) - .distinct() - .toList(); - final List oldReports = plazReport - .getEntries() - .stream() - .filter(entry -> objectArts - .contains(entry.getObjectArt())) - .toList(); - plazReport.getEntries().removeAll(oldReports); - plazReport.getEntries().addAll(newReport.getEntries()); - PlazModelService - .sortAndIndexedProblems(plazReport.getEntries()); - tableView.updateView(plazReport); + getBroker().subscribe(Events.DO_PLAZ_CHECK, event -> { + final Object property = event.getProperty(IEventBroker.DATA); + if (property instanceof final Class clazz + && PlazCheck.class.isAssignableFrom(clazz)) { + final PlazReport newReport = plazModelService.runPlazModel( + getModelSession(), (Class) clazz); + if (plazReport == null || plazReport.getEntries().isEmpty()) { + tableView.updateView(newReport); + return; } + final List objectArts = newReport.getEntries() + .stream() + .map(ValidationProblem::getObjectArt) + .distinct() + .toList(); + final List oldReports = plazReport + .getEntries() + .stream() + .filter(entry -> objectArts + .contains(entry.getObjectArt())) + .toList(); + plazReport.getEntries().removeAll(oldReports); + plazReport.getEntries().addAll(newReport.getEntries()); + PlazModelService + .sortAndIndexedProblems(plazReport.getEntries()); + tableView.updateView(plazReport); } }); } diff --git a/java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/ToolboxTableView.java b/java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/ToolboxTableView.java index 60f194b6d0..e4d6b67429 100644 --- a/java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/ToolboxTableView.java +++ b/java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/ToolboxTableView.java @@ -60,6 +60,7 @@ import org.eclipse.nebula.widgets.nattable.selection.SelectionLayer; import org.eclipse.nebula.widgets.nattable.viewport.command.ShowRowInViewportCommand; import org.eclipse.set.basis.FreeFieldInfo; +import org.eclipse.set.basis.IModelSession; import org.eclipse.set.basis.OverwriteHandling; import org.eclipse.set.basis.Pair; import org.eclipse.set.basis.constants.Events; @@ -68,6 +69,7 @@ import org.eclipse.set.basis.constants.ToolboxConstants; import org.eclipse.set.basis.constants.ToolboxViewState; import org.eclipse.set.basis.extensions.MApplicationElementExtensions; +import org.eclipse.set.basis.files.ToolboxFileRole; import org.eclipse.set.basis.guid.Guid; import org.eclipse.set.core.services.Services; import org.eclipse.set.core.services.configurationservice.UserConfigurationService; @@ -316,6 +318,20 @@ public void accept(final SelectedControlAreaChangedEvent t) { return; } updateModel(getToolboxPart()); + if (tableInfo != null && tableInfo.shortcut() + .equalsIgnoreCase(ToolboxConstants.WORKNOTES_TABLE_SHORTCUT) + || getToolboxPart().getElementId() + .substring(getToolboxPart().getElementId() + .lastIndexOf(".") + 1) + .equalsIgnoreCase( + ToolboxConstants.WORKNOTES_TABLE_SHORTCUT)) { + final IModelSession mainSession = getSessionService() + .getLoadedSession(ToolboxFileRole.SESSION); + final Collection mainSessionMissingTables = TableServiceUtils + .getMissingTables(tableService, getModelSession(), + controlAreaIds); + final Collection compareSessionMissingTables = getMissingTables(); + } }; getBroker().subscribe(Events.COMPARE_MODEL_LOADED, diff --git a/java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/internal/TableServiceImpl.java b/java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/internal/TableServiceImpl.java index 2b293b0a77..1cf90daa9e 100644 --- a/java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/internal/TableServiceImpl.java +++ b/java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/internal/TableServiceImpl.java @@ -362,7 +362,7 @@ private String transformToCsv(final Table table) { final String delimeter = ";"; //$NON-NLS-1$ final StringBuilder builder = new StringBuilder(); for (final ColumnDescriptor colName : colNames) { - builder.append(colName.getLabel() + delimeter); + builder.append(colName.getLabel()).append(delimeter); } builder.append("\n"); //$NON-NLS-1$ @@ -370,8 +370,8 @@ private String transformToCsv(final Table table) { for (final ColumnDescriptor colName : colNames) { try { builder.append(TableCellExtensions.getPlainStringValue( - TableRowExtensions.getCell(row, colName)) - + delimeter); + TableRowExtensions.getCell(row, colName))) + .append(delimeter); } catch (final Exception e) { builder.append(e.toString()); } @@ -656,7 +656,6 @@ public Table createDiffTable(final TableInfo tableInfo, messages.TableTransform_ComparePlanError_Msg, e); return mainSessionTable; } - } @Override From 042e7778dc7637f63fcc863d276342f751be1172 Mon Sep 17 00:00:00 2001 From: Quang Truong Date: Wed, 1 Apr 2026 14:59:12 +0200 Subject: [PATCH 2/2] Sxxx: fix handling by loaded compare plan --- .../parts/SourceWebTextViewPart.java | 4 +- .../feature/export/parts/TitleBoxPdfPart.java | 4 +- .../set/feature/plazmodel/PlazModelPart.java | 59 ++--- .../pt1/sxxx/SxxxDescriptionService.java | 4 + .../table/AbstractTableDescription.java | 7 +- .../set/feature/table/SxxxTableView.java | 212 ++++++++++++++++++ .../set/feature/table/ToolboxTableView.java | 148 ++---------- .../table/export/PlanProExportPart.java | 4 +- .../validation/parts/ValidationPart.java | 4 +- .../src/org/eclipse/set/utils/BasePart.java | 2 +- 10 files changed, 286 insertions(+), 162 deletions(-) create mode 100644 java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/SxxxTableView.java diff --git a/java/bundles/org.eclipse.set.application/src/org/eclipse/set/application/parts/SourceWebTextViewPart.java b/java/bundles/org.eclipse.set.application/src/org/eclipse/set/application/parts/SourceWebTextViewPart.java index 69c2b109dc..0e7c1cdce5 100644 --- a/java/bundles/org.eclipse.set.application/src/org/eclipse/set/application/parts/SourceWebTextViewPart.java +++ b/java/bundles/org.eclipse.set.application/src/org/eclipse/set/application/parts/SourceWebTextViewPart.java @@ -242,8 +242,10 @@ private void jumpToGUID(final String guid) { } + @Override @PreDestroy - private void preDestroy() { + protected void preDestroy() { + super.preDestroy(); eventRegistration.unsubscribeAll(); getBroker().unsubscribe(problemsChangeEventHandler); } diff --git a/java/bundles/org.eclipse.set.feature.export/src/org/eclipse/set/feature/export/parts/TitleBoxPdfPart.java b/java/bundles/org.eclipse.set.feature.export/src/org/eclipse/set/feature/export/parts/TitleBoxPdfPart.java index c1e11a60c5..874fb52c52 100644 --- a/java/bundles/org.eclipse.set.feature.export/src/org/eclipse/set/feature/export/parts/TitleBoxPdfPart.java +++ b/java/bundles/org.eclipse.set.feature.export/src/org/eclipse/set/feature/export/parts/TitleBoxPdfPart.java @@ -78,8 +78,10 @@ private void postConstruct() { getBroker().subscribe(Events.SUBWORK_CHANGED, subworkChangedHandler); } + @Override @PreDestroy - private void preDestroy() { + protected void preDestroy() { + super.preDestroy(); getBroker().unsubscribe(subworkChangedHandler); } diff --git a/java/bundles/org.eclipse.set.feature.plazmodel/src/org/eclipse/set/feature/plazmodel/PlazModelPart.java b/java/bundles/org.eclipse.set.feature.plazmodel/src/org/eclipse/set/feature/plazmodel/PlazModelPart.java index d62d094242..1a71c10e78 100644 --- a/java/bundles/org.eclipse.set.feature.plazmodel/src/org/eclipse/set/feature/plazmodel/PlazModelPart.java +++ b/java/bundles/org.eclipse.set.feature.plazmodel/src/org/eclipse/set/feature/plazmodel/PlazModelPart.java @@ -44,6 +44,8 @@ import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Shell; +import org.osgi.service.event.Event; +import org.osgi.service.event.EventHandler; import jakarta.annotation.PostConstruct; import jakarta.inject.Inject; @@ -81,33 +83,40 @@ public class PlazModelPart extends AbstractEmfFormsPart { @SuppressWarnings("unchecked") @PostConstruct private void postConstruct() { - getBroker().subscribe(Events.DO_PLAZ_CHECK, event -> { - final Object property = event.getProperty(IEventBroker.DATA); - if (property instanceof final Class clazz - && PlazCheck.class.isAssignableFrom(clazz)) { - final PlazReport newReport = plazModelService.runPlazModel( - getModelSession(), (Class) clazz); - if (plazReport == null || plazReport.getEntries().isEmpty()) { - tableView.updateView(newReport); - return; + getBroker().subscribe(Events.DO_PLAZ_CHECK, new EventHandler() { + + @Override + public void handleEvent(final Event event) { + final Object property = event.getProperty(IEventBroker.DATA); + if (property instanceof final Class clazz + && PlazCheck.class.isAssignableFrom(clazz)) { + final PlazReport newReport = plazModelService.runPlazModel( + getModelSession(), + (Class) clazz); + if (plazReport == null + || plazReport.getEntries().isEmpty()) { + tableView.updateView(newReport); + return; + } + + final List objectArts = newReport.getEntries() + .stream() + .map(ValidationProblem::getObjectArt) + .distinct() + .toList(); + final List oldReports = plazReport + .getEntries() + .stream() + .filter(entry -> objectArts + .contains(entry.getObjectArt())) + .toList(); + plazReport.getEntries().removeAll(oldReports); + plazReport.getEntries().addAll(newReport.getEntries()); + PlazModelService + .sortAndIndexedProblems(plazReport.getEntries()); + tableView.updateView(plazReport); } - final List objectArts = newReport.getEntries() - .stream() - .map(ValidationProblem::getObjectArt) - .distinct() - .toList(); - final List oldReports = plazReport - .getEntries() - .stream() - .filter(entry -> objectArts - .contains(entry.getObjectArt())) - .toList(); - plazReport.getEntries().removeAll(oldReports); - plazReport.getEntries().addAll(newReport.getEntries()); - PlazModelService - .sortAndIndexedProblems(plazReport.getEntries()); - tableView.updateView(plazReport); } }); } diff --git a/java/bundles/org.eclipse.set.feature.table.pt1/src/org/eclipse/set/feature/table/pt1/sxxx/SxxxDescriptionService.java b/java/bundles/org.eclipse.set.feature.table.pt1/src/org/eclipse/set/feature/table/pt1/sxxx/SxxxDescriptionService.java index 108538c5bb..c9b9eead79 100644 --- a/java/bundles/org.eclipse.set.feature.table.pt1/src/org/eclipse/set/feature/table/pt1/sxxx/SxxxDescriptionService.java +++ b/java/bundles/org.eclipse.set.feature.table.pt1/src/org/eclipse/set/feature/table/pt1/sxxx/SxxxDescriptionService.java @@ -40,4 +40,8 @@ protected String getTableShortcut() { return messages.ToolboxTableNameSxxxShort; } + @Override + protected String getContributionURI() { + return "bundleclass://org.eclipse.set.feature.table/org.eclipse.set.feature.table.SxxxTableView"; //$NON-NLS-1$ + } } diff --git a/java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/AbstractTableDescription.java b/java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/AbstractTableDescription.java index 4e79a5c4fd..2875b23ede 100644 --- a/java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/AbstractTableDescription.java +++ b/java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/AbstractTableDescription.java @@ -29,7 +29,7 @@ public PartDescription getDescription(final IEclipseContext context) { getOptionalTableId().orElse(String.format("%s.%s", //$NON-NLS-1$ getTableIdPrefix(), getTableShortcut().toLowerCase())), // contributionURI - "bundleclass://org.eclipse.set.feature.table/org.eclipse.set.feature.table.ToolboxTableView", //$NON-NLS-1$ + getContributionURI(), // toolboxViewName getToolboxViewName(), // toolboxViewToolTip @@ -70,4 +70,9 @@ protected Optional getOptionalTableId() { protected abstract String getTableIdPrefix(); protected abstract String getTableShortcut(); + + @SuppressWarnings("static-method") + protected String getContributionURI() { + return "bundleclass://org.eclipse.set.feature.table/org.eclipse.set.feature.table.ToolboxTableView"; //$NON-NLS-1$ + } } diff --git a/java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/SxxxTableView.java b/java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/SxxxTableView.java new file mode 100644 index 0000000000..072abd73c2 --- /dev/null +++ b/java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/SxxxTableView.java @@ -0,0 +1,212 @@ +/** + * Copyright (c) 2026 DB InfraGO AG and others + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v2.0 which is available at + * https://www.eclipse.org/legal/epl-2.0. + * + * SPDX-License-Identifier: EPL-2.0 + * + */ +package org.eclipse.set.feature.table; + +import java.lang.reflect.InvocationTargetException; +import java.util.Collection; +import java.util.HashSet; +import java.util.Set; +import java.util.stream.Collectors; + +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.jface.layout.GridDataFactory; +import org.eclipse.jface.layout.GridLayoutFactory; +import org.eclipse.set.basis.IModelSession; +import org.eclipse.set.basis.constants.Events; +import org.eclipse.set.basis.constants.TableType; +import org.eclipse.set.basis.constants.ToolboxConstants; +import org.eclipse.set.basis.files.ToolboxFileRole; +import org.eclipse.set.feature.table.internal.TableServiceUtils; +import org.eclipse.set.utils.table.TableInfo; +import org.eclipse.swt.SWT; +import org.eclipse.swt.events.SelectionEvent; +import org.eclipse.swt.events.SelectionListener; +import org.eclipse.swt.widgets.Button; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Display; +import org.eclipse.swt.widgets.Label; +import org.osgi.service.event.Event; +import org.osgi.service.event.EventHandler; + +import jakarta.annotation.PostConstruct; +import jakarta.annotation.PreDestroy; + +/** + * Specify handling for SxxxTableView + */ +public class SxxxTableView extends ToolboxTableView { + private Composite calculateMissingTablesPanel; + private EventHandler reloadWorkNotesTable; + + @Override + @PostConstruct + protected void postConstruct() { + super.postConstruct(); + reloadWorkNotesTable = event -> { + if (!event.getTopic() + .equalsIgnoreCase(Events.RELOAD_WORKNOTES_TABLE)) { + return; + } + updateModel(getToolboxPart()); + updateCalculateMissingTablesPanel(); + natTable.refresh(); + }; + getBroker().subscribe(Events.RELOAD_WORKNOTES_TABLE, + reloadWorkNotesTable); + } + + @Override + @PreDestroy + protected void preDestroy() { + super.preDestroy(); + getBroker().unsubscribe(reloadWorkNotesTable); + } + + @Override + protected void createView(final Composite parent) { + super.createView(parent); + addCalculateMissingTablesPanel(parent); + // Move the panel to top position + calculateMissingTablesPanel.moveAbove(parent.getChildren()[0]); + } + + @Override + protected void comparePlaningLoadedHandler(final Event event) { + super.comparePlaningLoadedHandler(event); + if (tableInfo != null && tableInfo.shortcut() + .equalsIgnoreCase(ToolboxConstants.WORKNOTES_TABLE_SHORTCUT) + || getToolboxPart().getElementId() + .substring( + getToolboxPart().getElementId().lastIndexOf(".") //$NON-NLS-1$ + + 1) + .equalsIgnoreCase( + ToolboxConstants.WORKNOTES_TABLE_SHORTCUT)) { + final IModelSession compareSession = getSessionService() + .getLoadedSession(ToolboxFileRole.COMPARE_PLANNING); + final Collection mainSessionMissingTables = getMissingTables(); + final Collection compareSessionMissingTables = TableServiceUtils + .getMissingTables(tableService, compareSession, + controlAreaIds); + // All tables at both session are already loaded + if (mainSessionMissingTables.isEmpty() + && compareSessionMissingTables.isEmpty()) { + return; + } + + if (mainSessionMissingTables.isEmpty()) { + transformComparePlanTables(compareSession, + new HashSet<>(compareSessionMissingTables)); + return; + } + + // Find out, which table in main session is already transformed, + // that by compare session still untransformed + final Set compareTableToTransform = compareSessionMissingTables + .stream() + .filter(compareTableInfo -> mainSessionMissingTables + .stream() + .noneMatch( + mainTableInfo -> compareTableInfo.shortcut() + .equalsIgnoreCase( + mainTableInfo.shortcut()))) + .collect(Collectors.toSet()); + if (!compareTableToTransform.isEmpty()) { + transformComparePlanTables(compareSession, + compareTableToTransform); + } + } + } + + private void transformComparePlanTables(final IModelSession compareSession, + final Set tablesToTransform) { + try { + getDialogService().showProgress(getToolboxShell(), + monitor -> tableService.transformTables(monitor, + tablesToTransform, + compareSession.isSingleState() ? TableType.SINGLE + : TableType.DIFF, + controlAreaIds)); + } catch (InvocationTargetException | InterruptedException e) { + getDialogService().error(getToolboxShell(), e); + Thread.currentThread().interrupt(); + } + } + + private void addCalculateMissingTablesPanel(final Composite parent) { + if (getMissingTables().isEmpty()) { + return; + } + // custom panel + final Composite panel = new Composite(parent, SWT.NONE); + GridLayoutFactory.fillDefaults().numColumns(2).applyTo(panel); + GridDataFactory.fillDefaults().grab(true, false).applyTo(panel); + final Label label = new Label(panel, SWT.LEFT); + GridDataFactory.fillDefaults() + .align(SWT.BEGINNING, SWT.CENTER) + .grab(true, false) + .applyTo(label); + label.setText(messages.ToolboxTableView_TableIncompleteHint); + final Button button = new Button(panel, SWT.None); + GridDataFactory.swtDefaults().align(SWT.END, SWT.FILL).applyTo(button); + button.setText(messages.ToolboxTableView_CalculateTables); + button.addSelectionListener(new SelectionListener() { + @Override + public void widgetDefaultSelected(final SelectionEvent e) { + calculateAllMissingTablesEvent(); + } + + @Override + public void widgetSelected(final SelectionEvent e) { + widgetDefaultSelected(e); + } + }); + + panel.setBackground( + Display.getCurrent().getSystemColor(SWT.COLOR_YELLOW)); + + calculateMissingTablesPanel = panel; + updateCalculateMissingTablesPanel(); + } + + private void updateCalculateMissingTablesPanel() { + if (calculateMissingTablesPanel == null) { + return; + } + if (getMissingTables().isEmpty()) { + final Composite parent = calculateMissingTablesPanel.getParent(); + calculateMissingTablesPanel.dispose(); + parent.layout(true, true); + parent.update(); + calculateMissingTablesPanel = null; + } + } + + private Collection getMissingTables() { + return TableServiceUtils.getMissingTables(tableService, + getModelSession(), controlAreaIds); + } + + private void calculateAllMissingTables(final IProgressMonitor monitor) { + TableServiceUtils.calculateAllMissingTables(tableService, + getModelSession(), controlAreaIds, monitor, messages); + } + + private void calculateAllMissingTablesEvent() { + try { + getDialogService().showProgress(getToolboxShell(), + this::calculateAllMissingTables); + } catch (InvocationTargetException | InterruptedException e) { + getDialogService().error(getToolboxShell(), e); + } + updateCalculateMissingTablesPanel(); + } + +} diff --git a/java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/ToolboxTableView.java b/java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/ToolboxTableView.java index e4d6b67429..2bf6351592 100644 --- a/java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/ToolboxTableView.java +++ b/java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/ToolboxTableView.java @@ -31,7 +31,6 @@ import org.eclipse.emf.common.command.CommandStackListener; import org.eclipse.emf.common.util.ECollections; import org.eclipse.jface.layout.GridDataFactory; -import org.eclipse.jface.layout.GridLayoutFactory; import org.eclipse.nebula.widgets.nattable.NatTable; import org.eclipse.nebula.widgets.nattable.config.ConfigRegistry; import org.eclipse.nebula.widgets.nattable.data.IDataProvider; @@ -60,7 +59,6 @@ import org.eclipse.nebula.widgets.nattable.selection.SelectionLayer; import org.eclipse.nebula.widgets.nattable.viewport.command.ShowRowInViewportCommand; import org.eclipse.set.basis.FreeFieldInfo; -import org.eclipse.set.basis.IModelSession; import org.eclipse.set.basis.OverwriteHandling; import org.eclipse.set.basis.Pair; import org.eclipse.set.basis.constants.Events; @@ -69,7 +67,6 @@ import org.eclipse.set.basis.constants.ToolboxConstants; import org.eclipse.set.basis.constants.ToolboxViewState; import org.eclipse.set.basis.extensions.MApplicationElementExtensions; -import org.eclipse.set.basis.files.ToolboxFileRole; import org.eclipse.set.basis.guid.Guid; import org.eclipse.set.core.services.Services; import org.eclipse.set.core.services.configurationservice.UserConfigurationService; @@ -77,7 +74,6 @@ import org.eclipse.set.feature.table.abstracttableview.ColumnGroupGroupGroupHeaderLayer; import org.eclipse.set.feature.table.abstracttableview.NatTableColumnGroupHelper; import org.eclipse.set.feature.table.abstracttableview.ToolboxTableModelThemeConfiguration; -import org.eclipse.set.feature.table.internal.TableServiceUtils; import org.eclipse.set.feature.table.messages.Messages; import org.eclipse.set.feature.table.messages.MessagesWrapper; import org.eclipse.set.model.planpro.Basisobjekte.Ur_Objekt; @@ -122,13 +118,9 @@ import org.eclipse.set.utils.table.menu.TableMenuService; import org.eclipse.set.utils.table.sorting.AbstractCompareWithDependencyOnServiceCriterion; import org.eclipse.set.utils.table.sorting.TableRowGroupComparator; -import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.events.SelectionListener; -import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Display; -import org.eclipse.swt.widgets.Label; +import org.osgi.service.event.Event; import org.osgi.service.event.EventHandler; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -145,15 +137,13 @@ * * @author rumpf */ -public final class ToolboxTableView extends BasePart { +public class ToolboxTableView extends BasePart { protected static final int DEBUG_WIDTH_CORRECTION = 0; static final Logger logger = LoggerFactory .getLogger(ToolboxTableView.class); - private Composite calculateMissingTablesPanel; - private BodyLayerStack bodyLayerStack; @Inject @@ -161,7 +151,7 @@ public final class ToolboxTableView extends BasePart { @Inject private ExportService exportService; - private NatTable natTable; + protected NatTable natTable; private final List tableInstances = Lists.newLinkedList(); @@ -180,7 +170,7 @@ public final class ToolboxTableView extends BasePart { Table table; @Inject - TableService tableService; + protected TableService tableService; @Inject TableMenuService tableMenuService; @@ -188,9 +178,9 @@ public final class ToolboxTableView extends BasePart { @Inject UserConfigurationService userConfigService; - TableType tableType; + protected TableType tableType; - Set controlAreaIds; + protected Set controlAreaIds; /** * this injection is only needed to invoke the call of the respective @@ -203,8 +193,7 @@ public final class ToolboxTableView extends BasePart { private TableModelInstanceBodyDataProvider bodyDataProvider; private EventHandler secondaryPlanningLoadedHanlder; - private EventHandler reloadWorkNotesTable; - private TableInfo tableInfo; + protected TableInfo tableInfo; /** * constructor @@ -258,7 +247,7 @@ private void outdatedUpdate() { } @PostConstruct - private void postConstruct() { + protected void postConstruct() { tableSelectRowHandler = new DefaultToolboxEventHandler<>() { @Override public void accept(final JumpToTableEvent t) { @@ -312,51 +301,22 @@ public void accept(final SelectedControlAreaChangedEvent t) { SelectedControlAreaChangedEvent.class, selectionControlAreaHandler); - secondaryPlanningLoadedHanlder = event -> { - if (!event.getTopic() - .equalsIgnoreCase(Events.COMPARE_MODEL_LOADED)) { - return; - } - updateModel(getToolboxPart()); - if (tableInfo != null && tableInfo.shortcut() - .equalsIgnoreCase(ToolboxConstants.WORKNOTES_TABLE_SHORTCUT) - || getToolboxPart().getElementId() - .substring(getToolboxPart().getElementId() - .lastIndexOf(".") + 1) - .equalsIgnoreCase( - ToolboxConstants.WORKNOTES_TABLE_SHORTCUT)) { - final IModelSession mainSession = getSessionService() - .getLoadedSession(ToolboxFileRole.SESSION); - final Collection mainSessionMissingTables = TableServiceUtils - .getMissingTables(tableService, getModelSession(), - controlAreaIds); - final Collection compareSessionMissingTables = getMissingTables(); - } - - }; + secondaryPlanningLoadedHanlder = this::comparePlaningLoadedHandler; getBroker().subscribe(Events.COMPARE_MODEL_LOADED, secondaryPlanningLoadedHanlder); + } - if (tableService.getTableInfo(this) - .shortcut() - .equalsIgnoreCase(ToolboxConstants.WORKNOTES_TABLE_SHORTCUT)) { - reloadWorkNotesTable = event -> { - if (!event.getTopic() - .equalsIgnoreCase(Events.RELOAD_WORKNOTES_TABLE)) { - return; - } - updateModel(getToolboxPart()); - updateCalculateMissingTablesPanel(); - natTable.refresh(); - }; - getBroker().subscribe(Events.RELOAD_WORKNOTES_TABLE, - reloadWorkNotesTable); + protected void comparePlaningLoadedHandler(final Event event) { + if (!event.getTopic().equalsIgnoreCase(Events.COMPARE_MODEL_LOADED)) { + return; } - + updateModel(getToolboxPart()); } + @Override @PreDestroy - private void preDestroy() { + protected void preDestroy() { + super.preDestroy(); logger.trace("preDestroy"); //$NON-NLS-1$ LOG ToolboxEvents.unsubscribe(getBroker(), tableSelectRowHandler); ToolboxEvents.unsubscribe(getBroker(), tableDataChangeHandler); @@ -427,11 +387,6 @@ protected void createView(final Composite parent) { return; } - if (tableInfo.shortcut() - .equalsIgnoreCase(ToolboxConstants.WORKNOTES_TABLE_SHORTCUT)) { - this.addCalculateMissingTablesPanel(parent); - } - final ColumnDescriptor rootColumnDescriptor = table .getColumndescriptors() .get(0); @@ -761,75 +716,6 @@ protected ColumnGroup4HeaderLayer createGroupHeaderLayer( return columnGroup4HeaderLayer; } - private Collection getMissingTables() { - return TableServiceUtils.getMissingTables(tableService, - getModelSession(), controlAreaIds); - } - - private void calculateAllMissingTables(final IProgressMonitor monitor) { - TableServiceUtils.calculateAllMissingTables(tableService, - getModelSession(), controlAreaIds, monitor, messages); - } - - private void calculateAllMissingTablesEvent() { - try { - getDialogService().showProgress(getToolboxShell(), - this::calculateAllMissingTables); - } catch (InvocationTargetException | InterruptedException e) { - getDialogService().error(getToolboxShell(), e); - } - updateCalculateMissingTablesPanel(); - } - - private void addCalculateMissingTablesPanel(final Composite parent) { - if (getMissingTables().isEmpty()) { - return; - } - // custom panel - final Composite panel = new Composite(parent, SWT.NONE); - GridLayoutFactory.fillDefaults().numColumns(2).applyTo(panel); - GridDataFactory.fillDefaults().grab(true, false).applyTo(panel); - final Label label = new Label(panel, SWT.LEFT); - GridDataFactory.fillDefaults() - .align(SWT.BEGINNING, SWT.CENTER) - .grab(true, false) - .applyTo(label); - label.setText(messages.ToolboxTableView_TableIncompleteHint); - final Button button = new Button(panel, SWT.None); - GridDataFactory.swtDefaults().align(SWT.END, SWT.FILL).applyTo(button); - button.setText(messages.ToolboxTableView_CalculateTables); - button.addSelectionListener(new SelectionListener() { - @Override - public void widgetDefaultSelected(final SelectionEvent e) { - calculateAllMissingTablesEvent(); - } - - @Override - public void widgetSelected(final SelectionEvent e) { - widgetDefaultSelected(e); - } - }); - - panel.setBackground( - Display.getCurrent().getSystemColor(SWT.COLOR_YELLOW)); - - calculateMissingTablesPanel = panel; - updateCalculateMissingTablesPanel(); - } - - private void updateCalculateMissingTablesPanel() { - if (calculateMissingTablesPanel == null) { - return; - } - if (getMissingTables().isEmpty()) { - final Composite parent = calculateMissingTablesPanel.getParent(); - calculateMissingTablesPanel.dispose(); - parent.layout(true, true); - parent.update(); - calculateMissingTablesPanel = null; - } - } - @Override protected SelectableAction getOutdatedAction() { return new RefreshAction(this, e -> outdatedUpdate()); 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 27ff6f859f..7588cb77da 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 @@ -174,8 +174,10 @@ protected void updateTreeElements(final Set areaIds) { } } + @Override @PreDestroy - private void preDestroy() { + protected void preDestroy() { + super.preDestroy(); logger.trace("preDestroy"); //$NON-NLS-1$ LOG ToolboxEvents.unsubscribe(getBroker(), selectionControlAreaHandler); } diff --git a/java/bundles/org.eclipse.set.feature.validation/src/org/eclipse/set/feature/validation/parts/ValidationPart.java b/java/bundles/org.eclipse.set.feature.validation/src/org/eclipse/set/feature/validation/parts/ValidationPart.java index 3a40a22f4c..f88caabcd4 100644 --- a/java/bundles/org.eclipse.set.feature.validation/src/org/eclipse/set/feature/validation/parts/ValidationPart.java +++ b/java/bundles/org.eclipse.set.feature.validation/src/org/eclipse/set/feature/validation/parts/ValidationPart.java @@ -331,8 +331,10 @@ protected void handleProjectDataChanged(final ProjectDataChanged e) { setOutdated(true); } + @Override @PreDestroy - private void preDestroy() { + protected void preDestroy() { + super.preDestroy(); if (resizeListenerObject != null && !resizeListenerObject.isDisposed()) { resizeListenerObject.removeListener(SWT.RESIZE, resizeListener); diff --git a/java/bundles/org.eclipse.set.utils/src/org/eclipse/set/utils/BasePart.java b/java/bundles/org.eclipse.set.utils/src/org/eclipse/set/utils/BasePart.java index 74e359ad9b..c13cf21169 100644 --- a/java/bundles/org.eclipse.set.utils/src/org/eclipse/set/utils/BasePart.java +++ b/java/bundles/org.eclipse.set.utils/src/org/eclipse/set/utils/BasePart.java @@ -302,7 +302,7 @@ public void accept(final SessionDirtyChanged e) { } @PreDestroy - private void preDestroy() { + protected void preDestroy() { toolboxPart.setVisible(false); toolboxPart.setToBeRendered(false); if (toolboxPart.getWidget() instanceof final Widget widget) {