Initial implementation of action bar for CompetitorTable

This commit is contained in:
Jan Broß committed 2016-01-22 15:42:16 +01:00
1 parent 249b01e3df
commit a60146b350
4 files changed
+82 -147

No files matched your search

@@ -7,7 +7,6 @@ import com.google.gwt.core.client.Callback;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
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.CaptionPanel;
import com.google.gwt.user.client.ui.CheckBox;
@@ -68,17 +67,10 @@ public abstract class AbstractCompetitorRegistrationsDialog extends DataEntryDia
addCompetitorButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
openAddCompetitorDialog();
registeredCompetitorsTable.openEditCompetitorDialog(new CompetitorDTOImpl(), boatClass);
}
});
final Button editCompetitorButton = new Button(stringMessages.edit(stringMessages.competitor()));
editCompetitorButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
openEditCompetitorDialog();
}
});
final Button inviteCompetitorsButton = new Button(stringMessages.inviteSelectedCompetitors());
inviteCompetitorsButton.addClickHandler(new ClickHandler() {
@Override
@@ -122,7 +114,6 @@ public abstract class AbstractCompetitorRegistrationsDialog extends DataEntryDia
competitorRegistrationPanel.setCellVerticalAlignment(movePanel, HasVerticalAlignment.ALIGN_MIDDLE);
competitorRegistrationPanel.add(allCompetitorsPanel);
buttonPanel.add(addCompetitorButton);
buttonPanel.add(editCompetitorButton);
buttonPanel.add(inviteCompetitorsButton);
mainPanel.add(buttonPanel);
showOnlyCompetitorsOfLogCheckBox = new CheckBox(stringMessages.showOnlyCompetitorsOfLog());
@@ -155,71 +146,11 @@ public abstract class AbstractCompetitorRegistrationsDialog extends DataEntryDia
CompetitorTableWrapper<RefreshableMultiSelectionModel<CompetitorDTO>> to) {
move(from, to, from.getSelectionModel().getSelectedSet());
}
private void openAddCompetitorDialog() {
new CompetitorEditDialog(stringMessages, new CompetitorDTOImpl(),
new DataEntryDialog.DialogCallback<CompetitorDTO>() {
@Override
public void ok(CompetitorDTO competitor) {
sailingService.addOrUpdateCompetitor(competitor, new AsyncCallback<CompetitorDTO>() {
@Override
public void onFailure(Throwable caught) {
errorReporter.reportError("Error trying to add competitor: " + caught.getMessage());
}
@Override
public void onSuccess(CompetitorDTO updatedCompetitor) {
registeredCompetitorsTable.getFilterField().add(updatedCompetitor);
}
});
}
@Override
public void cancel() {
}
}, boatClass).show();
}
protected boolean showOnlyCompetitorsOfLog(){
return showOnlyCompetitorsOfLogCheckBox.getValue();
}
private void openEditCompetitorDialog() {
// get currently selected competitor
if (registeredCompetitorsTable.getSelectionModel().getSelectedSet().size() != 1) {
// show some warning
} else {
final CompetitorDTO competitorToEdit = registeredCompetitorsTable.getSelectionModel().getSelectedSet()
.iterator().next();
new CompetitorEditDialog(stringMessages, competitorToEdit,
new DataEntryDialog.DialogCallback<CompetitorDTO>() {
@Override
public void ok(CompetitorDTO competitor) {
sailingService.addOrUpdateCompetitor(competitor, new AsyncCallback<CompetitorDTO>() {
@Override
public void onFailure(Throwable caught) {
errorReporter.reportError("Error trying to add competitor: " + caught.getMessage());
}
@Override
public void onSuccess(CompetitorDTO updatedCompetitor) {
int editedCompetitorIndex = registeredCompetitorsTable.getDataProvider().getList()
.indexOf(competitorToEdit);
registeredCompetitorsTable.getDataProvider().getList().remove(competitorToEdit);
registeredCompetitorsTable.getDataProvider().getList()
.add(editedCompetitorIndex, updatedCompetitor);
registeredCompetitorsTable.getDataProvider().refresh();
}
});
}
@Override
public void cancel() {
}
}, /* boatClass */null).show();
}
}
protected void refreshCompetitors() {
registeredCompetitorsTable.getFilterField().removeAll();
allCompetitorsTable.getFilterField().removeAll();
@@ -263,5 +194,4 @@ public abstract class AbstractCompetitorRegistrationsDialog extends DataEntryDia
Util.addAll(registeredCompetitorsTable.getAllCompetitors(), registeredCompetitors);
return registeredCompetitors;
}
}
@@ -1,15 +1,9 @@
package com.sap.sailing.gwt.ui.adminconsole;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import com.google.gwt.cell.client.FieldUpdater;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
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.HorizontalPanel;
import com.google.gwt.user.client.ui.SimplePanel;
@@ -20,10 +14,8 @@ import com.sap.sailing.domain.common.dto.CompetitorDTO;
import com.sap.sailing.domain.common.dto.CompetitorDTOImpl;
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sse.common.Util;
import com.sap.sse.gwt.client.ErrorReporter;
import com.sap.sse.gwt.client.celltable.RefreshableMultiSelectionModel;
import com.sap.sse.gwt.client.dialog.DataEntryDialog.DialogCallback;
/**
* Allows an administrator to view and edit the set of competitors currently maintained by the server.
@@ -32,9 +24,6 @@ import com.sap.sse.gwt.client.dialog.DataEntryDialog.DialogCallback;
*
*/
public class CompetitorPanel extends SimplePanel {
private final SailingServiceAsync sailingService;
private final StringMessages stringMessages;
private final ErrorReporter errorReporter;
private final CompetitorTableWrapper<RefreshableMultiSelectionModel<CompetitorDTO>> competitorTable;
private final RefreshableMultiSelectionModel<CompetitorDTO> refreshableCompetitorSelectionModel;
private final String leaderboardName;
@@ -47,9 +36,6 @@ public class CompetitorPanel extends SimplePanel {
public CompetitorPanel(final SailingServiceAsync sailingService, final String leaderboardName,
final StringMessages stringMessages, final ErrorReporter errorReporter) {
super();
this.sailingService = sailingService;
this.stringMessages = stringMessages;
this.errorReporter = errorReporter;
this.leaderboardName = leaderboardName;
this.competitorTable = new CompetitorTableWrapper<>(sailingService, stringMessages, errorReporter, /* multiSelection */ true, /* enablePager */ false);
this.refreshableCompetitorSelectionModel = (RefreshableMultiSelectionModel<CompetitorDTO>) competitorTable.getSelectionModel();
@@ -74,7 +60,7 @@ public class CompetitorPanel extends SimplePanel {
allowReloadButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
allowUpdate(refreshableCompetitorSelectionModel.getSelectedSet());
competitorTable.allowUpdate(refreshableCompetitorSelectionModel.getSelectedSet());
}
});
buttonPanel.add(allowReloadButton);
@@ -115,24 +101,8 @@ public class CompetitorPanel extends SimplePanel {
}
competitorsPanel.add(buttonPanel);
// competitor table
ImagesBarColumn<CompetitorDTO, CompetitorConfigImagesBarCell> competitorActionColumn = new ImagesBarColumn<CompetitorDTO, CompetitorConfigImagesBarCell>(
new CompetitorConfigImagesBarCell(stringMessages));
competitorActionColumn.setFieldUpdater(new FieldUpdater<CompetitorDTO, String>() {
@Override
public void update(int index, final CompetitorDTO competitor, String value) {
if (CompetitorConfigImagesBarCell.ACTION_EDIT.equals(value)) {
openEditCompetitorDialog(competitor);
} else if (CompetitorConfigImagesBarCell.ACTION_REFRESH.equals(value)) {
allowUpdate(Collections.singleton(competitor));
}
}
});
competitorTable.getTable().addColumn(competitorActionColumn, stringMessages.actions());
mainPanel.add(competitorTable);
refreshableCompetitorSelectionModel.addSelectionChangeHandler(new Handler() {
@Override
public void onSelectionChange(SelectionChangeEvent event) {
@@ -146,52 +116,10 @@ public class CompetitorPanel extends SimplePanel {
}
}
private void allowUpdate(final Iterable<CompetitorDTO> competitors) {
List<CompetitorDTO> serializableSingletonList = new ArrayList<CompetitorDTO>();
Util.addAll(competitors, serializableSingletonList);
sailingService.allowCompetitorResetToDefaults(serializableSingletonList, new AsyncCallback<Void>() {
@Override
public void onFailure(Throwable caught) {
errorReporter.reportError("Error trying to allow resetting competitors " + competitors
+ " to defaults: " + caught.getMessage());
}
@Override
public void onSuccess(Void result) {
Window.alert(stringMessages.successfullyAllowedCompetitorReset(competitors.toString()));
}
});
}
private void openAddCompetitorDialog() {
openEditCompetitorDialog(new CompetitorDTOImpl());
competitorTable.openEditCompetitorDialog(new CompetitorDTOImpl(), /* boat class to be used from CompetitorDTO */ null);
}
private void openEditCompetitorDialog(CompetitorDTO competitor) {
final CompetitorEditDialog dialog = new CompetitorEditDialog(stringMessages, competitor, new DialogCallback<CompetitorDTO>() {
@Override
public void ok(CompetitorDTO competitor) {
sailingService.addOrUpdateCompetitor(competitor, new AsyncCallback<CompetitorDTO>() {
@Override
public void onFailure(Throwable caught) {
errorReporter.reportError("Error trying to update competitor: " + caught.getMessage());
}
@Override
public void onSuccess(CompetitorDTO updatedCompetitor) {
refreshCompetitorList();
}
});
}
@Override
public void cancel() {
}
}, /* boat class to be used from CompetitorDTO */ null);
dialog.ensureDebugId("CompetitorEditDialog");
dialog.show();
}
public void refreshCompetitorList() {
competitorTable.refreshCompetitorList(leaderboardName);
}
@@ -1,9 +1,11 @@
package com.sap.sailing.gwt.ui.adminconsole;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import com.google.gwt.cell.client.FieldUpdater;
import com.google.gwt.cell.client.SafeHtmlCell;
import com.google.gwt.core.client.Callback;
import com.google.gwt.resources.client.ImageResource;
@@ -12,6 +14,7 @@ import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
import com.google.gwt.user.cellview.client.Column;
import com.google.gwt.user.cellview.client.ColumnSortEvent.ListHandler;
import com.google.gwt.user.cellview.client.TextColumn;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.ImageResourceRenderer;
import com.google.gwt.user.client.ui.Label;
@@ -21,10 +24,12 @@ import com.sap.sailing.gwt.ui.client.FlagImageResolver;
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sse.common.Color;
import com.sap.sse.common.Util;
import com.sap.sse.common.util.NaturalComparator;
import com.sap.sse.gwt.client.ErrorReporter;
import com.sap.sse.gwt.client.celltable.EntityIdentityComparator;
import com.sap.sse.gwt.client.celltable.RefreshableSelectionModel;
import com.sap.sse.gwt.client.dialog.DataEntryDialog.DialogCallback;
import com.sap.sse.gwt.client.panels.LabeledAbstractFilterablePanel;
public class CompetitorTableWrapper<S extends RefreshableSelectionModel<CompetitorDTO>> extends TableWrapper<CompetitorDTO, S> {
@@ -209,6 +214,22 @@ public class CompetitorTableWrapper<S extends RefreshableSelectionModel<Competit
return string;
}
};
//CompetitorTableEditFeatures
ImagesBarColumn<CompetitorDTO, CompetitorConfigImagesBarCell> competitorActionColumn = new ImagesBarColumn<CompetitorDTO, CompetitorConfigImagesBarCell>(
new CompetitorConfigImagesBarCell(stringMessages));
competitorActionColumn.setFieldUpdater(new FieldUpdater<CompetitorDTO, String>() {
@Override
public void update(int index, final CompetitorDTO competitor, String value) {
if (CompetitorConfigImagesBarCell.ACTION_EDIT.equals(value)) {
openEditCompetitorDialog(competitor, competitor.getBoatClass().getName());
} else if (CompetitorConfigImagesBarCell.ACTION_REFRESH.equals(value)) {
allowUpdate(Collections.singleton(competitor));
}
}
});
mainPanel.insert(filterField, 0);
table.addColumnSortHandler(competitorColumnListHandler);
table.addColumn(sailIdColumn, stringMessages.sailNumber());
@@ -220,6 +241,7 @@ public class CompetitorTableWrapper<S extends RefreshableSelectionModel<Competit
table.addColumn(imageColumn, stringMessages.image());
table.addColumn(competitorEMailColumn, stringMessages.email());
table.addColumn(competitorIdColumn, stringMessages.id());
table.addColumn(competitorActionColumn, stringMessages.actions());
table.ensureDebugId("CompetitorsTable");
}
@@ -287,4 +309,57 @@ public class CompetitorTableWrapper<S extends RefreshableSelectionModel<Competit
private void getFilteredCompetitors(Iterable<CompetitorDTO> result) {
filterField.updateAll(result);
}
void openEditCompetitorDialog(final CompetitorDTO competitor, String boatClass) {
final CompetitorEditDialog dialog = new CompetitorEditDialog(stringMessages, competitor, new DialogCallback<CompetitorDTO>() {
@Override
public void ok(final CompetitorDTO competitor) {
sailingService.addOrUpdateCompetitor(competitor, new AsyncCallback<CompetitorDTO>() {
@Override
public void onFailure(Throwable caught) {
errorReporter.reportError("Error trying to update competitor: " + caught.getMessage());
}
@Override
public void onSuccess(CompetitorDTO updatedCompetitor) {
//only reload selected competitors reloading wirh refreshCompetitorList(leaderboardName)
//would not work in case the list is not based on a leaderboard e.g. AbstractCompetitorRegistrationDialog
int editedCompetitorIndex = getDataProvider().getList()
.indexOf(competitor);
getDataProvider().getList().remove(competitor);
if (editedCompetitorIndex >= 0){
getDataProvider().getList().add(editedCompetitorIndex, updatedCompetitor);
} else {
//in case competitor was not present --> not edit, but create
getDataProvider().getList().add(updatedCompetitor);
}
getDataProvider().refresh();
}
});
}
@Override
public void cancel() {
}
}, boatClass);
dialog.ensureDebugId("CompetitorEditDialog");
dialog.show();
}
protected void allowUpdate(final Iterable<CompetitorDTO> competitors) {
List<CompetitorDTO> serializableSingletonList = new ArrayList<CompetitorDTO>();
Util.addAll(competitors, serializableSingletonList);
sailingService.allowCompetitorResetToDefaults(serializableSingletonList, new AsyncCallback<Void>() {
@Override
public void onFailure(Throwable caught) {
errorReporter.reportError("Error trying to allow resetting competitors " + competitors
+ " to defaults: " + caught.getMessage());
}
@Override
public void onSuccess(Void result) {
Window.alert(stringMessages.successfullyAllowedCompetitorReset(competitors.toString()));
}
});
}
}
@@ -30,6 +30,7 @@ public abstract class TableWrapper<T, S extends RefreshableSelectionModel<T>> im
protected VerticalPanel mainPanel;
protected final SailingServiceAsync sailingService;
protected final ErrorReporter errorReporter;
protected final StringMessages stringMessages;
private final AdminConsoleTableResources tableRes = GWT.create(AdminConsoleTableResources.class);
private final ListHandler<T> columnSortHandler;
@@ -48,6 +49,7 @@ public abstract class TableWrapper<T, S extends RefreshableSelectionModel<T>> im
boolean multiSelection, boolean enablePager, EntityIdentityComparator<T> entityIdentityComparator) {
this.sailingService = sailingService;
this.errorReporter = errorReporter;
this.stringMessages = stringMessages;
table = new FlushableCellTable<T>(10000, tableRes);
table.ensureDebugId("WrappedTable");
this.dataProvider = new ListDataProvider<T>();