added "list races" capability including result table sorting

This commit is contained in:
Axel Uhl committed 2011-07-05 15:07:57 +02:00
1 parent c141753ab9
commit 349d39c997
41 files changed
+26996 -20915

No files matched your search

@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<launchConfiguration type="org.eclipse.jdt.junit.launchconfig">
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
<listEntry value="/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test"/>
</listAttribute>
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
<listEntry value="2"/>
</listAttribute>
<listAttribute key="org.eclipse.debug.ui.favoriteGroups">
<listEntry value="org.eclipse.debug.ui.launchGroup.debug"/>
<listEntry value="org.eclipse.debug.ui.launchGroup.run"/>
</listAttribute>
<stringAttribute key="org.eclipse.jdt.junit.CONTAINER" value="=com.sap.sailing.domain.test/src&lt;com.sap.sailing.domain.test"/>
<booleanAttribute key="org.eclipse.jdt.junit.KEEPRUNNING_ATTR" value="false"/>
<stringAttribute key="org.eclipse.jdt.junit.TESTNAME" value=""/>
<stringAttribute key="org.eclipse.jdt.junit.TEST_KIND" value="org.eclipse.jdt.junit.loader.junit4"/>
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value=""/>
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="com.sap.sailing.domain.test"/>
<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Dhttp.proxyHost=proxy -Dhttp.proxyPort=8080 -XX:+UseParallelGC"/>
</launchConfiguration>
@@ -2,18 +2,57 @@ package com.sap.sailing.domain.tractracadapter;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.logging.Logger;
import com.sap.sailing.domain.base.TimePoint;
import com.sap.sailing.domain.base.impl.MillisecondsTimePoint;
import com.sap.sailing.util.DateParser;
import com.sap.sailing.util.InvalidDateException;
public class RaceRecord {
private static final Logger logger = Logger.getLogger(RaceRecord.class.getName());
private final String name;
private final String replayURL;
private final String ID;
private final URL paramURL;
private final TimePoint trackingstarttime;
private final TimePoint trackingendtime;
private final TimePoint racestarttime;
public RaceRecord(URL jsonURL, String name, String replayURL, String ID) throws MalformedURLException {
public RaceRecord(URL jsonURL, String name, String replayURL, String ID, String trackingstarttime,
String trackingendtime, String racestarttime) throws MalformedURLException {
super();
this.name = name;
this.replayURL = replayURL;
this.ID = ID;
TimePoint tp = null;
if (trackingstarttime != null) {
try {
tp = new MillisecondsTimePoint(DateParser.parse(trackingstarttime).getTime());
} catch (InvalidDateException e) {
logger.warning("Unable to parse trackingstarttime of race "+name+": "+trackingstarttime+". Leaving null.");
}
}
this.trackingstarttime = tp;
tp = null;
if (trackingendtime != null) {
try {
tp = new MillisecondsTimePoint(DateParser.parse(trackingendtime).getTime());
} catch (InvalidDateException e) {
logger.warning("Unable to parse trackingendtime of race "+name+": "+trackingendtime+". Leaving null.");
}
}
this.trackingendtime = tp;
tp = null;
if (racestarttime != null) {
try {
tp = new MillisecondsTimePoint(DateParser.parse(racestarttime).getTime());
} catch (InvalidDateException e) {
logger.warning("Unable to parse racestarttime of race "+name+": "+racestarttime+". Leaving null.");
}
}
this.racestarttime = tp;
String jsonURLAsString = jsonURL.toString();
int indexOfLastSlash = jsonURLAsString.lastIndexOf('/');
@@ -38,6 +77,18 @@ public class RaceRecord {
public URL getParamURL() {
return paramURL;
}
public TimePoint getTrackingStartTime() {
return trackingstarttime;
}
public TimePoint getTrackingEndTime() {
return trackingendtime;
}
public TimePoint getRaceStartTime() {
return racestarttime;
}
}
@@ -27,7 +27,10 @@ public class JSONServiceImpl implements JSONService {
for (Object raceEntry : (JSONArray) jsonObject.get("races")) {
JSONObject jsonRaceEntry = (JSONObject) raceEntry;
RaceRecord raceRecord = new RaceRecord(jsonURL, (String) jsonRaceEntry.get("name"),
(String) jsonRaceEntry.get("url"), (String) jsonRaceEntry.get("id"));
(String) jsonRaceEntry.get("url"), (String) jsonRaceEntry.get("id"),
(String) jsonRaceEntry.get("tracking_starttime"),
(String) jsonRaceEntry.get("tracking_endtime"),
(String) jsonRaceEntry.get("race_starttime"));
raceRecords.add(raceRecord);
}
}
@@ -2,7 +2,7 @@
// $Id: DateParser.java,v 1.5 2005/05/14 15:53:00 dbarashev Exp $
// (c) COPYRIGHT MIT, INRIA and Keio, 2000.
// Please first read the full copyright statement in file COPYRIGHT.html
package com.sap.sailing.server.util;
package com.sap.sailing.util;
import java.util.Calendar;
import java.util.Date;
@@ -1,4 +1,4 @@
package com.sap.sailing.server.util;
package com.sap.sailing.util;
public class InvalidDateException extends Exception {
private static final long serialVersionUID = 1144913537358071746L;
@@ -7,6 +7,13 @@ Bundle-Vendor: SAP
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
Eclipse-RegisterBuddy: com.google.gwt.osgi
Require-Bundle: javax.servlet;bundle-version="2.5.0",
com.google.gwt.osgi;bundle-version="2.3.0"
com.google.gwt.osgi;bundle-version="2.3.0",
com.sap.sailing.domain,
com.sap.sailing.server,
org.eclipse.osgi,
com.sap.sailing.domain.tractracadapter,
org.json.simple;bundle-version="1.1.0"
Bundle-ClassPath: war/WEB-INF/classes/,
.
Bundle-Activator: com.sap.sailing.gwt.ui.server.Activator
Bundle-ActivationPolicy: lazy
@@ -1,14 +1,22 @@
package com.sap.sailing.gwt.ui.client;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import com.google.gwt.cell.client.AbstractCell;
import com.google.gwt.cell.client.Cell;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.KeyUpEvent;
import com.google.gwt.event.dom.client.KeyUpHandler;
import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
import com.google.gwt.user.cellview.client.CellList;
import com.google.gwt.user.cellview.client.CellTable;
import com.google.gwt.user.cellview.client.Column;
import com.google.gwt.user.cellview.client.ColumnSortEvent.Handler;
import com.google.gwt.user.cellview.client.ColumnSortEvent.ListHandler;
import com.google.gwt.user.cellview.client.TextColumn;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.FormPanel;
@@ -20,7 +28,10 @@ import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.ListBox;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.view.client.ListDataProvider;
import com.google.gwt.view.client.MultiSelectionModel;
import com.sap.sailing.gwt.ui.shared.EventDAO;
import com.sap.sailing.gwt.ui.shared.RaceRecordDAO;
/**
* Allows the user to start and stop tracking of events, regattas and races using the TracTrac connector.
@@ -36,7 +47,7 @@ import com.sap.sailing.gwt.ui.shared.EventDAO;
*
*/
public class EventManagementPanel extends FormPanel {
private CellList<EventDAO> eventsList;
private final ListDataProvider<EventDAO> eventsList;
private final SailingServiceAsync sailingService;
private final ErrorReporter errorReporter;
private final IntegerBox storedPortIntegerbox;
@@ -46,9 +57,10 @@ public class EventManagementPanel extends FormPanel {
private final IntegerBox livePortIntegerbox;
private final TextBox hostnameTextbox;
private final TextBox eventNameTextbox;
private final ListDataProvider<RaceRecordDAO> raceList;
public EventManagementPanel(SailingServiceAsync sailingService, ErrorReporter errorReporter) {
public EventManagementPanel(final SailingServiceAsync sailingService, ErrorReporter errorReporter) {
this.sailingService = sailingService;
this.errorReporter = errorReporter;
StringConstants stringConstants = GWT.create(StringConstants.class);
@@ -56,11 +68,11 @@ public class EventManagementPanel extends FormPanel {
this.setWidget(verticalPanel);
verticalPanel.setSize("100%", "100%");
Grid grid = new Grid(7, 2);
Grid grid = new Grid(8, 2);
verticalPanel.add(grid);
verticalPanel.setCellWidth(grid, "100%");
Label lblPredefined = new Label("Tracked Before");
Label lblPredefined = new Label(stringConstants.trackedBefore());
grid.setWidget(0, 0, lblPredefined);
ListBox comboBox = new ListBox();
@@ -68,9 +80,15 @@ public class EventManagementPanel extends FormPanel {
comboBox.addItem(stringConstants.kielWeel2011());
comboBox.addItem(stringConstants.stgAccount());
Button btnAdd = new Button("Track Again");
grid.setWidget(1, 1, btnAdd);
btnAdd.setWidth("100%");
Button btnListRaces = new Button(stringConstants.listRaces());
grid.setWidget(1, 1, btnListRaces);
btnListRaces.setWidth("100%");
btnListRaces.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
fillRaces(sailingService);
}
});
Label lblTrackNewEvent = new Label("Track New Event");
grid.setWidget(2, 0, lblTrackNewEvent);
@@ -164,6 +182,32 @@ public class EventManagementPanel extends FormPanel {
Label lblEventsConnectedTo = new Label("Events Currently Tracked");
grid.setWidget(5, 0, lblEventsConnectedTo);
TextColumn<RaceRecordDAO> raceNameColumn = new TextColumn<RaceRecordDAO>() {
@Override
public String getValue(RaceRecordDAO object) {
return object.name;
}
};
TextColumn<RaceRecordDAO> raceStartTrackingColumn = new TextColumn<RaceRecordDAO>() {
@Override
public String getValue(RaceRecordDAO object) {
return object.trackingStartTime.toString();
}
};
raceNameColumn.setSortable(true);
raceStartTrackingColumn.setSortable(true);
CellTable<RaceRecordDAO> raceTable = new CellTable<RaceRecordDAO>(/* pageSize */ 100);
raceTable.addColumn(raceNameColumn, "Name");
raceTable.addColumn(raceStartTrackingColumn, "Tracking Started");
grid.setWidget(6, 0, raceTable);
grid.getCellFormatter().setHeight(6, 0, "100%");
raceTable.setWidth("100%");
raceTable.setSelectionModel(new MultiSelectionModel<RaceRecordDAO>() {});
raceList = new ListDataProvider<RaceRecordDAO>();
raceList.addDataDisplay(raceTable);
Handler columnSortHandler = getRaceTableColumnSortHandler(raceList.getList(), raceNameColumn, raceStartTrackingColumn);
raceTable.addColumnSortHandler(columnSortHandler);
Cell<EventDAO> eventCell = new AbstractCell<EventDAO>() {
@Override
@@ -171,14 +215,27 @@ public class EventManagementPanel extends FormPanel {
sb.appendEscaped(value.name);
}
};
eventsList = new CellList<EventDAO>(eventCell);
grid.setWidget(6, 0, eventsList);
final CellList<EventDAO> eventsCellList = new CellList<EventDAO>(eventCell);
grid.setWidget(7, 0, eventsCellList);
grid.getCellFormatter().setHeight(6, 0, "100%");
eventsList.setWidth("100%");
eventsList.setVisibleRange(0, 5);
eventsCellList.setWidth("100%");
eventsCellList.setVisibleRange(0, 5);
eventsCellList.setSelectionModel(new MultiSelectionModel<EventDAO>() {});
eventsList = new ListDataProvider<EventDAO>();
eventsList.addDataDisplay(eventsCellList);
Button btnRemove = new Button("Remove");
grid.setWidget(6, 1, btnRemove);
btnRemove.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent click) {
for (EventDAO event : eventsCellList.getVisibleItems()) {
if (eventsCellList.getSelectionModel().isSelected(event)) {
GWT.log("Event "+event.name+" was selected and would be removed");
}
}
}
});
grid.setWidget(7, 1, btnRemove);
btnRemove.setWidth("100%");
grid.getCellFormatter().setVerticalAlignment(6, 1, HasVerticalAlignment.ALIGN_TOP);
grid.getCellFormatter().setVerticalAlignment(6, 0, HasVerticalAlignment.ALIGN_TOP);
@@ -189,6 +246,25 @@ public class EventManagementPanel extends FormPanel {
updateStoredURI();
updateJsonUrl();
}
private ListHandler<RaceRecordDAO> getRaceTableColumnSortHandler(List<RaceRecordDAO> raceRecords,
Column<RaceRecordDAO, ?> nameColumn, Column<RaceRecordDAO, ?> trackingStartColumn) {
ListHandler<RaceRecordDAO> result = new ListHandler<RaceRecordDAO>(raceRecords);
result.setComparator(nameColumn, new Comparator<RaceRecordDAO>() {
@Override
public int compare(RaceRecordDAO o1, RaceRecordDAO o2) {
return o1.name.compareTo(o2.name);
}
});
result.setComparator(trackingStartColumn, new Comparator<RaceRecordDAO>() {
@Override
public int compare(RaceRecordDAO o1, RaceRecordDAO o2) {
return o1.trackingStartTime == null ? -1 : o2.trackingStartTime == null ? 1 : o1.trackingStartTime
.compareTo(o2.trackingStartTime);
}
});
return result;
}
private void updatePortStoredData() {
storedPortIntegerbox.setValue(livePortIntegerbox.getValue()+1);
@@ -207,11 +283,11 @@ public class EventManagementPanel extends FormPanel {
}
private void fillEvents() {
sailingService.listEvents(new AsyncCallback<EventDAO[]>() {
sailingService.listEvents(new AsyncCallback<List<EventDAO>>() {
@Override
public void onSuccess(EventDAO[] result) {
eventsList.setRowCount(result.length);
eventsList.setRowData(Arrays.asList(result));
public void onSuccess(List<EventDAO> result) {
eventsList.getList().clear();
eventsList.getList().addAll(result);
}
@Override
@@ -221,4 +297,19 @@ public class EventManagementPanel extends FormPanel {
});
}
private void fillRaces(final SailingServiceAsync sailingService) {
sailingService.listRacesInEvent(jsonURLBox.getValue(), new AsyncCallback<List<RaceRecordDAO>>() {
@Override
public void onFailure(Throwable caught) {
EventManagementPanel.this.errorReporter.reportError("Error trying to list races: "+caught.getMessage());
}
@Override
public void onSuccess(List<RaceRecordDAO> result) {
raceList.getList().clear();
raceList.getList().addAll(result);
}
});
}
}
@@ -1,13 +1,18 @@
package com.sap.sailing.gwt.ui.client;
import java.util.List;
import com.google.gwt.user.client.rpc.RemoteService;
import com.google.gwt.user.client.rpc.RemoteServiceRelativePath;
import com.sap.sailing.gwt.ui.shared.EventDAO;
import com.sap.sailing.gwt.ui.shared.RaceRecordDAO;
/**
* The client side stub for the RPC service.
*/
@RemoteServiceRelativePath("sailing")
public interface SailingService extends RemoteService {
EventDAO[] listEvents();
List<EventDAO> listEvents();
List<RaceRecordDAO> listRacesInEvent(String eventJsonURL) throws Exception;
}
@@ -1,11 +1,16 @@
package com.sap.sailing.gwt.ui.client;
import java.util.List;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.sap.sailing.gwt.ui.shared.EventDAO;
import com.sap.sailing.gwt.ui.shared.RaceRecordDAO;
/**
* The async counterpart of {@link SailingService}
*/
public interface SailingServiceAsync {
void listEvents(AsyncCallback<EventDAO[]> callback);
void listEvents(AsyncCallback<List<EventDAO>> callback);
void listRacesInEvent(String eventJsonURL, AsyncCallback<List<RaceRecordDAO>> callback);
}
@@ -7,4 +7,6 @@ public interface StringConstants extends Constants {
String kielWeel2011();
String stgAccount();
String tracTracEvents();
String trackedBefore();
String listRaces();
}
@@ -1,4 +1,6 @@
helloWorld=Hello World
kielWeel2011=Kiel Week 2011
stgAccount=STG Account
tracTracEvents=TracTrac Events
tracTracEvents=TracTrac Events
trackedBefore=Tracked Before
listRaces=List Races
@@ -0,0 +1,22 @@
package com.sap.sailing.gwt.ui.server;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
public class Activator implements BundleActivator {
private static BundleContext context;
@Override
public void start(BundleContext context) throws Exception {
Activator.context = context;
}
@Override
public void stop(BundleContext context) throws Exception {
}
public static BundleContext getDefault() {
return context;
}
}
@@ -1,12 +1,24 @@
package com.sap.sailing.gwt.ui.server;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import org.osgi.framework.BundleContext;
import org.osgi.util.tracker.ServiceTracker;
import com.google.gwt.user.server.rpc.RemoteServiceServlet;
import com.sap.sailing.domain.tractracadapter.RaceRecord;
import com.sap.sailing.gwt.ui.client.SailingService;
import com.sap.sailing.gwt.ui.shared.EventDAO;
import com.sap.sailing.gwt.ui.shared.RaceRecordDAO;
import com.sap.sailing.gwt.ui.shared.RegattaDAO;
import com.sap.sailing.server.RacingEventService;
/**
* The server side implementation of the RPC service.
@@ -14,8 +26,33 @@ import com.sap.sailing.gwt.ui.shared.RegattaDAO;
public class SailingServiceImpl extends RemoteServiceServlet implements SailingService {
private static final long serialVersionUID = 9031688830194537489L;
public EventDAO[] listEvents() throws IllegalArgumentException {
private RacingEventService service;
public SailingServiceImpl() {
BundleContext context = Activator.getDefault();
ServiceTracker<RacingEventService, RacingEventService> racingEventServiceTracker = new ServiceTracker<RacingEventService, RacingEventService>(
context, RacingEventService.class.getName(), null);
racingEventServiceTracker.open();
// grab the service
service = (RacingEventService) racingEventServiceTracker.getService();
}
public List<EventDAO> listEvents() throws IllegalArgumentException {
List<RegattaDAO> regattas = Collections.emptyList();
return new EventDAO[] { new EventDAO("Kiel Week", /* regattas */ regattas), new EventDAO("STG Training", /* regattas */ regattas) };
return Arrays.asList(new EventDAO[] { new EventDAO("Kiel Week", /* regattas */ regattas), new EventDAO("STG Training", /* regattas */ regattas) });
}
@Override
public List<RaceRecordDAO> listRacesInEvent(String eventJsonURL) throws MalformedURLException, IOException,
ParseException, org.json.simple.parser.ParseException {
List<RaceRecord> raceRecords;
raceRecords = service.getRaceRecords(new URL(eventJsonURL));
List<RaceRecordDAO> result = new ArrayList<RaceRecordDAO>();
for (RaceRecord raceRecord : raceRecords) {
result.add(new RaceRecordDAO(raceRecord.getID(), raceRecord.getName(), raceRecord.getParamURL().toString(),
raceRecord.getReplayURL(), raceRecord.getTrackingStartTime().asDate(), raceRecord.getTrackingEndTime().asDate(),
raceRecord.getRaceStartTime().asDate()));
}
return result;
}
}
@@ -0,0 +1,30 @@
package com.sap.sailing.gwt.ui.shared;
import java.util.Date;
import com.google.gwt.user.client.rpc.IsSerializable;
public class RaceRecordDAO implements IsSerializable {
public String name;
public String replayURL;
public String paramURL;
public String ID;
public Date trackingStartTime;
public Date trackingEndTime;
public Date raceStartTime;
public RaceRecordDAO() {}
public RaceRecordDAO(String id, String name, String paramURL, String replayURL,
Date trackingStartTime, Date trackingEndTime, Date raceStartTime) {
super();
this.name = name;
this.replayURL = replayURL;
this.paramURL = paramURL;
ID = id;
this.trackingStartTime = trackingStartTime;
this.trackingEndTime = trackingEndTime;
this.raceStartTime = raceStartTime;
}
}
@@ -0,0 +1,2 @@
serviceClass: com.sap.sailing.gwt.ui.client.SailingService
path: 883FF1AAEF122FE219AA3FCB3EE85ED1.gwt.rpc
@@ -0,0 +1,69 @@
com.google.gwt.event.shared.UmbrellaException, true, true, false, false, com.google.gwt.event.shared.UmbrellaException/3104463596, 3104463596
com.google.gwt.http.client.RequestException, true, true, false, false, com.google.gwt.http.client.RequestException/190587325, 190587325
com.google.gwt.jsonp.client.TimeoutException, true, true, false, false, com.google.gwt.jsonp.client.TimeoutException/1112787596, 1112787596
com.google.gwt.user.client.rpc.IncompatibleRemoteServiceException, true, true, true, true, com.google.gwt.user.client.rpc.IncompatibleRemoteServiceException/3936916533, 3936916533
com.google.gwt.user.client.rpc.InvocationException, true, false, false, false, com.google.gwt.user.client.rpc.InvocationException/1510557512, 1510557512
com.google.gwt.user.client.rpc.RpcTokenException, true, true, false, false, com.google.gwt.user.client.rpc.RpcTokenException/2345075298, 2345075298
com.google.gwt.user.client.rpc.SerializableException, true, true, false, false, com.google.gwt.user.client.rpc.SerializableException/3047383460, 3047383460
com.google.gwt.user.client.rpc.SerializationException, true, true, false, false, com.google.gwt.user.client.rpc.SerializationException/2836333220, 2836333220
com.google.gwt.user.client.rpc.ServiceDefTarget$NoServiceEntryPointSpecifiedException, true, true, false, false, com.google.gwt.user.client.rpc.ServiceDefTarget$NoServiceEntryPointSpecifiedException/3408313447, 3408313447
com.google.gwt.user.client.rpc.XsrfToken, false, false, true, true, com.google.gwt.user.client.rpc.XsrfToken/4254043109, 4254043109
com.google.web.bindery.event.shared.UmbrellaException, true, true, false, false, com.google.web.bindery.event.shared.UmbrellaException/1025846929, 1025846929
com.sap.sailing.gwt.ui.client.SailingService, false, false, false, false, _, 2610738066
com.sap.sailing.gwt.ui.shared.BoatClassDAO, true, true, false, false, com.sap.sailing.gwt.ui.shared.BoatClassDAO/876059280, 876059280
com.sap.sailing.gwt.ui.shared.EventDAO, true, true, false, false, com.sap.sailing.gwt.ui.shared.EventDAO/1398016458, 1398016458
[Lcom.sap.sailing.gwt.ui.shared.EventDAO;, true, true, false, false, [Lcom.sap.sailing.gwt.ui.shared.EventDAO;/3623408659, 3623408659
com.sap.sailing.gwt.ui.shared.RaceDAO, true, true, false, false, com.sap.sailing.gwt.ui.shared.RaceDAO/3256357629, 3256357629
[Lcom.sap.sailing.gwt.ui.shared.RaceDAO;, true, true, false, false, [Lcom.sap.sailing.gwt.ui.shared.RaceDAO;/3169813160, 3169813160
com.sap.sailing.gwt.ui.shared.RaceRecordDAO, true, true, false, false, com.sap.sailing.gwt.ui.shared.RaceRecordDAO/3433501710, 3433501710
[Lcom.sap.sailing.gwt.ui.shared.RaceRecordDAO;, true, true, false, false, [Lcom.sap.sailing.gwt.ui.shared.RaceRecordDAO;/2327423637, 2327423637
com.sap.sailing.gwt.ui.shared.RegattaDAO, true, true, false, false, com.sap.sailing.gwt.ui.shared.RegattaDAO/2714721467, 2714721467
[Lcom.sap.sailing.gwt.ui.shared.RegattaDAO;, true, true, false, false, [Lcom.sap.sailing.gwt.ui.shared.RegattaDAO;/3408153634, 3408153634
java.io.IOException, true, true, false, false, java.io.IOException/1159940531, 1159940531
java.io.UnsupportedEncodingException, true, true, false, false, java.io.UnsupportedEncodingException/1526756933, 1526756933
java.lang.ArithmeticException, true, true, false, false, java.lang.ArithmeticException/1539622151, 1539622151
java.lang.ArrayIndexOutOfBoundsException, true, true, false, false, java.lang.ArrayIndexOutOfBoundsException/600550433, 600550433
java.lang.ArrayStoreException, true, true, false, false, java.lang.ArrayStoreException/3540507190, 3540507190
java.lang.AssertionError, true, true, false, false, java.lang.AssertionError/3490171458, 3490171458
java.lang.Boolean, true, true, false, false, java.lang.Boolean/476441737, 476441737
java.lang.ClassCastException, true, true, false, false, java.lang.ClassCastException/702295179, 702295179
java.lang.Error, true, true, false, false, java.lang.Error/1331973429, 1331973429
java.lang.Exception, true, true, true, false, java.lang.Exception/1920171873, 1920171873
java.lang.IllegalArgumentException, true, true, false, false, java.lang.IllegalArgumentException/1755012560, 1755012560
java.lang.IllegalStateException, true, true, false, false, java.lang.IllegalStateException/1972187323, 1972187323
java.lang.IndexOutOfBoundsException, true, true, false, false, java.lang.IndexOutOfBoundsException/2489527753, 2489527753
java.lang.NegativeArraySizeException, true, true, false, false, java.lang.NegativeArraySizeException/3846860241, 3846860241
java.lang.NullPointerException, true, true, false, false, java.lang.NullPointerException/1463492344, 1463492344
java.lang.NumberFormatException, true, true, false, false, java.lang.NumberFormatException/3305228476, 3305228476
java.lang.RuntimeException, true, true, true, false, java.lang.RuntimeException/515124647, 515124647
java.lang.String, true, true, true, true, java.lang.String/2004016611, 2004016611
java.lang.StringIndexOutOfBoundsException, true, true, false, false, java.lang.StringIndexOutOfBoundsException/500777603, 500777603
java.lang.Throwable, true, true, true, false, java.lang.Throwable/2953622131, 2953622131
java.lang.UnsupportedOperationException, true, true, false, false, java.lang.UnsupportedOperationException/3744010015, 3744010015
java.lang.annotation.AnnotationFormatError, true, true, false, false, java.lang.annotation.AnnotationFormatError/2257184627, 2257184627
java.lang.annotation.AnnotationTypeMismatchException, true, true, false, false, java.lang.annotation.AnnotationTypeMismatchException/976205828, 976205828
java.security.DigestException, true, true, false, false, java.security.DigestException/629316798, 629316798
java.security.GeneralSecurityException, true, true, false, false, java.security.GeneralSecurityException/2669239907, 2669239907
java.security.NoSuchAlgorithmException, true, true, false, false, java.security.NoSuchAlgorithmException/2892037213, 2892037213
java.util.ArrayList, true, true, false, false, java.util.ArrayList/4159755760, 4159755760
java.util.Arrays$ArrayList, true, true, false, false, java.util.Arrays$ArrayList/2507071751, 2507071751
java.util.Collections$EmptyList, true, true, false, false, java.util.Collections$EmptyList/4157118744, 4157118744
java.util.Collections$EmptySet, true, true, false, false, java.util.Collections$EmptySet/3523698179, 3523698179
java.util.Collections$SingletonList, true, true, false, false, java.util.Collections$SingletonList/1586180994, 1586180994
java.util.ConcurrentModificationException, true, true, false, false, java.util.ConcurrentModificationException/2717383897, 2717383897
java.util.EmptyStackException, true, true, false, false, java.util.EmptyStackException/89438517, 89438517
java.util.HashSet, true, true, false, false, java.util.HashSet/3273092938, 3273092938
java.util.LinkedHashSet, true, true, false, false, java.util.LinkedHashSet/1826081506, 1826081506
java.util.LinkedList, true, true, false, false, java.util.LinkedList/3953877921, 3953877921
java.util.NoSuchElementException, true, true, false, false, java.util.NoSuchElementException/1559248883, 1559248883
java.util.Stack, true, true, false, false, java.util.Stack/1346942793, 1346942793
java.util.TooManyListenersException, true, true, false, false, java.util.TooManyListenersException/2023078032, 2023078032
java.util.TreeMap, true, true, false, false, java.util.TreeMap/1493889780, 1493889780
java.util.TreeSet, true, true, false, false, java.util.TreeSet/4043497002, 4043497002
java.util.Vector, true, true, false, false, java.util.Vector/3057315478, 3057315478
javax.validation.ConstraintDeclarationException, true, true, false, false, javax.validation.ConstraintDeclarationException/3610544007, 3610544007
javax.validation.ConstraintDefinitionException, true, true, false, false, javax.validation.ConstraintDefinitionException/3732439488, 3732439488
javax.validation.ConstraintViolationException, true, true, false, false, javax.validation.ConstraintViolationException/173345760, 173345760
javax.validation.GroupDefinitionException, true, true, false, false, javax.validation.GroupDefinitionException/4024780846, 4024780846
javax.validation.UnexpectedTypeException, true, true, false, false, javax.validation.UnexpectedTypeException/593026390, 593026390
javax.validation.ValidationException, true, true, false, false, javax.validation.ValidationException/1570221831, 1570221831
@@ -0,0 +1,74 @@
com.google.gwt.event.shared.UmbrellaException, true, true, false, false, com.google.gwt.event.shared.UmbrellaException/3104463596, 3104463596
com.google.gwt.http.client.RequestException, true, true, false, false, com.google.gwt.http.client.RequestException/190587325, 190587325
com.google.gwt.i18n.client.impl.DateRecord, true, true, false, false, com.google.gwt.i18n.client.impl.DateRecord/3220471373, 3220471373
com.google.gwt.jsonp.client.TimeoutException, true, true, false, false, com.google.gwt.jsonp.client.TimeoutException/1112787596, 1112787596
com.google.gwt.user.client.rpc.IncompatibleRemoteServiceException, true, true, true, true, com.google.gwt.user.client.rpc.IncompatibleRemoteServiceException/3936916533, 3936916533
com.google.gwt.user.client.rpc.InvocationException, true, false, false, false, com.google.gwt.user.client.rpc.InvocationException/1510557512, 1510557512
com.google.gwt.user.client.rpc.RpcTokenException, true, true, false, false, com.google.gwt.user.client.rpc.RpcTokenException/2345075298, 2345075298
com.google.gwt.user.client.rpc.SerializableException, true, true, false, false, com.google.gwt.user.client.rpc.SerializableException/3047383460, 3047383460
com.google.gwt.user.client.rpc.SerializationException, true, true, false, false, com.google.gwt.user.client.rpc.SerializationException/2836333220, 2836333220
com.google.gwt.user.client.rpc.ServiceDefTarget$NoServiceEntryPointSpecifiedException, true, true, false, false, com.google.gwt.user.client.rpc.ServiceDefTarget$NoServiceEntryPointSpecifiedException/3408313447, 3408313447
com.google.gwt.user.client.rpc.XsrfToken, false, false, true, true, com.google.gwt.user.client.rpc.XsrfToken/4254043109, 4254043109
com.google.web.bindery.event.shared.UmbrellaException, true, true, false, false, com.google.web.bindery.event.shared.UmbrellaException/1025846929, 1025846929
com.sap.sailing.gwt.ui.client.SailingService, false, false, false, false, _, 2610738066
com.sap.sailing.gwt.ui.shared.BoatClassDAO, true, true, false, false, com.sap.sailing.gwt.ui.shared.BoatClassDAO/876059280, 876059280
com.sap.sailing.gwt.ui.shared.EventDAO, true, true, false, false, com.sap.sailing.gwt.ui.shared.EventDAO/1398016458, 1398016458
[Lcom.sap.sailing.gwt.ui.shared.EventDAO;, true, true, false, false, [Lcom.sap.sailing.gwt.ui.shared.EventDAO;/3623408659, 3623408659
com.sap.sailing.gwt.ui.shared.RaceDAO, true, true, false, false, com.sap.sailing.gwt.ui.shared.RaceDAO/3256357629, 3256357629
[Lcom.sap.sailing.gwt.ui.shared.RaceDAO;, true, true, false, false, [Lcom.sap.sailing.gwt.ui.shared.RaceDAO;/3169813160, 3169813160
com.sap.sailing.gwt.ui.shared.RaceRecordDAO, true, true, false, false, com.sap.sailing.gwt.ui.shared.RaceRecordDAO/1969082677, 1969082677
[Lcom.sap.sailing.gwt.ui.shared.RaceRecordDAO;, true, true, false, false, [Lcom.sap.sailing.gwt.ui.shared.RaceRecordDAO;/3142488874, 3142488874
com.sap.sailing.gwt.ui.shared.RegattaDAO, true, true, false, false, com.sap.sailing.gwt.ui.shared.RegattaDAO/2714721467, 2714721467
[Lcom.sap.sailing.gwt.ui.shared.RegattaDAO;, true, true, false, false, [Lcom.sap.sailing.gwt.ui.shared.RegattaDAO;/3408153634, 3408153634
java.io.IOException, true, true, false, false, java.io.IOException/1159940531, 1159940531
java.io.UnsupportedEncodingException, true, true, false, false, java.io.UnsupportedEncodingException/1526756933, 1526756933
java.lang.ArithmeticException, true, true, false, false, java.lang.ArithmeticException/1539622151, 1539622151
java.lang.ArrayIndexOutOfBoundsException, true, true, false, false, java.lang.ArrayIndexOutOfBoundsException/600550433, 600550433
java.lang.ArrayStoreException, true, true, false, false, java.lang.ArrayStoreException/3540507190, 3540507190
java.lang.AssertionError, true, true, false, false, java.lang.AssertionError/3490171458, 3490171458
java.lang.Boolean, true, true, false, false, java.lang.Boolean/476441737, 476441737
java.lang.ClassCastException, true, true, false, false, java.lang.ClassCastException/702295179, 702295179
java.lang.Error, true, true, false, false, java.lang.Error/1331973429, 1331973429
java.lang.Exception, true, true, true, false, java.lang.Exception/1920171873, 1920171873
java.lang.IllegalArgumentException, true, true, false, false, java.lang.IllegalArgumentException/1755012560, 1755012560
java.lang.IllegalStateException, true, true, false, false, java.lang.IllegalStateException/1972187323, 1972187323
java.lang.IndexOutOfBoundsException, true, true, false, false, java.lang.IndexOutOfBoundsException/2489527753, 2489527753
java.lang.NegativeArraySizeException, true, true, false, false, java.lang.NegativeArraySizeException/3846860241, 3846860241
java.lang.NullPointerException, true, true, false, false, java.lang.NullPointerException/1463492344, 1463492344
java.lang.NumberFormatException, true, true, false, false, java.lang.NumberFormatException/3305228476, 3305228476
java.lang.RuntimeException, true, true, true, false, java.lang.RuntimeException/515124647, 515124647
java.lang.String, true, true, true, true, java.lang.String/2004016611, 2004016611
java.lang.StringIndexOutOfBoundsException, true, true, false, false, java.lang.StringIndexOutOfBoundsException/500777603, 500777603
java.lang.Throwable, true, true, true, false, java.lang.Throwable/2953622131, 2953622131
java.lang.UnsupportedOperationException, true, true, false, false, java.lang.UnsupportedOperationException/3744010015, 3744010015
java.lang.annotation.AnnotationFormatError, true, true, false, false, java.lang.annotation.AnnotationFormatError/2257184627, 2257184627
java.lang.annotation.AnnotationTypeMismatchException, true, true, false, false, java.lang.annotation.AnnotationTypeMismatchException/976205828, 976205828
java.security.DigestException, true, true, false, false, java.security.DigestException/629316798, 629316798
java.security.GeneralSecurityException, true, true, false, false, java.security.GeneralSecurityException/2669239907, 2669239907
java.security.NoSuchAlgorithmException, true, true, false, false, java.security.NoSuchAlgorithmException/2892037213, 2892037213
java.sql.Date, true, true, false, false, java.sql.Date/730999118, 730999118
java.sql.Time, true, true, false, false, java.sql.Time/1816797103, 1816797103
java.sql.Timestamp, true, true, false, false, java.sql.Timestamp/3040052672, 3040052672
java.util.ArrayList, true, true, false, false, java.util.ArrayList/4159755760, 4159755760
java.util.Arrays$ArrayList, true, true, false, false, java.util.Arrays$ArrayList/2507071751, 2507071751
java.util.Collections$EmptyList, true, true, false, false, java.util.Collections$EmptyList/4157118744, 4157118744
java.util.Collections$EmptySet, true, true, false, false, java.util.Collections$EmptySet/3523698179, 3523698179
java.util.Collections$SingletonList, true, true, false, false, java.util.Collections$SingletonList/1586180994, 1586180994
java.util.ConcurrentModificationException, true, true, false, false, java.util.ConcurrentModificationException/2717383897, 2717383897
java.util.Date, true, true, false, false, java.util.Date/3385151746, 3385151746
java.util.EmptyStackException, true, true, false, false, java.util.EmptyStackException/89438517, 89438517
java.util.HashSet, true, true, false, false, java.util.HashSet/3273092938, 3273092938
java.util.LinkedHashSet, true, true, false, false, java.util.LinkedHashSet/1826081506, 1826081506
java.util.LinkedList, true, true, false, false, java.util.LinkedList/3953877921, 3953877921
java.util.NoSuchElementException, true, true, false, false, java.util.NoSuchElementException/1559248883, 1559248883
java.util.Stack, true, true, false, false, java.util.Stack/1346942793, 1346942793
java.util.TooManyListenersException, true, true, false, false, java.util.TooManyListenersException/2023078032, 2023078032
java.util.TreeMap, true, true, false, false, java.util.TreeMap/1493889780, 1493889780
java.util.TreeSet, true, true, false, false, java.util.TreeSet/4043497002, 4043497002
java.util.Vector, true, true, false, false, java.util.Vector/3057315478, 3057315478
javax.validation.ConstraintDeclarationException, true, true, false, false, javax.validation.ConstraintDeclarationException/3610544007, 3610544007
javax.validation.ConstraintDefinitionException, true, true, false, false, javax.validation.ConstraintDefinitionException/3732439488, 3732439488
javax.validation.ConstraintViolationException, true, true, false, false, javax.validation.ConstraintViolationException/173345760, 173345760
javax.validation.GroupDefinitionException, true, true, false, false, javax.validation.GroupDefinitionException/4024780846, 4024780846
javax.validation.UnexpectedTypeException, true, true, false, false, javax.validation.UnexpectedTypeException/593026390, 593026390
javax.validation.ValidationException, true, true, false, false, javax.validation.ValidationException/1570221831, 1570221831
@@ -1,28 +0,0 @@
com.google.gwt.user.client.rpc.IncompatibleRemoteServiceException, true, true, true, true, com.google.gwt.user.client.rpc.IncompatibleRemoteServiceException/3936916533, 3936916533
com.google.gwt.user.client.rpc.RpcTokenException, true, true, false, false, com.google.gwt.user.client.rpc.RpcTokenException/2345075298, 2345075298
com.google.gwt.user.client.rpc.XsrfToken, false, false, true, true, com.google.gwt.user.client.rpc.XsrfToken/4254043109, 4254043109
com.sap.sailing.gwt.ui.client.SailingService, false, false, false, false, _, 2610738066
com.sap.sailing.gwt.ui.shared.BoatClassDAO, true, true, false, false, com.sap.sailing.gwt.ui.shared.BoatClassDAO/876059280, 876059280
com.sap.sailing.gwt.ui.shared.EventDAO, true, true, false, false, com.sap.sailing.gwt.ui.shared.EventDAO/1398016458, 1398016458
[Lcom.sap.sailing.gwt.ui.shared.EventDAO;, true, true, false, false, [Lcom.sap.sailing.gwt.ui.shared.EventDAO;/3623408659, 3623408659
com.sap.sailing.gwt.ui.shared.RaceDAO, true, true, false, false, com.sap.sailing.gwt.ui.shared.RaceDAO/3256357629, 3256357629
[Lcom.sap.sailing.gwt.ui.shared.RaceDAO;, true, true, false, false, [Lcom.sap.sailing.gwt.ui.shared.RaceDAO;/3169813160, 3169813160
com.sap.sailing.gwt.ui.shared.RegattaDAO, true, true, false, false, com.sap.sailing.gwt.ui.shared.RegattaDAO/2714721467, 2714721467
[Lcom.sap.sailing.gwt.ui.shared.RegattaDAO;, true, true, false, false, [Lcom.sap.sailing.gwt.ui.shared.RegattaDAO;/3408153634, 3408153634
java.lang.Boolean, true, true, false, false, java.lang.Boolean/476441737, 476441737
java.lang.Exception, true, false, true, false, java.lang.Exception/1920171873, 1920171873
java.lang.RuntimeException, true, false, true, false, java.lang.RuntimeException/515124647, 515124647
java.lang.String, true, true, true, true, java.lang.String/2004016611, 2004016611
java.lang.Throwable, true, false, true, false, java.lang.Throwable/2953622131, 2953622131
java.util.ArrayList, true, true, false, false, java.util.ArrayList/4159755760, 4159755760
java.util.Arrays$ArrayList, true, true, false, false, java.util.Arrays$ArrayList/2507071751, 2507071751
java.util.Collections$EmptyList, true, true, false, false, java.util.Collections$EmptyList/4157118744, 4157118744
java.util.Collections$EmptySet, true, true, false, false, java.util.Collections$EmptySet/3523698179, 3523698179
java.util.Collections$SingletonList, true, true, false, false, java.util.Collections$SingletonList/1586180994, 1586180994
java.util.HashSet, true, true, false, false, java.util.HashSet/3273092938, 3273092938
java.util.LinkedHashSet, true, true, false, false, java.util.LinkedHashSet/1826081506, 1826081506
java.util.LinkedList, true, true, false, false, java.util.LinkedList/3953877921, 3953877921
java.util.Stack, true, true, false, false, java.util.Stack/1346942793, 1346942793
java.util.TreeMap, true, true, false, false, java.util.TreeMap/1493889780, 1493889780
java.util.TreeSet, true, true, false, false, java.util.TreeSet/4043497002, 4043497002
java.util.Vector, true, true, false, false, java.util.Vector/3057315478, 3057315478
@@ -1,4 +1,4 @@
function com_sap_sailing_gwt_ui_AdminConsole(){var O='',vb='" for "gwt:onLoadErrorFn"',tb='" for "gwt:onPropertyErrorFn"',hb='"><\/script>',Y='#',Vb='.cache.html',$='/',Ob='2BFC3A5FED939F95019F2CAF6C851B98',Pb='469D87A8693826AD7ACF9BED18E38588',Ub=':',nb='::',bc='<script defer="defer">com_sap_sailing_gwt_ui_AdminConsole.onInjectionDone(\'com.sap.sailing.gwt.ui.AdminConsole\')<\/script>',gb='<script id="',qb='=',Z='?',Qb='B33BDE6F4EDD6781956D7EA7CCBD538A',Rb='BA99A4CA0B1353138204A05FF91152E1',sb='Bad handler "',Sb='D8390D090438F53041B18A30824E742D',ac='DOMContentLoaded',Tb='FD4800AD9A74C7E88953B7B2649037C3',ib='SCRIPT',fb='__gwt_marker_com.sap.sailing.gwt.ui.AdminConsole',jb='base',bb='baseUrl',S='begin',R='bootstrap',ab='clear.cache.gif',P='com.sap.sailing.gwt.ui.AdminConsole',db='com.sap.sailing.gwt.ui.AdminConsole.nocache.js',mb='com.sap.sailing.gwt.ui.AdminConsole::',pb='content',X='end',Ib='gecko',Jb='gecko1_8',T='gwt.codesvr=',U='gwt.hosted=',V='gwt.hybrid',Wb='gwt/clean/clean.css',ub='gwt:onLoadErrorFn',rb='gwt:onPropertyErrorFn',ob='gwt:property',_b='head',Mb='hosted.html?com_sap_sailing_gwt_ui_AdminConsole',$b='href',Hb='ie6',Gb='ie8',Fb='ie9',wb='iframe',_='img',xb="javascript:''",Xb='link',Lb='loadExternalRefs',kb='meta',zb='moduleRequested',W='moduleStartup',Eb='msie',lb='name',Bb='opera',yb='position:absolute;width:0;height:0;border:none',Yb='rel',Db='safari',cb='script',Nb='selectingPermutation',Q='startup',Zb='stylesheet',eb='undefined',Kb='unknown',Ab='user.agent',Cb='webkit';var l=window,m=document,n=l.__gwtStatsEvent?function(a){return l.__gwtStatsEvent(a)}:null,o=l.__gwtStatsSessionId?l.__gwtStatsSessionId:null,p,q,r,s=O,t={},u=[],v=[],w=[],x=0,y,z;n&&n({moduleName:P,sessionId:o,subSystem:Q,evtGroup:R,millis:(new Date).getTime(),type:S});if(!l.__gwt_stylesLoaded){l.__gwt_stylesLoaded={}}if(!l.__gwt_scriptsLoaded){l.__gwt_scriptsLoaded={}}function A(){var b=false;try{var c=l.location.search;return (c.indexOf(T)!=-1||(c.indexOf(U)!=-1||l.external&&l.external.gwtOnLoad))&&c.indexOf(V)==-1}catch(a){}A=function(){return b};return b}
function com_sap_sailing_gwt_ui_AdminConsole(){var O='',vb='" for "gwt:onLoadErrorFn"',tb='" for "gwt:onPropertyErrorFn"',hb='"><\/script>',Y='#',Vb='.cache.html',$='/',Ob='1A6A2A715641010D6142AEFDE948737A',Pb='4EA78EF53E68F6DE713F3EE0020E8F08',Qb='72593EAF047B03A04BF62EC36E558300',Rb='87C7CB64A8A6B63F280E16970059806C',Sb='92D44E4E1C43E49DF74D17A35E7FC7F6',Tb='9C5333ECAA42A79E7E788B6445CA5849',Ub=':',nb='::',bc='<script defer="defer">com_sap_sailing_gwt_ui_AdminConsole.onInjectionDone(\'com.sap.sailing.gwt.ui.AdminConsole\')<\/script>',gb='<script id="',qb='=',Z='?',sb='Bad handler "',ac='DOMContentLoaded',ib='SCRIPT',fb='__gwt_marker_com.sap.sailing.gwt.ui.AdminConsole',jb='base',bb='baseUrl',S='begin',R='bootstrap',ab='clear.cache.gif',P='com.sap.sailing.gwt.ui.AdminConsole',db='com.sap.sailing.gwt.ui.AdminConsole.nocache.js',mb='com.sap.sailing.gwt.ui.AdminConsole::',pb='content',X='end',Ib='gecko',Jb='gecko1_8',T='gwt.codesvr=',U='gwt.hosted=',V='gwt.hybrid',Wb='gwt/clean/clean.css',ub='gwt:onLoadErrorFn',rb='gwt:onPropertyErrorFn',ob='gwt:property',_b='head',Mb='hosted.html?com_sap_sailing_gwt_ui_AdminConsole',$b='href',Hb='ie6',Gb='ie8',Fb='ie9',wb='iframe',_='img',xb="javascript:''",Xb='link',Lb='loadExternalRefs',kb='meta',zb='moduleRequested',W='moduleStartup',Eb='msie',lb='name',Bb='opera',yb='position:absolute;width:0;height:0;border:none',Yb='rel',Db='safari',cb='script',Nb='selectingPermutation',Q='startup',Zb='stylesheet',eb='undefined',Kb='unknown',Ab='user.agent',Cb='webkit';var l=window,m=document,n=l.__gwtStatsEvent?function(a){return l.__gwtStatsEvent(a)}:null,o=l.__gwtStatsSessionId?l.__gwtStatsSessionId:null,p,q,r,s=O,t={},u=[],v=[],w=[],x=0,y,z;n&&n({moduleName:P,sessionId:o,subSystem:Q,evtGroup:R,millis:(new Date).getTime(),type:S});if(!l.__gwt_stylesLoaded){l.__gwt_stylesLoaded={}}if(!l.__gwt_scriptsLoaded){l.__gwt_scriptsLoaded={}}function A(){var b=false;try{var c=l.location.search;return (c.indexOf(T)!=-1||(c.indexOf(U)!=-1||l.external&&l.external.gwtOnLoad))&&c.indexOf(V)==-1}catch(a){}A=function(){return b};return b}
function B(){if(p&&q){var b=m.getElementById(P);var c=b.contentWindow;if(A()){c.__gwt_getProperty=function(a){return G(a)}}com_sap_sailing_gwt_ui_AdminConsole=null;c.gwtOnLoad(y,P,s,x);n&&n({moduleName:P,sessionId:o,subSystem:Q,evtGroup:W,millis:(new Date).getTime(),type:X})}}
function C(){function e(a){var b=a.lastIndexOf(Y);if(b==-1){b=a.length}var c=a.indexOf(Z);if(c==-1){c=a.length}var d=a.lastIndexOf($,Math.min(c,b));return d>=0?a.substring(0,d+1):O}
function f(a){if(a.match(/^\w+:\/\//)){}else{var b=m.createElement(_);b.src=a+ab;a=e(b.src)}return a}
@@ -12,6 +12,6 @@ function E(a){var b=t[a];return b==null?null:b}
function F(a,b){var c=w;for(var d=0,e=a.length-1;d<e;++d){c=c[a[d]]||(c[a[d]]=[])}c[a[e]]=b}
function G(a){var b=v[a](),c=u[a];if(b in c){return b}var d=[];for(var e in c){d[c[e]]=e}if(z){z(a,d,b)}throw null}
var H;function I(){if(!H){H=true;var a=m.createElement(wb);a.src=xb;a.id=P;a.style.cssText=yb;a.tabIndex=-1;m.body.appendChild(a);n&&n({moduleName:P,sessionId:o,subSystem:Q,evtGroup:W,millis:(new Date).getTime(),type:zb});a.contentWindow.location.replace(s+K)}}
v[Ab]=function(){var b=navigator.userAgent.toLowerCase();var c=function(a){return parseInt(a[1])*1000+parseInt(a[2])};if(function(){return b.indexOf(Bb)!=-1}())return Bb;if(function(){return b.indexOf(Cb)!=-1}())return Db;if(function(){return b.indexOf(Eb)!=-1&&m.documentMode>=9}())return Fb;if(function(){return b.indexOf(Eb)!=-1&&m.documentMode>=8}())return Gb;if(function(){var a=/msie ([0-9]+)\.([0-9]+)/.exec(b);if(a&&a.length==3)return c(a)>=6000}())return Hb;if(function(){return b.indexOf(Ib)!=-1}())return Jb;return Kb};u[Ab]={gecko1_8:0,ie6:1,ie8:2,ie9:3,opera:4,safari:5};com_sap_sailing_gwt_ui_AdminConsole.onScriptLoad=function(){if(H){q=true;B()}};com_sap_sailing_gwt_ui_AdminConsole.onInjectionDone=function(){p=true;n&&n({moduleName:P,sessionId:o,subSystem:Q,evtGroup:Lb,millis:(new Date).getTime(),type:X});B()};D();C();var J;var K;if(A()){if(l.external&&(l.external.initModule&&l.external.initModule(P))){l.location.reload();return}K=Mb;J=O}n&&n({moduleName:P,sessionId:o,subSystem:Q,evtGroup:R,millis:(new Date).getTime(),type:Nb});if(!A()){try{F([Hb],Ob);F([Fb],Pb);F([Bb],Qb);F([Gb],Rb);F([Jb],Sb);F([Db],Tb);J=w[G(Ab)];var L=J.indexOf(Ub);if(L!=-1){x=Number(J.substring(L+1));J=J.substring(0,L)}K=J+Vb}catch(a){return}}var M;function N(){if(!r){r=true;if(!__gwt_stylesLoaded[Wb]){var a=m.createElement(Xb);__gwt_stylesLoaded[Wb]=a;a.setAttribute(Yb,Zb);a.setAttribute($b,s+Wb);m.getElementsByTagName(_b)[0].appendChild(a)}B();if(m.removeEventListener){m.removeEventListener(ac,N,false)}if(M){clearInterval(M)}}}
v[Ab]=function(){var b=navigator.userAgent.toLowerCase();var c=function(a){return parseInt(a[1])*1000+parseInt(a[2])};if(function(){return b.indexOf(Bb)!=-1}())return Bb;if(function(){return b.indexOf(Cb)!=-1}())return Db;if(function(){return b.indexOf(Eb)!=-1&&m.documentMode>=9}())return Fb;if(function(){return b.indexOf(Eb)!=-1&&m.documentMode>=8}())return Gb;if(function(){var a=/msie ([0-9]+)\.([0-9]+)/.exec(b);if(a&&a.length==3)return c(a)>=6000}())return Hb;if(function(){return b.indexOf(Ib)!=-1}())return Jb;return Kb};u[Ab]={gecko1_8:0,ie6:1,ie8:2,ie9:3,opera:4,safari:5};com_sap_sailing_gwt_ui_AdminConsole.onScriptLoad=function(){if(H){q=true;B()}};com_sap_sailing_gwt_ui_AdminConsole.onInjectionDone=function(){p=true;n&&n({moduleName:P,sessionId:o,subSystem:Q,evtGroup:Lb,millis:(new Date).getTime(),type:X});B()};D();C();var J;var K;if(A()){if(l.external&&(l.external.initModule&&l.external.initModule(P))){l.location.reload();return}K=Mb;J=O}n&&n({moduleName:P,sessionId:o,subSystem:Q,evtGroup:R,millis:(new Date).getTime(),type:Nb});if(!A()){try{F([Bb],Ob);F([Hb],Pb);F([Jb],Qb);F([Gb],Rb);F([Fb],Sb);F([Db],Tb);J=w[G(Ab)];var L=J.indexOf(Ub);if(L!=-1){x=Number(J.substring(L+1));J=J.substring(0,L)}K=J+Vb}catch(a){return}}var M;function N(){if(!r){r=true;if(!__gwt_stylesLoaded[Wb]){var a=m.createElement(Xb);__gwt_stylesLoaded[Wb]=a;a.setAttribute(Yb,Zb);a.setAttribute($b,s+Wb);m.getElementsByTagName(_b)[0].appendChild(a)}B();if(m.removeEventListener){m.removeEventListener(ac,N,false)}if(M){clearInterval(M)}}}
if(m.addEventListener){m.addEventListener(ac,function(){I();N()},false)}var M=setInterval(function(){if(/loaded|complete/.test(m.readyState)){I();N()}},50);n&&n({moduleName:P,sessionId:o,subSystem:Q,evtGroup:R,millis:(new Date).getTime(),type:X});n&&n({moduleName:P,sessionId:o,subSystem:Q,evtGroup:Lb,millis:(new Date).getTime(),type:S});m.write(bc)}
com_sap_sailing_gwt_ui_AdminConsole();
@@ -43,7 +43,7 @@ import com.sap.sailing.domain.tracking.impl.WindImpl;
import com.sap.sailing.domain.tractracadapter.RaceRecord;
import com.sap.sailing.mongodb.MongoObjectFactory;
import com.sap.sailing.mongodb.MongoWindStoreFactory;
import com.sap.sailing.server.util.InvalidDateException;
import com.sap.sailing.util.InvalidDateException;
import com.sap.sailing.util.Util.Triple;
public class AdminApp extends Servlet {
@@ -32,8 +32,8 @@ import com.sap.sailing.domain.tracking.TrackedLeg;
import com.sap.sailing.domain.tracking.TrackedLegOfCompetitor;
import com.sap.sailing.domain.tracking.TrackedRace;
import com.sap.sailing.domain.tracking.Wind;
import com.sap.sailing.server.util.InvalidDateException;
import com.sap.sailing.util.CountryCode;
import com.sap.sailing.util.InvalidDateException;
public class ModeratorApp extends Servlet {
private static final Logger logger = Logger.getLogger(ModeratorApp.class.getName());
@@ -10,8 +10,8 @@ import com.sap.sailing.domain.base.Event;
import com.sap.sailing.domain.base.RaceDefinition;
import com.sap.sailing.domain.base.TimePoint;
import com.sap.sailing.domain.base.impl.MillisecondsTimePoint;
import com.sap.sailing.server.util.DateParser;
import com.sap.sailing.server.util.InvalidDateException;
import com.sap.sailing.util.DateParser;
import com.sap.sailing.util.InvalidDateException;
public abstract class Servlet extends HttpServlet {
private static final long serialVersionUID = -6514453597593669376L;