mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-10 22:30:56 +00:00
added manual wind capturing facility
This commit is contained in:
1 parent
b635cd4fa4
commit
da821709f6
40 files changed
+665
-46560
No files matched your search
@@ -13,8 +13,8 @@ public class WindImpl extends KnotSpeedWithBearingImpl implements Wind {
|
||||
private final TimePoint timepoint;
|
||||
private final Bearing from;
|
||||
|
||||
public WindImpl(Position p, TimePoint at, SpeedWithBearing avgWindSpeed) {
|
||||
super(avgWindSpeed.getKnots(), avgWindSpeed.getBearing());
|
||||
public WindImpl(Position p, TimePoint at, SpeedWithBearing windSpeedWithBearing) {
|
||||
super(windSpeedWithBearing.getKnots(), windSpeedWithBearing.getBearing());
|
||||
this.position = p;
|
||||
this.timepoint = at;
|
||||
double fromDeg = getBearing().getDegrees() + 180;
|
||||
|
||||
+8
-4
@@ -19,6 +19,8 @@ public class ExpeditionWindTrackerFactory implements WindTrackerFactory, BundleA
|
||||
private static Logger logger = Logger.getLogger(ExpeditionWindTrackerFactory.class.getName());
|
||||
|
||||
private static WindTrackerFactory defaultInstance;
|
||||
|
||||
private static BundleContext defaultBundleContext;
|
||||
|
||||
private static final String EXPEDITION_UDP_PORT_PROPERTY_NAME = "expedition.udp.port";
|
||||
/**
|
||||
@@ -44,6 +46,10 @@ public class ExpeditionWindTrackerFactory implements WindTrackerFactory, BundleA
|
||||
}
|
||||
return defaultInstance;
|
||||
}
|
||||
|
||||
public static BundleContext getBundleContext() {
|
||||
return defaultBundleContext;
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized WindTracker createWindTracker(DynamicTrackedEvent trackedEvent, RaceDefinition race,
|
||||
@@ -91,14 +97,12 @@ public class ExpeditionWindTrackerFactory implements WindTrackerFactory, BundleA
|
||||
|
||||
@Override
|
||||
public void start(BundleContext context) throws Exception {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
defaultBundleContext = context;
|
||||
defaultInstance = this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void stop(BundleContext context) throws Exception {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
#Mon Jul 04 23:21:28 CEST 2011
|
||||
#Thu Jul 07 14:21:00 CEST 2011
|
||||
eclipse.preferences.version=1
|
||||
filesCopiedToWebInfLib=gwt-servlet.jar
|
||||
gwtCompileSettings=PGd3dC1jb21waWxlLXNldHRpbmdzPjxsb2ctbGV2ZWw+SU5GTzwvbG9nLWxldmVsPjxvdXRwdXQtc3R5bGU+T0JGVVNDQVRFRDwvb3V0cHV0LXN0eWxlPjxleHRyYS1hcmdzPjwhW0NEQVRBW11dPjwvZXh0cmEtYXJncz48dm0tYXJncz48IVtDREFUQVstWG14NTEybV1dPjwvdm0tYXJncz48ZW50cnktcG9pbnQtbW9kdWxlPmNvbS5zYXAuc2FpbGluZy5nd3QudWkuQWRtaW5Db25zb2xlPC9lbnRyeS1wb2ludC1tb2R1bGU+PGVudHJ5LXBvaW50LW1vZHVsZT5jb20uc2FwLnNhaWxpbmcuZ3d0LnVpLmNvbV9zYXBfc2FpbGluZ19nd3RfdWk8L2VudHJ5LXBvaW50LW1vZHVsZT48L2d3dC1jb21waWxlLXNldHRpbmdzPg\=\=
|
||||
gwtCompileSettings=PGd3dC1jb21waWxlLXNldHRpbmdzPjxsb2ctbGV2ZWw+SU5GTzwvbG9nLWxldmVsPjxvdXRwdXQtc3R5bGU+T0JGVVNDQVRFRDwvb3V0cHV0LXN0eWxlPjxleHRyYS1hcmdzPjwhW0NEQVRBWy1sb2NhbFdvcmtlcnMgNF1dPjwvZXh0cmEtYXJncz48dm0tYXJncz48IVtDREFUQVstWG14NTEybV1dPjwvdm0tYXJncz48ZW50cnktcG9pbnQtbW9kdWxlPmNvbS5zYXAuc2FpbGluZy5nd3QudWkuQWRtaW5Db25zb2xlPC9lbnRyeS1wb2ludC1tb2R1bGU+PGVudHJ5LXBvaW50LW1vZHVsZT5jb20uc2FwLnNhaWxpbmcuZ3d0LnVpLmNvbV9zYXBfc2FpbGluZ19nd3RfdWk8L2VudHJ5LXBvaW50LW1vZHVsZT48L2d3dC1jb21waWxlLXNldHRpbmdzPg\=\=
|
||||
@@ -1,9 +1,14 @@
|
||||
package com.sap.sailing.gwt.ui.client;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import com.google.gwt.core.client.EntryPoint;
|
||||
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.user.client.rpc.AsyncCallback;
|
||||
import com.google.gwt.user.client.ui.Button;
|
||||
import com.google.gwt.user.client.ui.DialogBox;
|
||||
import com.google.gwt.user.client.ui.HTML;
|
||||
@@ -11,8 +16,9 @@ import com.google.gwt.user.client.ui.Label;
|
||||
import com.google.gwt.user.client.ui.RootPanel;
|
||||
import com.google.gwt.user.client.ui.TabPanel;
|
||||
import com.google.gwt.user.client.ui.VerticalPanel;
|
||||
import com.sap.sailing.gwt.ui.shared.EventDAO;
|
||||
|
||||
public class AdminConsole implements EntryPoint, ErrorReporter {
|
||||
public class AdminConsole implements EntryPoint, ErrorReporter, EventRefresher {
|
||||
/**
|
||||
* Create a remote service proxy to talk to the server-side sailing service.
|
||||
*/
|
||||
@@ -20,6 +26,7 @@ public class AdminConsole implements EntryPoint, ErrorReporter {
|
||||
private DialogBox errorDialogBox;
|
||||
private HTML serverResponseLabel;
|
||||
private Button dialogCloseButton;
|
||||
private Set<EventDisplayer> eventDisplayers;
|
||||
|
||||
/**
|
||||
* The message displayed to the user when the server cannot be reached or
|
||||
@@ -33,18 +40,21 @@ public class AdminConsole implements EntryPoint, ErrorReporter {
|
||||
public void onModuleLoad() {
|
||||
StringConstants stringConstants = GWT.create(StringConstants.class);
|
||||
RootPanel rootPanel = RootPanel.get();
|
||||
rootPanel.setSize("100%", "100%");
|
||||
rootPanel.setSize("95%", "95%");
|
||||
errorDialogBox = createErrorDialog();
|
||||
|
||||
TabPanel tabPanel = new TabPanel();
|
||||
tabPanel.setAnimationEnabled(true);
|
||||
rootPanel.add(tabPanel, 10, 10);
|
||||
tabPanel.setSize("100%", "100%");
|
||||
tabPanel.setSize("95%", "95%");
|
||||
|
||||
EventManagementPanel eventManagementPanel = new EventManagementPanel(sailingService, this);
|
||||
eventDisplayers = new HashSet<EventDisplayer>();
|
||||
EventManagementPanel eventManagementPanel = new EventManagementPanel(sailingService, this, this);
|
||||
eventDisplayers.add(eventManagementPanel);
|
||||
eventManagementPanel.setSize("90%", "90%");
|
||||
tabPanel.add(eventManagementPanel, stringConstants.tracTracEvents(), false);
|
||||
WindPanel windPanel = new WindPanel(sailingService, this);
|
||||
WindPanel windPanel = new WindPanel(sailingService, this, this);
|
||||
eventDisplayers.add(windPanel);
|
||||
windPanel.setSize("90%", "90%");
|
||||
tabPanel.add(windPanel, stringConstants.wind(), false);
|
||||
tabPanel.selectTab(0);
|
||||
@@ -88,4 +98,21 @@ public class AdminConsole implements EntryPoint, ErrorReporter {
|
||||
dialogCloseButton.setFocus(true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fillEvents() {
|
||||
sailingService.listEvents(new AsyncCallback<List<EventDAO>>() {
|
||||
@Override
|
||||
public void onSuccess(List<EventDAO> result) {
|
||||
for (EventDisplayer eventDisplayer : eventDisplayers) {
|
||||
eventDisplayer.fillEvents(result);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailure(Throwable caught) {
|
||||
reportError("Remote Procedure Call listEvents() - Failure");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
package com.sap.sailing.gwt.ui.client;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import com.sap.sailing.gwt.ui.shared.EventDAO;
|
||||
|
||||
public interface EventDisplayer {
|
||||
void fillEvents(List<EventDAO> result);
|
||||
}
|
||||
+57
-62
@@ -51,7 +51,7 @@ import com.sap.sailing.gwt.ui.shared.TracTracConfigurationDAO;
|
||||
* @author Axel Uhl (D043530)
|
||||
*
|
||||
*/
|
||||
public class EventManagementPanel extends FormPanel {
|
||||
public class EventManagementPanel extends FormPanel implements EventDisplayer {
|
||||
private final SailingServiceAsync sailingService;
|
||||
private final ErrorReporter errorReporter;
|
||||
private final IntegerBox storedPortIntegerbox;
|
||||
@@ -66,11 +66,14 @@ public class EventManagementPanel extends FormPanel {
|
||||
private final Map<String, TracTracConfigurationDAO> previousConfigurations;
|
||||
private final ListBox previousConfigurationsComboBox;
|
||||
private final Grid grid;
|
||||
private final EventRefresher eventRefresher;
|
||||
private final StringConstants stringConstants;
|
||||
|
||||
public EventManagementPanel(final SailingServiceAsync sailingService, ErrorReporter errorReporter) {
|
||||
public EventManagementPanel(final SailingServiceAsync sailingService, ErrorReporter errorReporter, EventRefresher eventRefresher) {
|
||||
this.sailingService = sailingService;
|
||||
this.errorReporter = errorReporter;
|
||||
StringConstants stringConstants = GWT.create(StringConstants.class);
|
||||
this.eventRefresher = eventRefresher;
|
||||
stringConstants = GWT.create(StringConstants.class);
|
||||
VerticalPanel verticalPanel = new VerticalPanel();
|
||||
this.setWidget(verticalPanel);
|
||||
verticalPanel.setSize("100%", "100%");
|
||||
@@ -253,7 +256,7 @@ public class EventManagementPanel extends FormPanel {
|
||||
grid.getCellFormatter().setVerticalAlignment(8, 1, HasVerticalAlignment.ALIGN_TOP);
|
||||
grid.getCellFormatter().setVerticalAlignment(8, 0, HasVerticalAlignment.ALIGN_TOP);
|
||||
|
||||
fillEvents();
|
||||
eventRefresher.fillEvents();
|
||||
updatePortStoredData();
|
||||
updateLiveURI();
|
||||
updateStoredURI();
|
||||
@@ -270,7 +273,7 @@ public class EventManagementPanel extends FormPanel {
|
||||
|
||||
@Override
|
||||
public void onSuccess(Void result) {
|
||||
fillEvents();
|
||||
eventRefresher.fillEvents();
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -285,7 +288,7 @@ public class EventManagementPanel extends FormPanel {
|
||||
|
||||
@Override
|
||||
public void onSuccess(Void result) {
|
||||
fillEvents();
|
||||
eventRefresher.fillEvents();
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -350,61 +353,6 @@ public class EventManagementPanel extends FormPanel {
|
||||
});
|
||||
}
|
||||
|
||||
private void fillEvents() {
|
||||
sailingService.listEvents(new AsyncCallback<List<EventDAO>>() {
|
||||
@Override
|
||||
public void onSuccess(List<EventDAO> result) {
|
||||
grid.setWidget(8, 0, null);
|
||||
VerticalPanel buttonPanel = new VerticalPanel();
|
||||
Button btnRefresh = new Button("Refresh");
|
||||
btnRefresh.addClickHandler(new ClickHandler() {
|
||||
@Override
|
||||
public void onClick(ClickEvent event) {
|
||||
fillEvents();
|
||||
}
|
||||
});
|
||||
buttonPanel.add(btnRefresh);
|
||||
grid.setWidget(8, 1, buttonPanel);
|
||||
if (!result.isEmpty()) {
|
||||
final ListDataProvider<EventDAO> eventsList = new ListDataProvider<EventDAO>(result);
|
||||
final TrackedEventsTreeModel trackedEventsModel = new TrackedEventsTreeModel(eventsList);
|
||||
// When the following line is uncommented, the race table contents don't show anymore...???!!!
|
||||
CellTree eventsCellTree = new CellTree(trackedEventsModel, /* root */null);
|
||||
grid.setWidget(8, 0, eventsCellTree);
|
||||
|
||||
Button btnRemove = new Button("Remove");
|
||||
btnRemove.addClickHandler(new ClickHandler() {
|
||||
@Override
|
||||
public void onClick(ClickEvent click) {
|
||||
for (EventDAO event : eventsList.getList()) {
|
||||
if (trackedEventsModel.getSelectionModel().isSelected(event)) {
|
||||
stopTrackingEvent(event);
|
||||
} else {
|
||||
// scan event's races:
|
||||
for (RegattaDAO regatta : event.regattas) {
|
||||
for (RaceDAO race : regatta.races) {
|
||||
if (trackedEventsModel.getSelectionModel().isSelected(regatta) ||
|
||||
trackedEventsModel.getSelectionModel().isSelected(race)) {
|
||||
stopTrackingRace(event, race);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
btnRemove.setWidth("100%");
|
||||
buttonPanel.add(btnRemove);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailure(Throwable caught) {
|
||||
errorReporter.reportError("Remote Procedure Call listEvents() - Failure");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void fillRaces(final SailingServiceAsync sailingService) {
|
||||
final String jsonURL = jsonURLBox.getValue();
|
||||
final String liveDataURI = liveURIBox.getValue();
|
||||
@@ -459,7 +407,7 @@ public class EventManagementPanel extends FormPanel {
|
||||
|
||||
@Override
|
||||
public void onSuccess(Void result) {
|
||||
fillEvents();
|
||||
eventRefresher.fillEvents();
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -480,4 +428,51 @@ public class EventManagementPanel extends FormPanel {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fillEvents(List<EventDAO> result) {
|
||||
grid.setWidget(8, 0, null);
|
||||
VerticalPanel buttonPanel = new VerticalPanel();
|
||||
Button btnRefresh = new Button(stringConstants.refresh());
|
||||
btnRefresh.addClickHandler(new ClickHandler() {
|
||||
@Override
|
||||
public void onClick(ClickEvent event) {
|
||||
eventRefresher.fillEvents();
|
||||
}
|
||||
});
|
||||
buttonPanel.add(btnRefresh);
|
||||
grid.setWidget(8, 1, buttonPanel);
|
||||
if (!result.isEmpty()) {
|
||||
final ListDataProvider<EventDAO> eventsList = new ListDataProvider<EventDAO>(result);
|
||||
final TrackedEventsTreeModel trackedEventsModel = new TrackedEventsTreeModel(eventsList, /* multiSelection */ true);
|
||||
// When the following line is uncommented, the race table contents don't show anymore
|
||||
// if there are no events yet...???!!!
|
||||
CellTree eventsCellTree = new CellTree(trackedEventsModel, /* root */null);
|
||||
grid.setWidget(8, 0, eventsCellTree);
|
||||
|
||||
Button btnRemove = new Button(stringConstants.remove());
|
||||
btnRemove.addClickHandler(new ClickHandler() {
|
||||
@Override
|
||||
public void onClick(ClickEvent click) {
|
||||
for (EventDAO event : eventsList.getList()) {
|
||||
if (trackedEventsModel.getSelectionModel().isSelected(event)) {
|
||||
stopTrackingEvent(event);
|
||||
} else {
|
||||
// scan event's races:
|
||||
for (RegattaDAO regatta : event.regattas) {
|
||||
for (RaceDAO race : regatta.races) {
|
||||
if (trackedEventsModel.getSelectionModel().isSelected(regatta) ||
|
||||
trackedEventsModel.getSelectionModel().isSelected(race)) {
|
||||
stopTrackingRace(event, race);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
btnRemove.setWidth("100%");
|
||||
buttonPanel.add(btnRemove);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
package com.sap.sailing.gwt.ui.client;
|
||||
|
||||
public interface EventRefresher {
|
||||
void fillEvents();
|
||||
}
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
package com.sap.sailing.gwt.ui.client;
|
||||
|
||||
import com.sap.sailing.gwt.ui.shared.EventDAO;
|
||||
import com.sap.sailing.gwt.ui.shared.Pair;
|
||||
import com.sap.sailing.gwt.ui.shared.RaceDAO;
|
||||
|
||||
public interface RaceSelectionProvider {
|
||||
Pair<EventDAO, RaceDAO> getSelectedEventAndRace();
|
||||
}
|
||||
@@ -7,6 +7,8 @@ import com.google.gwt.user.client.rpc.RemoteServiceRelativePath;
|
||||
import com.sap.sailing.gwt.ui.shared.EventDAO;
|
||||
import com.sap.sailing.gwt.ui.shared.RaceRecordDAO;
|
||||
import com.sap.sailing.gwt.ui.shared.TracTracConfigurationDAO;
|
||||
import com.sap.sailing.gwt.ui.shared.WindDAO;
|
||||
import com.sap.sailing.gwt.ui.shared.WindInfoForRaceDAO;
|
||||
|
||||
/**
|
||||
* The client side stub for the RPC service.
|
||||
@@ -26,4 +28,8 @@ public interface SailingService extends RemoteService {
|
||||
void stopTrackingEvent(String eventName) throws Exception;
|
||||
|
||||
void stopTrackingRace(String eventName, String raceName) throws Exception;
|
||||
|
||||
WindInfoForRaceDAO getWindInfo(String eventName, String raceName, long fromAsMilliseconds, long toAsMilliseconds);
|
||||
|
||||
void setWind(String eventName, String raceName, WindDAO wind);
|
||||
}
|
||||
@@ -6,6 +6,8 @@ import com.google.gwt.user.client.rpc.AsyncCallback;
|
||||
import com.sap.sailing.gwt.ui.shared.EventDAO;
|
||||
import com.sap.sailing.gwt.ui.shared.RaceRecordDAO;
|
||||
import com.sap.sailing.gwt.ui.shared.TracTracConfigurationDAO;
|
||||
import com.sap.sailing.gwt.ui.shared.WindDAO;
|
||||
import com.sap.sailing.gwt.ui.shared.WindInfoForRaceDAO;
|
||||
|
||||
/**
|
||||
* The async counterpart of {@link SailingService}
|
||||
@@ -27,4 +29,9 @@ public interface SailingServiceAsync {
|
||||
|
||||
void stopTrackingRace(String eventName, String raceName, AsyncCallback<Void> asyncCallback);
|
||||
|
||||
void getWindInfo(String eventName, String raceName, long fromAsMilliseconds, long toAsMilliseconds,
|
||||
AsyncCallback<WindInfoForRaceDAO> callback);
|
||||
|
||||
void setWind(String eventName, String raceName, WindDAO wind, AsyncCallback<Void> callback);
|
||||
|
||||
}
|
||||
@@ -11,4 +11,6 @@ public interface StringConstants extends Constants {
|
||||
String listRaces();
|
||||
String wind();
|
||||
String windPanelLabel();
|
||||
String refresh();
|
||||
String remove();
|
||||
}
|
||||
+3
-1
@@ -5,4 +5,6 @@ tracTracEvents=TracTrac Events
|
||||
trackedBefore=Tracked Before
|
||||
listRaces=List Races
|
||||
wind=Wind
|
||||
windPanelLabel=This is the Wind Panel which so far is completely empty.
|
||||
windPanelLabel=This is the Wind Panel which so far is completely empty.
|
||||
refresh=Refresh
|
||||
remove=Remove
|
||||
+7
-5
@@ -4,24 +4,26 @@ import com.google.gwt.cell.client.AbstractCell;
|
||||
import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
|
||||
import com.google.gwt.view.client.ListDataProvider;
|
||||
import com.google.gwt.view.client.MultiSelectionModel;
|
||||
import com.google.gwt.view.client.SelectionModel;
|
||||
import com.google.gwt.view.client.SingleSelectionModel;
|
||||
import com.google.gwt.view.client.TreeViewModel;
|
||||
import com.sap.sailing.gwt.ui.shared.EventDAO;
|
||||
import com.sap.sailing.gwt.ui.shared.RaceDAO;
|
||||
import com.sap.sailing.gwt.ui.shared.RegattaDAO;
|
||||
|
||||
public class TrackedEventsTreeModel implements TreeViewModel {
|
||||
private final MultiSelectionModel<?> selectionModel;
|
||||
private final SelectionModel<?> selectionModel;
|
||||
|
||||
private final ListDataProvider<EventDAO> events;
|
||||
|
||||
public TrackedEventsTreeModel(ListDataProvider<EventDAO> eventsList) {
|
||||
public TrackedEventsTreeModel(ListDataProvider<EventDAO> eventsList, boolean multiSelection) {
|
||||
this.events = eventsList;
|
||||
selectionModel = new MultiSelectionModel<Object>();
|
||||
selectionModel = multiSelection ? new MultiSelectionModel<Object>() : new SingleSelectionModel<Object>();
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public <T> MultiSelectionModel<T> getSelectionModel() {
|
||||
return (MultiSelectionModel<T>) selectionModel;
|
||||
public <T> SelectionModel<T> getSelectionModel() {
|
||||
return (SelectionModel<T>) selectionModel;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -1,17 +1,181 @@
|
||||
package com.sap.sailing.gwt.ui.client;
|
||||
|
||||
import com.google.gwt.core.client.GWT;
|
||||
import com.google.gwt.user.client.ui.FormPanel;
|
||||
import com.google.gwt.user.client.ui.Label;
|
||||
import java.util.Comparator;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public class WindPanel extends FormPanel {
|
||||
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.user.cellview.client.CellTable;
|
||||
import com.google.gwt.user.cellview.client.CellTree;
|
||||
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;
|
||||
import com.google.gwt.user.client.ui.Grid;
|
||||
import com.google.gwt.user.client.ui.HasVerticalAlignment;
|
||||
import com.google.gwt.user.client.ui.Label;
|
||||
import com.google.gwt.user.client.ui.VerticalPanel;
|
||||
import com.google.gwt.view.client.ListDataProvider;
|
||||
import com.google.gwt.view.client.SelectionChangeEvent;
|
||||
import com.sap.sailing.gwt.ui.shared.EventDAO;
|
||||
import com.sap.sailing.gwt.ui.shared.Pair;
|
||||
import com.sap.sailing.gwt.ui.shared.RaceDAO;
|
||||
import com.sap.sailing.gwt.ui.shared.RegattaDAO;
|
||||
import com.sap.sailing.gwt.ui.shared.WindDAO;
|
||||
import com.sap.sailing.gwt.ui.shared.WindInfoForRaceDAO;
|
||||
import com.sap.sailing.gwt.ui.shared.WindTrackInfoDAO;
|
||||
|
||||
public class WindPanel extends FormPanel implements EventDisplayer, RaceSelectionProvider, WindShower {
|
||||
private final SailingServiceAsync sailingService;
|
||||
private final ErrorReporter errorReporter;
|
||||
private EventRefresher eventRefresher;
|
||||
private final Grid grid;
|
||||
private final StringConstants stringConstants;
|
||||
private final WindSettingPanel windSettingPanel;
|
||||
private Pair<EventDAO, RaceDAO> selectedEventAndRace;
|
||||
|
||||
public WindPanel(final SailingServiceAsync sailingService, ErrorReporter errorReporter) {
|
||||
public WindPanel(final SailingServiceAsync sailingService, ErrorReporter errorReporter, EventRefresher eventRefresher) {
|
||||
this.sailingService = sailingService;
|
||||
this.errorReporter = errorReporter;
|
||||
StringConstants stringConstants = GWT.create(StringConstants.class);
|
||||
this.setWidget(new Label(stringConstants.windPanelLabel()));
|
||||
this.eventRefresher = eventRefresher;
|
||||
stringConstants = GWT.create(StringConstants.class);
|
||||
grid = new Grid(2, 2); // first row: event/race selection; second row: wind display
|
||||
Button btnRefresh = new Button(stringConstants.refresh());
|
||||
btnRefresh.addClickHandler(new ClickHandler() {
|
||||
@Override
|
||||
public void onClick(ClickEvent event) {
|
||||
WindPanel.this.eventRefresher.fillEvents();
|
||||
}
|
||||
});
|
||||
grid.setWidget(0, 1, btnRefresh);
|
||||
windSettingPanel = new WindSettingPanel(sailingService, errorReporter, this, this);
|
||||
grid.setWidget(1, 1, windSettingPanel);
|
||||
this.setWidget(grid);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fillEvents(List<EventDAO> result) {
|
||||
grid.setWidget(0, 0, null); // remove tree view; important in case event list is empty
|
||||
grid.getCellFormatter().setVerticalAlignment(0, 1, HasVerticalAlignment.ALIGN_TOP);
|
||||
if (!result.isEmpty()) {
|
||||
final ListDataProvider<EventDAO> eventsList = new ListDataProvider<EventDAO>(result);
|
||||
final TrackedEventsTreeModel trackedEventsModel = new TrackedEventsTreeModel(eventsList, /* multiSelection */ false);
|
||||
CellTree eventsCellTree = new CellTree(trackedEventsModel, /* root */null);
|
||||
grid.setWidget(0, 0, eventsCellTree);
|
||||
|
||||
trackedEventsModel.getSelectionModel().addSelectionChangeHandler(new SelectionChangeEvent.Handler() {
|
||||
@Override
|
||||
public void onSelectionChange(SelectionChangeEvent selectionChangeEvent) {
|
||||
for (EventDAO event : eventsList.getList()) {
|
||||
for (RegattaDAO regatta : event.regattas) {
|
||||
for (RaceDAO race : regatta.races) {
|
||||
if (trackedEventsModel.getSelectionModel().isSelected(race)) {
|
||||
selectedEventAndRace = new Pair<EventDAO, RaceDAO>(event, race);
|
||||
showWind(event, race);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void showWind(final EventDAO event, final RaceDAO race) {
|
||||
sailingService.getWindInfo(event.name, race.name,
|
||||
// TODO what about the time interval?
|
||||
/* fromAsMilliseconds */0, /* toAsMilliseconds */System.currentTimeMillis(),
|
||||
new AsyncCallback<WindInfoForRaceDAO>() {
|
||||
@Override
|
||||
public void onSuccess(WindInfoForRaceDAO result) {
|
||||
showWindForRace(result);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailure(Throwable caught) {
|
||||
errorReporter.reportError("Error fetching wind information for race " + race.name + ": "
|
||||
+ caught.getMessage());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void showWindForRace(WindInfoForRaceDAO result) {
|
||||
grid.setWidget(1, 0, null);
|
||||
VerticalPanel windDisplay = new VerticalPanel();
|
||||
grid.setWidget(1, 0, windDisplay);
|
||||
for (Map.Entry<String, WindTrackInfoDAO> e : result.windTrackInfoByWindSourceName.entrySet()) {
|
||||
Label windSourceLabel = new Label("Wind Source: "+e.getKey()+
|
||||
", Dampening Interval: "+e.getValue().dampeningIntervalInMilliseconds+"ms");
|
||||
windDisplay.add(windSourceLabel);
|
||||
TextColumn<WindDAO> timeColumn = new TextColumn<WindDAO>() {
|
||||
@Override
|
||||
public String getValue(WindDAO object) {
|
||||
return new Date(object.timepoint).toString();
|
||||
}
|
||||
};
|
||||
TextColumn<WindDAO> speedInKnotsColumn = new TextColumn<WindDAO>() {
|
||||
@Override
|
||||
public String getValue(WindDAO object) {
|
||||
return ""+object.trueWindSpeedInKnots;
|
||||
}
|
||||
};
|
||||
TextColumn<WindDAO> windDirectionInDegColumn = new TextColumn<WindDAO>() {
|
||||
@Override
|
||||
public String getValue(WindDAO object) {
|
||||
return ""+object.trueWindFromDeg;
|
||||
}
|
||||
};
|
||||
timeColumn.setSortable(true);
|
||||
speedInKnotsColumn.setSortable(true);
|
||||
windDirectionInDegColumn.setSortable(true);
|
||||
CellTable<WindDAO> windTable = new CellTable<WindDAO>(/* pageSize */ 100);
|
||||
windTable.addColumn(timeColumn, "Name");
|
||||
windTable.addColumn(speedInKnotsColumn, "Tracking Started");
|
||||
windTable.addColumn(windDirectionInDegColumn, "From (deg)");
|
||||
ListDataProvider<WindDAO> windList = new ListDataProvider<WindDAO>(e.getValue().windFixes);
|
||||
windList.addDataDisplay(windTable);
|
||||
Handler columnSortHandler = getWindTableColumnSortHandler(windList.getList(), timeColumn,
|
||||
speedInKnotsColumn, windDirectionInDegColumn);
|
||||
windTable.addColumnSortHandler(columnSortHandler);
|
||||
windDisplay.add(windTable);
|
||||
}
|
||||
}
|
||||
|
||||
private Handler getWindTableColumnSortHandler(List<WindDAO> list, TextColumn<WindDAO> timeColumn,
|
||||
TextColumn<WindDAO> speedInKnotsColumn, TextColumn<WindDAO> windDirectionInDegColumn) {
|
||||
ListHandler<WindDAO> result = new ListHandler<WindDAO>(list);
|
||||
result.setComparator(timeColumn, new Comparator<WindDAO>() {
|
||||
@Override
|
||||
public int compare(WindDAO o1, WindDAO o2) {
|
||||
return o1.timepoint < o2.timepoint ? -1 : o1.timepoint == o2.timepoint ? 0 : 1;
|
||||
}
|
||||
});
|
||||
result.setComparator(speedInKnotsColumn, new Comparator<WindDAO>() {
|
||||
@Override
|
||||
public int compare(WindDAO o1, WindDAO o2) {
|
||||
return o1.trueWindSpeedInKnots < o2.trueWindSpeedInKnots ? -1 :
|
||||
o1.trueWindSpeedInKnots == o2.trueWindSpeedInKnots ? 0 : 1;
|
||||
}
|
||||
});
|
||||
result.setComparator(windDirectionInDegColumn, new Comparator<WindDAO>() {
|
||||
@Override
|
||||
public int compare(WindDAO o1, WindDAO o2) {
|
||||
return o1.trueWindFromDeg < o2.trueWindFromDeg ? -1 :
|
||||
o1.trueWindFromDeg == o2.trueWindFromDeg ? 0 : 1;
|
||||
}
|
||||
});
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Pair<EventDAO, RaceDAO> getSelectedEventAndRace() {
|
||||
return selectedEventAndRace;
|
||||
}
|
||||
|
||||
}
|
||||
+81
@@ -0,0 +1,81 @@
|
||||
package com.sap.sailing.gwt.ui.client;
|
||||
|
||||
import com.google.gwt.event.dom.client.ClickEvent;
|
||||
import com.google.gwt.event.dom.client.ClickHandler;
|
||||
import com.google.gwt.event.dom.client.KeyCodes;
|
||||
import com.google.gwt.event.dom.client.KeyPressEvent;
|
||||
import com.google.gwt.event.dom.client.KeyPressHandler;
|
||||
import com.google.gwt.user.client.rpc.AsyncCallback;
|
||||
import com.google.gwt.user.client.ui.Button;
|
||||
import com.google.gwt.user.client.ui.DoubleBox;
|
||||
import com.google.gwt.user.client.ui.FocusWidget;
|
||||
import com.google.gwt.user.client.ui.FormPanel;
|
||||
import com.google.gwt.user.client.ui.Grid;
|
||||
import com.google.gwt.user.client.ui.Label;
|
||||
import com.sap.sailing.gwt.ui.shared.EventDAO;
|
||||
import com.sap.sailing.gwt.ui.shared.Pair;
|
||||
import com.sap.sailing.gwt.ui.shared.PositionDAO;
|
||||
import com.sap.sailing.gwt.ui.shared.RaceDAO;
|
||||
import com.sap.sailing.gwt.ui.shared.WindDAO;
|
||||
|
||||
public class WindSettingPanel extends FormPanel {
|
||||
|
||||
public WindSettingPanel(final SailingServiceAsync sailingService, final ErrorReporter errorReporter,
|
||||
final RaceSelectionProvider raceSelectionProvider, final WindShower windShower) {
|
||||
Grid grid = new Grid(6, 2);
|
||||
setWidget(grid);
|
||||
grid.setWidget(0, 0, new Label("Set Wind"));
|
||||
grid.setWidget(1, 0, new Label("Speed (kn)"));
|
||||
final DoubleBox speedInKnotsBox = new DoubleBox();
|
||||
grid.setWidget(1, 1, speedInKnotsBox);
|
||||
grid.setWidget(2, 0, new Label("From (deg)"));
|
||||
final DoubleBox fromInDegBox = new DoubleBox();
|
||||
grid.setWidget(2, 1, fromInDegBox);
|
||||
grid.setWidget(3, 0, new Label("Latitude (optional)"));
|
||||
final DoubleBox latDegBox = new DoubleBox();
|
||||
grid.setWidget(3, 1, latDegBox);
|
||||
grid.setWidget(4, 0, new Label("Longitude (optional)"));
|
||||
final DoubleBox lngDegBox = new DoubleBox();
|
||||
grid.setWidget(4, 1, lngDegBox);
|
||||
Button setWindButton = new Button("Set");
|
||||
grid.setWidget(5, 0, setWindButton);
|
||||
linkEnterToButton(setWindButton, speedInKnotsBox, fromInDegBox, latDegBox, lngDegBox);
|
||||
setWindButton.addClickHandler(new ClickHandler() {
|
||||
@Override
|
||||
public void onClick(ClickEvent clickEvent) {
|
||||
WindDAO wind = new WindDAO();
|
||||
wind.trueWindSpeedInKnots = speedInKnotsBox.getValue();
|
||||
wind.trueWindFromDeg = fromInDegBox.getValue();
|
||||
wind.timepoint = System.currentTimeMillis();
|
||||
if (latDegBox.getValue() != null && lngDegBox.getValue() != null) {
|
||||
wind.position = new PositionDAO(latDegBox.getValue(), lngDegBox.getValue());
|
||||
}
|
||||
final Pair<EventDAO, RaceDAO> eventAndRace = raceSelectionProvider.getSelectedEventAndRace();
|
||||
sailingService.setWind(eventAndRace.getA().name, eventAndRace.getB().name, wind, new AsyncCallback<Void>() {
|
||||
@Override
|
||||
public void onSuccess(Void result) {
|
||||
windShower.showWind(eventAndRace.getA(), eventAndRace.getB());
|
||||
}
|
||||
@Override
|
||||
public void onFailure(Throwable caught) {
|
||||
errorReporter.reportError("Error setting wind for race "+eventAndRace.getB().name+": "+caught.getMessage());
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void linkEnterToButton(final Button button, FocusWidget... widgets) {
|
||||
for (FocusWidget widget : widgets) {
|
||||
widget.addKeyPressHandler(new KeyPressHandler() {
|
||||
@Override
|
||||
public void onKeyPress(KeyPressEvent event) {
|
||||
if (event.getNativeEvent().getKeyCode() == KeyCodes.KEY_ENTER) {
|
||||
button.click();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
package com.sap.sailing.gwt.ui.client;
|
||||
|
||||
import com.sap.sailing.gwt.ui.shared.EventDAO;
|
||||
import com.sap.sailing.gwt.ui.shared.RaceDAO;
|
||||
|
||||
public interface WindShower {
|
||||
|
||||
void showWind(EventDAO event, RaceDAO race);
|
||||
|
||||
}
|
||||
+103
-1
@@ -8,10 +8,12 @@ import java.text.ParseException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import org.json.simple.JSONObject;
|
||||
import org.osgi.framework.BundleContext;
|
||||
import org.osgi.util.tracker.ServiceTracker;
|
||||
|
||||
@@ -19,7 +21,22 @@ import com.google.gwt.user.server.rpc.RemoteServiceServlet;
|
||||
import com.sap.sailing.domain.base.BoatClass;
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.base.Event;
|
||||
import com.sap.sailing.domain.base.Position;
|
||||
import com.sap.sailing.domain.base.RaceDefinition;
|
||||
import com.sap.sailing.domain.base.Speed;
|
||||
import com.sap.sailing.domain.base.SpeedWithBearing;
|
||||
import com.sap.sailing.domain.base.TimePoint;
|
||||
import com.sap.sailing.domain.base.impl.DegreeBearingImpl;
|
||||
import com.sap.sailing.domain.base.impl.DegreePosition;
|
||||
import com.sap.sailing.domain.base.impl.KilometersPerHourSpeedImpl;
|
||||
import com.sap.sailing.domain.base.impl.KnotSpeedImpl;
|
||||
import com.sap.sailing.domain.base.impl.KnotSpeedWithBearingImpl;
|
||||
import com.sap.sailing.domain.base.impl.MillisecondsTimePoint;
|
||||
import com.sap.sailing.domain.tracking.TrackedRace;
|
||||
import com.sap.sailing.domain.tracking.Wind;
|
||||
import com.sap.sailing.domain.tracking.WindSource;
|
||||
import com.sap.sailing.domain.tracking.WindTrack;
|
||||
import com.sap.sailing.domain.tracking.impl.WindImpl;
|
||||
import com.sap.sailing.domain.tractracadapter.DomainFactory;
|
||||
import com.sap.sailing.domain.tractracadapter.RaceRecord;
|
||||
import com.sap.sailing.domain.tractracadapter.TracTracConfiguration;
|
||||
@@ -27,10 +44,14 @@ import com.sap.sailing.gwt.ui.client.SailingService;
|
||||
import com.sap.sailing.gwt.ui.shared.BoatClassDAO;
|
||||
import com.sap.sailing.gwt.ui.shared.CompetitorDAO;
|
||||
import com.sap.sailing.gwt.ui.shared.EventDAO;
|
||||
import com.sap.sailing.gwt.ui.shared.PositionDAO;
|
||||
import com.sap.sailing.gwt.ui.shared.RaceDAO;
|
||||
import com.sap.sailing.gwt.ui.shared.RaceRecordDAO;
|
||||
import com.sap.sailing.gwt.ui.shared.RegattaDAO;
|
||||
import com.sap.sailing.gwt.ui.shared.TracTracConfigurationDAO;
|
||||
import com.sap.sailing.gwt.ui.shared.WindDAO;
|
||||
import com.sap.sailing.gwt.ui.shared.WindInfoForRaceDAO;
|
||||
import com.sap.sailing.gwt.ui.shared.WindTrackInfoDAO;
|
||||
import com.sap.sailing.mongodb.DomainObjectFactory;
|
||||
import com.sap.sailing.mongodb.MongoObjectFactory;
|
||||
import com.sap.sailing.mongodb.MongoWindStoreFactory;
|
||||
@@ -173,9 +194,90 @@ public class SailingServiceImpl extends RemoteServiceServlet implements SailingS
|
||||
}
|
||||
|
||||
private void startTrackingWind(String eventName, String raceName, boolean correctByDeclination) throws Exception {
|
||||
Event event = service.getEventByName(eventName);
|
||||
if (event != null) {
|
||||
RaceDefinition race = getRaceByName(event, raceName);
|
||||
service.startTrackingWind(event, race, correctByDeclination);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public WindInfoForRaceDAO getWindInfo(String eventName, String raceName, long fromAsMilliseconds, long toAsMilliseconds) {
|
||||
Event event = service.getEventByName(eventName);
|
||||
RaceDefinition race = getRaceByName(event, raceName);
|
||||
service.startTrackingWind(event, race, correctByDeclination);
|
||||
WindInfoForRaceDAO result = new WindInfoForRaceDAO();
|
||||
TrackedRace trackedRace = service.getDomainFactory().getTrackedEvent(event).getExistingTrackedRace(race);
|
||||
TimePoint from = new MillisecondsTimePoint(fromAsMilliseconds);
|
||||
TimePoint to = new MillisecondsTimePoint(toAsMilliseconds);
|
||||
JSONObject jsonWindTracks = new JSONObject();
|
||||
jsonWindTracks.put("currentwindsource", trackedRace.getWindSource().toString());
|
||||
Map<String, WindTrackInfoDAO> windTrackInfoDAOs = new HashMap<String, WindTrackInfoDAO>();
|
||||
result.windTrackInfoByWindSourceName = windTrackInfoDAOs;
|
||||
for (WindSource windSource : WindSource.values()) {
|
||||
WindTrackInfoDAO windTrackInfoDAO = new WindTrackInfoDAO();
|
||||
windTrackInfoDAO.windFixes = new ArrayList<WindDAO>();
|
||||
windTrackInfoDAOs.put(windSource.name(), windTrackInfoDAO);
|
||||
WindTrack windTrack = trackedRace.getWindTrack(windSource);
|
||||
windTrackInfoDAO.dampeningIntervalInMilliseconds = windTrack.getMillisecondsOverWhichToAverageWind();
|
||||
Iterator<Wind> windIter = windTrack.getFixesIterator(from, /* inclusive */true);
|
||||
while (windIter.hasNext()) {
|
||||
Wind wind = windIter.next();
|
||||
if (wind.getTimePoint().compareTo(to) > 0) {
|
||||
break;
|
||||
}
|
||||
WindDAO windDAO = new WindDAO();
|
||||
windDAO.trueWindBearingDeg = wind.getBearing().getDegrees();
|
||||
windDAO.trueWindFromDeg = wind.getBearing().reverse().getDegrees();
|
||||
windDAO.trueWindSpeedInKnots = wind.getBearing().getDegrees();
|
||||
windDAO.trueWindSpeedInMetersPerSecond = wind.getMetersPerSecond();
|
||||
if (wind.getPosition() != null) {
|
||||
windDAO.position = new PositionDAO(wind.getPosition().getLatDeg(), wind.getPosition().getLngDeg());
|
||||
}
|
||||
windTrackInfoDAO.windFixes.add(windDAO);
|
||||
if (wind.getTimePoint() != null) {
|
||||
windDAO.timepoint = wind.getTimePoint().asMillis();
|
||||
Wind estimatedWind = windTrack.getEstimatedWind(wind.getPosition(), wind.getTimePoint());
|
||||
windDAO.dampenedTrueWindBearingDeg = estimatedWind.getBearing().getDegrees();
|
||||
windDAO.dampenedTrueWindSpeedInKnots = estimatedWind.getKnots();
|
||||
windDAO.dampenedTrueWindSpeedInMetersPerSecond = estimatedWind.getMetersPerSecond();
|
||||
}
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setWind(String eventName, String raceName, WindDAO windDAO) {
|
||||
Event event = service.getEventByName(eventName);
|
||||
RaceDefinition race = getRaceByName(event, raceName);
|
||||
Position p = null;
|
||||
if (windDAO.position != null) {
|
||||
p = new DegreePosition(windDAO.position.latDeg, windDAO.position.lngDeg);
|
||||
}
|
||||
TimePoint at = null;
|
||||
if (windDAO.timepoint != null) {
|
||||
at = new MillisecondsTimePoint(windDAO.timepoint);
|
||||
}
|
||||
SpeedWithBearing speedWithBearing = null;
|
||||
Speed speed = null;
|
||||
if (windDAO.trueWindSpeedInKnots != null) {
|
||||
speed = new KnotSpeedImpl(windDAO.trueWindSpeedInKnots);
|
||||
} else if (windDAO.trueWindSpeedInMetersPerSecond != null) {
|
||||
speed = new KilometersPerHourSpeedImpl(windDAO.trueWindSpeedInMetersPerSecond * 3600. / 1000.);
|
||||
} else if (windDAO.dampenedTrueWindSpeedInKnots != null) {
|
||||
speed = new KnotSpeedImpl(windDAO.dampenedTrueWindSpeedInKnots);
|
||||
} else if (windDAO.dampenedTrueWindSpeedInMetersPerSecond != null) {
|
||||
speed = new KilometersPerHourSpeedImpl(windDAO.dampenedTrueWindSpeedInMetersPerSecond * 3600. / 1000.);
|
||||
}
|
||||
if (speed != null) {
|
||||
if (windDAO.trueWindBearingDeg != null) {
|
||||
speedWithBearing = new KnotSpeedWithBearingImpl(speed.getKnots(), new DegreeBearingImpl(windDAO.trueWindBearingDeg));
|
||||
} else if (windDAO.trueWindFromDeg != null) {
|
||||
speedWithBearing = new KnotSpeedWithBearingImpl(speed.getKnots(), new DegreeBearingImpl(windDAO.trueWindFromDeg).reverse());
|
||||
}
|
||||
}
|
||||
Wind wind = new WindImpl(p, at, speedWithBearing);
|
||||
service.getDomainFactory().getTrackedEvent(event).getTrackedRace(race).recordWind(wind, WindSource.WEB);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,74 @@
|
||||
package com.sap.sailing.gwt.ui.shared;
|
||||
|
||||
import com.google.gwt.user.client.rpc.IsSerializable;
|
||||
|
||||
public class Pair<A, B> implements IsSerializable {
|
||||
|
||||
private A a;
|
||||
|
||||
private B b;
|
||||
|
||||
private int hashCode;
|
||||
|
||||
public Pair( A a, B b ) {
|
||||
|
||||
this.a = a;
|
||||
this.b = b;
|
||||
hashCode = 0;
|
||||
}
|
||||
|
||||
public void setA( A a ) {
|
||||
|
||||
this.a = a;
|
||||
hashCode = 0;
|
||||
}
|
||||
|
||||
public A getA( ) {
|
||||
|
||||
return a;
|
||||
}
|
||||
|
||||
public void setB( B b ) {
|
||||
|
||||
this.b = b;
|
||||
hashCode = 0;
|
||||
}
|
||||
|
||||
public B getB( ) {
|
||||
|
||||
return b;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode( ) {
|
||||
|
||||
if ( hashCode == 0 ) {
|
||||
hashCode = 17;
|
||||
hashCode = 37 * hashCode + ( a != null ? a.hashCode( ) : 0 );
|
||||
hashCode = 37 * hashCode + ( b != null ? b.hashCode( ) : 0 );
|
||||
}
|
||||
return hashCode;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals( Object obj ) {
|
||||
|
||||
boolean result;
|
||||
if ( this == obj ) {
|
||||
result = true;
|
||||
} else if ( obj instanceof Pair<?, ?> ) {
|
||||
Pair<?, ?> pair = (Pair<?, ?>) obj;
|
||||
result = ( this.a != null && this.a.equals( pair.a ) || this.a == null && pair.a == null ) && ( this.b != null && this.b.equals( pair.b ) || this.b == null && pair.b == null );
|
||||
} else {
|
||||
result = false;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString( ) {
|
||||
|
||||
return "[" + (a==null?"null":a.toString( )) + ", " +
|
||||
(b==null?"null":b.toString( )) + "]"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
|
||||
}
|
||||
}
|
||||
+16
@@ -0,0 +1,16 @@
|
||||
package com.sap.sailing.gwt.ui.shared;
|
||||
|
||||
import com.google.gwt.user.client.rpc.IsSerializable;
|
||||
|
||||
public class PositionDAO implements IsSerializable {
|
||||
public double latDeg;
|
||||
public double lngDeg;
|
||||
|
||||
public PositionDAO() {}
|
||||
|
||||
public PositionDAO(double latDeg, double lngDeg) {
|
||||
this.latDeg = latDeg;
|
||||
this.lngDeg = lngDeg;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
package com.sap.sailing.gwt.ui.shared;
|
||||
|
||||
import com.google.gwt.user.client.rpc.IsSerializable;
|
||||
|
||||
public class WindDAO implements IsSerializable {
|
||||
public Double trueWindSpeedInMetersPerSecond;
|
||||
public Double trueWindSpeedInKnots;
|
||||
public Double trueWindBearingDeg;
|
||||
public Double trueWindFromDeg;
|
||||
public Double dampenedTrueWindSpeedInMetersPerSecond;
|
||||
public Double dampenedTrueWindSpeedInKnots;
|
||||
public Double dampenedTrueWindBearingDeg;
|
||||
public PositionDAO position;
|
||||
public Long timepoint;
|
||||
|
||||
public WindDAO() {}
|
||||
}
|
||||
+16
@@ -0,0 +1,16 @@
|
||||
package com.sap.sailing.gwt.ui.shared;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import com.google.gwt.user.client.rpc.IsSerializable;
|
||||
|
||||
public class WindInfoDAO implements IsSerializable {
|
||||
public List<WindInfoForRaceDAO> windInfoForRaces;
|
||||
|
||||
public WindInfoDAO() {}
|
||||
|
||||
public WindInfoDAO(List<WindInfoForRaceDAO> windInfoForRaces) {
|
||||
super();
|
||||
this.windInfoForRaces = windInfoForRaces;
|
||||
}
|
||||
}
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
package com.sap.sailing.gwt.ui.shared;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import com.google.gwt.user.client.rpc.IsSerializable;
|
||||
|
||||
public class WindInfoForRaceDAO implements IsSerializable {
|
||||
public Map<String, WindTrackInfoDAO> windTrackInfoByWindSourceName;
|
||||
|
||||
public WindInfoForRaceDAO() {}
|
||||
}
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
package com.sap.sailing.gwt.ui.shared;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import com.google.gwt.user.client.rpc.IsSerializable;
|
||||
|
||||
public class WindTrackInfoDAO implements IsSerializable {
|
||||
public List<WindDAO> windFixes;
|
||||
public long dampeningIntervalInMilliseconds;
|
||||
|
||||
public WindTrackInfoDAO() {}
|
||||
}
|
||||
-2
@@ -1,2 +0,0 @@
|
||||
serviceClass: com.sap.sailing.gwt.ui.client.SailingService
|
||||
path: 71024D1E1E45536C91129D4A82525C1D.gwt.rpc
|
||||
-5978
File diff suppressed because it is too large.
Load diff
-5867
File diff suppressed because it is too large.
Load diff
-5901
File diff suppressed because it is too large.
Load diff
-5816
File diff suppressed because it is too large.
Load diff
-5897
File diff suppressed because it is too large.
Load diff
-5842
File diff suppressed because it is too large.
Load diff
-1892
File diff suppressed because it is too large.
Load diff
-1837
File diff suppressed because it is too large.
Load diff
-1849
File diff suppressed because it is too large.
Load diff
-78
@@ -1,78 +0,0 @@
|
||||
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, true, true, 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.CompetitorDAO, true, true, false, false, com.sap.sailing.gwt.ui.shared.CompetitorDAO/1117883818, 1117883818
|
||||
[Lcom.sap.sailing.gwt.ui.shared.CompetitorDAO;, true, true, false, false, [Lcom.sap.sailing.gwt.ui.shared.CompetitorDAO;/681863127, 681863127
|
||||
com.sap.sailing.gwt.ui.shared.EventDAO, true, true, false, false, com.sap.sailing.gwt.ui.shared.EventDAO/4067968685, 4067968685
|
||||
[Lcom.sap.sailing.gwt.ui.shared.EventDAO;, true, true, false, false, [Lcom.sap.sailing.gwt.ui.shared.EventDAO;/887606509, 887606509
|
||||
com.sap.sailing.gwt.ui.shared.RaceDAO, true, true, false, false, com.sap.sailing.gwt.ui.shared.RaceDAO/3981862063, 3981862063
|
||||
[Lcom.sap.sailing.gwt.ui.shared.RaceDAO;, true, true, false, false, [Lcom.sap.sailing.gwt.ui.shared.RaceDAO;/1871712056, 1871712056
|
||||
com.sap.sailing.gwt.ui.shared.RaceRecordDAO, true, true, true, true, com.sap.sailing.gwt.ui.shared.RaceRecordDAO/3506849265, 3506849265
|
||||
[Lcom.sap.sailing.gwt.ui.shared.RaceRecordDAO;, true, true, false, false, [Lcom.sap.sailing.gwt.ui.shared.RaceRecordDAO;/2905316035, 2905316035
|
||||
com.sap.sailing.gwt.ui.shared.RegattaDAO, true, true, false, false, com.sap.sailing.gwt.ui.shared.RegattaDAO/1020702142, 1020702142
|
||||
[Lcom.sap.sailing.gwt.ui.shared.RegattaDAO;, true, true, false, false, [Lcom.sap.sailing.gwt.ui.shared.RegattaDAO;/821437198, 821437198
|
||||
com.sap.sailing.gwt.ui.shared.TracTracConfigurationDAO, true, true, false, false, com.sap.sailing.gwt.ui.shared.TracTracConfigurationDAO/1734357729, 1734357729
|
||||
[Lcom.sap.sailing.gwt.ui.shared.TracTracConfigurationDAO;, true, true, false, false, [Lcom.sap.sailing.gwt.ui.shared.TracTracConfigurationDAO;/3836669265, 3836669265
|
||||
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, true, true, java.sql.Date/730999118, 730999118
|
||||
java.sql.Time, true, true, true, true, java.sql.Time/1816797103, 1816797103
|
||||
java.sql.Timestamp, true, true, true, true, 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, true, true, 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
|
||||
-1817
File diff suppressed because it is too large.
Load diff
-1850
File diff suppressed because it is too large.
Load diff
-1840
File diff suppressed because it is too large.
Load diff
+2
-2
@@ -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='065EB70609FB41D7CD835BB23B07BF98',Pb='339AE597D04A89C76E21AEFC343AF097',Qb='38AD959FDAAB70FAED5A96E2CB2E9D23',Rb='9AFB228AFCF1B1ECC119B24A89EB8694',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='B70C47309E7B309548C1C833D0F6A7D5',sb='Bad handler "',ac='DOMContentLoaded',Tb='E38DFF1ED0CF1D92C9706EB9D79F0D2C',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='0C8F5763011319D284DC41D4CFB768D2',Pb='349C9D0A56EE5A4AB7610A2E28B4F66C',Qb='6C62904521EC8EE12DA765042129A819',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='?',Rb='BEC4F3F8B89EF2802F217CE589CC9692',sb='Bad handler "',ac='DOMContentLoaded',Sb='F2C0230A09556ECBDDEA83BB4ADF8F2C',Tb='FCD5B88FFF90DAC9778E029276824ED4',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([Db],Qb);F([Bb],Rb);F([Gb],Sb);F([Jb],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([Hb],Ob);F([Jb],Pb);F([Db],Qb);F([Fb],Rb);F([Gb],Sb);F([Bb],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();
|
||||
@@ -18,10 +18,10 @@
|
||||
</listAttribute>
|
||||
<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl} -consoleLog -console"/>
|
||||
<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>
|
||||
<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Declipse.ignoreApp=true -Dosgi.noShutdown=true -Dorg.osgi.service.http.port=8888 -Xmx4096m"/>
|
||||
<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Declipse.ignoreApp=true -Dosgi.noShutdown=true -Dorg.osgi.service.http.port=8888 -Dexpedition.udp.port=2010 -Xmx4096m"/>
|
||||
<stringAttribute key="pde.version" value="3.3"/>
|
||||
<booleanAttribute key="show_selected_only" value="false"/>
|
||||
<stringAttribute key="target_bundles" value="javax.servlet.jsp@default:default,javax.servlet@default:default,org.apache.ant@default:default,org.apache.commons.el@default:default,org.apache.commons.logging@default:default,org.apache.jasper@default:default,org.eclipse.core.jobs@default:default,org.eclipse.core.runtime.compatibility.registry@default:false,org.eclipse.equinox.common@2:true,org.eclipse.equinox.http.jetty@default:default,org.eclipse.equinox.http.registry@default:default,org.eclipse.equinox.http.servlet@default:default,org.eclipse.equinox.registry@default:default,org.eclipse.equinox.util@default:default,org.eclipse.osgi.services@default:default,org.eclipse.osgi.util@default:default,org.eclipse.osgi@-1:true,org.hamcrest.core@default:default,org.junit*3.8.2.v3_8_2_v20100427-1100@default:default,org.junit*4.8.2.v4_8_2_v20110321-1705@default:default,org.junit4@default:default,org.mortbay.jetty.server@default:default,org.mortbay.jetty.util@default:default"/>
|
||||
<stringAttribute key="target_bundles" value="javax.servlet.jsp@default:default,javax.servlet@default:default,org.apache.ant@default:default,org.apache.commons.el@default:default,org.apache.commons.logging@default:default,org.apache.jasper@default:default,org.eclipse.core.jobs@default:default,org.eclipse.core.runtime.compatibility.registry@default:false,org.eclipse.equinox.common@2:true,org.eclipse.equinox.http.jetty@default:default,org.eclipse.equinox.http.registry@default:default,org.eclipse.equinox.http.servlet@default:default,org.eclipse.equinox.registry@default:default,org.eclipse.equinox.util@default:default,org.eclipse.osgi.services@default:default,org.eclipse.osgi.util@default:default,org.eclipse.osgi@-1:true,org.eclipse.update.configurator@3:true,org.hamcrest.core@default:default,org.junit*3.8.2.v3_8_2_v20100427-1100@default:default,org.junit*4.8.2.v4_8_2_v20110321-1705@default:default,org.junit4@default:default,org.mortbay.jetty.server@default:default,org.mortbay.jetty.util@default:default"/>
|
||||
<booleanAttribute key="tracing" value="false"/>
|
||||
<booleanAttribute key="useCustomFeatures" value="false"/>
|
||||
<booleanAttribute key="useDefaultConfigArea" value="true"/>
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
</listAttribute>
|
||||
<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl} -consoleLog -console"/>
|
||||
<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>
|
||||
<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Declipse.ignoreApp=true -Dosgi.noShutdown=true -Dhttp.proxyHost=proxy.wdf.sap.corp -Dhttp.proxyPort=8080 -Dorg.osgi.service.http.port=8888 -Xmx4096m"/>
|
||||
<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Declipse.ignoreApp=true -Dosgi.noShutdown=true -Dhttp.proxyHost=proxy.wdf.sap.corp -Dhttp.proxyPort=8080 -Dorg.osgi.service.http.port=8888 -Dexpedition.udp.port=2010 -Xmx4096m"/>
|
||||
<stringAttribute key="pde.version" value="3.3"/>
|
||||
<booleanAttribute key="show_selected_only" value="false"/>
|
||||
<stringAttribute key="target_bundles" value="javax.servlet.jsp@default:default,javax.servlet@default:default,org.apache.ant@default:default,org.apache.commons.el@default:default,org.apache.commons.logging@default:default,org.apache.jasper@default:default,org.eclipse.core.jobs@default:default,org.eclipse.core.runtime.compatibility.registry@default:false,org.eclipse.equinox.common@2:true,org.eclipse.equinox.http.jetty@default:default,org.eclipse.equinox.http.registry@default:default,org.eclipse.equinox.http.servlet@default:default,org.eclipse.equinox.registry@default:default,org.eclipse.osgi.services@default:default,org.eclipse.osgi@-1:true,org.eclipse.update.configurator@3:true,org.junit*3.8.2.v3_8_2_v20100427-1100@default:default,org.junit*4.8.2.v4_8_2_v20110321-1705@default:default,org.junit4@default:default,org.mortbay.jetty.server@default:default,org.mortbay.jetty.util@default:default"/>
|
||||
|
||||
Reference in new issue
Block a user