Added support for replaying the path, WIP.

This commit is contained in:
Nidhi Sawhney committed 2012-05-15 15:00:49 +02:00
1 parent 584d8f78ac
commit 718752e3a1
4 files changed
+101 -18

No files matched your search

@@ -35,7 +35,11 @@ public class PathCanvasOverlay extends WindFieldCanvasOverlay {
protected void drawWindField() {
logger.fine("In PathCanvasOverlay.drawWindField");
List<WindDTO> windDTOList = wl.getMatrix();
drawWindField(windDTOList);
}
protected void drawWindField(final List<WindDTO> windDTOList) {
if (windDTOList != null && windDTOList.size() > 0) {
Iterator<WindDTO> windDTOIter = windDTOList.iterator();
int index = 0;
@@ -0,0 +1,43 @@
package com.sap.sailing.gwt.ui.simulator;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.logging.Logger;
import com.sap.sailing.gwt.ui.client.TimeListener;
import com.sap.sailing.gwt.ui.client.Timer;
import com.sap.sailing.gwt.ui.shared.WindDTO;
public class ReplayPathCanvasOverlay extends PathCanvasOverlay implements TimeListener {
private final Timer timer;
private static Logger logger = Logger.getLogger("com.sap.sailing");
public ReplayPathCanvasOverlay(Timer timer) {
this.timer = timer;
this.timer.addTimeListener(this);
}
@Override
protected void drawWindField() {
timeChanged(timer.getTime());
}
@Override
public void timeChanged(Date date) {
canvas.getContext2d().clearRect(canvas.getAbsoluteLeft(), canvas.getAbsoluteTop(), canvas.getCoordinateSpaceWidth(), canvas.getCoordinateSpaceHeight());
List<WindDTO> windDTOToDraw = new ArrayList<WindDTO>();
for(WindDTO windDTO : wl.getMatrix()) {
if (windDTO.timepoint <= date.getTime()) {
windDTOToDraw.add(windDTO);
}
}
logger.info("In ReplayPathCanvasOverlay.drawWindField drawing " + windDTOToDraw.size() + " points");
if (windDTOToDraw.size() == wl.getMatrix().size()) {
timer.stop();
}
drawWindField(windDTOToDraw);
}
}
@@ -51,13 +51,14 @@ public class SimulatorMainPanel extends SplitLayoutPanel {
private ListBox patternSelector;
private ListBox boatSelector;
private final Timer timer;
private static Logger logger = Logger.getLogger("com.sap.sailing");
private SimulatorMap simulatorMap;
private final StringMessages stringMessages;
private final SimulatorServiceAsync simulatorSvc;
private class WindSpeedCapture implements ValueChangeHandler<Double> {
@Override
@@ -80,6 +81,10 @@ public class SimulatorMainPanel extends SplitLayoutPanel {
wControls = new WindControlParameters(1, 0);
patternSelector = new ListBox();
boatSelector = new ListBox();
timer = new Timer(PlayModes.Replay, 1000l);
timer.setPlaySpeedFactor(30);
resetTimer();
LogoAndTitlePanel logoAndTitlePanel = new LogoAndTitlePanel(stringMessages.simulator(), stringMessages);
logoAndTitlePanel.addStyleName("LogoAndTitlePanel");
this.addNorth(logoAndTitlePanel, 68);
@@ -258,7 +263,7 @@ public class SimulatorMainPanel extends SplitLayoutPanel {
initDisplayOptions(mapOptions);
simulatorMap = new SimulatorMap(simulatorSvc, stringMessages);
simulatorMap = new SimulatorMap(simulatorSvc, stringMessages,timer);
// FlowPanel mapPanel = new FlowPanel();
// mapPanel.setTitle("Map");
@@ -275,18 +280,31 @@ public class SimulatorMainPanel extends SplitLayoutPanel {
//TODO Get the right dates and times
private void addTimePanel(Panel parentPanel) {
Timer timer = new Timer(PlayModes.Replay, 1000l);
timePanel = new TimePanel<TimePanelSettings>(timer, stringMessages);
Date now = new Date();
Date now = timer.getTime();
logger.info("Now " + now);
Date maxTime = new Date(now.getTime()+100000);
Date maxTime = new Date(now.getTime()+10*60*1000);
logger.info("MaxTime " + maxTime);
timePanel.setMinMax(now, maxTime, false);
timePanel.setVisible(false);
rightPanel.add(timePanel);
}
private void resetTimer() {
Date startDate = new Date(0);
timer.setTime(startDate.getTime());
/* timePanel.reset();
Date now = timer.getTime();
logger.info("Now " + now);
Date maxTime = new Date(now.getTime()+10*60*1000);
logger.info("MaxTime " + maxTime);
timePanel.setMinMax(now, maxTime, false);*/
}
private void initUpdateButton() {
updateButton = new Button(stringMessages.update());
updateButton.addClickHandler(new ClickHandler() {
@@ -300,6 +318,8 @@ public class SimulatorMainPanel extends SplitLayoutPanel {
}
private void update() {
resetTimer();
if (windDisplayButton.getValue()) {
simulatorMap.refreshView(SimulatorMap.ViewName.WINDDISPLAY, wControls);
} else if (summaryButton.getValue()) {
@@ -342,6 +362,7 @@ public class SimulatorMainPanel extends SplitLayoutPanel {
@Override
public void onClick(ClickEvent arg0) {
resetTimer();
timePanel.setVisible(true);
simulatorMap.refreshView(SimulatorMap.ViewName.REPLAY, wControls);
}
@@ -354,6 +375,7 @@ public class SimulatorMainPanel extends SplitLayoutPanel {
@Override
public void onClick(ClickEvent arg0) {
resetTimer();
timePanel.setVisible(true);
simulatorMap.refreshView(SimulatorMap.ViewName.WINDDISPLAY, wControls);
}
@@ -16,6 +16,8 @@ import com.google.gwt.user.client.ui.AbsolutePanel;
import com.sap.sailing.gwt.ui.client.RequiresDataInitialization;
import com.sap.sailing.gwt.ui.client.SimulatorServiceAsync;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.client.Timer;
import com.sap.sailing.gwt.ui.client.Timer.PlayModes;
import com.sap.sailing.gwt.ui.shared.PathDTO;
import com.sap.sailing.gwt.ui.shared.PositionDTO;
import com.sap.sailing.gwt.ui.shared.WindFieldDTO;
@@ -29,11 +31,13 @@ public class SimulatorMap extends AbsolutePanel implements RequiresDataInitializ
private WindFieldGenParamsDTO windParams;
private WindFieldCanvasOverlay windFieldCanvasOverlay;
private PathCanvasOverlay pathCanvasOverlay;
private ReplayPathCanvasOverlay replayPathCanvasOverlay;
private RaceCourseCanvasOverlay raceCourseCanvasOverlay;
private final SimulatorServiceAsync simulatorSvc;
private final StringMessages stringMessages;
private final Timer timer;
private static Logger logger = Logger.getLogger("com.sap.sailing");
private final int xRes = 5;
@@ -43,15 +47,17 @@ public class SimulatorMap extends AbsolutePanel implements RequiresDataInitializ
SUMMARY, REPLAY, WINDDISPLAY
}
public SimulatorMap(SimulatorServiceAsync simulatorSvc, StringMessages stringMessages) {
public SimulatorMap(SimulatorServiceAsync simulatorSvc, StringMessages stringMessages, Timer timer) {
this.simulatorSvc = simulatorSvc;
this.stringMessages = stringMessages;
this.timer = timer;
dataInitialized = false;
overlaysInitialized = false;
windParams = new WindFieldGenParamsDTO();
windFieldCanvasOverlay = null;
pathCanvasOverlay = null;
replayPathCanvasOverlay = null;
raceCourseCanvasOverlay = null;
initializeData();
@@ -101,6 +107,7 @@ public class SimulatorMap extends AbsolutePanel implements RequiresDataInitializ
windFieldCanvasOverlay = new WindFieldCanvasOverlay();
// mapw.addOverlay(windFieldCanvasOverlay);
pathCanvasOverlay = new PathCanvasOverlay();
replayPathCanvasOverlay = new ReplayPathCanvasOverlay(timer);
overlaysInitialized = true;
}
@@ -139,7 +146,7 @@ public class SimulatorMap extends AbsolutePanel implements RequiresDataInitializ
windFieldCanvasOverlay.redraw(true);
}
private void generatePath(final WindControlParameters wControls) {
private void generatePath(final WindControlParameters wControls, final boolean display) {
logger.info("In generatePath");
PositionDTO startPointDTO = new PositionDTO(raceCourseCanvasOverlay.startPoint.getLatitude(),
@@ -166,9 +173,12 @@ public class SimulatorMap extends AbsolutePanel implements RequiresDataInitializ
/* TODO Revisit for now creating a WindFieldDTO from the path */
WindFieldDTO pathWindDTO = new WindFieldDTO();
pathWindDTO.setMatrix(paths[0].getMatrix());
pathCanvasOverlay.setWindField(pathWindDTO);
pathCanvasOverlay.redraw(true);
if (display) {
pathCanvasOverlay.setWindField(pathWindDTO);
pathCanvasOverlay.redraw(display);
} else {
replayPathCanvasOverlay.setWindField(pathWindDTO);
}
}
});
@@ -185,6 +195,7 @@ public class SimulatorMap extends AbsolutePanel implements RequiresDataInitializ
mapw.setDoubleClickZoom(false);
mapw.removeOverlay(windFieldCanvasOverlay);
mapw.removeOverlay(pathCanvasOverlay);
mapw.removeOverlay(replayPathCanvasOverlay);
raceCourseCanvasOverlay.setSelected(true);
// raceCourseCanvasOverlay.setVisible(true);
raceCourseCanvasOverlay.reset();
@@ -193,22 +204,25 @@ public class SimulatorMap extends AbsolutePanel implements RequiresDataInitializ
private void refreshSummaryView(WindControlParameters wControls) {
mapw.removeOverlay(windFieldCanvasOverlay);
mapw.removeOverlay(replayPathCanvasOverlay);
pathCanvasOverlay.displayWindAlongPath = true;
mapw.addOverlay(pathCanvasOverlay);
generatePath(wControls);
generatePath(wControls, true);
//pathCanvasOverlay.redraw(true);
}
private void refreshReplayView(WindControlParameters wControls) {
mapw.removeOverlay(pathCanvasOverlay);
mapw.addOverlay(windFieldCanvasOverlay);
pathCanvasOverlay.displayWindAlongPath = false;
mapw.addOverlay(pathCanvasOverlay);
replayPathCanvasOverlay.displayWindAlongPath = false;
mapw.addOverlay(replayPathCanvasOverlay);
generateWindField(wControls);
generatePath(wControls);
generatePath(wControls,false);
}
private void refreshWindDisplayView(WindControlParameters wControls) {
mapw.removeOverlay(pathCanvasOverlay);
mapw.removeOverlay(replayPathCanvasOverlay);
mapw.addOverlay(windFieldCanvasOverlay);
generateWindField(wControls);
}