Merge branch 'master' of ssh://kielweek.web4sap.com/home/trac/git

This commit is contained in:
Marcus Kammer committed 2012-06-11 11:33:49 +02:00
commit 29a9ff2ec1
12 files changed
+68 -219

No files matched your search

@@ -284,9 +284,13 @@ public class TrackBasedEstimationWindTrackImpl extends VirtualWindTrackImpl impl
cacheInvalidationTimer.schedule(new TimerTask() {
@Override
public void run() {
synchronized (scheduledInvalidationInterval) {
cacheInvalidationTimer.cancel(); // terminates the timer thread
invalidateCache();
// to avoid deadlock with another invalidateCache() and with scheduleCacheInvalidation we need
// to obtain the TrackBasedEstimationWindTrackImpl.this monitor first (see bug 746).
synchronized (TrackBasedEstimationWindTrackImpl.this) {
synchronized (scheduledInvalidationInterval) {
cacheInvalidationTimer.cancel(); // terminates the timer thread
invalidateCache();
}
}
}
}, delayForCacheInvalidationInMilliseconds);
@@ -38,7 +38,7 @@ public class AdminConsoleEntryPoint extends AbstractEntryPoint implements Regatt
regattaDisplayers = new HashSet<RegattaDisplayer>();
EventStructureManagementPanel eventStructureManagementPanel = new EventStructureManagementPanel(sailingService, this, stringMessages, this);
RegattaStructureManagementPanel eventStructureManagementPanel = new RegattaStructureManagementPanel(sailingService, this, stringMessages, this);
tabPanel.add(eventStructureManagementPanel, stringMessages.regattas());
regattaDisplayers.add(eventStructureManagementPanel);
TracTracEventManagementPanel tractracEventManagementPanel = new TracTracEventManagementPanel(sailingService, this, this, stringMessages);
@@ -10,14 +10,18 @@ import com.sap.sailing.gwt.ui.client.StringMessages;
public class RegattaConfigImagesBarCell extends ImagesBarCell {
static final String ACTION_REMOVE = "ACTION_REMOVE";
static final String ACTION_EDIT = "ACTION_EDIT";
public RegattaConfigImagesBarCell(StringMessages stringConstants) {
super();
this.stringConstants = stringConstants;
this.stringMessages = stringConstants;
}
public RegattaConfigImagesBarCell(SafeHtmlRenderer<String> renderer, StringMessages stringConstants) {
super();
this.stringConstants = stringConstants;
this.stringMessages = stringConstants;
}
private static ImagesBarTemplates templates = GWT.create(ImagesBarTemplates.class);
@@ -28,9 +32,7 @@ public class RegattaConfigImagesBarCell extends ImagesBarCell {
private static final SafeHtml ICON_REMOVE = makeImage(resources.removeIcon());
private static final SafeHtml ICON_EDIT_RACES = makeImage(resources.linkIcon());
private StringMessages stringConstants;
private StringMessages stringMessages;
@Override
protected void render(com.google.gwt.cell.client.Cell.Context context, SafeHtml data, SafeHtmlBuilder sb) {
@@ -45,13 +47,10 @@ public class RegattaConfigImagesBarCell extends ImagesBarCell {
SafeStyles imgStyle = SafeStylesUtils.fromTrustedString("float:left;cursor:hand;cursor:pointer;padding-right:5px;");
SafeHtml rendered = templates.cell("ACTION_EDIT", imgStyle, stringConstants.actionEdit(), ICON_EDIT);
SafeHtml rendered = templates.cell(ACTION_EDIT, imgStyle, stringMessages.actionEdit(), ICON_EDIT);
sb.append(rendered);
rendered = templates.cell("ACTION_EDIT_RACES", imgStyle, stringConstants.actionEditRaces(), ICON_EDIT_RACES);
sb.append(rendered);
rendered = templates.cell("ACTION_REMOVE", imgStyle, stringConstants.actionRemove(), ICON_REMOVE);
rendered = templates.cell(ACTION_REMOVE, imgStyle, stringMessages.actionRemove(), ICON_REMOVE);
sb.append(rendered);
}
}
@@ -1,22 +0,0 @@
package com.sap.sailing.gwt.ui.adminconsole;
import java.util.Collection;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.shared.RegattaDTO;
public class RegattaCreateDialog extends RegattaDialog {
public RegattaCreateDialog(Collection<RegattaDTO> existingRegattas,
StringMessages stringConstants, AsyncCallback<RegattaDTO> callback) {
super(new RegattaDTO(), new RegattaParameterValidator(stringConstants, existingRegattas),
stringConstants, callback);
nameEntryField = createTextBox(null);
nameEntryField.setWidth("200px");
boatClassEntryField = createTextBox(null);
boatClassEntryField.setWidth("200px");
}
}
@@ -1,102 +0,0 @@
package com.sap.sailing.gwt.ui.adminconsole;
import java.util.ArrayList;
import java.util.Collection;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Grid;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;
import com.sap.sailing.gwt.ui.client.DataEntryDialog;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.shared.BoatClassDTO;
import com.sap.sailing.gwt.ui.shared.RegattaDTO;
public class RegattaDialog extends DataEntryDialog<RegattaDTO> {
protected StringMessages stringConstants;
protected RegattaDTO regatta;
protected TextBox nameEntryField;
protected TextBox boatClassEntryField;
protected static class RegattaParameterValidator implements Validator<RegattaDTO> {
private StringMessages stringConstants;
private ArrayList<RegattaDTO> existingRegattas;
public RegattaParameterValidator(StringMessages stringConstants, Collection<RegattaDTO> existingRegattas) {
this.stringConstants = stringConstants;
this.existingRegattas = new ArrayList<RegattaDTO>(existingRegattas);
}
@Override
public String getErrorMessage(RegattaDTO regattaToValidate) {
String errorMessage = null;
boolean nameNotEmpty = regattaToValidate.name != null && regattaToValidate.name.length() > 0;
boolean boatClassNotEmpty = regattaToValidate.boatClass != null && regattaToValidate.boatClass.name.length() > 0;
boolean unique = true;
for (RegattaDTO regatta : existingRegattas) {
if (regatta.name.equals(regattaToValidate.name)) {
unique = false;
break;
}
}
if (!nameNotEmpty) {
errorMessage = stringConstants.pleaseEnterNonEmptyName();
} else if (!boatClassNotEmpty) {
errorMessage = stringConstants.pleaseEnterNonEmptyName();
} else if (!unique) {
errorMessage = stringConstants.regattaWithThisNameAlreadyExists();
}
return errorMessage;
}
}
public RegattaDialog(RegattaDTO regatta, RegattaParameterValidator validator, StringMessages stringConstants,
AsyncCallback<RegattaDTO> callback) {
super(stringConstants.regatta(), null, stringConstants.ok(), stringConstants.cancel(), validator,
callback);
this.stringConstants = stringConstants;
this.regatta = regatta;
}
@Override
protected RegattaDTO getResult() {
regatta.name = nameEntryField.getText();
regatta.boatClass = new BoatClassDTO(boatClassEntryField.getText(), 0.0);
return regatta;
}
@Override
protected Widget getAdditionalWidget() {
VerticalPanel panel = new VerticalPanel();
Widget additionalWidget = super.getAdditionalWidget();
if (additionalWidget != null) {
panel.add(additionalWidget);
}
Grid formGrid = new Grid(2, 2);
panel.add(formGrid);
formGrid.setWidget(0, 0, new Label(stringConstants.name() + ":"));
formGrid.setWidget(0, 1, nameEntryField);
formGrid.setWidget(1, 0, new Label(stringConstants.boatClass() + ":"));
formGrid.setWidget(1, 1, boatClassEntryField);
return panel;
}
@Override
public void show() {
super.show();
nameEntryField.setFocus(true);
}
}
@@ -55,7 +55,7 @@ import com.sap.sailing.gwt.ui.shared.SeriesDTO;
* @author Frank Mittag (C5163974)
*
*/
public class EventStructureManagementPanel extends SimplePanel implements RegattaDisplayer {
public class RegattaStructureManagementPanel extends SimplePanel implements RegattaDisplayer {
private final SailingServiceAsync sailingService;
private final ErrorReporter errorReporter;
private final StringMessages stringMessages;
@@ -75,7 +75,7 @@ public class EventStructureManagementPanel extends SimplePanel implements Regatt
private final AdminConsoleTableResources tableRes = GWT.create(AdminConsoleTableResources.class);
private boolean supportEvents = false;
public EventStructureManagementPanel(SailingServiceAsync sailingService, ErrorReporter errorReporter,
public RegattaStructureManagementPanel(SailingServiceAsync sailingService, ErrorReporter errorReporter,
StringMessages stringMessages, RegattaRefresher regattaRefresher) {
this.sailingService = sailingService;
this.stringMessages = stringMessages;
@@ -252,12 +252,11 @@ public class EventStructureManagementPanel extends SimplePanel implements Regatt
regattaActionColumn.setFieldUpdater(new FieldUpdater<RegattaDTO, String>() {
@Override
public void update(int index, RegattaDTO regatta, String value) {
if ("ACTION_REMOVE".equals(value)) {
if (Window.confirm("Do you really want to remove the regatta: '" + regatta.name + "' ?")) {
if (RegattaConfigImagesBarCell.ACTION_REMOVE.equals(value)) {
if (Window.confirm(stringMessages.doYouReallyWantToRemoveRegatta(regatta.name))) {
removeRegatta(regatta);
}
} else if ("ACTION_EDIT".equals(value)) {
} else if ("ACTION_EDIT_RACES".equals(value)) {
} else if (RegattaConfigImagesBarCell.ACTION_EDIT.equals(value)) {
addRaceToRegattaSeries(regatta);
}
}
@@ -115,9 +115,9 @@ public class RegattaWithSeriesAndFleetsCreateDialog extends DataEntryDialog<Rega
this.regatta = new RegattaDTO();
nameEntryField = createTextBox(null);
nameEntryField.setWidth("200px");
nameEntryField.setVisibleLength(40);
boatClassEntryField = createTextBox(null);
boatClassEntryField.setWidth("150px");
boatClassEntryField.setVisibleLength(20);
createdSeries = new ArrayList<SeriesDTO>();
seriesGrid = new Grid(0, 0);
@@ -127,10 +127,8 @@ public class RegattaWithSeriesAndFleetsCreateDialog extends DataEntryDialog<Rega
protected RegattaDTO getResult() {
regatta.name = nameEntryField.getText();
regatta.boatClass = new BoatClassDTO(boatClassEntryField.getText(), 0.0);
regatta.series = new ArrayList<SeriesDTO>();
regatta.series.addAll(createdSeries);
return regatta;
}
@@ -143,22 +141,17 @@ public class RegattaWithSeriesAndFleetsCreateDialog extends DataEntryDialog<Rega
}
Grid formGrid = new Grid(2, 2);
panel.add(formGrid);
formGrid.setWidget(0, 0, new Label(stringConstants.name() + ":"));
formGrid.setWidget(0, 1, nameEntryField);
formGrid.setWidget(1, 0, new Label(stringConstants.boatClass() + ":"));
formGrid.setWidget(1, 1, boatClassEntryField);
panel.add(createHeadlineLabel(stringConstants.series()));
panel.add(seriesGrid);
Button addSeriesButton = new Button("Add series");
addSeriesButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
RegattaDTO result = getResult();
SeriesWithFleetsCreateDialog dialog = new SeriesWithFleetsCreateDialog(Collections
.unmodifiableCollection(result.series), stringConstants, new AsyncCallback<SeriesDTO>() {
@Override
@@ -175,7 +168,6 @@ public class RegattaWithSeriesAndFleetsCreateDialog extends DataEntryDialog<Rega
}
});
panel.add(addSeriesButton);
return panel;
}
@@ -53,7 +53,6 @@ public class SeriesWithFleetsCreateDialog extends DataEntryDialog<SeriesDTO> {
public String getErrorMessage(SeriesDTO seriesToValidate) {
String errorMessage = null;
boolean nameNotEmpty = seriesToValidate.name != null && seriesToValidate.name.length() > 0;
boolean unique = true;
for (SeriesDTO series : existingSeries) {
if (series.name.equals(seriesToValidate.name)) {
@@ -61,29 +60,24 @@ public class SeriesWithFleetsCreateDialog extends DataEntryDialog<SeriesDTO> {
break;
}
}
if (!nameNotEmpty) {
errorMessage = stringConstants.pleaseEnterNonEmptyName();
} else if (!unique) {
errorMessage = stringConstants.seriesWithThisNameAlreadyExists();
}
if(errorMessage == null) {
if (errorMessage == null) {
List<FleetDTO> fleetsToValidate = seriesToValidate.getFleets();
int index = 0;
boolean fleetNameNotEmpty = true;
for (FleetDTO fleet : fleetsToValidate) {
fleetNameNotEmpty = fleet.name != null && fleet.name.length() > 0;
if(!fleetNameNotEmpty) {
if (!fleetNameNotEmpty) {
break;
}
index++;
}
int index2 = 0;
boolean fleetUnique = true;
HashSet<String> setToFindDuplicates = new HashSet<String>();
for (FleetDTO fleet: fleetsToValidate) {
if(!setToFindDuplicates.add(fleet.name)) {
@@ -92,18 +86,14 @@ public class SeriesWithFleetsCreateDialog extends DataEntryDialog<SeriesDTO> {
}
index2++;
}
if (!fleetNameNotEmpty) {
errorMessage = stringConstants.fleet() + " " + (index + 1) + ": " + stringConstants.pleaseEnterNonEmptyName();
} else if (!fleetUnique) {
errorMessage = stringConstants.fleet() + " " + (index2 + 1) + ": " + stringConstants.fleetWithThisNameAlreadyExists();
}
}
return errorMessage;
}
}
public SeriesWithFleetsCreateDialog(Collection<SeriesDTO> existingSeries, StringMessages stringConstants,
@@ -112,64 +102,55 @@ public class SeriesWithFleetsCreateDialog extends DataEntryDialog<SeriesDTO> {
new SeriesParameterValidator(stringConstants, existingSeries), callback);
this.stringConstants = stringConstants;
this.series = new SeriesDTO();
nameEntryField = createTextBox(null);
nameEntryField.setWidth("200px");
nameEntryField.setVisibleLength(40);
isMedalSeriesCheckbox = createCheckbox(stringConstants.medalSeries());
fleetNameEntryFields = new ArrayList<TextBox>();
fleetColorEntryFields = new ArrayList<ListBox>();
fleetOrderNoEntryFields = new ArrayList<IntegerBox>();
fleetsGrid = new Grid(0, 0);
// create at least one fleet
createFleetNameWidget("Default");
createFleetOrderNoWidget(0);
createFleetColorWidget(null);
addFleetWidget("Default", 0, null);
}
private Widget createFleetNameWidget(String defaultName) {
TextBox textBox = createTextBox(defaultName);
textBox.setWidth("175px");
textBox.setVisibleLength(40);
fleetNameEntryFields.add(textBox);
return textBox;
}
private Widget createFleetColorWidget(Color defaultColor) {
final ListBox listBox = createListBox(false);
final int fleetIndex = fleetNameEntryFields.size();
final int fleetIndex = fleetNameEntryFields.size()-1;
listBox.addChangeHandler(new ChangeHandler() {
@Override
public void onChange(ChangeEvent event) {
// set default order no of the selected color
int selIndex = listBox.getSelectedIndex();
IntegerBox orderNoBox = fleetOrderNoEntryFields.get(fleetIndex-1);
if(selIndex == 0) {
IntegerBox orderNoBox = fleetOrderNoEntryFields.get(fleetIndex);
TextBox nameBox = fleetNameEntryFields.get(fleetIndex);
if (selIndex == 0) {
orderNoBox.setValue(0);
} else {
String value = listBox.getValue(selIndex);
for(FleetColors color: FleetColors.values()) {
if(color.name().equals(value)) {
orderNoBox.setValue(color.getDefaultOrderNo());
break;
}
final FleetColors color = FleetColors.valueOf(value);
if (color != null) {
orderNoBox.setValue(color.getDefaultOrderNo());
nameBox.setValue(""+color.name().charAt(0)+color.name().toLowerCase().substring(1));
}
}
validate();
}
});
listBox.addItem(stringConstants.noColor());
for(FleetColors value: FleetColors.values())
for(FleetColors value: FleetColors.values()) {
listBox.addItem(value.name());
}
if(defaultColor == null) {
listBox.setSelectedIndex(0);
}
fleetColorEntryFields.add(listBox);
return listBox;
}
@@ -183,7 +164,6 @@ public class SeriesWithFleetsCreateDialog extends DataEntryDialog<SeriesDTO> {
protected SeriesDTO getResult() {
series.name = nameEntryField.getText();
series.setMedal(isMedalSeriesCheckbox.getValue());
List<FleetDTO> fleets = new ArrayList<FleetDTO>();
int groupsCount = fleetNameEntryFields.size();
for(int i = 0; i < groupsCount; i++) {
@@ -197,9 +177,7 @@ public class SeriesWithFleetsCreateDialog extends DataEntryDialog<SeriesDTO> {
fleetDTO.setOrderNo(orderNo);
fleets.add(fleetDTO);
}
series.setFleets(fleets);
return series;
}
@@ -216,7 +194,6 @@ public class SeriesWithFleetsCreateDialog extends DataEntryDialog<SeriesDTO> {
}
}
}
return result;
}
@@ -229,50 +206,44 @@ public class SeriesWithFleetsCreateDialog extends DataEntryDialog<SeriesDTO> {
}
Grid formGrid = new Grid(2, 2);
panel.add(formGrid);
formGrid.setWidget(0, 0, new Label(stringConstants.name() + ":"));
formGrid.setWidget(0, 1, nameEntryField);
formGrid.setWidget(1, 1, isMedalSeriesCheckbox);
panel.add(createHeadlineLabel(stringConstants.fleets()));
panel.add(fleetsGrid);
Button addGroupButton = new Button("Add fleet");
addGroupButton.addClickHandler(new ClickHandler() {
Button addFleetButton = new Button(stringConstants.addFleet());
addFleetButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
createFleetNameWidget(null);
createFleetOrderNoWidget(0);
createFleetColorWidget(null);
addFleetWidget(null, 0, null);
updateFleetsGrid(panel);
}
});
panel.add(addGroupButton);
panel.add(addFleetButton);
updateFleetsGrid(panel);
return panel;
}
private void addFleetWidget(String fleetName, int ordering, Color color) {
createFleetNameWidget(fleetName);
createFleetOrderNoWidget(ordering);
createFleetColorWidget(color);
}
private void updateFleetsGrid(VerticalPanel parentPanel) {
int widgetIndex = parentPanel.getWidgetIndex(fleetsGrid);
parentPanel.remove(fleetsGrid);
int fleetCount = fleetNameEntryFields.size();
fleetsGrid = new Grid(fleetCount + 1, 3);
fleetsGrid.setCellSpacing(4);
fleetsGrid.setHTML(0, 0, stringConstants.name());
fleetsGrid.setHTML(0, 1, stringConstants.rank());
fleetsGrid.setHTML(0, 2, stringConstants.color());
fleetsGrid.setHTML(0, 0, stringConstants.color());
fleetsGrid.setHTML(0, 1, stringConstants.name());
fleetsGrid.setHTML(0, 2, stringConstants.rank());
for(int i = 0; i < fleetCount; i++) {
fleetsGrid.setWidget(i+1, 0, fleetNameEntryFields.get(i));
fleetsGrid.setWidget(i+1, 1, fleetOrderNoEntryFields.get(i));
fleetsGrid.setWidget(i+1, 2, fleetColorEntryFields.get(i));
fleetsGrid.setWidget(i+1, 0, fleetColorEntryFields.get(i));
fleetsGrid.setWidget(i+1, 1, fleetNameEntryFields.get(i));
fleetsGrid.setWidget(i+1, 2, fleetOrderNoEntryFields.get(i));
}
parentPanel.insert(fleetsGrid, widgetIndex);
}
@@ -320,4 +320,6 @@ public interface StringMessages extends Messages {
String medalSeries();
String noColor();
String noRegatta();
String addFleet();
String doYouReallyWantToRemoveRegatta(String name);
}
@@ -318,3 +318,5 @@ color=Color
medalSeries=Medal Series
noColor=No color
noRegatta=No regatta
addFleet=Add fleet
doYouReallyWantToRemoveRegatta=Do you really want to remove the regatta "{0}"?
@@ -319,3 +319,5 @@ color=Farbe
medalSeries=Medal Series
noColor=Keine Farbe
noRegatta=Keine Regatta
addFleet=Gruppe hinzufügen
doYouReallyWantToRemoveRegatta=Möchten Sie wirklich Regatta "{0}" löschen?
@@ -453,21 +453,22 @@ public class LeaderboardPanel extends FormPanel implements TimeListener, PlaySta
if (entry != null) {
String fleetColorBarStyle = "";
if (entry.fleet != null && entry.fleet.getColor() != null) {
fleetColorBarStyle = " border-bottom: 3px solid "+entry.fleet.getColor().getAsHtml()+";";
fleetColorBarStyle = " style=\"border-bottom: 3px solid "+entry.fleet.getColor().getAsHtml()+";\"";
}
html.appendHtmlConstant("<div"+fleetColorBarStyle+">");
// don't show points if max points / penalty
if (entry.reasonForMaxPoints == null || entry.reasonForMaxPoints == MaxPointsReason.NONE) {
if (!entry.discarded) {
html.appendHtmlConstant("<span style=\"font-weight: bold;"+fleetColorBarStyle+"\">");
html.appendHtmlConstant("<span style=\"font-weight: bold;\">");
html.appendHtmlConstant(entry.totalPoints == 0 ? "" : ""+entry.totalPoints);
html.appendHtmlConstant("</span>");
} else {
html.appendHtmlConstant(" <span style=\"opacity: 0.5;"+fleetColorBarStyle+"\"><del>");
html.appendHtmlConstant(" <span style=\"opacity: 0.5;\"><del>");
html.appendHtmlConstant(entry.netPoints == 0 ? "" : ""+entry.netPoints);
html.appendHtmlConstant("</del></span>");
}
} else {
html.appendHtmlConstant(" <span style=\"opacity: 0.5;"+fleetColorBarStyle+"\">");
html.appendHtmlConstant(" <span style=\"opacity: 0.5;\">");
if (entry.discarded) {
html.appendHtmlConstant("<del>");
}
@@ -477,6 +478,7 @@ public class LeaderboardPanel extends FormPanel implements TimeListener, PlaySta
}
html.appendHtmlConstant("</span>");
}
html.appendHtmlConstant("</div>");
}
}