fixed bug 1447 by removing columns first, then inserting with index

Conflicts:
	java/com.sap.sailing.gwt.ui/SailingGWT sdm.launch
This commit is contained in:
Axel Uhl committed 2015-05-27 17:28:45 +02:00
1 parent 19c54b8076
commit 560eb61431
6 files changed
+49 -32

No files matched your search

@@ -4,7 +4,6 @@
<stringAttribute key="com.google.gdt.eclipse.suiteMainTypeProcessor.PREVIOUSLY_SET_MAIN_TYPE_NAME" value="com.google.gwt.dev.GWTShell"/>
<booleanAttribute key="com.google.gdt.eclipse.suiteWarArgumentProcessor.IS_WAR_FROM_PROJECT_PROPERTIES" value="true"/>
<booleanAttribute key="com.google.gwt.eclipse.core.CODE_SERVER_PORT_AUTO" value="true"/>
<listAttribute key="com.google.gwt.eclipse.core.ENTRY_POINT_MODULES">
<listEntry value="com.sap.sailing.gwt.ui.Simulator"/>
<listEntry value="com.sap.sailing.gwt.ui.Leaderboard"/>
<listEntry value="com.sap.sailing.gwt.ui.PolarSheets"/>
@@ -17,8 +16,6 @@
<listEntry value="com.sap.sailing.gwt.ui.RaceBoard"/>
<listEntry value="com.sap.sailing.gwt.ui.YoutubePopup"/>
<listEntry value="com.sap.sailing.gwt.AutoPlay"/>
<listEntry value="com.sap.sailing.gwt.ui.VideoPopup"/>
</listAttribute>
<booleanAttribute key="com.google.gwt.eclipse.core.SUPERDEVMODE_ENABLED" value="true"/>
<stringAttribute key="com.google.gwt.eclipse.core.URL" value="/gwt/Home.html"/>
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
@@ -31,6 +31,7 @@ import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.leaderboard.ScoringSchemeTypeFormatter;
import com.sap.sailing.gwt.ui.shared.RegattaDTO;
import com.sap.sailing.gwt.ui.shared.SeriesDTO;
import com.sap.sse.common.Util.Pair;
import com.sap.sse.gwt.client.ErrorReporter;
import com.sap.sse.gwt.client.async.MarkedAsyncCallback;
import com.sap.sse.gwt.client.dialog.DataEntryDialog.DialogCallback;
@@ -289,14 +290,16 @@ public class RegattaDetailsComposite extends Composite {
final boolean seriesNameChanged = !series.getName().equals(seriesDescriptor.getSeriesName());
final RegattaIdentifier regattaIdentifier = new RegattaName(regatta.getName());
List<RaceColumnDTO> existingRaceColumns = series.getRaceColumns();
final List<String> raceColumnsToAdd = new ArrayList<String>();
final List<String> raceColumnsToRemove = new ArrayList<String>();
final List<Pair<String, Integer>> raceColumnNamesToAddWithInsertIndex = new ArrayList<>();
final List<String> raceColumnsToRemove = new ArrayList<>();
// TODO see bug 1447: the resulting order currently doesn't necessarily match the order of races in this dialog!
int insertIndex = 0;
for (RaceColumnDTO newRaceColumn : newRaceColumns) {
if (!existingRaceColumns.contains(newRaceColumn)) {
raceColumnsToAdd.add(newRaceColumn.getName());
raceColumnNamesToAddWithInsertIndex.add(new Pair<>(newRaceColumn.getName(), insertIndex));
}
insertIndex++;
}
for (RaceColumnDTO existingRaceColumn : existingRaceColumns) {
if (!newRaceColumns.contains(existingRaceColumn)) {
@@ -314,32 +317,32 @@ public class RegattaDetailsComposite extends Composite {
racesToRemove.append(raceColumnToRemove);
}
if (raceColumnsToRemove.isEmpty() || Window.confirm(stringMessages.reallyRemoveRace(racesToRemove.toString()))) {
sailingService.addRaceColumnsToSeries(regattaIdentifier, series.getName(), raceColumnsToAdd,
new AsyncCallback<List<RaceColumnInSeriesDTO>>() {
@Override
public void onFailure(Throwable caught) {
errorReporter.reportError("Error trying to add race columns " + raceColumnsToAdd
+ " to series " + series.getName() + ": " + caught.getMessage());
}
@Override
public void onSuccess(List<RaceColumnInSeriesDTO> raceColumns) {
regattaRefresher.fillRegattas();
}
});
// first remove:
sailingService.removeRaceColumnsFromSeries(regattaIdentifier, series.getName(), raceColumnsToRemove,
new AsyncCallback<Void>() {
@Override
public void onFailure(Throwable caught) {
errorReporter.reportError("Error trying to remove race columns " + raceColumnsToAdd
errorReporter.reportError("Error trying to remove race columns " + raceColumnNamesToAddWithInsertIndex
+ " from series " + series.getName() + ": " + caught.getMessage());
}
@Override
public void onSuccess(Void v) {
regattaRefresher.fillRegattas();
// when successfully removed, insert:
sailingService.addRaceColumnsToSeries(regattaIdentifier, series.getName(), raceColumnNamesToAddWithInsertIndex,
new AsyncCallback<List<RaceColumnInSeriesDTO>>() {
@Override
public void onFailure(Throwable caught) {
errorReporter.reportError("Error trying to add race columns " + raceColumnNamesToAddWithInsertIndex
+ " to series " + series.getName() + ": " + caught.getMessage());
}
@Override
public void onSuccess(List<RaceColumnInSeriesDTO> raceColumns) {
regattaRefresher.fillRegattas();
}
});
}
});
if (isMedalChanged || seriesResultDiscardingThresholdsChanged || isStartsWithZeroScoreChanged
@@ -205,7 +205,8 @@ public interface SailingService extends RemoteService, FileStorageManagementGwtS
void updateRegatta(RegattaIdentifier regattaIdentifier, Date startDate, Date endDate, UUID defaultCourseAreaUuid,
RegattaConfigurationDTO regattaConfiguration, boolean useStartTimeInference);
List<RaceColumnInSeriesDTO> addRaceColumnsToSeries(RegattaIdentifier regattaIdentifier, String seriesName, List<String> columnNames);
List<RaceColumnInSeriesDTO> addRaceColumnsToSeries(RegattaIdentifier regattaIdentifier, String seriesName,
List<Pair<String, Integer>> columnNames);
void updateSeries(RegattaIdentifier regattaIdentifier, String seriesName, String newSeriesName, boolean isMedal,
int[] resultDiscardingThresholds, boolean startsWithZeroScore,
@@ -396,7 +396,7 @@ public interface SailingServiceAsync extends BuildVersionRetriever, FileStorageM
RegattaCreationParametersDTO seriesNamesWithFleetNamesAndFleetOrderingAndMedal, boolean persistent,
ScoringSchemeType scoringSchemeType, UUID defaultCourseAreaId, boolean useStartTimeInference, AsyncCallback<RegattaDTO> callback);
void addRaceColumnsToSeries(RegattaIdentifier regattaIdentifier, String seriesName, List<String> columnNames,
void addRaceColumnsToSeries(RegattaIdentifier regattaIdentifier, String seriesName, List<Pair<String, Integer>> columnNames,
AsyncCallback<List<RaceColumnInSeriesDTO>> callback);
void updateSeries(RegattaIdentifier regattaIdentifier, String seriesName, String newSeriesName, boolean isMedal,
@@ -3615,11 +3615,11 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
@Override
public List<RaceColumnInSeriesDTO> addRaceColumnsToSeries(RegattaIdentifier regattaIdentifier, String seriesName,
List<String> columnNames) {
List<Pair<String, Integer>> columnNamesWithInsertIndex) {
List<RaceColumnInSeriesDTO> result = new ArrayList<RaceColumnInSeriesDTO>();
for (String columnName : columnNames) {
for (Pair<String, Integer> columnNameAndInsertIndex : columnNamesWithInsertIndex) {
RaceColumnInSeries raceColumnInSeries = getService().apply(
new AddColumnToSeries(regattaIdentifier, seriesName, columnName));
new AddColumnToSeries(columnNameAndInsertIndex.getB(), regattaIdentifier, seriesName, columnNameAndInsertIndex.getA()));
if (raceColumnInSeries != null) {
result.add(convertToRaceColumnInSeriesDTO(raceColumnInSeries));
}
@@ -3990,11 +3990,13 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
*/
private void addRaceColumnsToRegattaSeries(RegattaDTO regatta, String eventName) {
for (SeriesDTO series : regatta.series) {
List<String> raceNames = new ArrayList<String>();
List<Pair<String, Integer>> raceNamesAndInsertIndex = new ArrayList<>();
int insertIndex = 0;
for (RaceColumnDTO raceColumnInSeries : series.getRaceColumns()) {
raceNames.add(raceColumnInSeries.getName());
raceNamesAndInsertIndex.add(new Pair<>(raceColumnInSeries.getName(), insertIndex));
insertIndex++;
}
addRaceColumnsToSeries(regatta.getRegattaIdentifier(), series.getName(), raceNames);
addRaceColumnsToSeries(regatta.getRegattaIdentifier(), series.getName(), raceNamesAndInsertIndex);
}
}
@@ -9,8 +9,18 @@ import com.sap.sailing.server.RacingEventServiceOperation;
public class AddColumnToSeries extends AbstractColumnInSeriesOperation<RaceColumnInSeries> {
private static final long serialVersionUID = 8987540636040301063L;
/**
* -1 means append
*/
private final int insertIndex;
public AddColumnToSeries(RegattaIdentifier regattaIdentifier, String seriesName, String columnName) {
this(/* insertIndex==-1 means append */ -1, regattaIdentifier, seriesName, columnName);
}
public AddColumnToSeries(int insertIndex, RegattaIdentifier regattaIdentifier, String seriesName, String columnName) {
super(regattaIdentifier, seriesName, columnName);
this.insertIndex = insertIndex;
}
@Override
@@ -18,7 +28,11 @@ public class AddColumnToSeries extends AbstractColumnInSeriesOperation<RaceColum
RaceColumnInSeries result = null;
Series series = getSeries(toState);
if (series != null) {
result = series.addRaceColumn(getColumnName(), toState);
if (insertIndex == -1) {
result = series.addRaceColumn(getColumnName(), toState);
} else {
result = series.addRaceColumn(insertIndex, getColumnName(), toState);
}
if (result != null && series.getRegatta().isPersistent()) {
toState.updateStoredRegatta(series.getRegatta());
}