mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-28 14:57:12 +00:00
Merge branch 'master' into dev
This commit is contained in:
commit
c76a8a8398
19 files changed
+563
-74
No files matched your search
+21
@@ -0,0 +1,21 @@
|
||||
<?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<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.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/sapjvm_7"/>
|
||||
<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="-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y -XX:+UseParallelGC -ea -Djava.util.logging.config.file=${project_loc:com.sap.sailing.server}/../target/configuration/logging_debug.properties"/>
|
||||
</launchConfiguration>
|
||||
+21
@@ -0,0 +1,21 @@
|
||||
<?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<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.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/sapjvm_7"/>
|
||||
<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="-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y -Dhttp.proxyHost=proxy -Dhttp.proxyPort=8080 -XX:+UseParallelGC -Dtractrac.tunnel=true -Dtractrac.tunnel.host=10.18.206.73 -ea -Djava.util.logging.config.file=${project_loc:com.sap.sailing.server}/../target/configuration/logging_debug.properties"/>
|
||||
</launchConfiguration>
|
||||
@@ -18,7 +18,8 @@ Require-Bundle: com.sap.sailing.domain,
|
||||
com.sap.sailing.domain.common,
|
||||
org.moxieapps.gwt.highcharts;bundle-version="1.1.4",
|
||||
com.sap.sailing.geocoding,
|
||||
com.sap.sailing.server.replication
|
||||
com.sap.sailing.server.replication,
|
||||
com.googlecode.java-diff-utils;bundle-version="1.3.0"
|
||||
Bundle-Activator: com.sap.sailing.gwt.ui.server.Activator
|
||||
Bundle-ActivationPolicy: lazy
|
||||
Export-Package: com.sap.sailing.gwt.ui.client;x-friends:="com.sap.sailing.gwt.ui.test",
|
||||
|
||||
+82
@@ -0,0 +1,82 @@
|
||||
package com.sap.sailing.gwt.ui.adminconsole;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import com.google.gwt.user.client.ui.CaptionPanel;
|
||||
import com.google.gwt.user.client.ui.VerticalPanel;
|
||||
import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
|
||||
import com.sap.sailing.gwt.ui.client.ErrorReporter;
|
||||
import com.sap.sailing.gwt.ui.client.RaceSelectionChangeListener;
|
||||
import com.sap.sailing.gwt.ui.client.RaceSelectionModel;
|
||||
import com.sap.sailing.gwt.ui.client.RegattaRefresher;
|
||||
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
|
||||
import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
import com.sap.sailing.gwt.ui.shared.RaceDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.RegattaDTO;
|
||||
|
||||
public abstract class AbstractRaceManagementPanel extends AbstractEventManagementPanel implements RaceSelectionChangeListener {
|
||||
protected RegattaAndRaceIdentifier singleSelectedRace;
|
||||
|
||||
protected RaceDTO selectedRaceDTO;
|
||||
|
||||
protected final CaptionPanel selectedCaptionRacePanel;
|
||||
|
||||
protected List<RegattaDTO> savedEvents;
|
||||
|
||||
protected final VerticalPanel selectedRaceContentPanel;
|
||||
|
||||
public AbstractRaceManagementPanel(final SailingServiceAsync sailingService, ErrorReporter errorReporter,
|
||||
RegattaRefresher regattaRefresher, StringMessages stringMessages) {
|
||||
super(sailingService, regattaRefresher, errorReporter, new RaceSelectionModel(), stringMessages);
|
||||
|
||||
VerticalPanel mainPanel = new VerticalPanel();
|
||||
this.setWidget(mainPanel);
|
||||
mainPanel.setWidth("100%");
|
||||
|
||||
mainPanel.add(trackedRacesListComposite);
|
||||
|
||||
trackedRacesListComposite.addRaceSelectionChangeListener(this);
|
||||
|
||||
singleSelectedRace = null;
|
||||
|
||||
selectedCaptionRacePanel = new CaptionPanel(stringMessages.race());
|
||||
selectedCaptionRacePanel.setWidth("100%");
|
||||
mainPanel.add(selectedCaptionRacePanel);
|
||||
|
||||
selectedRaceContentPanel = new VerticalPanel();
|
||||
selectedRaceContentPanel.setWidth("100%");
|
||||
selectedCaptionRacePanel.setContentWidget(selectedRaceContentPanel);
|
||||
selectedCaptionRacePanel.setVisible(false);
|
||||
}
|
||||
|
||||
abstract void refreshSelectedRaceData();
|
||||
|
||||
@Override
|
||||
public void fillRegattas(List<RegattaDTO> result) {
|
||||
trackedRacesListComposite.fillRegattas(result);
|
||||
savedEvents = result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRaceSelectionChange(List<RegattaAndRaceIdentifier> selectedRaces) {
|
||||
if (selectedRaces.size() == 1) {
|
||||
singleSelectedRace = selectedRaces.get(0);
|
||||
selectedCaptionRacePanel.setCaptionText(singleSelectedRace.getRaceName());
|
||||
selectedCaptionRacePanel.setVisible(true);
|
||||
|
||||
for (RegattaDTO regatta : savedEvents) {
|
||||
for (RaceDTO race : regatta.races) {
|
||||
if (race != null && race.getRaceIdentifier().equals(singleSelectedRace)) {
|
||||
this.selectedRaceDTO = race;
|
||||
refreshSelectedRaceData();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
selectedCaptionRacePanel.setCaptionText("");
|
||||
singleSelectedRace = null;
|
||||
selectedCaptionRacePanel.setVisible(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
+5
@@ -51,6 +51,11 @@ public class AdminConsoleEntryPoint extends AbstractEntryPoint implements Regatt
|
||||
regattaDisplayers.add(trackedRacesManagementPanel);
|
||||
trackedRacesManagementPanel.setSize("90%", "90%");
|
||||
tabPanel.add(trackedRacesManagementPanel, stringMessages.trackedRaces(),false);
|
||||
RaceCourseManagementPanel raceCourseManagementPanel = new RaceCourseManagementPanel(sailingService, this, this, stringMessages);
|
||||
regattaDisplayers.add(raceCourseManagementPanel);
|
||||
raceCourseManagementPanel.setSize("90%", "90%");
|
||||
tabPanel.add(raceCourseManagementPanel, stringMessages.courseLayout(),false);
|
||||
|
||||
final AsyncActionsExecutor asyncActionsExecutor = new AsyncActionsExecutor();
|
||||
WindPanel windPanel = new WindPanel(sailingService, asyncActionsExecutor, this, this, stringMessages);
|
||||
regattaDisplayers.add(windPanel);
|
||||
|
||||
+190
@@ -0,0 +1,190 @@
|
||||
package com.sap.sailing.gwt.ui.adminconsole;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.Map;
|
||||
import java.util.TreeMap;
|
||||
|
||||
import com.google.gwt.cell.client.SafeHtmlCell;
|
||||
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.safehtml.shared.SafeHtml;
|
||||
import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
|
||||
import com.google.gwt.user.cellview.client.CellTable;
|
||||
import com.google.gwt.user.cellview.client.Column;
|
||||
import com.google.gwt.user.cellview.client.TextColumn;
|
||||
import com.google.gwt.user.client.Window;
|
||||
import com.google.gwt.user.client.rpc.AsyncCallback;
|
||||
import com.google.gwt.user.client.ui.Button;
|
||||
import com.google.gwt.user.client.ui.HorizontalPanel;
|
||||
import com.google.gwt.user.client.ui.Label;
|
||||
import com.google.gwt.view.client.ListDataProvider;
|
||||
import com.google.gwt.view.client.MultiSelectionModel;
|
||||
import com.sap.sailing.gwt.ui.client.ErrorReporter;
|
||||
import com.sap.sailing.gwt.ui.client.RegattaRefresher;
|
||||
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
|
||||
import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
import com.sap.sailing.gwt.ui.shared.MarkDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.RaceCourseDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.WaypointDTO;
|
||||
|
||||
public class RaceCourseManagementPanel extends AbstractRaceManagementPanel {
|
||||
private final CellTable<WaypointDTO> courseWaypointsTable;
|
||||
private final Label courseDataRequestTimeLabel;
|
||||
|
||||
private final ListDataProvider<WaypointDTO> waypointDataProvider;
|
||||
|
||||
private final HorizontalPanel courseActionsPanel;
|
||||
|
||||
private final MultiSelectionModel<WaypointDTO> wayPointSelectionModel;
|
||||
|
||||
public RaceCourseManagementPanel(final SailingServiceAsync sailingService, ErrorReporter errorReporter,
|
||||
RegattaRefresher regattaRefresher, final StringMessages stringMessages) {
|
||||
super(sailingService, errorReporter, regattaRefresher, stringMessages);
|
||||
|
||||
courseDataRequestTimeLabel = new Label();
|
||||
this.selectedRaceContentPanel.add(courseDataRequestTimeLabel);
|
||||
|
||||
AdminConsoleTableResources tableRes = GWT.create(AdminConsoleTableResources.class);
|
||||
courseWaypointsTable = new CellTable<WaypointDTO>(/* pageSize */10000, tableRes);
|
||||
this.selectedRaceContentPanel.add(courseWaypointsTable);
|
||||
wayPointSelectionModel = new MultiSelectionModel<WaypointDTO>();
|
||||
courseWaypointsTable.setSelectionModel(wayPointSelectionModel);
|
||||
|
||||
TextColumn<WaypointDTO> nameColumn = new TextColumn<WaypointDTO>() {
|
||||
@Override
|
||||
public String getValue(WaypointDTO waypointDTO) {
|
||||
return waypointDTO.name;
|
||||
}
|
||||
};
|
||||
courseWaypointsTable.addColumn(nameColumn, stringMessages.waypoint());
|
||||
|
||||
final SafeHtmlCell buoysCell = new SafeHtmlCell();
|
||||
Column<WaypointDTO, SafeHtml> buoysColumn = new Column<WaypointDTO, SafeHtml>(buoysCell) {
|
||||
@Override
|
||||
public SafeHtml getValue(WaypointDTO waypoint) {
|
||||
SafeHtmlBuilder builder = new SafeHtmlBuilder();
|
||||
int buoysCount = waypoint.buoys.size();
|
||||
int i = 1;
|
||||
for (MarkDTO mark : waypoint.buoys) {
|
||||
builder.appendEscaped(mark.name + ", " + stringMessages.position() + ": " + mark.position.toFormattedString());
|
||||
if (i < buoysCount) {
|
||||
builder.appendHtmlConstant("<br>");
|
||||
}
|
||||
i++;
|
||||
}
|
||||
return builder.toSafeHtml();
|
||||
}
|
||||
};
|
||||
courseWaypointsTable.addColumn(buoysColumn, stringMessages.buoys());
|
||||
|
||||
TextColumn<WaypointDTO> markPassingsCountColumn = new TextColumn<WaypointDTO>() {
|
||||
@Override
|
||||
public String getValue(WaypointDTO waypointDTO) {
|
||||
return "" + waypointDTO.markPassingsCount;
|
||||
}
|
||||
};
|
||||
courseWaypointsTable.addColumn(markPassingsCountColumn, stringMessages.markPassing());
|
||||
|
||||
waypointDataProvider = new ListDataProvider<WaypointDTO>();
|
||||
waypointDataProvider.addDataDisplay(courseWaypointsTable);
|
||||
|
||||
courseActionsPanel = new HorizontalPanel();
|
||||
courseActionsPanel.setSpacing(10);
|
||||
Button insertLegBtn = new Button("Insert Leg");
|
||||
insertLegBtn.addClickHandler(new ClickHandler() {
|
||||
@Override
|
||||
public void onClick(ClickEvent event) {
|
||||
if(wayPointSelectionModel.getSelectedSet().size() != 2) {
|
||||
Window.alert("To insert (copy) a leg you have to select two waypoints.");
|
||||
return;
|
||||
} else {
|
||||
Map<Integer, String> controlPointsToInsert = new TreeMap<Integer, String>();
|
||||
for(WaypointDTO selectedWaypoint: wayPointSelectionModel.getSelectedSet()) {
|
||||
controlPointsToInsert.put(selectedWaypoint.courseIndex, selectedWaypoint.name);
|
||||
}
|
||||
int insertPosition = waypointDataProvider.getList().size()-2;
|
||||
sailingService.addControlPointsToRaceCourse(singleSelectedRace,
|
||||
new ArrayList<String>(controlPointsToInsert.values()), insertPosition, new AsyncCallback<Void>() {
|
||||
@Override
|
||||
public void onSuccess(Void arg0) {
|
||||
refreshSelectedRaceData();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailure(Throwable arg0) {
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
courseActionsPanel.add(insertLegBtn);
|
||||
|
||||
Button removeLegBtn = new Button("Remove Leg");
|
||||
removeLegBtn.addClickHandler(new ClickHandler() {
|
||||
@Override
|
||||
public void onClick(ClickEvent event) {
|
||||
if(wayPointSelectionModel.getSelectedSet().size() != 2) {
|
||||
Window.alert("To delete a leg you have to select two waypoints.");
|
||||
return;
|
||||
} else {
|
||||
Map<Integer, WaypointDTO> controlPointsToDelete = new TreeMap<Integer, WaypointDTO>();
|
||||
for(WaypointDTO selectedWaypoint: wayPointSelectionModel.getSelectedSet()) {
|
||||
controlPointsToDelete.put(selectedWaypoint.courseIndex, selectedWaypoint);
|
||||
}
|
||||
sailingService.removeControlPointsFromRaceCourse(singleSelectedRace,
|
||||
new ArrayList<WaypointDTO>(controlPointsToDelete.values()), new AsyncCallback<Void>() {
|
||||
@Override
|
||||
public void onSuccess(Void arg0) {
|
||||
refreshSelectedRaceData();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailure(Throwable arg0) {
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
courseActionsPanel.add(removeLegBtn);
|
||||
|
||||
Button refreshBtn = new Button(stringMessages.refresh());
|
||||
refreshBtn.addClickHandler(new ClickHandler() {
|
||||
@Override
|
||||
public void onClick(ClickEvent event) {
|
||||
refreshSelectedRaceData();
|
||||
}
|
||||
});
|
||||
courseActionsPanel.add(refreshBtn);
|
||||
|
||||
courseActionsPanel.setVisible(false);
|
||||
this.selectedRaceContentPanel.add(courseActionsPanel);
|
||||
}
|
||||
|
||||
@Override
|
||||
void refreshSelectedRaceData() {
|
||||
if (singleSelectedRace != null && selectedRaceDTO != null) {
|
||||
courseActionsPanel.setVisible(true);
|
||||
|
||||
sailingService.getRaceCourse(singleSelectedRace, new Date(), new AsyncCallback<RaceCourseDTO>() {
|
||||
@Override
|
||||
public void onSuccess(RaceCourseDTO result) {
|
||||
updateCourseInfo(result);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailure(Throwable caught) {
|
||||
RaceCourseManagementPanel.this.errorReporter.reportError("Error trying to obtain the course of the race: " + caught.getMessage());
|
||||
}
|
||||
});
|
||||
} else {
|
||||
courseActionsPanel.setVisible(false);
|
||||
}
|
||||
}
|
||||
|
||||
private void updateCourseInfo(RaceCourseDTO courseDTO) {
|
||||
waypointDataProvider.setList(courseDTO.waypoints);
|
||||
courseDataRequestTimeLabel.setText(courseDTO.requestTime.toString());
|
||||
}
|
||||
}
|
||||
+4
-66
@@ -1,32 +1,18 @@
|
||||
package com.sap.sailing.gwt.ui.adminconsole;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
import com.google.gwt.i18n.client.DateTimeFormat;
|
||||
import com.google.gwt.i18n.client.DateTimeFormat.PredefinedFormat;
|
||||
import com.google.gwt.i18n.client.TimeZone;
|
||||
import com.google.gwt.text.client.DateTimeFormatRenderer;
|
||||
import com.google.gwt.user.client.ui.CaptionPanel;
|
||||
import com.google.gwt.user.client.ui.Grid;
|
||||
import com.google.gwt.user.client.ui.VerticalPanel;
|
||||
import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
|
||||
import com.sap.sailing.gwt.ui.client.ErrorReporter;
|
||||
import com.sap.sailing.gwt.ui.client.RaceSelectionChangeListener;
|
||||
import com.sap.sailing.gwt.ui.client.RaceSelectionModel;
|
||||
import com.sap.sailing.gwt.ui.client.RegattaRefresher;
|
||||
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
|
||||
import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
import com.sap.sailing.gwt.ui.shared.RaceDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.RegattaDTO;
|
||||
|
||||
public class TrackedRacesManagementPanel extends AbstractEventManagementPanel implements RaceSelectionChangeListener {
|
||||
private RegattaAndRaceIdentifier singleSelectedRace;
|
||||
|
||||
private RaceDTO selectedRaceDTO;
|
||||
|
||||
private final CaptionPanel selectedRacePanel;
|
||||
|
||||
public class TrackedRacesManagementPanel extends AbstractRaceManagementPanel {
|
||||
private final DateTimeFormatRenderer dateFormatter = new DateTimeFormatRenderer(
|
||||
DateTimeFormat.getFormat(PredefinedFormat.DATE_SHORT));
|
||||
private final DateTimeFormatRenderer timeFormatter = new DateTimeFormatRenderer(
|
||||
@@ -34,35 +20,14 @@ public class TrackedRacesManagementPanel extends AbstractEventManagementPanel im
|
||||
private final DateTimeFormatRenderer durationFormatter = new DateTimeFormatRenderer(
|
||||
DateTimeFormat.getFormat(PredefinedFormat.TIME_MEDIUM), TimeZone.createTimeZone(0));
|
||||
|
||||
private List<RegattaDTO> savedEvents;
|
||||
|
||||
private final Grid raceDataGrid;
|
||||
|
||||
public TrackedRacesManagementPanel(final SailingServiceAsync sailingService, ErrorReporter errorReporter,
|
||||
RegattaRefresher regattaRefresher, StringMessages stringConstants) {
|
||||
super(sailingService, regattaRefresher, errorReporter, new RaceSelectionModel(), stringConstants);
|
||||
super(sailingService, errorReporter, regattaRefresher, stringConstants);
|
||||
|
||||
VerticalPanel mainPanel = new VerticalPanel();
|
||||
this.setWidget(mainPanel);
|
||||
mainPanel.setWidth("100%");
|
||||
|
||||
mainPanel.add(trackedRacesListComposite);
|
||||
|
||||
trackedRacesListComposite.addRaceSelectionChangeListener(this);
|
||||
|
||||
singleSelectedRace = null;
|
||||
|
||||
selectedRacePanel = new CaptionPanel("???");
|
||||
selectedRacePanel.setWidth("100%");
|
||||
mainPanel.add(selectedRacePanel);
|
||||
|
||||
VerticalPanel vPanel = new VerticalPanel();
|
||||
vPanel.setWidth("100%");
|
||||
selectedRacePanel.setContentWidget(vPanel);
|
||||
selectedRacePanel.setVisible(false);
|
||||
|
||||
raceDataGrid = new Grid(6,2);
|
||||
vPanel.add(raceDataGrid);
|
||||
this.selectedRaceContentPanel.add(raceDataGrid);
|
||||
|
||||
raceDataGrid.setText(0, 0, "StartTime:");
|
||||
raceDataGrid.setText(1, 0, "EndTime:");
|
||||
@@ -73,34 +38,7 @@ public class TrackedRacesManagementPanel extends AbstractEventManagementPanel im
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fillRegattas(List<RegattaDTO> result) {
|
||||
trackedRacesListComposite.fillRegattas(result);
|
||||
savedEvents = result;
|
||||
}
|
||||
|
||||
public void onRaceSelectionChange(List<RegattaAndRaceIdentifier> selectedRaces) {
|
||||
if (selectedRaces.size() == 1) {
|
||||
singleSelectedRace = selectedRaces.get(0);
|
||||
selectedRacePanel.setCaptionText(singleSelectedRace.getRaceName());
|
||||
selectedRacePanel.setVisible(true);
|
||||
|
||||
for (RegattaDTO regatta : savedEvents) {
|
||||
for (RaceDTO race : regatta.races) {
|
||||
if (race != null && race.getRaceIdentifier().equals(singleSelectedRace)) {
|
||||
this.selectedRaceDTO = race;
|
||||
refreshRaceData();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
selectedRacePanel.setCaptionText("");
|
||||
singleSelectedRace = null;
|
||||
selectedRacePanel.setVisible(false);
|
||||
}
|
||||
}
|
||||
|
||||
private void refreshRaceData() {
|
||||
void refreshSelectedRaceData() {
|
||||
if (singleSelectedRace != null && selectedRaceDTO != null) {
|
||||
if (selectedRaceDTO.startOfRace != null) {
|
||||
raceDataGrid.setText(0, 1, dateFormatter.render(selectedRaceDTO.startOfRace) + " "
|
||||
|
||||
+9
-1
@@ -28,18 +28,20 @@ import com.sap.sailing.gwt.ui.shared.LeaderboardGroupDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.ManeuverDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.MultiCompetitorRaceDataDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.QuickRankDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.RaceCourseDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.RaceDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.RaceMapDataDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.RaceTimesInfoDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.RegattaDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.ReplicationStateDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.RegattaScoreCorrectionDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.ReplicationStateDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.ScoreCorrectionProviderDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.StrippedLeaderboardDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.SwissTimingConfigurationDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.SwissTimingRaceRecordDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.TracTracConfigurationDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.TracTracRaceRecordDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.WaypointDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.WindDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.WindInfoForRaceDTO;
|
||||
|
||||
@@ -96,6 +98,8 @@ public interface SailingService extends RemoteService {
|
||||
|
||||
CourseDTO getCoursePositions(RaceIdentifier raceIdentifier, Date date);
|
||||
|
||||
RaceCourseDTO getRaceCourse(RaceIdentifier raceIdentifier, Date date);
|
||||
|
||||
List<QuickRankDTO> getQuickRanks(RaceIdentifier raceIdentifier, Date date) throws NoWindException;
|
||||
|
||||
void removeWind(RaceIdentifier raceIdentifier, WindDTO windDTO);
|
||||
@@ -237,4 +241,8 @@ public interface SailingService extends RemoteService {
|
||||
void updateLeaderboardScoreCorrectionsAndMaxPointsReasons(BulkScoreCorrectionDTO updates) throws NoWindException;
|
||||
|
||||
WindInfoForRaceDTO getWindSourcesInfo(RegattaAndRaceIdentifier raceIdentifier);
|
||||
|
||||
void removeControlPointsFromRaceCourse(RaceIdentifier raceIdentifier, List<WaypointDTO> waypointsToDelete);
|
||||
|
||||
void addControlPointsToRaceCourse(RaceIdentifier raceIdentifier, List<String> controlPointNames, int insertPosition);
|
||||
}
|
||||
+10
@@ -20,6 +20,7 @@ import com.sap.sailing.gwt.ui.shared.BulkScoreCorrectionDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.CompetitorDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.CourseDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.EventDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.RaceCourseDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.RegattaDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.GPSFixDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.LeaderboardDTO;
|
||||
@@ -39,6 +40,7 @@ import com.sap.sailing.gwt.ui.shared.SwissTimingConfigurationDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.SwissTimingRaceRecordDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.TracTracConfigurationDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.TracTracRaceRecordDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.WaypointDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.WindDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.WindInfoForRaceDTO;
|
||||
|
||||
@@ -400,4 +402,12 @@ public interface SailingServiceAsync {
|
||||
Date timePointWhenResultPublished, AsyncCallback<RegattaScoreCorrectionDTO> asyncCallback);
|
||||
|
||||
void getWindSourcesInfo(RegattaAndRaceIdentifier raceIdentifier, AsyncCallback<WindInfoForRaceDTO> callback);
|
||||
|
||||
void getRaceCourse(RaceIdentifier raceIdentifier, Date date, AsyncCallback<RaceCourseDTO> callback);
|
||||
|
||||
void removeControlPointsFromRaceCourse(RaceIdentifier raceIdentifier, List<WaypointDTO> waypointsToDelete,
|
||||
AsyncCallback<Void> callback);
|
||||
|
||||
void addControlPointsToRaceCourse(RaceIdentifier raceIdentifier, List<String> controlPointNames, int insertPosition,
|
||||
AsyncCallback<Void> callback);
|
||||
}
|
||||
+6
@@ -339,4 +339,10 @@ public interface StringMessages extends Messages {
|
||||
String regattaExistForSelectedBoatClass();
|
||||
String reload();
|
||||
String addRegatta();
|
||||
String course();
|
||||
String courseLayout();
|
||||
String buoy();
|
||||
String gate();
|
||||
String buoys();
|
||||
String waypoint();
|
||||
}
|
||||
+7
-1
@@ -337,4 +337,10 @@ Do you really want to use the regatta ''{1}''?
|
||||
regattaExistForSelectedBoatClass=There is at least one regatta for the selected boat classes.\
|
||||
Do you really want to use the ''no regatta'' selection?
|
||||
reload=Reload
|
||||
addRegatta=Add Regatta...
|
||||
addRegatta=Add Regatta...
|
||||
course=Course
|
||||
courseLayout=Course layout
|
||||
buoy=Buoy
|
||||
gate=Gate
|
||||
buoys=Buoys
|
||||
waypoint=Waypoint
|
||||
+7
-1
@@ -338,4 +338,10 @@ Willst du wirklich diese Regatta benutzen ''{1}''?
|
||||
regattaExistForSelectedBoatClass=Es gibt mindestens eine Regatta zu den ausgewählten Bootsklassen.\
|
||||
Willst du wirklich die Auswahl ''keine Regatta'' benutzen?
|
||||
reload=Neu laden
|
||||
addRegatta=Regatta hinzufügen...
|
||||
addRegatta=Regatta hinzufügen...
|
||||
course=Kurs
|
||||
courseLayout=Kursdefinition
|
||||
buoy=Boje
|
||||
gate=Tor
|
||||
buoys=Bojen
|
||||
waypoint=Wegpunkt
|
||||
+1
-1
@@ -366,7 +366,7 @@ public class LeaderboardPanel extends FormPanel implements TimeListener, PlaySta
|
||||
public void render(Context context, LeaderboardRowDTO object, SafeHtmlBuilder sb) {
|
||||
String competitorColor = LeaderboardPanel.this.competitorSelectionProvider.getColor(object.competitor);
|
||||
String competitorColorBarStyle;
|
||||
if(LeaderboardPanel.this.isEmbedded) {
|
||||
if (LeaderboardPanel.this.isEmbedded) {
|
||||
competitorColorBarStyle = "style=\"border-bottom: 2px solid "+competitorColor+";\"";
|
||||
} else {
|
||||
competitorColorBarStyle = "style=\"border: none;\"";
|
||||
|
||||
+8
-1
@@ -36,7 +36,7 @@ import com.sap.sailing.gwt.ui.shared.RegattaScoreCorrectionDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.RegattaScoreCorrectionDTO.ScoreCorrectionEntryDTO;
|
||||
|
||||
public class MatchAndApplyScoreCorrectionsDialog extends DataEntryDialog<BulkScoreCorrectionDTO> {
|
||||
private static final RegExp p = RegExp.compile("^([A-Z][A-Z][A-Z])[^0-9]*([0-9]*)$");
|
||||
private static final RegExp p = RegExp.compile("^([A-Z][A-Z][A-Z])\\s*[^0-9]*([0-9]*)$");
|
||||
|
||||
private static final double MEDAL_RACE_FACTOR = 2;
|
||||
|
||||
@@ -196,6 +196,10 @@ public class MatchAndApplyScoreCorrectionsDialog extends DataEntryDialog<BulkSco
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Try to match three-letter country code and number, optionally separated by whitespaces. If there is no match,
|
||||
* use the first 20 characters of the sailID.
|
||||
*/
|
||||
private String canonicalizeSailID(String sailID, String defaultNationality) {
|
||||
String result = null;
|
||||
MatchResult m = p.exec(sailID.trim());
|
||||
@@ -209,6 +213,9 @@ public class MatchAndApplyScoreCorrectionsDialog extends DataEntryDialog<BulkSco
|
||||
result = iocCode + number;
|
||||
}
|
||||
}
|
||||
if (result == null) {
|
||||
result = sailID.substring(0, Math.min(20, sailID.length()));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
+93
-2
@@ -40,6 +40,7 @@ import com.google.gwt.user.server.rpc.RemoteServiceServlet;
|
||||
import com.sap.sailing.domain.base.BoatClass;
|
||||
import com.sap.sailing.domain.base.Buoy;
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.base.ControlPoint;
|
||||
import com.sap.sailing.domain.base.Course;
|
||||
import com.sap.sailing.domain.base.Event;
|
||||
import com.sap.sailing.domain.base.Fleet;
|
||||
@@ -144,6 +145,7 @@ import com.sap.sailing.gwt.ui.shared.PlacemarkOrderDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.PositionDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.QuickRankDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.RaceColumnDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.RaceCourseDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.RaceDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.RaceMapDataDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.RaceTimesInfoDTO;
|
||||
@@ -163,6 +165,7 @@ import com.sap.sailing.gwt.ui.shared.SwissTimingRaceRecordDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.TracTracConfigurationDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.TracTracRaceRecordDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.VenueDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.WaypointDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.WindDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.WindInfoForRaceDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.WindTrackInfoDTO;
|
||||
@@ -1377,7 +1380,7 @@ public class SailingServiceImpl extends RemoteServiceServlet implements SailingS
|
||||
result.waypointPositions = new ArrayList<PositionDTO>();
|
||||
Set<Buoy> buoys = new HashSet<Buoy>();
|
||||
Course course = trackedRace.getRace().getCourse();
|
||||
for (Waypoint waypoint : course.getWaypoints()) {
|
||||
for (Waypoint waypoint : course.getWaypoints()) {
|
||||
Position waypointPosition = trackedRace.getApproximatePosition(waypoint, dateAsTimePoint);
|
||||
if (waypointPosition != null) {
|
||||
result.waypointPositions.add(new PositionDTO(waypointPosition.getLatDeg(), waypointPosition.getLngDeg()));
|
||||
@@ -1404,12 +1407,100 @@ public class SailingServiceImpl extends RemoteServiceServlet implements SailingS
|
||||
Waypoint lastWaypoint = course.getLastWaypoint();
|
||||
if (lastWaypoint != null) {
|
||||
result.finishBuoyPositions = getBuoyPositionDTOs(dateAsTimePoint, trackedRace, lastWaypoint);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public RaceCourseDTO getRaceCourse(RaceIdentifier raceIdentifier, Date date) {
|
||||
RaceCourseDTO result = new RaceCourseDTO();
|
||||
if (date != null) {
|
||||
TimePoint dateAsTimePoint = new MillisecondsTimePoint(date);
|
||||
TrackedRace trackedRace = getExistingTrackedRace(raceIdentifier);
|
||||
if (trackedRace != null) {
|
||||
Course course = trackedRace.getRace().getCourse();
|
||||
result.waypoints = new ArrayList<WaypointDTO>();
|
||||
result.requestTime = date;
|
||||
int waypointIndex = 0;
|
||||
for (Waypoint waypoint : course.getWaypoints()) {
|
||||
WaypointDTO waypointDTO = new WaypointDTO(waypoint.getName(), waypointIndex++);
|
||||
waypointDTO.buoys = new ArrayList<MarkDTO>();
|
||||
result.waypoints.add(waypointDTO);
|
||||
|
||||
Iterable<MarkPassing> markPassingsInOrder = trackedRace.getMarkPassingsInOrder(waypoint);
|
||||
waypointDTO.markPassingsCount = Util.size(markPassingsInOrder);
|
||||
|
||||
for (Buoy buoy : waypoint.getBuoys()) {
|
||||
GPSFixTrack<Buoy, GPSFix> track = trackedRace.getOrCreateTrack(buoy);
|
||||
Position positionAtDate = track.getEstimatedPosition(dateAsTimePoint, /* extrapolate */false);
|
||||
if (positionAtDate != null) {
|
||||
MarkDTO markDTO = new MarkDTO(buoy.getName(), positionAtDate.getLatDeg(),
|
||||
positionAtDate.getLngDeg());
|
||||
waypointDTO.buoys.add(markDTO);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addControlPointsToRaceCourse(RaceIdentifier raceIdentifier, List<String> controlPointNames, int insertPosition) {
|
||||
TrackedRace trackedRace = getExistingTrackedRace(raceIdentifier);
|
||||
if (trackedRace != null) {
|
||||
Course course = trackedRace.getRace().getCourse();
|
||||
Iterable<Waypoint> waypoints = course.getWaypoints();
|
||||
Map<String, ControlPoint> controlPointsByName = new HashMap<String, ControlPoint>();
|
||||
|
||||
int waypointsCount = Util.size(waypoints);
|
||||
if(waypointsCount >= 3) {
|
||||
List<ControlPoint> newControlPoints = new ArrayList<ControlPoint>();
|
||||
for (Waypoint wayPoint : waypoints) {
|
||||
ControlPoint controlPoint = wayPoint.getControlPoint();
|
||||
newControlPoints.add(controlPoint);
|
||||
controlPointsByName.put(controlPoint.getName(), controlPoint);
|
||||
}
|
||||
for(String controlPointName: controlPointNames) {
|
||||
ControlPoint controlPointToInsert = controlPointsByName.get(controlPointName);
|
||||
if(controlPointToInsert != null) {
|
||||
newControlPoints.add(insertPosition, controlPointToInsert);
|
||||
}
|
||||
}
|
||||
try {
|
||||
course.update(newControlPoints, com.sap.sailing.domain.base.DomainFactory.INSTANCE);
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeControlPointsFromRaceCourse(RaceIdentifier raceIdentifier, List<WaypointDTO> waypointsToDelete) {
|
||||
TrackedRace trackedRace = getExistingTrackedRace(raceIdentifier);
|
||||
if (trackedRace != null) {
|
||||
Course course = trackedRace.getRace().getCourse();
|
||||
Iterable<Waypoint> waypoints = course.getWaypoints();
|
||||
List<ControlPoint> newControlPoints = new ArrayList<ControlPoint>();
|
||||
for (Waypoint wayPoint : waypoints) {
|
||||
newControlPoints.add(wayPoint.getControlPoint());
|
||||
}
|
||||
int indexOffset = 0;
|
||||
for(WaypointDTO waypointToRemove: waypointsToDelete) {
|
||||
newControlPoints.remove(waypointToRemove.courseIndex - indexOffset);
|
||||
indexOffset++;
|
||||
}
|
||||
try {
|
||||
course.update(newControlPoints, com.sap.sailing.domain.base.DomainFactory.INSTANCE);
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private List<PositionDTO> getBuoyPositionDTOs(TimePoint timePoint, TrackedRace trackedRace, Waypoint waypoint) {
|
||||
List<PositionDTO> startBuoyPositions = new ArrayList<PositionDTO>();
|
||||
for (Buoy startBuoy : waypoint.getBuoys()) {
|
||||
|
||||
+6
@@ -1,5 +1,6 @@
|
||||
package com.sap.sailing.gwt.ui.shared;
|
||||
|
||||
import com.google.gwt.i18n.client.NumberFormat;
|
||||
import com.google.gwt.user.client.rpc.IsSerializable;
|
||||
|
||||
public class PositionDTO implements IsSerializable {
|
||||
@@ -18,6 +19,11 @@ public class PositionDTO implements IsSerializable {
|
||||
return "("+latDeg+", "+lngDeg+")";
|
||||
}
|
||||
|
||||
public String toFormattedString() {
|
||||
NumberFormat fmt = NumberFormat.getFormat("#.###");
|
||||
return fmt.format(latDeg)+", "+fmt.format(lngDeg);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
final int prime = 31;
|
||||
|
||||
+29
@@ -0,0 +1,29 @@
|
||||
package com.sap.sailing.gwt.ui.shared;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
import com.google.gwt.user.client.rpc.IsSerializable;
|
||||
|
||||
public class RaceCourseDTO implements IsSerializable {
|
||||
public WaypointDTO startWaypoint;
|
||||
public WaypointDTO finishWaypoint;
|
||||
|
||||
public List<WaypointDTO> waypoints;
|
||||
|
||||
public Date requestTime;
|
||||
|
||||
public WaypointDTO getFirstWaypoint() {
|
||||
if(waypoints.size() == 0) {
|
||||
return null;
|
||||
}
|
||||
return waypoints.get(0);
|
||||
}
|
||||
|
||||
public WaypointDTO getLastWaypoint() {
|
||||
if(waypoints.size() == 0) {
|
||||
return null;
|
||||
}
|
||||
return waypoints.get(waypoints.size()-1);
|
||||
}
|
||||
}
|
||||
+46
@@ -0,0 +1,46 @@
|
||||
package com.sap.sailing.gwt.ui.shared;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class WaypointDTO extends NamedDTO {
|
||||
public List<MarkDTO> buoys;
|
||||
|
||||
public int courseIndex;
|
||||
|
||||
public int markPassingsCount;
|
||||
|
||||
public WaypointDTO() {}
|
||||
|
||||
public WaypointDTO(String name, int courseIndex) {
|
||||
super(name);
|
||||
this.courseIndex = courseIndex;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
final int prime = 31;
|
||||
int result = super.hashCode();
|
||||
result = prime * result + courseIndex;
|
||||
result = prime * result + ((name == null) ? 0 : name.hashCode());
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (this == obj)
|
||||
return true;
|
||||
if (!super.equals(obj))
|
||||
return false;
|
||||
if (getClass() != obj.getClass())
|
||||
return false;
|
||||
WaypointDTO other = (WaypointDTO) obj;
|
||||
if (courseIndex != other.courseIndex)
|
||||
return false;
|
||||
if (name == null) {
|
||||
if (other.name != null)
|
||||
return false;
|
||||
} else if (!name.equals(other.name))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
Executable
+16
@@ -0,0 +1,16 @@
|
||||
#!/bin/sh
|
||||
#!/bin/sh
|
||||
target="`dirname \"$0\"`"
|
||||
pwd=`pwd`
|
||||
echo "$target" | grep "^/"
|
||||
if [ "$0" != "0" ]; then
|
||||
# no leading slash, therefore no absolute path; prepend pwd
|
||||
target="$pwd/$target"
|
||||
fi
|
||||
target=c:/data/SAP/sailing/workspace/java/target
|
||||
echo target is $target
|
||||
cd "$target/../com.sap.sailing.feature.p2build/bin/products/raceanalysis.product.id/win32/win32/x86_64"
|
||||
echo pwd is now `pwd`
|
||||
classpath="`find plugins -name 'com.sap.sailing.expeditionconnector_*.jar' | sort | tail -1`;`find plugins -name 'com.sap.sailing.domain.common_*.jar' | sort | tail -1`"
|
||||
echo Using classpath $classpath
|
||||
"$JAVA_HOME/bin/java" -cp "$classpath" -Djava.util.logging.config.file=$target/configuration/logging.properties com.sap.sailing.expeditionconnector.FromHttpToUdpMirror $*
|
||||
Reference in new issue
Block a user