fixing bug 2245 by adding an Edit button for the Accumulated column

This commit is contained in:
Axel Uhl committed 2014-09-22 17:47:25 +02:00
1 parent 733e7ea470
commit f2aee4f47d
6 files changed
+99 -29

No files matched your search

@@ -1086,4 +1086,5 @@ public interface StringMessages extends Messages {
String manageMediaTooltip();
String showAll();
String raceVisibilityColumn();
String enterCarryValueFor(String competitorName);
}
@@ -1067,3 +1067,4 @@ manageMedia=Manage Media
manageMediaTooltip=Configure audio and video clips, synchronize times
showAll=Show all
raceVisibilityColumn=Visibility
enterCarryValueFor=Enter carried points for competitor {0}
@@ -1062,3 +1062,4 @@ manageMedia=Audio/Video verwalten
manageMediaTooltip=Audio- und Video-Clips verwalten, Zeiten synchronisieren
showAll=Alle zeigen
raceVisibilityColumn=Sichtbarkeit
enterCarryValueFor=Punkteübertrag für Teilnehmer {0} erfassen
@@ -1017,3 +1017,4 @@ manageMedia=Manage Media
manageMediaTooltip=Configure audio and video clips, synchronize times
showAll=Show all
raceVisibilityColumn=Visibility
enterCarryValueFor=Enter carried points for competitor {0}
@@ -15,8 +15,8 @@ import java.util.Set;
import com.google.gwt.cell.client.Cell;
import com.google.gwt.cell.client.Cell.Context;
import com.google.gwt.cell.client.AbstractSafeHtmlCell;
import com.google.gwt.cell.client.CompositeCell;
import com.google.gwt.cell.client.EditTextCell;
import com.google.gwt.cell.client.TextCell;
import com.google.gwt.core.client.GWT;
import com.google.gwt.core.client.Scheduler;
@@ -34,6 +34,7 @@ import com.google.gwt.safehtml.client.SafeHtmlTemplates;
import com.google.gwt.safehtml.shared.SafeHtml;
import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
import com.google.gwt.safehtml.shared.SafeHtmlUtils;
import com.google.gwt.text.shared.AbstractSafeHtmlRenderer;
import com.google.gwt.user.cellview.client.Column;
import com.google.gwt.user.cellview.client.Header;
import com.google.gwt.user.cellview.client.SafeHtmlHeader;
@@ -1437,20 +1438,30 @@ public class LeaderboardPanel extends SimplePanel implements TimeListener, PlayS
}
}
protected class CarryColumn extends LeaderboardSortableColumnWithMinMax<LeaderboardRowDTO, String> {
protected class CarryColumn extends LeaderboardSortableColumnWithMinMax<LeaderboardRowDTO, LeaderboardRowDTO> {
public CarryColumn() {
super(new TextCell(), SortingOrder.ASCENDING, LeaderboardPanel.this);
super(new AbstractSafeHtmlCell<LeaderboardRowDTO>(new AbstractSafeHtmlRenderer<LeaderboardRowDTO>() {
@Override
public SafeHtml render(LeaderboardRowDTO object) {
return new SafeHtmlBuilder().appendEscaped(object.carriedPoints == null ? "" : scoreFormat.format(object.carriedPoints)).toSafeHtml();
}
}) {
@Override
protected void render(com.google.gwt.cell.client.Cell.Context context, SafeHtml data, SafeHtmlBuilder sb) {
sb.append(data);
}
}, SortingOrder.ASCENDING, LeaderboardPanel.this);
setSortable(true);
}
protected CarryColumn(EditTextCell editTextCell) {
super(editTextCell, SortingOrder.ASCENDING, LeaderboardPanel.this);
protected CarryColumn(Cell<LeaderboardRowDTO> cell) {
super(cell, SortingOrder.ASCENDING, LeaderboardPanel.this);
setSortable(true);
}
@Override
public String getValue(LeaderboardRowDTO object) {
return object.carriedPoints == null ? "" : scoreFormat.format(object.carriedPoints);
public LeaderboardRowDTO getValue(LeaderboardRowDTO object) {
return object;
}
@Override
@@ -104,28 +104,7 @@ public class EditableLeaderboardPanel extends LeaderboardPanel {
private class EditableCarryColumn extends CarryColumn {
public EditableCarryColumn() {
super(new EditTextCell());
setFieldUpdater(new FieldUpdater<LeaderboardRowDTO, String>() {
@Override
public void update(final int rowIndex, final LeaderboardRowDTO row, final String value) {
getSailingService().updateLeaderboardCarryValue(getLeaderboardName(), row.competitor.getIdAsString(),
value == null || value.length() == 0 ? null : Double.valueOf(value.trim()),
new AsyncCallback<Void>() {
@Override
public void onFailure(Throwable t) {
EditableLeaderboardPanel.this.getErrorReporter().reportError("Error trying to update carry value for competitor "+
row.competitor.getName()+" in leaderboard "+getLeaderboardName()+": "+t.getMessage()+
"\nYou may have to refresh your view.");
}
@Override
public void onSuccess(Void v) {
row.carriedPoints = value==null||value.length()==0 ? null : Double.valueOf(value.trim());
EditableLeaderboardPanel.this.getData().getList().set(rowIndex, row);
}
});
}
});
super(new CompositeCell<LeaderboardRowDTO>(getCellListForEditableCarryColumn()));
}
}
@@ -927,6 +906,82 @@ public class EditableLeaderboardPanel extends LeaderboardPanel {
});
return result;
}
private List<HasCell<LeaderboardRowDTO, ?>> getCellListForEditableCarryColumn() {
List<HasCell<LeaderboardRowDTO, ?>> result = new ArrayList<HasCell<LeaderboardRowDTO, ?>>();
result.add(new HasCell<LeaderboardRowDTO, String>() {
private final ButtonCell cell = new ButtonCell();
@Override
public Cell<String> getCell() {
return cell;
}
@Override
public FieldUpdater<LeaderboardRowDTO, String> getFieldUpdater() {
return new FieldUpdater<LeaderboardRowDTO, String>() {
@Override
public void update(int index, final LeaderboardRowDTO row, String value) {
new EditCarryValueDialog(getStringMessages(), row.competitor.getName(), row.carriedPoints, new DialogCallback<Double>() {
@Override
public void ok(final Double value) {
updateCarriedPoints(EditableLeaderboardPanel.this.getData().getList().indexOf(row), row, value);
}
@Override
public void cancel() {
}
}).show();
}
};
}
@Override
public String getValue(LeaderboardRowDTO object) {
return getStringMessages().edit();
}
});
final EditTextCell carryTextCell = new EditTextCell();
final FieldUpdater<LeaderboardRowDTO, String> fieldUpdater = new FieldUpdater<LeaderboardRowDTO, String>() {
@Override
public void update(final int rowIndex, final LeaderboardRowDTO row, final String value) {
updateCarriedPoints(rowIndex, row, value==null||value.length()==0 ? null : Double.valueOf(value.trim()));
}
};
result.add(new HasCell<LeaderboardRowDTO, String>() {
@Override
public Cell<String> getCell() {
return carryTextCell;
}
@Override
public FieldUpdater<LeaderboardRowDTO, String> getFieldUpdater() {
return fieldUpdater;
}
@Override
public String getValue(LeaderboardRowDTO object) {
return object.carriedPoints == null ? "" : scoreFormat.format(object.carriedPoints);
}
});
return result;
}
private void updateCarriedPoints(final int rowIndex, final LeaderboardRowDTO row, final Double value) {
getSailingService().updateLeaderboardCarryValue(getLeaderboardName(), row.competitor.getIdAsString(), value,
new AsyncCallback<Void>() {
@Override
public void onFailure(Throwable t) {
EditableLeaderboardPanel.this.getErrorReporter().reportError("Error trying to update carry value for competitor "+
row.competitor.getName()+" in leaderboard "+getLeaderboardName()+": "+t.getMessage()+
"\nYou may have to refresh your view.");
}
@Override
public void onSuccess(Void v) {
row.carriedPoints = value;
EditableLeaderboardPanel.this.getData().getList().set(rowIndex, row);
}
});
}
@Override
protected RaceColumn<?> createRaceColumn(RaceColumnDTO race) {