Skip to content
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ TableOverviewPart_EmptyListText=<keine>
TableOverviewPart_OpenAllWithErrors=Alle öffnen
TableOverviewPart_CalculateMissingTask=Überprüfe Tabellen...
TableOverviewPart_DebugModeHint=Debug-Mode: Tabellen können immer wieder neu überprüft werden
TableOverviewPart_NonTransformableTable=Nicht generierbar:

TableErrorTableColumns_Index=Lfd. Nr.
TableErrorTableColumns_LeadingObject=Führendes Objekt
Expand All @@ -33,4 +34,7 @@ TableExportPart_ExportInventoryDescription=Ausgabe des Zielzustands der Planung.
TableExportPart_ExportPlanningDescription=Ausgabe des rot/gelb Vergleichs (pdf) und des Zielzustands der Planung (xlsx).
TableExportPart_ExportStateDescription=Ausgabe des Einzelzustands der PlanPro-Datei.
TableExportPart_FilterEmptyButton=leere Tabellen abwählen
TableExportPart_ExportButton=Export des Dokumentensatz durchführen
TableExportPart_ExportButton=Export des Dokumentensatz durchführen

TableTransform_Error=Fehler bei Tabellengenerierung
TableTransform_ComparePlanError_Msg=Es gibt Fehler bei der Tabellengenerierung der Vergleichsplanung. Es wird nur die Tabelle der Originalplanung angezeigt.
Original file line number Diff line number Diff line change
Expand Up @@ -889,7 +889,8 @@ private String getRowReferenceObjectGuid(final int rowPosition) {
private void subcribeTriggerResortEvent() {
final Comparator<RowGroup> comparator = tableService
.getRowGroupComparator(tableInfo);
if (comparator instanceof final TableRowGroupComparator rowGroupComparator) {
if (table != null
&& comparator instanceof final TableRowGroupComparator rowGroupComparator) {
// This is new instance of Comparator, therefore need call sort here
// to determine the waiting on another service criterion
ECollections.sort(table.getTablecontent().getRowgroups(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -145,8 +145,8 @@ protected void updateTreeElements(final Set<String> areaIds) {
getDialogService().showProgress(getToolboxShell(), monitor -> {
logger.debug("Start update tree elements"); //$NON-NLS-1$
final Map<TableInfo, Table> pt1Tables = tableService
.transformTables(monitor, getModelSession(),
avaibleTables, tableType, areaIds);
.transformTables(monitor, avaibleTables, tableType,
areaIds);
Display.getDefault().asyncExec(() -> {
pt1Tables.forEach((tableInfo, table) -> {
CheckBoxTreeElement element = treeDataModel
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,8 +50,8 @@
EventHandler.class }, property = {
"service.context.key:String=org.eclipse.set.services.table.TableService",
EventConstants.EVENT_TOPIC + "=" + Events.MODEL_CHANGED,
EventConstants.EVENT_TOPIC + "="
+ Events.COMPARE_MODEL_LOADED })
EventConstants.EVENT_TOPIC + "=" + Events.COMPARE_MODEL_LOADED,
EventConstants.EVENT_TOPIC + "=" + Events.CLOSE_SESSION })
public class TableServiceContextFunction extends ContextFunction
implements EventHandler {

Expand Down Expand Up @@ -208,6 +208,7 @@ public void handleEvent(final Event event) {
.getLoadedSession(closeSession);
EdgeToPointsCacheProxy.clearCacheInstance(
loadedSession.getPlanProSchnittstelle());
tableService.clearInstance();
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,15 @@
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Queue;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.stream.Collectors;
import java.util.stream.StreamSupport;

import org.eclipse.core.runtime.IProgressMonitor;
Expand Down Expand Up @@ -128,6 +130,7 @@ public final class TableServiceImpl implements TableService {

private final Map<TableCompareType, TableDiffService> diffServiceMap = new ConcurrentHashMap<>();
private static final Queue<Pair<BasePart, Runnable>> transformTableThreads = new LinkedList<>();
private static final Set<TableInfo> nonTransformableTables = new HashSet<>();

private static final String EMPTY = "empty"; //$NON-NLS-1$
private static final String IGNORED_PLANNING_AREA_CACHE_KEY = "ignoredPlanningArea";//$NON-NLS-1$
Expand Down Expand Up @@ -251,7 +254,11 @@ public TableNameInfo getTableNameInfo(final TableInfo tableInfo) {

@Override
public Collection<TableInfo> getAvailableTables() {
return new ArrayList<>(modelServiceMap.keySet());
return modelServiceMap.keySet()
.stream()
.filter(tableInfo -> !nonTransformableTables
.contains(tableInfo))
.toList();
}

@Override
Expand Down Expand Up @@ -661,28 +668,27 @@ private IRunnableWithProgress createProgressMonitor() {

@Override
public Map<TableInfo, Table> transformTables(final IProgressMonitor monitor,
final IModelSession modelSession,
final Set<TableInfo> tablesToTransfrom, final TableType tableType,
final Set<String> controlAreaIds) {
final Map<TableInfo, Table> result = new HashMap<>();
monitor.beginTask(messages.TableOverviewPart_CalculateMissingTask,
tablesToTransfrom.size());

for (final TableInfo tableInfo : tablesToTransfrom) {
final TableNameInfo nameInfo = getTableNameInfo(tableInfo);
monitor.subTask(nameInfo.getFullDisplayName());
final Table table = transformToTable(tableInfo, tableType,
modelSession, controlAreaIds);
while (!TableService.isTransformComplete(tableInfo, null)) {
try {
try {
final TableNameInfo nameInfo = getTableNameInfo(tableInfo);
monitor.subTask(nameInfo.getFullDisplayName());
final Table table = createDiffTable(tableInfo, tableType,
controlAreaIds);
while (!TableService.isTransformComplete(tableInfo, null)) {
Thread.sleep(2000);
} catch (final InterruptedException e) {
Thread.interrupted();
}
result.put(tableInfo, table);
monitor.worked(1);
} catch (final Exception e) {
Thread.interrupted();
}

result.put(tableInfo, table);
monitor.worked(1);
}
monitor.done();
return result;
Expand All @@ -691,31 +697,47 @@ public Map<TableInfo, Table> transformTables(final IProgressMonitor monitor,
@Override
public Table createDiffTable(final TableInfo tableInfo,
final TableType tableType, final Set<String> controlAreaIds) {
final Table mainSessionTable = transformToTable(tableInfo, tableType,
sessionService.getLoadedSession(ToolboxFileRole.SESSION),
controlAreaIds);
final IModelSession compareSession = sessionService
.getLoadedSession(ToolboxFileRole.COMPARE_PLANNING);
if (compareSession == null) {
return mainSessionTable;
}

final Table compareSessionTable = transformToTable(tableInfo, tableType,
compareSession, controlAreaIds);

// Waiting table compare transform, then create compare table between to
// plan
while (!TableService.isTransformComplete(tableInfo, null)) {
try {
Table mainSessionTable = null;
try {
mainSessionTable = transformToTable(tableInfo, tableType,
sessionService.getLoadedSession(ToolboxFileRole.SESSION),
controlAreaIds);
if (sessionService.getLoadedSession(
ToolboxFileRole.COMPARE_PLANNING) == null) {
return mainSessionTable;
}
// Waiting table compare transform, then create compare table
// between to plan
while (!TableService.isTransformComplete(tableInfo, null)) {
Thread.sleep(2000);
} catch (final InterruptedException e) {
Thread.interrupted();
}
} catch (final Exception e) {
logger.error("Transformation Error: {} : {}", //$NON-NLS-1$
tableInfo.shortcut(), e.getMessage());
nonTransformableTables.add(tableInfo);
broker.post(Events.TABLEERROR_CHANGED, null);
throw new RuntimeException(e);
}
final Table compareTable = diffServiceMap.get(TableCompareType.PROJECT)
.createDiffTable(mainSessionTable, compareSessionTable);
sortTable(compareTable, TableType.DIFF, tableInfo);
return compareTable;

// When it give Exception by transform second plan, then return the
// first plan table
try {
final IModelSession compareSession = sessionService
.getLoadedSession(ToolboxFileRole.COMPARE_PLANNING);
final Table compareSessionTable = transformToTable(tableInfo,
tableType, compareSession, controlAreaIds);
final Table compareTable = diffServiceMap
.get(TableCompareType.PROJECT)
.createDiffTable(mainSessionTable, compareSessionTable);
sortTable(compareTable, TableType.DIFF, tableInfo);
return compareTable;
} catch (final Exception e) {
dialogService.error(Display.getCurrent().getActiveShell(),
messages.TableTransform_Error,
messages.TableTransform_ComparePlanError_Msg, e);
return mainSessionTable;
}

}

@Override
Expand All @@ -736,4 +758,18 @@ public TableRowGroupComparator getRowGroupComparator(
}
return null;
}

@Override
public Set<TableInfo> getNonTransformableTables(
final Pt1TableCategory tableCategory) {
return nonTransformableTables.stream()
.filter(info -> info.category().equals(tableCategory))
.collect(Collectors.toSet());
}

@SuppressWarnings("static-method")
void clearInstance() {
transformTableThreads.clear();
nonTransformableTables.clear();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -165,4 +165,20 @@ public class Messages {
*/
public String TableExportPart_ExportPlanningRecordsDescriptionService_ViewName;

/**
* Nicht generierbar:
*/
public String TableOverviewPart_NonTransformableTable;

/**
* Fehler bei Tabellengenerierung
*/
public String TableTransform_Error;

/**
* Es gibt Fehler bei der Tabellengenerierung der Vergleichsplanung. Es wird
* nur die Tabelle der Originalplanung angezeigt.
*/
public String TableTransform_ComparePlanError_Msg;

}
Loading
Loading