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 @@ -96,6 +96,7 @@
import org.eclipse.set.services.export.ExportService;
import org.eclipse.set.services.export.TableCompileService;
import org.eclipse.set.services.table.TableService;
import org.eclipse.set.services.table.TableService.TableRendereUtil;
import org.eclipse.set.utils.BasePart;
import org.eclipse.set.utils.RefreshAction;
import org.eclipse.set.utils.SelectableAction;
Expand Down Expand Up @@ -315,7 +316,7 @@ public void accept(final SelectedControlAreaChangedEvent t) {
.equalsIgnoreCase(Events.COMPARE_MODEL_LOADED)) {
return;
}
updateModel(getToolboxPart());
updateModel(getToolboxPart(), transformToTableModel());

};
getBroker().subscribe(Events.COMPARE_MODEL_LOADED,
Expand Down Expand Up @@ -362,15 +363,19 @@ private Table transformToTableModel() {
}

private void updateTableView(final List<Pt1TableCategory> tableCategories) {
tableService.updateTable(this, tableCategories, () -> {
updateModel(getToolboxPart());
natTable.doCommand(new RowHeightResetCommand());
natTable.refresh();
updateButtons();

// Update footnotes
updateFootnotes();
}, tableInstances::clear);
tableService.updateTable(this, tableCategories, new TableRendereUtil(
() -> transformToTableModel(), transformedTable -> {
if (transformedTable == null) {
return;
}
updateModel(getToolboxPart(), transformedTable);
natTable.doCommand(new RowHeightResetCommand());
natTable.refresh();
updateButtons();

// Update footnotes
updateFootnotes();
}));
}

private void updateFootnotes() {
Expand Down Expand Up @@ -413,16 +418,21 @@ protected void createView(final Composite parent) {
.stream()
.map(Pair::getSecond)
.collect(Collectors.toSet());

tableService.updateTable(this, Collections.emptyList(),
() -> updateModel(getToolboxPart()), tableInstances::clear);
subcribeTriggerResortEvent();
new TableRendereUtil(this::transformToTableModel,
transformedTable -> {
if (transformedTable == null) {
return;
}
updateModel(getToolboxPart(), transformedTable);
}));

// if the table was not created (possibly the creation was canceled by
// the user), we stop here with creating the view
if (table == null) {
return;
}

subcribeTriggerResortEvent();
final ColumnDescriptor rootColumnDescriptor = table
.getColumndescriptors()
.get(0);
Expand Down Expand Up @@ -803,18 +813,16 @@ void updateButtons() {
getBanderole().setEnableExport(!getModelSession().isDirty());
}

void updateModel(final MPart part) {
void updateModel(final MPart part, final Table transformedTable) {
// update banderole
getBanderole().setTableType(tableType);

table = transformToTableModel();
table = transformedTable;
// flag creation
MApplicationElementExtensions.setViewState(part,
ToolboxViewState.CREATED);

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

}

private void addMenuItems() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
import java.util.Queue;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Consumer;
import java.util.stream.Collectors;
import java.util.stream.StreamSupport;

Expand Down Expand Up @@ -129,7 +130,7 @@ public final class TableServiceImpl implements TableService {
private final Map<TableInfo, PlanPro2TableTransformationService> modelServiceMap = new ConcurrentHashMap<>();

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

private static final String EMPTY = "empty"; //$NON-NLS-1$
Expand Down Expand Up @@ -230,7 +231,8 @@ public TableInfo getTableInfo(final BasePart part) {

@Override
public TableInfo getTableInfo(final String shortcut) {
return getAvailableTables().stream()
return modelServiceMap.keySet()
.stream()
.filter(table -> table.shortcut().equalsIgnoreCase(shortcut))
.findFirst()
.orElse(null);
Expand Down Expand Up @@ -503,13 +505,23 @@ public Table transformToTable(final TableInfo tableInfo,
for (final Pair<String, String> cacheKey : cacheKeys) {
final String areaId = cacheKey.getKey();
final String areaCacheKey = cacheKey.getValue();
Table table = (Table) cache.getIfPresent(areaCacheKey);
final Object cachedObj = cache.get(areaCacheKey, () -> {
final Object transformed = loadTransform(tableInfo, tableType,
modelSession, areaId);
if (transformed != null
&& transformed instanceof final Table transformedTable) {
saveTableToCache(transformedTable, modelSession,
containerId, tableInfo, tableType, areaCacheKey);
return transformedTable;
}

return MissingSupplier.MISSING_VALUE;
});
final Table table = cachedObj != null
&& Table.class.isInstance(cachedObj) ? (Table) cachedObj
: null;
if (table == null) {
table = (Table) loadTransform(tableInfo, tableType,
modelSession, areaId);
saveTableToCache(table, modelSession, containerId, tableInfo,
tableType, areaCacheKey);
return null;
}
if (resultTable == null) {
resultTable = EcoreUtil.copy(table);
Expand Down Expand Up @@ -576,7 +588,7 @@ private void saveTableToCache(final Table table,
@Override
public void updateTable(final BasePart tablePart,
final List<Pt1TableCategory> tableCategories,
final Runnable updateTableHandler, final Runnable clearInstance) {
final TableRendereUtil rendereUtil) {
// Find which table categories should be update
final List<String> tablePrefixes = List
.of(ToolboxConstants.ESTW_TABLE_PART_ID_PREFIX,
Expand All @@ -601,7 +613,7 @@ public void updateTable(final BasePart tablePart,
.map(MPart.class::cast)
.toList();

transformTableThreads.add(new Pair<>(tablePart, updateTableHandler));
transformTableThreads.add(new Pair<>(tablePart, rendereUtil));
final List<MPart> parts = transformTableThreads.stream()
.map(pair -> pair.getKey().getToolboxPart())
.toList();
Expand All @@ -623,12 +635,6 @@ public void updateTable(final BasePart tablePart,
logger.error(e.toString(), e);
throw new RuntimeException(e);
} catch (final InterruptedException e) {
clearInstance.run();
transformTableThreads
.forEach(pair -> MApplicationElementExtensions
.setViewState(pair.getKey().getToolboxPart(),
ToolboxViewState.CANCELED));

Thread.currentThread().interrupt();
}
}
Expand All @@ -647,18 +653,32 @@ private IRunnableWithProgress createProgressMonitor() {
Threads.stopCurrentOnCancel(monitor);

// Wait for table transform
for (Pair<BasePart, Runnable> transformThread; (transformThread = transformTableThreads
for (Pair<BasePart, TableRendereUtil> transformThread; (transformThread = transformTableThreads
.poll()) != null;) {
final TableInfo tableInfo = getTableInfo(
transformThread.getKey());
final TableNameInfo tableNameInfo = getTableNameInfo(tableInfo);
final BasePart tablePart = transformThread.getKey();
final Consumer<Table> updateTableUIAction = transformThread
.getValue()
.updateTableUIAction();
monitor.subTask(tableNameInfo.getFullDisplayName());
Display.getDefault().syncExec(transformThread.getValue());
final Table transformedTable = transformThread.getValue()
.transfromTableAction()
.get();
Display.getDefault()
.asyncExec(() -> updateTableUIAction
.accept(transformedTable));
// Display.getDefault().syncExec(transformThread.getValue());
monitor.worked(1);
if (monitor.isCanceled()) {
MApplicationElementExtensions.setViewState(
tablePart.getToolboxPart(),
ToolboxViewState.CANCELED);
Thread.currentThread().interrupt();
}
}
if (monitor.isCanceled()) {
throw new InterruptedException();
}

// stop progress
monitor.done();
logger.info("ProgressMonitorDialog done."); //$NON-NLS-1$
Expand All @@ -678,7 +698,9 @@ public Map<TableInfo, Table> transformTables(final IProgressMonitor monitor,
try {
final TableNameInfo nameInfo = getTableNameInfo(tableInfo);
monitor.subTask(nameInfo.getFullDisplayName());
final Table table = createDiffTable(tableInfo, tableType,
final Table table = transformToTable(tableInfo, tableType,
sessionService.getLoadedSession(
ToolboxFileRole.SESSION),
controlAreaIds);
while (!TableService.isTransformComplete(tableInfo, null)) {
Thread.sleep(2000);
Expand All @@ -690,7 +712,6 @@ public Map<TableInfo, Table> transformTables(final IProgressMonitor monitor,
}

}
monitor.done();
return result;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,9 @@
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.function.Consumer;
import java.util.function.Predicate;
import java.util.function.Supplier;

import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.set.basis.IModelSession;
Expand All @@ -34,6 +36,20 @@
* @author rumpf
*/
public interface TableService {

/**
* Helper class for transform and reload table
*
* @param transfromTableAction
* create table from PlanPro model data
* @param updateTableUIAction
* update table ui
*/
public static record TableRendereUtil(Supplier<Table> transfromTableAction,
Consumer<Table> updateTableUIAction) {

}

/**
* Extract the shortcut from an configuration element.
*
Expand Down Expand Up @@ -148,13 +164,11 @@ Map<TableInfo, Table> transformTables(IProgressMonitor monitor,
* @param tableCategories
* the list of table category. when the list is empty, then
* update all table
* @param updateTableHandler
* the update table handler
* @param clearInstance
* the clear table instance handler
* @param rendereUtil
* the {@link TableRendereUtil}
*/
void updateTable(BasePart part, List<Pt1TableCategory> tableCategories,
Runnable updateTableHandler, Runnable clearInstance);
TableRendereUtil rendereUtil);

/**
* Get fixed columns
Expand Down
Loading