Added export button for Rasmus polarsheet export functionality

This commit is contained in:
Frederik Petersen committed 2013-05-24 17:34:10 +02:00
1 parent b3331c1c27
commit 6b69dbd9d7
2 files changed
+107 -5

No files matched your search

@@ -25,6 +25,8 @@ public class PolarSheetsChartPanel extends SimplePanel implements RequiresResize
private StringMessages stringMessages;
private Chart chart;
private Map<String, Series[]> seriesMap;
private Map<Series, String> nameForSeries = new HashMap<Series, String>();
public PolarSheetsChartPanel(StringMessages stringMessages) {
this.stringMessages = stringMessages;
@@ -43,9 +45,9 @@ public class PolarSheetsChartPanel extends SimplePanel implements RequiresResize
return polarSheetChart;
}
private void newSeriesArray(String name) {
private void newSeriesArray(String name, int steppingCount) {
if (!seriesMap.containsKey(name)) {
Series[] seriesPerWindSpeed = new Series[13];
Series[] seriesPerWindSpeed = new Series[steppingCount];
seriesMap.put(name, seriesPerWindSpeed);
} else {
// TODO exception handling
@@ -56,7 +58,9 @@ public class PolarSheetsChartPanel extends SimplePanel implements RequiresResize
Series[] seriesPerWindSpeed = seriesMap.get(name);
Number[] forEachDeg = initializeDataForNewSeries();
seriesPerWindSpeed[windSpeedLevel] = chart.createSeries().setPoints(forEachDeg);
seriesPerWindSpeed[windSpeedLevel].setName(name + "-" + windSpeed);
String actualSeriesName = name + "-" + windSpeed;
seriesPerWindSpeed[windSpeedLevel].setName(actualSeriesName);
nameForSeries.put(seriesPerWindSpeed[windSpeedLevel],actualSeriesName);
chart.addSeries(seriesPerWindSpeed[windSpeedLevel]);
}
@@ -153,7 +157,7 @@ public class PolarSheetsChartPanel extends SimplePanel implements RequiresResize
return;
}
if (!seriesMap.containsKey(id)) {
newSeriesArray(id);
newSeriesArray(id, result.getStepping().length);
}
addValuesToSeries(id, result);
chart.redraw();
@@ -169,4 +173,12 @@ public class PolarSheetsChartPanel extends SimplePanel implements RequiresResize
chart.redraw();
}
public Series[] getSeriesPerWindspeedForName(String name) {
return seriesMap.get(name);
}
public String getNameForSeries(Series series) {
return nameForSeries.get(series);
}
}
@@ -5,12 +5,16 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.moxieapps.gwt.highcharts.client.Point;
import org.moxieapps.gwt.highcharts.client.Series;
import org.moxieapps.gwt.highcharts.client.events.PointMouseOverEvent;
import org.moxieapps.gwt.highcharts.client.events.PointMouseOverEventHandler;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.i18n.client.NumberFormat;
import com.google.gwt.user.client.Timer;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.FlowPanel;
@@ -58,6 +62,8 @@ public class PolarSheetsPanel extends FormPanel implements RaceSelectionChangeLi
private Map<String,String> idNameMapping;
private Map<String,String> nameIdMapping;
private ListBox nameListBox;
public PolarSheetsPanel(SailingServiceAsync sailingService, ErrorReporter errorReporter,
StringMessages stringMessages, PolarSheetsEntryPoint polarSheetsEntryPoint) {
this.polarSheetsEntryPoint = polarSheetsEntryPoint;
@@ -83,15 +89,98 @@ public class PolarSheetsPanel extends FormPanel implements RaceSelectionChangeLi
histogramPanel = new PolarSheetsHistogramPanel(stringMessages);
histogramPanel.getElement().setAttribute("align", "top");
rightPanel.add(histogramPanel);
ListBox nameListBox = new ListBox();
nameListBox = new ListBox();
rightPanel.add(nameListBox);
Button exportButton = new Button("Export");
setExportButtonListener(exportButton);
rightPanel.add(exportButton);
mainPanel.add(splitPanel);
asyncActionsExecutor = new AsyncActionsExecutor();
setEventListenersForPolarSheetChart();
}
private void setExportButtonListener(Button exportButton) {
ClickHandler handler = new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
String name = nameListBox.getItemText(nameListBox.getSelectedIndex());
if (name!=null && !name.isEmpty()) {
StringBuffer exportData = new StringBuffer();
exportData.append(name + "\n");
Series[] seriesPerWindspeed = chartPanel.getSeriesPerWindspeedForName(name);
for (Series series : seriesPerWindspeed) {
if (series == null) {
continue;
}
String nameOfSeries = chartPanel.getNameForSeries(series);
String[] split = nameOfSeries.split("-");
int windSpeed = Integer.parseInt(split[2]);
Point[] points = series.getPoints();
if (windSpeed == 4) {
int[] degs = {0,50,60,110,130,180};
exportData.append("4 " + createStringForDegrees(points, degs) + "\n");
} else if (windSpeed == 6) {
int[] degs = {0,47,60,110,135,180};
exportData.append("6 " + createStringForDegrees(points, degs) + "\n");
} else if (windSpeed == 8) {
int[] degs = {0,43,60,110,135,180};
exportData.append("8 " + createStringForDegrees(points, degs) + "\n");
} else if (windSpeed == 10) {
int[] degs = {0,41,60,110,140,180};
exportData.append("10 " + createStringForDegrees(points, degs) + "\n");
} else if (windSpeed == 12) {
int[] degs = {0,40,60,110,145,180};
exportData.append("12 " + createStringForDegrees(points, degs) + "\n");
} else if (windSpeed == 14) {
int[] degs = {0,39,60,110,155,180};
exportData.append("14 " + createStringForDegrees(points, degs) + "\n");
} else if (windSpeed == 16) {
int[] degs = {0,38,60,110,155,180};
exportData.append("16 " + createStringForDegrees(points, degs) + "\n");
} else if (windSpeed == 20) {
int[] degs = {0,38,60,110,160,180};
exportData.append("20 " + createStringForDegrees(points, degs) + "\n");
} else if (windSpeed == 25) {
int[] degs = {0,39,60,110,168,180};
exportData.append("25 " + createStringForDegrees(points, degs) + "\n");
} else if (windSpeed == 30) {
int[] degs = {0,41,60,110,157,180};
exportData.append("30 " + createStringForDegrees(points, degs) + "\n");
}
}
Window.alert(exportData.toString());
}
}
};
exportButton.addClickHandler(handler);
}
private String createStringForDegrees(Point[] points, int[] degrees) {
StringBuffer buffer = new StringBuffer();
for (int i = 0; i < degrees.length; i++) {
int deg = degrees[i];
double average;
if (deg > 0 && deg < 180) {
double windRight = points[deg].getY().doubleValue();
double windLeft = points[360 - deg].getY().doubleValue();
average = (windRight + windLeft) / 2;
} else {
average = points[deg].getY().doubleValue();
}
NumberFormat fmt = NumberFormat.getDecimalFormat();
fmt.overrideFractionDigits(2);
buffer.append(deg + " " + fmt.format(average) + " ");
}
return buffer.toString();
}
private void setEventListenersForPolarSheetChart() {
PointMouseOverEventHandler pointMouseOverHandler = new PointMouseOverEventHandler() {
@@ -206,6 +295,7 @@ public class PolarSheetsPanel extends FormPanel implements RaceSelectionChangeLi
index++;
name = boatClassName + "-" + index;
} while (nameIdMapping.containsKey(name));
nameListBox.addItem(name);
idNameMapping.put(result.getId(), name);
nameIdMapping.put(name, result.getId());
}