Данные для диаграммы Ганта должны быть иерархические. т.е. есть основной итем, так называемая категория, который хранит коллекцию сегментов. Это хорошо видно на примере из CUBA Sampler, в котором сущность TaskSpan имеет коллекцию сущностей Segment. Если Вы хотите Описать подобное, используя MapDataItem, то одно из полей главного MapDataItem должно быть коллекцией вложенных MapDataItem.
Вот пример подобного описания:
chart-demo.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<window xmlns="http://schemas.haulmont.com/cuba/window.xsd"
caption="msg://caption"
class="com.company.demo.web.ui.chart.ChartDemo"
messagesPack="com.company.demo.web.ui.chart"
xmlns:chart="http://schemas.haulmont.com/charts/charts.xsd">
<dialogMode height="600"
width="800"/>
<layout>
<chart:ganttChart id="ganttChart"
additionalSegmentFields="task"
balloonDateFormat="JJ:NN"
brightnessStep="7"
categoryField="category"
colorField="color"
columnWidth="0.5"
endDateField="end"
height="100%"
marginRight="70"
period="DAYS"
rotate="true"
segmentsField="segments"
startDate="2016-01-01"
startDateField="start"
theme="LIGHT"
width="100%">
<chart:graph balloonText="<strong>[[task]]</strong>: [[open]] - [[value]]"
fillAlphas="1"
lineAlpha="1"
lineColor="WHITE"/>
<chart:valueAxis type="DATE"/>
<chart:valueScrollbar autoGridCount="true"
color="BLACK"/>
<chart:chartCursor cursorAlpha="0"
cursorColor="#55bb76"
fullWidth="true"
valueLineAlpha="0.5"
valueBalloonsEnabled="false"
valueLineBalloonEnabled="true"
valueLineEnabled="true"
valueZoomable="true"
zoomable="false"/>
<chart:export/>
</chart:ganttChart>
</layout>
</window>
ChartDemo.java
public class ChartDemo extends AbstractWindow {
@Inject
private Chart ganttChart;
@Override
public void init(Map<String, Object> params) {
ListDataProvider dataProvider = new ListDataProvider();
List<MapDataItem> segments = new ArrayList<>();
segments.add(new MapDataItem(ParamsMap.of("start", "2016-01-01",
"end", "2016-01-14", "task", "Gathering requirements", "color", "#b9783f")));
segments.add(new MapDataItem(ParamsMap.of("start", "2016-01-16",
"end", "2016-01-27", "task", "Producing specifications")));
segments.add(new MapDataItem(ParamsMap.of("start", "2016-02-05",
"end", "2016-04-18", "task", "Development")));
segments.add(new MapDataItem(ParamsMap.of("start", "2016-04-18",
"end", "2016-04-30", "task", "Testing and QA")));
dataProvider.addItem(new MapDataItem(ParamsMap.of("category", "Module #1", "segments", segments)));
segments = new ArrayList<>();
segments.add(new MapDataItem(ParamsMap.of("start", "2016-01-01",
"end", "2016-01-10", "task", "Gathering requirements", "color", "#cc4748")));
segments.add(new MapDataItem(ParamsMap.of("start", "2016-01-12",
"end", "2016-01-15", "task", "Producing specifications")));
segments.add(new MapDataItem(ParamsMap.of("start", "2016-01-16",
"end", "2016-02-05", "task", "Development")));
segments.add(new MapDataItem(ParamsMap.of("start", "2016-02-10",
"end", "2016-02-18", "task", "Testing and QA")));
dataProvider.addItem(new MapDataItem(ParamsMap.of("category", "Module #2", "segments", segments)));
ganttChart.getConfiguration().setDataProvider(dataProvider);
}
}
Также Вы можете скачать этот пример с github.
С уважением,
Глеб