Verbesserung
Wichtig
Detail
Fehlerbehebung
Detail
Problem
Wenn im Terminplan Meilensteine innerhalb eines Vorgangs so dicht beieinander liegen, dass sich die Labels überschneiden, soll die Option "autom. Kollisionsvermeidung" zusätzliche Zeilen einführen, um die Meilensteine zu verteilen. Diese Option funktioniert nicht: Der Terminplan kann nicht dargestellt werden, es erscheint eine Fehlermeldung und im Log wird eine NPEx protokolliert.
Ursache
Die zusätzlichen (synthetischen Zeilen) haben keinen Namen. Das führt zu einer NPEx beim Rendern des Strukturbaumes, weil die Breite für einen Null-String nicht berechnet werden kann: com.top_logic.reporting.chart.gantt.ui.AbstractGanttChartCreator.computeStringWidth(String, FontMetrics)
---
In Prime trat dieses Problem nicht auf, weil GantRow::getName() zum Zweck einer Textkürzung überschrieben wurde und diese Textkürzung zufällig niemals null liefert sondern stattdessen einen Leerstring. Daher blieb das Problem bisher unentdeckt.
Lösung
Die neuen, synthetischen Zeilen, die im Rahmen der autom. Kollisionsvermeidung hinzugefügt werden, bekommen nun explizit einen Leerstring als Namen. Damit liefert GanttRow::getName() für diese Zeilen nicht mehr null, sondern einen leeren String.
Test
In einem Projekt Mindestens 3 dicht beieinanderliegende Meilensteine anlegen, so dass ihre Labels im Terminplan nicht konfliktfrei dargestellt werden. Dann die Option zur "Autom. Kollisionsvermeidung aktivieren". Die Grafik wird angezeigt. Es erscheint keine Fehlermeldung. Die Meilensteine werden nun über mehrere Zeilen innerhalb des Vorgangs verteilt.