/** * @param id id of data item * @return data item by id */ default DataItem getItem(Object id) { return getItems().stream() .filter(dataItem -> (dataItem instanceof DataItem.HasId) && Objects.equals(id, ((DataItem.HasId) dataItem).getId())) .findFirst().orElse(null); }
/** * Adds a collection of data items to the data provider. * * @param items a collection of data items to be added */ default void addItems(Collection<? extends DataItem> items) { for (DataItem item : items) { addItem(item); } }
@Override public T addData(DataItem... dataItems) { if (dataItems != null) { if (this.dataProvider == null) { this.dataProvider = new ListDataProvider(); } this.dataProvider.addItems(Arrays.asList(dataItems)); } return (T) this; }
@Override public void setDataProvider(DataProvider dataProvider) { component.getPivotTable().setDataProvider(dataProvider); dataProvider.addChangeListener(e -> { if (!isEditable()) { repaint(); } }); }
protected DataItem getDataItemByKey(@Nullable String dataItemKey) { DataItem dataItem = null; if (dataItemKey != null) { DataProvider dataProvider = chart.getDataProvider(); if (chart.getType() == ChartType.GANTT && dataItemKey.contains(":")) { String graphItemKey = dataItemKey.substring(0, dataItemKey.indexOf(":")); String segmentItemKey = dataItemKey.substring(dataItemKey.indexOf(":") + 1, dataItemKey.length()); Object dataItemId = dataItemKeys.get(graphItemKey); if (dataProvider != null) { DataItem graphDataItem = dataProvider.getItem(dataItemId); if (graphDataItem != null) { int segmentIndex = Integer.parseInt(segmentItemKey); String segmentsField = ((GanttChart) chart).getSegmentsField(); @SuppressWarnings("unchecked") List<DataItem> segmentItems = (List<DataItem>) graphDataItem.getValue(segmentsField); dataItem = segmentItems.get(segmentIndex); } } } else { Object dataItemId = dataItemKeys.get(dataItemKey); if (dataProvider != null) { dataItem = dataProvider.getItem(dataItemId); } } } return dataItem; }
@Override public void dataItemsChanged(DataItemsChangeEvent e) { if (chart.isDirty()) { // full repaint required, don't need to send incremental updates return; } IncrementalUpdateType updateType = null; switch (e.getOperation()) { case ADD: updateType = IncrementalUpdateType.ADD; break; case REMOVE: updateType = IncrementalUpdateType.REMOVE; break; case UPDATE: updateType = IncrementalUpdateType.UPDATE; break; case REFRESH: dataSet.getDataProvider().removeChangeListener(this); chart.forgetChangedItems(); chart.drawChart(); break; } if (updateType != null && CollectionUtils.isNotEmpty(e.getItems())) { chart.addChangedItems(updateType, dataSet, e.getItems()); } }
for (DataSet dataSet : chart.getDataSets()) { if (dataSet.getDataProvider() != null) { dataSet.getDataProvider().addChangeListener(new ProxyChangeForwarder(this, dataSet));
@Nullable protected DataItem getDataItemByKey(String graphId, String itemKey) { if (itemKey != null) { Object dataItemId = dataItemKeys.get(itemKey); DataSet dataSet = getChart().getDataSet(graphId); if (dataSet != null) { DataProvider dataProvider = dataSet.getDataProvider(); if (dataProvider != null) { return dataProvider.getItem(dataItemId); } } } return null; } }
@Override public void dataItemsChanged(DataItemsChangeEvent e) { if (chart.isDirty()) { // full repaint required, don't need to send incremental updates return; } IncrementalUpdateType updateType = null; switch (e.getOperation()) { case ADD: updateType = IncrementalUpdateType.ADD; break; case REMOVE: updateType = IncrementalUpdateType.REMOVE; break; case UPDATE: updateType = IncrementalUpdateType.UPDATE; break; case REFRESH: chart.getChart().getDataProvider().removeChangeListener(this); chart.forgetChangedItems(); chart.drawChart(); break; } if (updateType != null && CollectionUtils.isNotEmpty(e.getItems())) { chart.addChangedItems(updateType, e.getItems()); } }
@Override public String serialize(AbstractChart chart) { JsonElement jsonTree = chartGson.toJsonTree(chart); DataProvider dataProvider = chart.getDataProvider(); if (dataProvider != null) { ChartJsonSerializationContext context = createChartJsonSerializationContext(chart); JsonArray dataProviderElement = itemsSerializer.serialize(dataProvider.getItems(), context); // Prevent errors on client for empty data provider if (dataProviderElement.size() == 0) { dataProviderElement.add(new JsonObject()); } jsonTree.getAsJsonObject().add("dataProvider", dataProviderElement); } return chartGson.toJson(jsonTree); }
chart.getDataProvider().addChangeListener(changeListener);
/** * Adds a data item to the data provider. * * @param dataItems a data item to add * @return a reference to this object */ public PivotTableModel addData(DataItem... dataItems) { if (dataItems != null) { if (this.dataProvider == null) { this.dataProvider = new ListDataProvider(); } this.dataProvider.addItems(Arrays.asList(dataItems)); } return this; }
@Override @Nullable public String serializeData(PivotTableModel pivotTable) { DataProvider dataProvider = pivotTable.getDataProvider(); if (dataProvider != null) { PivotJsonSerializationContext context = createPivotJsonSerializationContext(pivotTable); JsonElement dataProviderElement = itemsSerializer.serialize(dataProvider.getItems(), context); return gson.toJson(dataProviderElement); } return null; }
@Override public String serialize(StockChartGroup chart) { JsonElement jsonTree = chartGson.toJsonTree(chart); if (CollectionUtils.isNotEmpty(chart.getDataSets())) { ChartJsonSerializationContext context = createChartJsonSerializationContext(chart); JsonArray jsonDataSets = (JsonArray) jsonTree.getAsJsonObject().get("dataSets"); for (JsonElement dataSetElement : jsonDataSets) { JsonObject dataSetObject = (JsonObject) dataSetElement; String dataSetId = dataSetObject.get("id").getAsString(); DataSet dataSet = chart.getDataSet(dataSetId); if (dataSet != null && dataSet.getDataProvider() != null) { JsonArray dataProviderElement = itemsSerializer.serialize(dataSet.getDataProvider().getItems(), context); // Prevent errors on client for empty data provider if (dataProviderElement.size() == 0) { dataProviderElement.add(new JsonObject()); } dataSetObject.add("dataProvider", dataProviderElement); } } } return chartGson.toJson(jsonTree); }