package com.griddynamics.jagger.webclient.client.handler;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.PopupPanel;
import com.googlecode.gflot.client.event.PlotClickListener;
import com.googlecode.gflot.client.event.PlotItem;
import com.googlecode.gflot.client.event.PlotPosition;
import com.googlecode.gflot.client.jsni.Plot;
import com.griddynamics.jagger.dbapi.dto.MarkingDto;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Map;
import java.util.Set;
/**
* @author "Artem Kirillov" (akirillov@griddynamics.com)
* @since 6/20/12
*/
public class ShowTaskDetailsListener implements PlotClickListener {
private final Map<String, Set<MarkingDto>> markingsMap;
private final String plotId;
private final PopupPanel taskInfoPanel;
private final HTML taskInfoPanelContent;
private final int taskInfoPanelWidth;
public ShowTaskDetailsListener(String plotId, Map<String, Set<MarkingDto>> markingsMap, PopupPanel taskInfoPanel, int taskInfoPanelWidth, HTML taskInfoPanelContent) {
this.markingsMap = markingsMap;
this.plotId = plotId;
this.taskInfoPanel = taskInfoPanel;
this.taskInfoPanelContent = taskInfoPanelContent;
this.taskInfoPanelWidth = taskInfoPanelWidth;
}
@Override
public void onPlotClick(Plot plot, PlotPosition position, PlotItem item) {
if (position == null) {
return;
}
String taskName = "Not Determined";
double prev = 0;
Set<MarkingDto> markingDtoSet = markingsMap.get(plotId);
if (markingDtoSet == null) {
return;
}
for (MarkingDto dto : markingDtoSet) {
if (position.getX() >= prev && position.getX() <= dto.getValue()) {
taskName = dto.getTaskName();
break;
}
}
taskInfoPanelContent.setHTML("<table width=\"100%\"><tr><td>Clicked at</td><td>" +
new BigDecimal(position.getX()).setScale(2, RoundingMode.HALF_EVEN) + " sec</td></tr>" +
"<tr><td>Task name</td><td>" + taskName + "</td></tr></table>");
int clientWidth = Window.getClientWidth();
if (position.getPageX() + taskInfoPanelWidth < clientWidth) {
taskInfoPanel.setPopupPosition(position.getPageX() + 10, position.getPageY() - 25);
} else {
taskInfoPanel.setPopupPosition(position.getPageX() - taskInfoPanelWidth, position.getPageY() - 25);
}
taskInfoPanel.show();
}
}