Skip to content
Merged
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 @@ -14,22 +14,17 @@
import java.util.List;

import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.common.util.Enumerator;
import org.eclipse.emf.common.util.TreeIterator;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EReference;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.set.basis.IModelSession;
import org.eclipse.set.model.planpro.BasisTypen.BasisAttribut_AttributeGroup;
import org.eclipse.set.model.planpro.BasisTypen.ID_Bearbeitungsvermerk_TypeClass;
import org.eclipse.set.model.planpro.Basisobjekte.Anhang;
import org.eclipse.set.model.planpro.Basisobjekte.Anhang_Allg_AttributeGroup;
import org.eclipse.set.model.planpro.Basisobjekte.Anhang_Art_TypeClass;
import org.eclipse.set.model.planpro.Basisobjekte.Ur_Objekt;
import org.eclipse.set.model.planpro.PlanPro.PlanProPackage;
import org.eclipse.set.model.plazmodel.PlazError;
import org.eclipse.set.model.plazmodel.PlazFactory;
import org.eclipse.set.model.validationreport.ValidationSeverity;
import org.eclipse.set.utils.EnumeratorExtensions;
import org.osgi.service.component.annotations.Component;

import com.google.common.collect.Iterators;
Expand All @@ -43,8 +38,6 @@
*/
@Component
public class SonstigeRequiresBearbeitungsvermerk implements PlazCheck {
private static final String SONSTIGE_ENUM_WERT = "sonstige"; //$NON-NLS-1$
private static final String ENUM_WERT_FEATURE_NAME = "wert"; //$NON-NLS-1$
private static final String BEARBEITUNGSVERMERK_FEATURE_NAME = "iDBearbeitungsvermerk"; //$NON-NLS-1$

@Override
Expand All @@ -57,7 +50,7 @@ public List<PlazError> run(final IModelSession modelSession) {
.filter(contents, BasisAttribut_AttributeGroup.class);

final Iterator<BasisAttribut_AttributeGroup> attributesWithSonstige = Iterators
.filter(attributes, this::isSonstigeEnumWert);
.filter(attributes, EnumeratorExtensions::isSonstigeEnumWert);

final Iterator<BasisAttribut_AttributeGroup> attributesWithMissingBearbeitungsvermerk = Iterators
.filter(attributesWithSonstige, this::hasNoBearbeitungsVermerk);
Expand All @@ -68,34 +61,6 @@ public List<PlazError> run(final IModelSession modelSession) {
return Lists.newArrayList(errors);
}

private boolean isSonstigeEnumWert(
final BasisAttribut_AttributeGroup attribute) {
try {
final EStructuralFeature feature = attribute.eClass()
.getEStructuralFeature(ENUM_WERT_FEATURE_NAME);
final Object value = attribute.eGet(feature);
return value instanceof final Enumerator enumValue
&& enumValue.getLiteral().equals(SONSTIGE_ENUM_WERT)
&& !isPlanungBueroAnhangArt(attribute);
} catch (final Exception e) {
return false;
}
}

private static boolean isPlanungBueroAnhangArt(
final BasisAttribut_AttributeGroup attribute) {
if (attribute instanceof final Anhang_Art_TypeClass anhangArt
&& anhangArt
.eContainer() instanceof final Anhang_Allg_AttributeGroup allgGroup
&& allgGroup.eContainer() instanceof final Anhang anhang) {
final EReference planungbueroLogoRef = PlanProPackage.eINSTANCE
.getPlanung_G_Schriftfeld_AttributeGroup_PlanungsbueroLogo();
return anhang.eContainingFeature().equals(planungbueroLogoRef);
}

return false;
}

private boolean hasNoBearbeitungsVermerk(final EObject obj) {
final EStructuralFeature feature = obj.eClass()
.getEStructuralFeature(BEARBEITUNGSVERMERK_FEATURE_NAME);
Expand Down Expand Up @@ -132,12 +97,12 @@ public String checkType() {
public String getDescription() {
return String.format(
"Alles mit Referenz '%s' hat einen Bearbeitungsvermerk.", //$NON-NLS-1$
SONSTIGE_ENUM_WERT);
EnumeratorExtensions.SONSTIGE_ENUM_WERT);
}

@Override
public String getGeneralErrMsg() {
return String.format("Fehlender Bearbeitungsvermerk bei Wert '%s'.", //$NON-NLS-1$
SONSTIGE_ENUM_WERT);
EnumeratorExtensions.SONSTIGE_ENUM_WERT);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -184,10 +184,10 @@ ToolboxTableNameSslsShort=Ssls
ToolboxTableNameSslsLong=Signalisierungstabelle
ToolboxTableNameSslsPlanningNumber=??

SxxxDescriptionService_ViewName=Sxxx – Tabelle weiterer Bearbeitungsvermerke
SxxxDescriptionService_ViewTooltip=Tabelle weiterer Bearbeitungsvermerke
SxxxTableView_Heading=Tabelle weiterer Bearbeitungsvermerke – Sxxx
SxxxDescriptionService_ViewName=Sxxx – Tabelle der Bearbeitungsvermerke
SxxxDescriptionService_ViewTooltip=Tabelle der Bearbeitungsvermerke
SxxxTableView_Heading=Tabelle der Bearbeitungsvermerke – Sxxx
ToolboxTableNameSxxxShort=Sxxx
ToolboxTableNameSxxxLong=Tabelle weiterer Bearbeitungsvermerke
ToolboxTableNameSxxxLong=Tabelle der Bearbeitungsvermerke
ToolboxTableNameSxxxPlanningNumber=??

Original file line number Diff line number Diff line change
Expand Up @@ -799,12 +799,12 @@ private void bindBundleLocalization(
public String ToolboxTableNameSxxxShort;

/**
* Tabelle weiterer Bearbeitungsvermerke – Sxxx
* Tabelle der Bearbeitungsvermerke – Sxxx
*/
public String SxxxTableView_Heading;

/**
* Tabelle weiterer Bearbeitungsvermerke
* Tabelle der Bearbeitungsvermerke
*/
public String ToolboxTableNameSxxxLong;

Expand All @@ -814,12 +814,12 @@ private void bindBundleLocalization(
public String ToolboxTableNameSxxxPlanningNumber;

/**
* Sxxx – Tabelle weiterer Bearbeitungsvermerke
* Sxxx – Tabelle der Bearbeitungsvermerke
*/
public String SxxxDescriptionService_ViewName;

/**
* Tabelle weiterer Bearbeitungsvermerke
* Tabelle der Bearbeitungsvermerke
*/
public String SxxxDescriptionService_ViewTooltip;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
package org.eclipse.set.feature.table.pt1.sxxx;

import org.eclipse.set.core.services.part.PartDescriptionService;
import org.eclipse.set.feature.table.AbstractESTWSupplementTableDesciption;
import org.eclipse.set.feature.table.AbstractSupplementTableDesciption;
import org.eclipse.set.feature.table.pt1.messages.Messages;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;
Expand All @@ -20,8 +20,7 @@
*
*/
@Component(service = PartDescriptionService.class)
public class SxxxDescriptionService
extends AbstractESTWSupplementTableDesciption {
public class SxxxDescriptionService extends AbstractSupplementTableDesciption {

@Reference
Messages messages;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@
*/
@Component(service = {
PlanPro2TableTransformationService.class }, immediate = true, property = {
"table.category=supplement-estw", "table.shortcut=sxxx" })
"table.category=supplement", "table.shortcut=sxxx" })
public class SxxxTransformationService
extends AbstractPlanPro2TableTransformationService {
@Reference
Expand Down Expand Up @@ -101,4 +101,9 @@ public ColumnDescriptor fillHeaderDescriptions(
return cd;
}

@Override
public boolean enableFiltering() {
return true;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
import org.eclipse.set.feature.table.pt1.AbstractPlanPro2TableModelTransformator;
import org.eclipse.set.model.planpro.Ansteuerung_Element.Aussenelementansteuerung;
import org.eclipse.set.model.planpro.Ansteuerung_Element.ESTW_Zentraleinheit;
import org.eclipse.set.model.planpro.BasisTypen.BasisAttribut_AttributeGroup;
import org.eclipse.set.model.planpro.BasisTypen.ID_Bearbeitungsvermerk_TypeClass;
import org.eclipse.set.model.planpro.Basisobjekte.Bearbeitungsvermerk;
import org.eclipse.set.model.planpro.Bedienung.Bedien_Einrichtung_Oertlich;
Expand All @@ -34,6 +35,7 @@
import org.eclipse.set.ppmodel.extensions.EObjectExtensions;
import org.eclipse.set.ppmodel.extensions.UrObjectExtensions;
import org.eclipse.set.ppmodel.extensions.container.MultiContainer_AttributeGroup;
import org.eclipse.set.utils.EnumeratorExtensions;
import org.eclipse.set.utils.table.RowFactory;
import org.eclipse.set.utils.table.TMFactory;
import org.osgi.service.event.EventAdmin;
Expand All @@ -46,7 +48,6 @@
* @author truong
*/
public class SxxxTransformator extends AbstractPlanPro2TableModelTransformator {

/**
* @param cols
* the columns descriptor
Expand Down Expand Up @@ -79,6 +80,20 @@ public Table transformTableContent(
.filter(ref -> ref.getValue().equals(bv))
.map(EObject::eContainer)
.toList();

final List<EObject> sonstigeEnumReferee = referencedByList.stream()
.filter(obj -> obj instanceof final BasisAttribut_AttributeGroup basisAttribut
&& EnumeratorExtensions
.isSonstigeEnumWert(basisAttribut))
.toList();

if (sonstigeEnumReferee.size() > 0
&& referencedByList.size() == sonstigeEnumReferee.size()) {
// bearbeitungsvermerke that are only used at sonstige enum
// values shall not be displayed at all
continue;
}

if (referencedByList.isEmpty()) {
final TableRow row = rowGroup.newTableRow();
// A: Bearbeitungsvermerke inhalt
Expand All @@ -95,6 +110,11 @@ public Table transformTableContent(
if (Thread.currentThread().isInterrupted()) {
return null;
}
if (sonstigeEnumReferee.contains(referencedBy)) {
// ignore those referees that are connected to a sonstige
// enum value
continue;
}
final TableRow row = rowGroup.newTableRow();
row.setRowObject(referencedBy);

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
/**
* 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 org.eclipse.set.basis.viewgroups.ToolboxViewGroup;
import org.eclipse.set.utils.table.TableInfo.Pt1TableCategory;
import org.eclipse.set.utils.viewgroups.SetViewGroups;

/**
*
*/
public abstract class AbstractSupplementTableDesciption
extends AbstractTableDescription {

@Override
public ToolboxViewGroup getToolboxViewGroup() {
return SetViewGroups.getTable_Supplement();
}

@Override
protected String getTableIdPrefix() {
return Pt1TableCategory.SUPPLEMENT.getId();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -29,4 +29,13 @@ public abstract class PlanPro2TableTransformationService extends
* @return position of fixed columns
*/
public abstract Set<Integer> getFixedColumnsPos();

/**
* @return whether filtering shall be enabled for the table or not
*/
@SuppressWarnings("static-method")
public boolean enableFiltering() {
// by default we disable filtering
return false;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,10 @@
import org.eclipse.emf.common.util.ECollections;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.nebula.widgets.nattable.NatTable;
import org.eclipse.nebula.widgets.nattable.config.ConfigRegistry;
import org.eclipse.nebula.widgets.nattable.data.IDataProvider;
import org.eclipse.nebula.widgets.nattable.filterrow.FilterRowHeaderComposite;
import org.eclipse.nebula.widgets.nattable.filterrow.IFilterStrategy;
import org.eclipse.nebula.widgets.nattable.grid.data.DefaultColumnHeaderDataProvider;
import org.eclipse.nebula.widgets.nattable.grid.data.DefaultCornerDataProvider;
import org.eclipse.nebula.widgets.nattable.grid.data.DefaultRowHeaderDataProvider;
Expand Down Expand Up @@ -490,7 +493,7 @@ protected void createView(final Composite parent) {
// IMPROVE: The table header level should be determined automatically,
// and the corresponding header layers should be created accordingly. At
// present, only tables with 1, 2, or 4 levels are supported.
final ILayer headerLayer = anyMatch
ILayer headerLayer = anyMatch
? createGroupHeaderLayer(columnHeaderLayer,
rootColumnDescriptor)
: createHeaderLayer(columnHeaderLayer, rootColumnDescriptor);
Expand All @@ -502,6 +505,13 @@ protected void createView(final Composite parent) {
rowHeaderDataLayer, bodyLayerStack,
bodyLayerStack.getSelectionLayer());

if (tableService.enableFiltering(tableInfo)) {
final ConfigRegistry configRegistry = new ConfigRegistry();
headerLayer = new FilterRowHeaderComposite<>(
new FilterStrategy<>(bodyDataProvider), headerLayer,
columnHeaderDataLayer.getDataProvider(), configRegistry);
}

// Corner Layer stack
final DefaultCornerDataProvider cornerDataProvider = new DefaultCornerDataProvider(
columnHeaderDataProvider, rowHeaderDataProvider);
Expand Down Expand Up @@ -590,6 +600,23 @@ public void selected(final SelectionEvent e) {
updateButtons();
}

class FilterStrategy<T> implements IFilterStrategy<T> {
private final TableModelInstanceBodyDataProvider tableDataProvider;

public FilterStrategy(
final TableModelInstanceBodyDataProvider tableDataProvider) {
this.tableDataProvider = tableDataProvider;
}

@Override
public void applyFilter(
final Map<Integer, Object> filterIndexToObjectMap) {
tableDataProvider.applyFilter(filterIndexToObjectMap);
natTable.refresh();
}

}

private IConfigLabelAccumulator addTableCellLabelConfig() {
return (final LabelStack configLabels, final int columnPosition,
final int rowPosition) -> {
Expand Down Expand Up @@ -832,7 +859,9 @@ void updateModel(final MPart part) {

tableInstances.clear();
tableInstances.addAll(TableExtensions.getTableRows(table));

if (bodyDataProvider != null) {
bodyDataProvider.refresh();
}
}

private void addMenuItems() {
Expand Down Expand Up @@ -938,6 +967,9 @@ private void subcribeTriggerResortEvent() {
tableInstances.clear();
tableInstances.addAll(
TableExtensions.getTableRows(table));
if (bodyDataProvider != null) {
bodyDataProvider.refresh();
}
natTable.refresh();
}
}));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -199,8 +199,9 @@ public void handleEvent(final Event event) {
.getCacheService()
.getCache(schnitstelle,
ToolboxConstants.CacheId.DIRECTED_EDGE_TO_SUBPATH));
if (event.getTopic().equals(Events.MODEL_CHANGED)) {
tableService.cleanWorkNotesProTable();
if (event.getTopic().equals(Events.MODEL_CHANGED)
&& tableService != null) {
tableService.cleanFootnotesProTable();
}
}

Expand Down
Loading
Loading