bug6067: fixed CSV export for data mining results

This commit is contained in:
Axel Uhl
2024-11-08 16:24:13 +01:00
parent cf5af6cb5a
commit e5e86e0a34
3 changed files with 30 additions and 26 deletions
@@ -1,5 +1,8 @@
package com.sap.sse.datamining.ui.client;
import java.util.ArrayList;
import java.util.List;
import org.moxieapps.gwt.highcharts.client.Chart;
import org.moxieapps.gwt.highcharts.client.Point;
import org.moxieapps.gwt.highcharts.client.Series;
@@ -38,21 +41,36 @@ public class ChartToCsvExporter {
private static String createCsvExportContentForStatisticsCurve(Chart chartToExport) {
if (chartToExport != null && chartToExport.getSeries().length > 0) {
StringBuilder csvStr = new StringBuilder("Series name");
for (Point point : chartToExport.getSeries()[0].getPoints()) {
String name = point.getName();
csvStr.append(';');
if (name != null && !name.isEmpty()) {
csvStr.append(name);
} else {
csvStr.append(point.getX());
final StringBuilder csvStr = new StringBuilder("Series name");
{
final List<String> columnNames = new ArrayList<>();
// collect column names across all series; some may not have points for all columns
for (final Series series : chartToExport.getSeries()) {
for (Point point : series.getPoints()) {
final String pointName = point.getName();
final String columnName = pointName != null && !pointName.isEmpty() ? pointName : point.getX().toString();
while (columnNames.size() <= point.getX().intValue()) {
columnNames.add(columnNames.size(), null);
}
columnNames.set(point.getX().intValue(), columnName);
}
}
for (final String columnName : columnNames) {
csvStr.append(';');
if (columnName != null && !columnName.isEmpty()) {
csvStr.append(columnName);
}
}
}
csvStr.append("\r\n");
for (Series series : chartToExport.getSeries()) {
csvStr.append(series.getName());
int lastXIndex = -1;
for (Point point : series.getPoints()) {
csvStr.append(';');
while (lastXIndex < point.getX().intValue()) {
csvStr.append(';');
lastXIndex++;
}
csvStr.append(NumberFormat.getDecimalFormat().format(point.getY()));
}
csvStr.append("\r\n");
@@ -1,11 +1,8 @@
package com.sap.sse.datamining.ui.client.presentation;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.safehtml.shared.SafeHtml;
import com.google.gwt.safehtml.shared.SafeHtmlUtils;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.DeckLayoutPanel;
import com.google.gwt.user.client.ui.DockLayoutPanel;
import com.google.gwt.user.client.ui.HTML;
@@ -49,17 +46,6 @@ public abstract class AbstractResultsPresenter<SettingsType extends Settings>
controlsPanel.setSpacing(5);
controlsPanel.setVerticalAlignment(HasVerticalAlignment.ALIGN_MIDDLE);
mainPanel.addNorth(controlsPanel, 40);
Button exportButton = new Button("Export");
exportButton.setEnabled(false);
exportButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
// TODO Do the magic
// Push the current result to the server
// Call a servlet to download the previously pushed result as json file
}
});
// addControl(exportButton);
presentationPanel = new DeckLayoutPanel();
mainPanel.add(presentationPanel);
errorLabel = new HTML();
@@ -226,9 +226,9 @@ public class ResultsChart extends AbstractNumericResultsPresenter<Settings> {
showResultData();
});
addControl(showDataLabelsPanel);
StringMessages stringMessages = getDataMiningStringMessages();
ChartToCsvExporter csvExporter = new ChartToCsvExporter(stringMessages.csvCopiedToClipboard());
Button exportButton = new Button(stringMessages.csvExport());
final StringMessages stringMessages = getDataMiningStringMessages();
final ChartToCsvExporter csvExporter = new ChartToCsvExporter(stringMessages.csvCopiedToClipboard());
final Button exportButton = new Button(stringMessages.csvExport());
exportButton.addClickHandler(e -> csvExporter.exportChartAsCsvToClipboard(chart));
addControl(exportButton);
seriesMappedByGroupKey = new HashMap<>();