@Override public DataSet getDataSet(String id) { for (DataSet dataSet : dataSets) { if (id.equals(dataSet.getId())) { return dataSet; } } return null; }
protected List<DataSet> loadDataSets(Element dataSetsElement) { List<DataSet> dataSets = new ArrayList<>(); for (Object dataSetItem : dataSetsElement.elements("dataSet")) { Element dataSetElement = (Element) dataSetItem; DataSet dataSet = new DataSet(); loadDataSet(dataSet, dataSetElement); dataSets.add(dataSet); } return dataSets; }
@Override public StockChartGroup setDataSets(List<DataSet> dataSets) { if (CollectionUtils.isNotEmpty(this.dataSets)) { for (DataSet dataSet : this.dataSets) { dataSet.removeDataProviderChangeListener(this); } } if (CollectionUtils.isNotEmpty(dataSets)) { for (DataSet dataSet : dataSets) { dataSet.addDataProviderChangeListener(this); } } this.dataSets = dataSets; fireDataSetsChanged(dataSets, Operation.SET); return this; }
/** * Returns datasource of dataset. * * @param id dataset id. * @return datasource of dataset * @deprecated use {@link DataSet#getDataProvider()} instead. */ @Deprecated default CollectionDatasource getDataSetDatasource(String id) { DataSet dataSet = getDataSet(id); if (dataSet != null) { DataProvider dataProvider = dataSet.getDataProvider(); if (dataProvider != null) { return dataProvider instanceof EntityDataProvider ? ((EntityDataProvider) dataProvider).getDatasource() : null; } } return null; }
@Override public List<String> getWiredFields() { List<String> wiredFields = new ArrayList<>(); if (CollectionUtils.isNotEmpty(getAdditionalFields())) { wiredFields.addAll(getAdditionalFields()); } if (CollectionUtils.isNotEmpty(panels)) { for (StockPanel panel : panels) { wiredFields.addAll(panel.getWiredFields()); } } if (CollectionUtils.isNotEmpty(dataSets)) { for (DataSet dataSet : dataSets) { if (dataSet.getDataProvider() != null) { wiredFields.addAll(dataSet.getWiredFields()); } } } return wiredFields; }
/** * Sets data provider to the data set. An array of data points to be used as data. Important, the data points * needs to come pre-ordered in ascending order. Data with incorrect order might result in visual and functional * glitches on the chart. * * @param dataProvider data provider */ public DataSet setDataProvider(DataProvider dataProvider) { this.dataProvider = dataProvider; fireDataProviderChanged(); return this; }
@Override public StockChartGroup addDataSets(DataSet... dataSets) { if (dataSets != null) { if (this.dataSets == null) { this.dataSets = new ArrayList<>(); } List<DataSet> dataSetList = Arrays.asList(dataSets); for (DataSet dataSet : dataSetList) { dataSet.addDataProviderChangeListener(this); } this.dataSets.addAll(Arrays.asList(dataSets)); fireDataSetsChanged(dataSetList, Operation.ADD); } return this; }
protected void loadFieldMappings(DataSet dataSet, Element dataSetElement) { Element fieldMappingsElement = dataSetElement.element("fieldMappings"); if (fieldMappingsElement != null) { for (Object fieldMappingItem : fieldMappingsElement.elements("fieldMapping")) { Element fieldMappingElement = (Element) fieldMappingItem; FieldMapping fieldMapping = new FieldMapping(); loadFieldMapping(fieldMapping, fieldMappingElement); dataSet.addFieldMappings(fieldMapping); } } }
protected void loadStockEvents(DataSet dataSet, Element dataSetElement) { Element stockEventsElement = dataSetElement.element("stockEvents"); if (stockEventsElement != null) { for (Object stockEventItem : stockEventsElement.elements("stockEvent")) { Element stockEventElement = (Element) stockEventItem; StockEvent stockEvent = new StockEvent(); loadStockEvent(stockEvent, stockEventElement); dataSet.addStockEvents(stockEvent); } } }
@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); }
@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 String serializeChanges(StockChartGroup chart, Map<DataSet, ChartIncrementalChanges> changedItems) { JsonObject jsonChangedDataSetElement = new JsonObject(); ChartJsonSerializationContext context = createChartJsonSerializationContext(chart); for (Map.Entry<DataSet, ChartIncrementalChanges> changesEntry : changedItems.entrySet()) { JsonObject jsonChangedItemsElement = new JsonObject(); ChartIncrementalChanges changes = changesEntry.getValue(); if (changes.getAddedItems() != null) { jsonChangedItemsElement.add("add", itemsSerializer.serialize(changes.getAddedItems(), context)); } if (changes.getRemovedItems() != null) { jsonChangedItemsElement.add("remove", itemsSerializer.serialize(changes.getRemovedItems(), context)); } if (changes.getUpdatedItems() != null) { jsonChangedItemsElement.add("update", itemsSerializer.serialize(changes.getUpdatedItems(), context)); } String dataSetId = changesEntry.getKey().getId(); if (dataSetId != null) { jsonChangedDataSetElement.add(dataSetId, jsonChangedItemsElement); } else { logger.warn("DataSet of StockChart does not have id. Incremental updated will not be performed."); } } return chartGson.toJson(jsonChangedDataSetElement); }
@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()); } }
protected Entity getEventItem(String itemIdString) { if (StringUtils.isNotEmpty(itemIdString)) { for (DataSet dataSet : component.getChart().getDataSets()) { CollectionDatasource ds = getDataSetDatasource(dataSet.getId()); if (ds != null) { //noinspection unchecked Entity item = ds.getItem(getItemId(ds, itemIdString)); if (item != null) { return item; } } } } return null; }
if (dataSet.getDataProvider() != null) { dataSet.getDataProvider().addChangeListener(new ProxyChangeForwarder(this, dataSet));