added new bundle com.sap.sailing.resultimport to share common interfaces across multiple providers

Adapted UI to these changes
This commit is contained in:
unknown
2012-07-30 19:31:21 +02:00
parent b6a891b1a8
commit 7f4f19a8a4
53 changed files with 490 additions and 431 deletions
+7
View File
@@ -173,6 +173,13 @@ Computes leaderboard information for sailing races and offers RESTful APIs to al
version="0.0.0"
unpack="false"/>
<plugin
id="com.sap.sailing.resultimport"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="com.sap.sailing.kiworesultimport"
download-size="0"
@@ -9,4 +9,5 @@ Import-Package: org.osgi.framework;version="1.3.0"
Bundle-ActivationPolicy: lazy
Require-Bundle: org.junit4;bundle-version="4.8.2",
com.sap.sailing.freg.resultimport,
com.sap.sailing.domain.common
com.sap.sailing.domain.common,
com.sap.sailing.resultimport
@@ -17,8 +17,8 @@ import java.util.regex.Pattern;
import org.junit.Test;
import com.sap.sailing.domain.common.impl.Util;
import com.sap.sailing.freg.resultimport.CompetitorRow;
import com.sap.sailing.freg.resultimport.RegattaResults;
import com.sap.sailing.resultimport.CompetitorRow;
import com.sap.sailing.resultimport.RegattaResults;
import com.sap.sailing.freg.resultimport.impl.FregHtmlParser;
public class SimpleHtmlParsingTest {
@@ -38,7 +38,7 @@ public class SimpleHtmlParsingTest {
List<CompetitorRow> result = regattaResults.getCompetitorResults();
assertFalse(result.isEmpty());
assertEquals(57, result.size());
assertTrue(regattaResults.getMetadata().contains("PRE- WORLD \n 2012 - COUPE INTERNATIONALE DE FRANCE 505"));
assertTrue(regattaResults.getMetadata().get("info1").contains("PRE- WORLD \n 2012 - COUPE INTERNATIONALE DE FRANCE 505"));
for (CompetitorRow row : result) {
if (Util.contains(row.getNames(), "MARTIN Aline")) {
assertEquals("FRA 8716", row.getSailID());
@@ -9,6 +9,6 @@ Bundle-RequiredExecutionEnvironment: JavaSE-1.7
Import-Package: org.osgi.framework;version="1.3.0"
Bundle-ActivationPolicy: lazy
Require-Bundle: com.sap.sailing.domain.common,
com.sap.sailing.domain
Export-Package: com.sap.sailing.freg.resultimport,
com.sap.sailing.freg.resultimport.impl;x-friends:="com.sap.sailing.freg.resultimport.test"
com.sap.sailing.domain,
com.sap.sailing.resultimport
Export-Package: com.sap.sailing.freg.resultimport.impl;x-friends:="com.sap.sailing.freg.resultimport.test"
@@ -1,13 +0,0 @@
package com.sap.sailing.freg.resultimport;
public interface CompetitorEntry {
boolean isDiscarded();
Double getScore();
String getMaxPointsReason();
Integer getRank();
}
@@ -1,12 +0,0 @@
package com.sap.sailing.freg.resultimport;
import java.util.List;
public interface RegattaResults {
/**
* Data such as regatta name, operating institution, comments and dates
*/
List<String> getMetadata();
List<CompetitorRow> getCompetitorResults();
}
@@ -1,6 +1,6 @@
package com.sap.sailing.freg.resultimport.impl;
import com.sap.sailing.freg.resultimport.CompetitorEntry;
import com.sap.sailing.resultimport.CompetitorEntry;
public class CompetitorEntryImpl implements CompetitorEntry {
private final Integer rank;
@@ -1,7 +1,7 @@
package com.sap.sailing.freg.resultimport.impl;
import com.sap.sailing.freg.resultimport.CompetitorEntry;
import com.sap.sailing.freg.resultimport.CompetitorRow;
import com.sap.sailing.resultimport.CompetitorEntry;
import com.sap.sailing.resultimport.CompetitorRow;
public class CompetitorRowImpl implements CompetitorRow {
private final Integer totalRank;
@@ -5,14 +5,16 @@ import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.logging.Logger;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import com.sap.sailing.freg.resultimport.CompetitorEntry;
import com.sap.sailing.freg.resultimport.CompetitorRow;
import com.sap.sailing.freg.resultimport.RegattaResults;
import com.sap.sailing.resultimport.CompetitorEntry;
import com.sap.sailing.resultimport.CompetitorRow;
import com.sap.sailing.resultimport.RegattaResults;
public class FregHtmlParser {
private static final Logger logger = Logger.getLogger(FregHtmlParser.class.getName());
@@ -105,14 +107,19 @@ public class FregHtmlParser {
final List<CompetitorRow> result = new ArrayList<CompetitorRow>();
List<String> rowContents = getRowContents(is);
is.close();
final List<String> metadata = getTagContents(rowContents.get(0), "b"); // header information like regatta name and dates are all in <B> tags
final Map<String, String> metadata = new HashMap<String, String>();
List<String> tagContents = getTagContents(rowContents.get(0), "b"); // header information like regatta name and dates are all in <B> tags
int j = 1;
for (String metaInfo : tagContents) {
metadata.put("info" + j++, metaInfo);
}
for (int i = 2; i < rowContents.size() - 1; i++) {
List<String> tdContent = getTagContents(rowContents.get(i), "td");
result.add(createCompetitorRow(tdContent));
}
return new RegattaResults() {
@Override
public List<String> getMetadata() {
public Map<String, String> getMetadata() {
return metadata;
}
@Override
@@ -6,8 +6,8 @@ import java.util.List;
import com.sap.sailing.domain.common.RegattaScoreCorrections;
import com.sap.sailing.domain.common.ScoreCorrectionProvider;
import com.sap.sailing.domain.common.impl.Util;
import com.sap.sailing.freg.resultimport.CompetitorRow;
import com.sap.sailing.freg.resultimport.RegattaResults;
import com.sap.sailing.resultimport.CompetitorRow;
import com.sap.sailing.resultimport.RegattaResults;
public class RegattaScoreCorrectionsImpl implements RegattaScoreCorrections {
private final ScoreCorrectionProviderImpl provider;
@@ -4,7 +4,7 @@ import java.util.logging.Logger;
import com.sap.sailing.domain.common.MaxPointsReason;
import com.sap.sailing.domain.common.RegattaScoreCorrections.ScoreCorrectionForCompetitorInRace;
import com.sap.sailing.freg.resultimport.CompetitorEntry;
import com.sap.sailing.resultimport.CompetitorEntry;
public class ScoreCorrectionForCompetitorInRaceImpl implements ScoreCorrectionForCompetitorInRace {
private static final Logger logger = Logger.getLogger(ScoreCorrectionForCompetitorInRaceImpl.class.getName());
@@ -7,9 +7,9 @@ import java.util.Set;
import com.sap.sailing.domain.common.RegattaScoreCorrections.ScoreCorrectionForCompetitorInRace;
import com.sap.sailing.domain.common.RegattaScoreCorrections.ScoreCorrectionsForRace;
import com.sap.sailing.domain.common.impl.Util;
import com.sap.sailing.freg.resultimport.CompetitorEntry;
import com.sap.sailing.freg.resultimport.CompetitorRow;
import com.sap.sailing.freg.resultimport.RegattaResults;
import com.sap.sailing.resultimport.CompetitorEntry;
import com.sap.sailing.resultimport.CompetitorRow;
import com.sap.sailing.resultimport.RegattaResults;
public class ScoreCorrectionForRaceImpl implements ScoreCorrectionsForRace {
private final int raceNumberStartingWithOne;
@@ -8,7 +8,6 @@ import java.net.URLConnection;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -17,10 +16,10 @@ import com.sap.sailing.domain.common.RegattaScoreCorrections;
import com.sap.sailing.domain.common.ScoreCorrectionProvider;
import com.sap.sailing.domain.common.TimePoint;
import com.sap.sailing.domain.common.impl.Util.Pair;
import com.sap.sailing.freg.resultimport.FregResultProvider;
import com.sap.sailing.freg.resultimport.RegattaResults;
import com.sap.sailing.resultimport.UrlResultProvider;
import com.sap.sailing.resultimport.RegattaResults;
public class ScoreCorrectionProviderImpl implements ScoreCorrectionProvider, FregResultProvider {
public class ScoreCorrectionProviderImpl implements ScoreCorrectionProvider, UrlResultProvider {
private static final long serialVersionUID = 5853404150107387702L;
private final Set<URL> allUrls;
@@ -63,8 +62,8 @@ public class ScoreCorrectionProviderImpl implements ScoreCorrectionProvider, Fre
* @return the first non-empty string of the list of metadata, hoping it's something pointing at the boat class at least...
*/
private String getBoatClassName(RegattaResults regattaResult) {
List<String> metadata = regattaResult.getMetadata();
for (String metadatum : metadata) {
Map<String, String> metadata = regattaResult.getMetadata();
for (String metadatum : metadata.values()) {
if (metadatum != null && metadatum.length() > 0) {
return metadatum;
}
@@ -21,7 +21,8 @@ Require-Bundle: com.sap.sailing.domain,
com.sap.sailing.server.replication,
com.googlecode.java-diff-utils;bundle-version="1.3.0",
com.sap.sailing.freg.resultimport,
com.sap.sailing.winregatta.resultimport;bundle-version="1.0.0"
com.sap.sailing.winregatta.resultimport,
com.sap.sailing.resultimport
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",
@@ -70,7 +70,7 @@ public class AdminConsoleEntryPoint extends AbstractEntryPoint implements Regatt
leaderboardConfigPanel.setSize("90%", "90%");
tabPanel.add(leaderboardConfigPanel, stringMessages.leaderboardConfiguration(), /* asHTML */ false);
regattaDisplayers.add(leaderboardConfigPanel);
tabPanel.add(new FregResultImportUrlPanel(sailingService, this, stringMessages), stringMessages.resultImportUrls(), /* asHTML */ false);
tabPanel.add(new ResultImportUrlsManagementPanel(sailingService, this, stringMessages), stringMessages.resultImportUrls(), /* asHTML */ false);
tabPanel.add(new ReplicationPanel(sailingService, this, stringMessages), stringMessages.replication(), /* asHTML */ false);
tabPanel.selectTab(0);
@@ -1,168 +1,172 @@
package com.sap.sailing.gwt.ui.adminconsole;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
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.FlowPanel;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.ListBox;
import com.google.gwt.user.client.ui.RadioButton;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.sap.sailing.gwt.ui.client.DataEntryDialog;
import com.sap.sailing.gwt.ui.client.ErrorReporter;
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.client.TextfieldEntryDialog;
public class FregResultImportUrlPanel extends FlowPanel {
private final ListBox urlListBox;
private final SailingServiceAsync sailingService;
private final ErrorReporter errorReporter;
private final StringMessages stringMessages;
private String selectedProviderName = "FREG";
public FregResultImportUrlPanel(SailingServiceAsync sailingService, ErrorReporter errorReporter,
StringMessages stringMessages) {
this.sailingService = sailingService;
this.errorReporter = errorReporter;
this.stringMessages = stringMessages;
urlListBox = new ListBox(/* multiple select */ true);
Button addButton = new Button(stringMessages.add());
Button removeButton = new Button(stringMessages.remove());
Button refreshButton = new Button(stringMessages.refresh());
addButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
addUrl();
}
});
removeButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
removeSelectedUrls();
}
});
refreshButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
refreshUrlList();
}
});
VerticalPanel vp = new VerticalPanel();
HorizontalPanel providerSelectionPanel = new HorizontalPanel();
vp.add(providerSelectionPanel);
RadioButton fregProviderRB = new RadioButton("providerSelection", "FREG");
fregProviderRB.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
selectedProviderName = "FREG";
refreshUrlList();
}
});
providerSelectionPanel.add(fregProviderRB);
RadioButton winRegattaProviderRB = new RadioButton("providerSelection", "WinRegatta");
winRegattaProviderRB.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
selectedProviderName = "WinRegatta";
refreshUrlList();
}
});
providerSelectionPanel.add(winRegattaProviderRB);
vp.add(urlListBox);
HorizontalPanel buttonPanel = new HorizontalPanel();
vp.add(buttonPanel);
buttonPanel.add(addButton);
buttonPanel.add(removeButton);
buttonPanel.add(refreshButton);
add(vp);
refreshUrlList();
}
private void refreshUrlList() {
sailingService.getResultImportUrls(selectedProviderName, new AsyncCallback<List<String>>() {
@Override
public void onFailure(Throwable caught) {
errorReporter.reportError(stringMessages.errorRefreshingResultImportUrlList(caught.getMessage()));
}
@Override
public void onSuccess(List<String> result) {
urlListBox.clear();
for (String s : result) {
urlListBox.addItem(s);
}
}
});
}
private void removeSelectedUrls() {
Set<String> toRemove = new HashSet<String>();
for (int i=urlListBox.getItemCount()-1; i>=0; i--) {
if (urlListBox.isItemSelected(i)) {
toRemove.add(urlListBox.getItemText(i));
urlListBox.removeItem(i);
}
}
sailingService.removeResultImportURLs(selectedProviderName, toRemove, new AsyncCallback<Void>() {
@Override
public void onFailure(Throwable caught) {
errorReporter.reportError(stringMessages.errorRemovingResultImportUrls(caught.getMessage()));
refreshUrlList();
}
@Override
public void onSuccess(Void result) {
Window.setStatus(stringMessages.successfullyUpdatedResultImportUrls());
}
});
}
private void addUrl() {
final DataEntryDialog<String> dialog = new TextfieldEntryDialog(stringMessages.addResultImportUrl(),
stringMessages.addResultImportUrl(), stringMessages.add(), stringMessages.cancel(), "http://",
new DataEntryDialog.Validator<String>() {
@Override
public String getErrorMessage(String valueToValidate) {
String result = null;
if (valueToValidate == null || valueToValidate.length() == 0) {
result = stringMessages.pleaseEnterNonEmptyUrl();
}
return result;
}
}, new AsyncCallback<String>() {
@Override
public void onFailure(Throwable caught) {
// user cancelled; just don't add
}
@Override
public void onSuccess(String url) {
urlListBox.addItem(url);
sailingService.addResultImportUrl(selectedProviderName, url, new AsyncCallback<Void>() {
@Override
public void onFailure(Throwable caught) {
errorReporter.reportError(stringMessages.errorAddingResultImportUrl(caught.getMessage()));
refreshUrlList(); // take back our pre-mature addition
}
@Override
public void onSuccess(Void result) {
Window.setStatus(stringMessages.successfullyUpdatedResultImportUrls());
}
});
}
});
dialog.show();
}
}
package com.sap.sailing.gwt.ui.adminconsole;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
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.FlowPanel;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.ListBox;
import com.google.gwt.user.client.ui.RadioButton;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.sap.sailing.gwt.ui.client.DataEntryDialog;
import com.sap.sailing.gwt.ui.client.ErrorReporter;
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.client.TextfieldEntryDialog;
public class ResultImportUrlsManagementPanel extends FlowPanel {
private final ListBox urlListBox;
private final SailingServiceAsync sailingService;
private final ErrorReporter errorReporter;
private final StringMessages stringMessages;
private String selectedProviderName = FREG_PROVIDER;
private final static String FREG_PROVIDER = "FREG HTML Score Importer";
private final static String WINREGATTA_PROVIDER = "'WinRegatta Plus' XLS Score Importer";
public ResultImportUrlsManagementPanel(SailingServiceAsync sailingService, ErrorReporter errorReporter,
StringMessages stringMessages) {
this.sailingService = sailingService;
this.errorReporter = errorReporter;
this.stringMessages = stringMessages;
urlListBox = new ListBox(/* multiple select */ true);
Button addButton = new Button(stringMessages.add());
Button removeButton = new Button(stringMessages.remove());
Button refreshButton = new Button(stringMessages.refresh());
addButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
addUrl();
}
});
removeButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
removeSelectedUrls();
}
});
refreshButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
refreshUrlList();
}
});
VerticalPanel vp = new VerticalPanel();
HorizontalPanel providerSelectionPanel = new HorizontalPanel();
vp.add(providerSelectionPanel);
RadioButton fregProviderRB = new RadioButton("providerSelection", FREG_PROVIDER);
fregProviderRB.setValue(true);
fregProviderRB.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
selectedProviderName = FREG_PROVIDER;
refreshUrlList();
}
});
providerSelectionPanel.add(fregProviderRB);
RadioButton winRegattaProviderRB = new RadioButton("providerSelection", WINREGATTA_PROVIDER);
winRegattaProviderRB.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
selectedProviderName = WINREGATTA_PROVIDER;
refreshUrlList();
}
});
providerSelectionPanel.add(winRegattaProviderRB);
vp.add(urlListBox);
HorizontalPanel buttonPanel = new HorizontalPanel();
vp.add(buttonPanel);
buttonPanel.add(addButton);
buttonPanel.add(removeButton);
buttonPanel.add(refreshButton);
add(vp);
refreshUrlList();
}
private void refreshUrlList() {
sailingService.getResultImportUrls(selectedProviderName, new AsyncCallback<List<String>>() {
@Override
public void onFailure(Throwable caught) {
errorReporter.reportError(stringMessages.errorRefreshingResultImportUrlList(caught.getMessage()));
}
@Override
public void onSuccess(List<String> result) {
urlListBox.clear();
for (String s : result) {
urlListBox.addItem(s);
}
}
});
}
private void removeSelectedUrls() {
Set<String> toRemove = new HashSet<String>();
for (int i=urlListBox.getItemCount()-1; i>=0; i--) {
if (urlListBox.isItemSelected(i)) {
toRemove.add(urlListBox.getItemText(i));
urlListBox.removeItem(i);
}
}
sailingService.removeResultImportURLs(selectedProviderName, toRemove, new AsyncCallback<Void>() {
@Override
public void onFailure(Throwable caught) {
errorReporter.reportError(stringMessages.errorRemovingResultImportUrls(caught.getMessage()));
refreshUrlList();
}
@Override
public void onSuccess(Void result) {
Window.setStatus(stringMessages.successfullyUpdatedResultImportUrls());
}
});
}
private void addUrl() {
final DataEntryDialog<String> dialog = new TextfieldEntryDialog(stringMessages.addResultImportUrl(),
stringMessages.addResultImportUrl(), stringMessages.add(), stringMessages.cancel(), "http://",
new DataEntryDialog.Validator<String>() {
@Override
public String getErrorMessage(String valueToValidate) {
String result = null;
if (valueToValidate == null || valueToValidate.length() == 0) {
result = stringMessages.pleaseEnterNonEmptyUrl();
}
return result;
}
}, new AsyncCallback<String>() {
@Override
public void onFailure(Throwable caught) {
// user cancelled; just don't add
}
@Override
public void onSuccess(String url) {
urlListBox.addItem(url);
sailingService.addResultImportUrl(selectedProviderName, url, new AsyncCallback<Void>() {
@Override
public void onFailure(Throwable caught) {
errorReporter.reportError(stringMessages.errorAddingResultImportUrl(caught.getMessage()));
refreshUrlList(); // take back our pre-mature addition
}
@Override
public void onSuccess(Void result) {
Window.setStatus(stringMessages.successfullyUpdatedResultImportUrls());
}
});
}
});
dialog.show();
}
}
@@ -254,4 +254,6 @@ public interface SailingService extends RemoteService {
Void updateLeaderboardScoreCorrectionMetadata(String leaderboardName, Date timePointOfLastCorrectionValidity,
String comment);
List<String> getUrlResultProviderNames();
}
@@ -423,4 +423,6 @@ public interface SailingServiceAsync {
void addResultImportUrl(String resultProviderName, String url,
AsyncCallback<Void> callback);
void getUrlResultProviderNames(AsyncCallback<List<String>> callback);
}
@@ -120,7 +120,6 @@ 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;
import com.sap.sailing.freg.resultimport.FregResultProvider;
import com.sap.sailing.geocoding.ReverseGeocoder;
import com.sap.sailing.gwt.ui.client.SailingService;
import com.sap.sailing.gwt.ui.shared.BoatClassDTO;
@@ -170,6 +169,7 @@ 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;
import com.sap.sailing.resultimport.UrlResultProvider;
import com.sap.sailing.server.RacingEventService;
import com.sap.sailing.server.RacingEventServiceOperation;
import com.sap.sailing.server.operationaltransformation.AddColumnToLeaderboard;
@@ -212,7 +212,6 @@ import com.sap.sailing.server.replication.ReplicaDescriptor;
import com.sap.sailing.server.replication.ReplicationFactory;
import com.sap.sailing.server.replication.ReplicationMasterDescriptor;
import com.sap.sailing.server.replication.ReplicationService;
import com.sap.sailing.winregatta.resultimport.WinRegattaResultProvider;
/**
* The server side implementation of the RPC service.
@@ -2555,23 +2554,23 @@ public class SailingServiceImpl extends RemoteServiceServlet implements SailingS
scoreCorrectionForCompetitor.isDiscarded(), scoreCorrectionForCompetitor.getMaxPointsReason());
}
private FregResultProvider getFregService() {
FregResultProvider result = null;
@Override
public List<String> getUrlResultProviderNames() {
List<String> result = new ArrayList<String>();
for (ScoreCorrectionProvider scp : getScoreCorrectionProviders()) {
if (scp instanceof FregResultProvider) {
result = (FregResultProvider) scp;
break;
if (scp instanceof UrlResultProvider) {
result.add(scp.getName());
}
}
return result;
}
private WinRegattaResultProvider getWinRegattaService() {
WinRegattaResultProvider result = null;
private UrlResultProvider getUrlBasedScoreCorrectionProvider(String resultProviderName) {
UrlResultProvider result = null;
for (ScoreCorrectionProvider scp : getScoreCorrectionProviders()) {
if (scp instanceof WinRegattaResultProvider) {
result = (WinRegattaResultProvider) scp;
break;
if (scp instanceof UrlResultProvider && scp.getName().equals(resultProviderName)) {
result = (UrlResultProvider) scp;
break;
}
}
return result;
@@ -2581,21 +2580,11 @@ public class SailingServiceImpl extends RemoteServiceServlet implements SailingS
public List<String> getResultImportUrls(String resultProviderName) {
List<String> result = new ArrayList<String>();
if("FREG".equals(resultProviderName)) {
FregResultProvider fregService = getFregService();
if (fregService != null) {
Iterable<URL> allUrls = fregService.getAllUrls();
for (URL url : allUrls) {
result.add(url.toString());
}
}
} else if("WinRegatta".equals(resultProviderName)) {
WinRegattaResultProvider winRegattaService = getWinRegattaService();
if (winRegattaService != null) {
Iterable<URL> allUrls = winRegattaService.getAllUrls();
for (URL url : allUrls) {
result.add(url.toString());
}
UrlResultProvider urlBasedScoreCorrectionProvider = getUrlBasedScoreCorrectionProvider(resultProviderName);
if (urlBasedScoreCorrectionProvider != null) {
Iterable<URL> allUrls = urlBasedScoreCorrectionProvider.getAllUrls();
for (URL url : allUrls) {
result.add(url.toString());
}
}
return result;
@@ -2603,35 +2592,19 @@ public class SailingServiceImpl extends RemoteServiceServlet implements SailingS
@Override
public void removeResultImportURLs(String resultProviderName, Set<String> toRemove) throws Exception {
if("FREG".equals(resultProviderName)) {
FregResultProvider fregService = getFregService();
if (fregService != null) {
for (String urlToRemove : toRemove) {
fregService.removeResultUrl(new URL(urlToRemove));
}
UrlResultProvider urlBasedScoreCorrectionProvider = getUrlBasedScoreCorrectionProvider(resultProviderName);
if (urlBasedScoreCorrectionProvider != null) {
for (String urlToRemove : toRemove) {
urlBasedScoreCorrectionProvider.removeResultUrl(new URL(urlToRemove));
}
} else if("WinRegatta".equals(resultProviderName)) {
WinRegattaResultProvider winRegattaService = getWinRegattaService();
if (winRegattaService != null) {
for (String urlToRemove : toRemove) {
winRegattaService.removeResultUrl(new URL(urlToRemove));
}
}
}
}
}
@Override
public void addResultImportUrl(String resultProviderName, String url) throws Exception {
if("FREG".equals(resultProviderName)) {
FregResultProvider fregService = getFregService();
if (fregService != null) {
fregService.registerResultUrl(new URL(url));
}
} else if("WinRegatta".equals(resultProviderName)) {
WinRegattaResultProvider winRegattaService = getWinRegattaService();
if (winRegattaService != null) {
winRegattaService.registerResultUrl(new URL(url));
}
}
UrlResultProvider urlBasedScoreCorrectionProvider = getUrlBasedScoreCorrectionProvider(resultProviderName);
if (urlBasedScoreCorrectionProvider != null) {
urlBasedScoreCorrectionProvider.registerResultUrl(new URL(url));
}
}
}
@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
<classpathentry kind="src" path="src"/>
<classpathentry kind="output" path="bin"/>
</classpath>
@@ -0,0 +1 @@
bin/
@@ -0,0 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>com.sap.sailing.resultimport</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.pde.ManifestBuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.pde.SchemaBuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.pde.PluginNature</nature>
<nature>org.eclipse.jdt.core.javanature</nature>
</natures>
</projectDescription>
@@ -0,0 +1,7 @@
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
org.eclipse.jdt.core.compiler.compliance=1.7
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.source=1.7
@@ -0,0 +1,3 @@
eclipse.preferences.version=1
pluginProject.extensions=false
resolve.requirebundle=false
@@ -0,0 +1,10 @@
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Shared result import APIs
Bundle-SymbolicName: com.sap.sailing.resultimport
Bundle-Version: 1.0.0.qualifier
Bundle-Vendor: SAP
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
Bundle-ActivationPolicy: lazy
Export-Package: com.sap.sailing.resultimport,
com.sap.sailing.resultimport.impl
@@ -0,0 +1,4 @@
source.. = src/
output.. = bin/
bin.includes = META-INF/,\
.
+12
View File
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>root</artifactId>
<groupId>com.sap.sailing</groupId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<artifactId>com.sap.sailing.resultimport</artifactId>
<packaging>eclipse-plugin</packaging>
</project>
@@ -1,7 +1,6 @@
package com.sap.sailing.winregatta.resultimport;
package com.sap.sailing.resultimport;
public interface CompetitorEntry {
boolean isDiscarded();
Double getScore();
@@ -9,5 +8,4 @@ public interface CompetitorEntry {
String getMaxPointsReason();
Integer getRank();
}
@@ -1,25 +1,20 @@
package com.sap.sailing.freg.resultimport;
public interface CompetitorRow {
Iterable<CompetitorEntry> getRankAndMaxPointsReasonAndPointsAndDiscarded();
Double getTotalPointsBeforeDiscarding();
Double getScoreAfterDiscarding();
Iterable<String> getNames();
/**
* Concatenates the {@link #getNames() names} with a "+"
*/
String getTeamName();
String getSailID();
Integer getTotalRank();
String getClubName();
}
package com.sap.sailing.resultimport;
public interface CompetitorRow {
Iterable<CompetitorEntry> getRankAndMaxPointsReasonAndPointsAndDiscarded();
Double getTotalPointsBeforeDiscarding();
Double getScoreAfterDiscarding();
Iterable<String> getNames();
String getTeamName();
String getSailID();
Integer getTotalRank();
String getClubName();
}
@@ -1,4 +1,4 @@
package com.sap.sailing.winregatta.resultimport;
package com.sap.sailing.resultimport;
import java.util.List;
import java.util.Map;
@@ -9,5 +9,5 @@ public interface RegattaResults {
*/
Map<String, String> getMetadata();
List<CompetitorResult> getCompetitorResults();
List<CompetitorRow> getCompetitorResults();
}
@@ -1,9 +1,9 @@
package com.sap.sailing.freg.resultimport;
import java.net.URL;
public interface FregResultProvider {
void registerResultUrl(URL url);
void removeResultUrl(URL url);
Iterable<URL> getAllUrls();
}
package com.sap.sailing.resultimport;
import java.net.URL;
public interface UrlResultProvider {
void registerResultUrl(URL url);
void removeResultUrl(URL url);
Iterable<URL> getAllUrls();
}
@@ -0,0 +1,38 @@
package com.sap.sailing.resultimport.impl;
import com.sap.sailing.resultimport.CompetitorEntry;
public class DefaultCompetitorEntryImpl implements CompetitorEntry {
private final Integer rank;
private final String maxPointsReason;
private final Double score;
private final boolean discarded;
public DefaultCompetitorEntryImpl(Integer rank, String maxPointsReason, Double score, boolean discarded) {
super();
this.rank = rank;
this.maxPointsReason = maxPointsReason;
this.score = score;
this.discarded = discarded;
}
@Override
public Integer getRank() {
return rank;
}
@Override
public String getMaxPointsReason() {
return maxPointsReason;
}
@Override
public Double getScore() {
return score;
}
@Override
public boolean isDiscarded() {
return discarded;
}
}
@@ -24,5 +24,5 @@
<booleanAttribute key="tracing" value="false"/>
<booleanAttribute key="useCustomFeatures" value="false"/>
<booleanAttribute key="useDefaultConfigArea" value="false"/>
<stringAttribute key="workspace_bundles" value="com.google.gwt.osgi@default:default,com.googlecode.java-diff-utils@default:default,com.mongodb.driver@default:default,com.sap.sailing.declination@default:default,com.sap.sailing.domain.common@default:default,com.sap.sailing.domain.persistence@default:default,com.sap.sailing.domain.swisstimingadapter.persistence@default:default,com.sap.sailing.domain.swisstimingadapter@default:default,com.sap.sailing.domain.tractracadapter.persistence@default:default,com.sap.sailing.domain.tractracadapter@default:default,com.sap.sailing.domain@default:default,com.sap.sailing.ess40.resultimport@default:default,com.sap.sailing.expeditionconnector@default:default,com.sap.sailing.freg.resultimport@default:default,com.sap.sailing.geocoding@default:default,com.sap.sailing.gwt.ui@default:default,com.sap.sailing.kiworesultimport@default:default,com.sap.sailing.mongodb@default:default,com.sap.sailing.operationaltransformation@default:default,com.sap.sailing.server.replication@default:default,com.sap.sailing.server@default:default,com.sap.sailing.udpconnector@default:default,com.sap.sailing.winregatta.resultimport@default:default,com.sap.sailing.www.events@default:default,com.sap.sailing.www@default:default,com.sap.sailing.xcelsiusadapter@default:default,com.tractrac.clientmodule@default:default,org.json.simple@default:default,org.moxieapps.gwt.highcharts@default:default"/>
<stringAttribute key="workspace_bundles" value="com.google.gwt.osgi@default:default,com.googlecode.java-diff-utils@default:default,com.mongodb.driver@default:default,com.sap.sailing.declination@default:default,com.sap.sailing.domain.common@default:default,com.sap.sailing.domain.persistence@default:default,com.sap.sailing.domain.swisstimingadapter.persistence@default:default,com.sap.sailing.domain.swisstimingadapter@default:default,com.sap.sailing.domain.tractracadapter.persistence@default:default,com.sap.sailing.domain.tractracadapter@default:default,com.sap.sailing.domain@default:default,com.sap.sailing.ess40.resultimport@default:default,com.sap.sailing.expeditionconnector@default:default,com.sap.sailing.freg.resultimport@default:default,com.sap.sailing.geocoding@default:default,com.sap.sailing.gwt.ui@default:default,com.sap.sailing.kiworesultimport@default:default,com.sap.sailing.mongodb@default:default,com.sap.sailing.operationaltransformation@default:default,com.sap.sailing.resultimport@default:default,com.sap.sailing.server.replication@default:default,com.sap.sailing.server@default:default,com.sap.sailing.udpconnector@default:default,com.sap.sailing.winregatta.resultimport@default:default,com.sap.sailing.www.events@default:default,com.sap.sailing.www@default:default,com.sap.sailing.xcelsiusadapter@default:default,com.tractrac.clientmodule@default:default,org.json.simple@default:default,org.moxieapps.gwt.highcharts@default:default"/>
</launchConfiguration>
@@ -25,6 +25,6 @@
<booleanAttribute key="tracing" value="false"/>
<booleanAttribute key="useCustomFeatures" value="false"/>
<booleanAttribute key="useDefaultConfigArea" value="false"/>
<stringAttribute key="workspace_bundles" value="com.google.gwt.osgi@default:default,com.googlecode.java-diff-utils@default:default,com.mongodb.driver@default:default,com.sap.sailing.declination@default:default,com.sap.sailing.domain.common@default:default,com.sap.sailing.domain.persistence@default:default,com.sap.sailing.domain.swisstimingadapter.persistence@default:default,com.sap.sailing.domain.swisstimingadapter@default:default,com.sap.sailing.domain.tractracadapter.persistence@default:default,com.sap.sailing.domain.tractracadapter@default:default,com.sap.sailing.domain@default:default,com.sap.sailing.ess40.resultimport@default:default,com.sap.sailing.expeditionconnector@default:default,com.sap.sailing.freg.resultimport@default:default,com.sap.sailing.geocoding@default:default,com.sap.sailing.gwt.ui@default:default,com.sap.sailing.kiworesultimport@default:default,com.sap.sailing.mongodb@default:default,com.sap.sailing.operationaltransformation@default:default,com.sap.sailing.server.replication@default:default,com.sap.sailing.server@default:default,com.sap.sailing.udpconnector@default:default,com.sap.sailing.winregatta.resultimport@default:default,com.sap.sailing.www.events@default:default,com.sap.sailing.www@default:default,com.sap.sailing.xcelsiusadapter@default:default,com.tractrac.clientmodule@default:default,org.json.simple@default:default,org.moxieapps.gwt.highcharts@default:default"/>
<stringAttribute key="workspace_bundles" value="com.google.gwt.osgi@default:default,com.googlecode.java-diff-utils@default:default,com.mongodb.driver@default:default,com.sap.sailing.declination@default:default,com.sap.sailing.domain.common@default:default,com.sap.sailing.domain.persistence@default:default,com.sap.sailing.domain.swisstimingadapter.persistence@default:default,com.sap.sailing.domain.swisstimingadapter@default:default,com.sap.sailing.domain.tractracadapter.persistence@default:default,com.sap.sailing.domain.tractracadapter@default:default,com.sap.sailing.domain@default:default,com.sap.sailing.ess40.resultimport@default:default,com.sap.sailing.expeditionconnector@default:default,com.sap.sailing.freg.resultimport@default:default,com.sap.sailing.geocoding@default:default,com.sap.sailing.gwt.ui@default:default,com.sap.sailing.kiworesultimport@default:default,com.sap.sailing.mongodb@default:default,com.sap.sailing.operationaltransformation@default:default,com.sap.sailing.resultimport@default:default,com.sap.sailing.server.replication@default:default,com.sap.sailing.server@default:default,com.sap.sailing.udpconnector@default:default,com.sap.sailing.winregatta.resultimport@default:default,com.sap.sailing.www.events@default:default,com.sap.sailing.www@default:default,com.sap.sailing.xcelsiusadapter@default:default,com.tractrac.clientmodule@default:default,org.json.simple@default:default,org.moxieapps.gwt.highcharts@default:default"/>
<stringAttribute key="yk-options" value="&#13;&#10;additional-options2=onexit\=snapshot&#13;&#10;"/>
</launchConfiguration>
@@ -24,5 +24,5 @@
<booleanAttribute key="tracing" value="false"/>
<booleanAttribute key="useCustomFeatures" value="false"/>
<booleanAttribute key="useDefaultConfigArea" value="false"/>
<stringAttribute key="workspace_bundles" value="com.google.gwt.osgi@default:default,com.googlecode.java-diff-utils@default:default,com.mongodb.driver@default:default,com.sap.sailing.declination@default:default,com.sap.sailing.domain.common@default:default,com.sap.sailing.domain.persistence@default:default,com.sap.sailing.domain.swisstimingadapter.persistence@default:default,com.sap.sailing.domain.swisstimingadapter@default:default,com.sap.sailing.domain.tractracadapter.persistence@default:default,com.sap.sailing.domain.tractracadapter@default:default,com.sap.sailing.domain@default:default,com.sap.sailing.ess40.resultimport@default:default,com.sap.sailing.expeditionconnector@default:default,com.sap.sailing.freg.resultimport@default:default,com.sap.sailing.geocoding@default:default,com.sap.sailing.gwt.ui@default:default,com.sap.sailing.kiworesultimport@default:default,com.sap.sailing.mongodb@default:default,com.sap.sailing.operationaltransformation@default:default,com.sap.sailing.server@default:default,com.sap.sailing.udpconnector@default:default,com.sap.sailing.winregatta.resultimport@default:default,com.sap.sailing.www.events@default:default,com.sap.sailing.www@default:default,com.sap.sailing.xcelsiusadapter@default:default,com.tractrac.clientmodule@default:default,org.json.simple@default:default,org.moxieapps.gwt.highcharts@default:default"/>
<stringAttribute key="workspace_bundles" value="com.google.gwt.osgi@default:default,com.googlecode.java-diff-utils@default:default,com.mongodb.driver@default:default,com.sap.sailing.declination@default:default,com.sap.sailing.domain.common@default:default,com.sap.sailing.domain.persistence@default:default,com.sap.sailing.domain.swisstimingadapter.persistence@default:default,com.sap.sailing.domain.swisstimingadapter@default:default,com.sap.sailing.domain.tractracadapter.persistence@default:default,com.sap.sailing.domain.tractracadapter@default:default,com.sap.sailing.domain@default:default,com.sap.sailing.ess40.resultimport@default:default,com.sap.sailing.expeditionconnector@default:default,com.sap.sailing.freg.resultimport@default:default,com.sap.sailing.geocoding@default:default,com.sap.sailing.gwt.ui@default:default,com.sap.sailing.kiworesultimport@default:default,com.sap.sailing.mongodb@default:default,com.sap.sailing.operationaltransformation@default:default,com.sap.sailing.resultimport@default:default,com.sap.sailing.server@default:default,com.sap.sailing.udpconnector@default:default,com.sap.sailing.winregatta.resultimport@default:default,com.sap.sailing.www.events@default:default,com.sap.sailing.www@default:default,com.sap.sailing.xcelsiusadapter@default:default,com.tractrac.clientmodule@default:default,org.json.simple@default:default,org.moxieapps.gwt.highcharts@default:default"/>
</launchConfiguration>
@@ -25,6 +25,6 @@
<booleanAttribute key="tracing" value="false"/>
<booleanAttribute key="useCustomFeatures" value="false"/>
<booleanAttribute key="useDefaultConfigArea" value="false"/>
<stringAttribute key="workspace_bundles" value="com.google.gwt.osgi@default:default,com.googlecode.java-diff-utils@default:default,com.mongodb.driver@default:default,com.sap.sailing.declination@default:default,com.sap.sailing.domain.common@default:default,com.sap.sailing.domain.persistence@default:default,com.sap.sailing.domain.swisstimingadapter.persistence@default:default,com.sap.sailing.domain.swisstimingadapter@default:default,com.sap.sailing.domain.tractracadapter.persistence@default:default,com.sap.sailing.domain.tractracadapter@default:default,com.sap.sailing.domain@default:default,com.sap.sailing.ess40.resultimport@default:default,com.sap.sailing.expeditionconnector@default:default,com.sap.sailing.freg.resultimport@default:default,com.sap.sailing.geocoding@default:default,com.sap.sailing.gwt.ui@default:default,com.sap.sailing.kiworesultimport@default:default,com.sap.sailing.mongodb@default:default,com.sap.sailing.operationaltransformation@default:default,com.sap.sailing.server.replication@default:default,com.sap.sailing.server@default:default,com.sap.sailing.udpconnector@default:default,com.sap.sailing.winregatta.resultimport@default:default,com.sap.sailing.www.events@default:default,com.sap.sailing.www@default:default,com.sap.sailing.xcelsiusadapter@default:default,com.tractrac.clientmodule@default:default,org.json.simple@default:default,org.moxieapps.gwt.highcharts@default:default"/>
<stringAttribute key="workspace_bundles" value="com.google.gwt.osgi@default:default,com.googlecode.java-diff-utils@default:default,com.mongodb.driver@default:default,com.sap.sailing.declination@default:default,com.sap.sailing.domain.common@default:default,com.sap.sailing.domain.persistence@default:default,com.sap.sailing.domain.swisstimingadapter.persistence@default:default,com.sap.sailing.domain.swisstimingadapter@default:default,com.sap.sailing.domain.tractracadapter.persistence@default:default,com.sap.sailing.domain.tractracadapter@default:default,com.sap.sailing.domain@default:default,com.sap.sailing.ess40.resultimport@default:default,com.sap.sailing.expeditionconnector@default:default,com.sap.sailing.freg.resultimport@default:default,com.sap.sailing.geocoding@default:default,com.sap.sailing.gwt.ui@default:default,com.sap.sailing.kiworesultimport@default:default,com.sap.sailing.mongodb@default:default,com.sap.sailing.operationaltransformation@default:default,com.sap.sailing.resultimport@default:default,com.sap.sailing.server.replication@default:default,com.sap.sailing.server@default:default,com.sap.sailing.udpconnector@default:default,com.sap.sailing.winregatta.resultimport@default:default,com.sap.sailing.www.events@default:default,com.sap.sailing.www@default:default,com.sap.sailing.xcelsiusadapter@default:default,com.tractrac.clientmodule@default:default,org.json.simple@default:default,org.moxieapps.gwt.highcharts@default:default"/>
<stringAttribute key="yk-options" value="&#13;&#10;additional-options2=onexit\=snapshot&#13;&#10;"/>
</launchConfiguration>
@@ -25,6 +25,6 @@
<booleanAttribute key="tracing" value="false"/>
<booleanAttribute key="useCustomFeatures" value="false"/>
<booleanAttribute key="useDefaultConfigArea" value="false"/>
<stringAttribute key="workspace_bundles" value="com.google.gwt.osgi@default:default,com.googlecode.java-diff-utils@default:default,com.mongodb.driver@default:default,com.sap.sailing.declination@default:default,com.sap.sailing.domain.common@default:default,com.sap.sailing.domain.persistence@default:default,com.sap.sailing.domain.swisstimingadapter.persistence@default:default,com.sap.sailing.domain.swisstimingadapter@default:default,com.sap.sailing.domain.tractracadapter.persistence@default:default,com.sap.sailing.domain.tractracadapter@default:default,com.sap.sailing.domain@default:default,com.sap.sailing.ess40.resultimport@default:default,com.sap.sailing.expeditionconnector@default:default,com.sap.sailing.freg.resultimport@default:default,com.sap.sailing.geocoding@default:default,com.sap.sailing.gwt.ui@default:default,com.sap.sailing.kiworesultimport@default:default,com.sap.sailing.mongodb@default:default,com.sap.sailing.operationaltransformation@default:default,com.sap.sailing.server.replication@default:default,com.sap.sailing.server@default:default,com.sap.sailing.udpconnector@default:default,com.sap.sailing.winregatta.resultimport@default:default,com.sap.sailing.www.events@default:default,com.sap.sailing.www@default:default,com.sap.sailing.xcelsiusadapter@default:default,com.tractrac.clientmodule@default:default,org.json.simple@default:default,org.moxieapps.gwt.highcharts@default:default"/>
<stringAttribute key="workspace_bundles" value="com.google.gwt.osgi@default:default,com.googlecode.java-diff-utils@default:default,com.mongodb.driver@default:default,com.sap.sailing.declination@default:default,com.sap.sailing.domain.common@default:default,com.sap.sailing.domain.persistence@default:default,com.sap.sailing.domain.swisstimingadapter.persistence@default:default,com.sap.sailing.domain.swisstimingadapter@default:default,com.sap.sailing.domain.tractracadapter.persistence@default:default,com.sap.sailing.domain.tractracadapter@default:default,com.sap.sailing.domain@default:default,com.sap.sailing.ess40.resultimport@default:default,com.sap.sailing.expeditionconnector@default:default,com.sap.sailing.freg.resultimport@default:default,com.sap.sailing.geocoding@default:default,com.sap.sailing.gwt.ui@default:default,com.sap.sailing.kiworesultimport@default:default,com.sap.sailing.mongodb@default:default,com.sap.sailing.operationaltransformation@default:default,com.sap.sailing.resultimport@default:default,com.sap.sailing.server.replication@default:default,com.sap.sailing.server@default:default,com.sap.sailing.udpconnector@default:default,com.sap.sailing.winregatta.resultimport@default:default,com.sap.sailing.www.events@default:default,com.sap.sailing.www@default:default,com.sap.sailing.xcelsiusadapter@default:default,com.tractrac.clientmodule@default:default,org.json.simple@default:default,org.moxieapps.gwt.highcharts@default:default"/>
<stringAttribute key="yk-options" value="&#13;&#10;additional-options2=onexit\=snapshot&#13;&#10;"/>
</launchConfiguration>
@@ -25,5 +25,5 @@
<booleanAttribute key="tracing" value="false"/>
<booleanAttribute key="useCustomFeatures" value="false"/>
<booleanAttribute key="useDefaultConfigArea" value="true"/>
<stringAttribute key="workspace_bundles" value="com.google.gwt.osgi@default:default,com.googlecode.java-diff-utils@default:default,com.mongodb.driver@default:default,com.sap.sailing.declination@default:default,com.sap.sailing.domain.common@default:default,com.sap.sailing.domain.persistence@default:default,com.sap.sailing.domain.swisstimingadapter.persistence@default:default,com.sap.sailing.domain.swisstimingadapter@default:default,com.sap.sailing.domain.tractracadapter.persistence@default:default,com.sap.sailing.domain.tractracadapter@default:default,com.sap.sailing.domain@default:default,com.sap.sailing.expeditionconnector@default:default,com.sap.sailing.freg.resultimport@default:default,com.sap.sailing.geocoding@default:default,com.sap.sailing.gwt.ui@default:default,com.sap.sailing.kiworesultimport@default:default,com.sap.sailing.mongodb@default:default,com.sap.sailing.operationaltransformation@default:default,com.sap.sailing.server.replication@default:default,com.sap.sailing.server@default:default,com.sap.sailing.udpconnector@default:default,com.sap.sailing.winregatta.resultimport@default:default,com.sap.sailing.www.events@default:default,com.sap.sailing.www@default:default,com.sap.sailing.xcelsiusadapter@default:default,com.tractrac.clientmodule@default:default,org.json.simple@default:default,org.moxieapps.gwt.highcharts@default:default"/>
<stringAttribute key="workspace_bundles" value="com.google.gwt.osgi@default:default,com.googlecode.java-diff-utils@default:default,com.mongodb.driver@default:default,com.sap.sailing.declination@default:default,com.sap.sailing.domain.common@default:default,com.sap.sailing.domain.persistence@default:default,com.sap.sailing.domain.swisstimingadapter.persistence@default:default,com.sap.sailing.domain.swisstimingadapter@default:default,com.sap.sailing.domain.tractracadapter.persistence@default:default,com.sap.sailing.domain.tractracadapter@default:default,com.sap.sailing.domain@default:default,com.sap.sailing.expeditionconnector@default:default,com.sap.sailing.freg.resultimport@default:default,com.sap.sailing.geocoding@default:default,com.sap.sailing.gwt.ui@default:default,com.sap.sailing.kiworesultimport@default:default,com.sap.sailing.mongodb@default:default,com.sap.sailing.operationaltransformation@default:default,com.sap.sailing.resultimport@default:default,com.sap.sailing.server.replication@default:default,com.sap.sailing.server@default:default,com.sap.sailing.udpconnector@default:default,com.sap.sailing.winregatta.resultimport@default:default,com.sap.sailing.www.events@default:default,com.sap.sailing.www@default:default,com.sap.sailing.xcelsiusadapter@default:default,com.tractrac.clientmodule@default:default,org.json.simple@default:default,org.moxieapps.gwt.highcharts@default:default"/>
</launchConfiguration>
@@ -24,5 +24,5 @@
<booleanAttribute key="tracing" value="false"/>
<booleanAttribute key="useCustomFeatures" value="false"/>
<booleanAttribute key="useDefaultConfigArea" value="false"/>
<stringAttribute key="workspace_bundles" value="com.google.gwt.osgi@default:default,com.googlecode.java-diff-utils@default:default,com.mongodb.driver@default:default,com.sap.sailing.declination@default:default,com.sap.sailing.domain.common@default:default,com.sap.sailing.domain.persistence@default:default,com.sap.sailing.domain.swisstimingadapter.persistence@default:default,com.sap.sailing.domain.swisstimingadapter@default:default,com.sap.sailing.domain.tractracadapter.persistence@default:default,com.sap.sailing.domain.tractracadapter@default:default,com.sap.sailing.domain@default:default,com.sap.sailing.ess40.resultimport@default:default,com.sap.sailing.expeditionconnector@default:default,com.sap.sailing.freg.resultimport@default:default,com.sap.sailing.geocoding@default:default,com.sap.sailing.gwt.ui@default:default,com.sap.sailing.kiworesultimport@default:default,com.sap.sailing.mongodb@default:default,com.sap.sailing.operationaltransformation@default:default,com.sap.sailing.server@default:default,com.sap.sailing.udpconnector@default:default,com.sap.sailing.winregatta.resultimport@default:default,com.sap.sailing.www.events@default:default,com.sap.sailing.www@default:default,com.sap.sailing.xcelsiusadapter@default:default,com.tractrac.clientmodule@default:default,org.json.simple@default:default,org.moxieapps.gwt.highcharts@default:default"/>
<stringAttribute key="workspace_bundles" value="com.google.gwt.osgi@default:default,com.googlecode.java-diff-utils@default:default,com.mongodb.driver@default:default,com.sap.sailing.declination@default:default,com.sap.sailing.domain.common@default:default,com.sap.sailing.domain.persistence@default:default,com.sap.sailing.domain.swisstimingadapter.persistence@default:default,com.sap.sailing.domain.swisstimingadapter@default:default,com.sap.sailing.domain.tractracadapter.persistence@default:default,com.sap.sailing.domain.tractracadapter@default:default,com.sap.sailing.domain@default:default,com.sap.sailing.ess40.resultimport@default:default,com.sap.sailing.expeditionconnector@default:default,com.sap.sailing.freg.resultimport@default:default,com.sap.sailing.geocoding@default:default,com.sap.sailing.gwt.ui@default:default,com.sap.sailing.kiworesultimport@default:default,com.sap.sailing.mongodb@default:default,com.sap.sailing.operationaltransformation@default:default,com.sap.sailing.resultimport@default:default,com.sap.sailing.server@default:default,com.sap.sailing.udpconnector@default:default,com.sap.sailing.winregatta.resultimport@default:default,com.sap.sailing.www.events@default:default,com.sap.sailing.www@default:default,com.sap.sailing.xcelsiusadapter@default:default,com.tractrac.clientmodule@default:default,org.json.simple@default:default,org.moxieapps.gwt.highcharts@default:default"/>
</launchConfiguration>
@@ -10,4 +10,5 @@ Bundle-ActivationPolicy: lazy
Require-Bundle: org.junit4;bundle-version="4.8.2",
com.sap.sailing.winregatta.resultimport,
com.sap.sailing.domain.common,
com.sap.sailing.domain
com.sap.sailing.domain,
com.sap.sailing.resultimport
@@ -12,7 +12,7 @@ import java.util.Map;
import org.junit.Test;
import com.sap.sailing.winregatta.resultimport.RegattaResults;
import com.sap.sailing.resultimport.RegattaResults;
import com.sap.sailing.winregatta.resultimport.impl.CompetitorResultsXlsImporter;
public class XlsImportTest {
@@ -6,11 +6,15 @@ Bundle-Version: 1.0.0.qualifier
Bundle-Activator: com.sap.sailing.winregatta.resultimport.impl.Activator
Bundle-Vendor: SAP
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
Import-Package: org.osgi.framework
Import-Package: javax.xml.parsers,
org.osgi.framework,
org.xml.sax
Bundle-ActivationPolicy: lazy
Require-Bundle: com.sap.sailing.server,
com.sap.sailing.domain.common,
com.sap.sailing.domain
com.sap.sailing.domain,
jcl.over.slf4j;bundle-version="1.6.4",
com.sap.sailing.resultimport
Bundle-ClassPath: lib/com.springsource.org.apache.commons.beanutils-1.8.0.jar,
lib/com.springsource.org.apache.commons.collections-3.2.1.jar,
lib/com.springsource.org.apache.commons.digester-1.8.0.jar,
@@ -22,5 +26,4 @@ Bundle-ClassPath: lib/com.springsource.org.apache.commons.beanutils-1.8.0.jar,
lib/xml-apis-1.0.b2.jar,
lib/xmlbeans-2.4.0.jar,
lib/dom4j-1.6.1.jar
Export-Package: com.sap.sailing.winregatta.resultimport,
com.sap.sailing.winregatta.resultimport.impl;x-friends:="com.sap.sailing.winregatta.resultimport.test"
Export-Package: com.sap.sailing.winregatta.resultimport.impl;x-friends:="com.sap.sailing.winregatta.resultimport.test"
@@ -11,7 +11,7 @@
<section startRow="12" endRow="12">
<mapping row="12" col="0">competitor.totalRank</mapping>
<mapping row="12" col="1">competitor.country</mapping>
<mapping row="12" col="2">competitor.sailID</mapping>
<mapping row="12" col="2">competitor.sailNumber</mapping>
<mapping row="12" col="3">competitor.teamMember1Name</mapping>
<mapping row="12" col="4">competitor.teamMember1Club</mapping>
<mapping row="12" col="5">competitor.teamMember1DSVNumber</mapping>
@@ -1,25 +0,0 @@
package com.sap.sailing.winregatta.resultimport;
public interface CompetitorResult {
Iterable<CompetitorEntry> getRankAndMaxPointsReasonAndPointsAndDiscarded();
Double getTotalPointsBeforeDiscarding();
Double getScoreAfterDiscarding();
Iterable<String> getNames();
/**
* Concatenates the {@link #getNames() names} with a "+"
*/
String getTeamName();
String getSailID();
Integer getTotalRank();
String getClubName();
}
@@ -1,9 +0,0 @@
package com.sap.sailing.winregatta.resultimport;
import java.net.URL;
public interface WinRegattaResultProvider {
void registerResultUrl(URL url);
void removeResultUrl(URL url);
Iterable<URL> getAllUrls();
}
@@ -1,15 +1,16 @@
package com.sap.sailing.winregatta.resultimport.impl;
import java.util.Date;
import java.util.ArrayList;
import java.util.List;
import com.sap.sailing.winregatta.resultimport.CompetitorEntry;
import com.sap.sailing.winregatta.resultimport.CompetitorResult;
import com.sap.sailing.resultimport.CompetitorEntry;
import com.sap.sailing.resultimport.CompetitorRow;
public class CompetitorResultImpl implements CompetitorResult
public class CompetitorResultImpl implements CompetitorRow
{
private Integer totalRank;
private String country;
private String sailID;
private String sailNumber;
private String teamMember1Name;
private String teamMember1Club;
private String teamMember1DSVNumber;
@@ -29,7 +30,7 @@ public class CompetitorResultImpl implements CompetitorResult
}
public Object getResultKey() {
return sailID;
return sailNumber;
}
public Integer getTotalRank() {
@@ -48,12 +49,12 @@ public class CompetitorResultImpl implements CompetitorResult
this.country = country;
}
public String getSailID() {
return sailID;
public String getSailNumber() {
return sailNumber;
}
public void setSailID(String sailID) {
this.sailID = sailID;
public void setSailNumber(String sailNumber) {
this.sailNumber = sailNumber;
}
public String getTeamMember1Name() {
@@ -168,32 +169,6 @@ public class CompetitorResultImpl implements CompetitorResult
this.totalScore = totalScore;
}
private class ExcelDateFormatter {
String valueAsString;
Date valueAsDate;
public ExcelDateFormatter(String importedDate) {
if (importedDate != null && !importedDate.isEmpty()) {
// the format is in excel time format (number between 0 and 1)
try {
Double value = Double.parseDouble(importedDate) * 86400;
Long valueInSeconds = value.longValue();
this.valueAsDate = new Date(valueInSeconds * 1000);
this.valueAsString = String
.format("%02d:%02d:%02d", valueInSeconds / 3600,
(valueInSeconds % 3600) / 60,
(valueInSeconds % 60));
} catch (NumberFormatException e) {
this.valueAsString = "Invalid format: " + importedDate;
}
} else {
valueAsString = importedDate;
valueAsDate = null;
}
}
}
@Override
public Iterable<CompetitorEntry> getRankAndMaxPointsReasonAndPointsAndDiscarded() {
// TODO Auto-generated method stub
@@ -214,19 +189,31 @@ public class CompetitorResultImpl implements CompetitorResult
@Override
public Iterable<String> getNames() {
// TODO Auto-generated method stub
return null;
List<String> names = new ArrayList<String>();
if(teamMember1Name != null) {
names.add(teamMember1Name);
}
if(teamMember2Name != null) {
names.add(teamMember2Name);
}
if(teamMember3Name != null) {
names.add(teamMember3Name);
}
return names;
}
@Override
public String getTeamName() {
// TODO Auto-generated method stub
return null;
return "";
}
@Override
public String getSailID() {
return country.trim() + sailNumber.trim();
}
@Override
public String getClubName() {
// TODO Auto-generated method stub
return null;
return "";
}
}
@@ -16,8 +16,8 @@ import net.sf.jxls.reader.ReaderConfig;
import net.sf.jxls.reader.XLSReadStatus;
import net.sf.jxls.reader.XLSReader;
import com.sap.sailing.winregatta.resultimport.CompetitorResult;
import com.sap.sailing.winregatta.resultimport.RegattaResults;
import com.sap.sailing.resultimport.CompetitorRow;
import com.sap.sailing.resultimport.RegattaResults;
public class CompetitorResultsXlsImporter {
private static String jxlsImportTemplatePath = "/exceltemplates/DrachenIDM-2012/resultlistImport.xml";
@@ -33,7 +33,7 @@ public class CompetitorResultsXlsImporter {
throw new IllegalStateException(String.format("Can not read classpath resource '%s'",
jxlsImportTemplatePath));
final List<CompetitorResult> results = new ArrayList<CompetitorResult>();
final List<CompetitorRow> results = new ArrayList<CompetitorRow>();
final RegattaInfo regattaInfo = new RegattaInfo();
HashMap<String, Object> beans = new HashMap<String, Object>();
beans.put("competitors", results);
@@ -48,7 +48,7 @@ public class CompetitorResultsXlsImporter {
return regattaInfo.toMap();
}
@Override
public List<CompetitorResult> getCompetitorResults() {
public List<CompetitorRow> getCompetitorResults() {
return results;
}
};
@@ -0,0 +1,30 @@
package com.sap.sailing.winregatta.resultimport.impl;
import java.util.Date;
public class ExcelDateFormatterUtil {
String valueAsString;
Date valueAsDate;
public ExcelDateFormatterUtil(String importedDate) {
if (importedDate != null && !importedDate.isEmpty()) {
// the format is in excel time format (number between 0 and 1)
try {
Double value = Double.parseDouble(importedDate) * 86400;
Long valueInSeconds = value.longValue();
this.valueAsDate = new Date(valueInSeconds * 1000);
this.valueAsString = String
.format("%02d:%02d:%02d", valueInSeconds / 3600,
(valueInSeconds % 3600) / 60,
(valueInSeconds % 60));
} catch (NumberFormatException e) {
this.valueAsString = "Invalid format: " + importedDate;
}
} else {
valueAsString = importedDate;
valueAsDate = null;
}
}
}
@@ -6,8 +6,8 @@ import java.util.List;
import com.sap.sailing.domain.common.RegattaScoreCorrections;
import com.sap.sailing.domain.common.ScoreCorrectionProvider;
import com.sap.sailing.domain.common.impl.Util;
import com.sap.sailing.winregatta.resultimport.CompetitorResult;
import com.sap.sailing.winregatta.resultimport.RegattaResults;
import com.sap.sailing.resultimport.CompetitorRow;
import com.sap.sailing.resultimport.RegattaResults;
public class RegattaScoreCorrectionsImpl implements RegattaScoreCorrections {
private final ScoreCorrectionProviderImpl provider;
@@ -26,7 +26,7 @@ public class RegattaScoreCorrectionsImpl implements RegattaScoreCorrections {
private int getMaxListSize(RegattaResults regattaResult) {
int result = 0;
for (CompetitorResult competitorResult : regattaResult.getCompetitorResults()) {
for (CompetitorRow competitorResult : regattaResult.getCompetitorResults()) {
result = Math.max(result, Util.size(competitorResult.getRankAndMaxPointsReasonAndPointsAndDiscarded()));
}
return result;
@@ -39,7 +39,7 @@ public class RegattaScoreCorrectionsImpl implements RegattaScoreCorrections {
@Override
public String getRegattaName() {
return "Extreme Sailing Series";
return "???";
}
@Override
@@ -4,7 +4,7 @@ import java.util.logging.Logger;
import com.sap.sailing.domain.common.MaxPointsReason;
import com.sap.sailing.domain.common.RegattaScoreCorrections.ScoreCorrectionForCompetitorInRace;
import com.sap.sailing.winregatta.resultimport.CompetitorEntry;
import com.sap.sailing.resultimport.CompetitorEntry;
public class ScoreCorrectionForCompetitorInRaceImpl implements ScoreCorrectionForCompetitorInRace {
private static final Logger logger = Logger.getLogger(ScoreCorrectionForCompetitorInRaceImpl.class.getName());
@@ -59,9 +59,6 @@ public class ScoreCorrectionForCompetitorInRaceImpl implements ScoreCorrectionFo
return maxPointsReason;
}
/**
* @return <code>false</code> because ESS doesn't have discards
*/
@Override
public Boolean isDiscarded() {
return discarded;
@@ -7,22 +7,22 @@ import java.util.Set;
import com.sap.sailing.domain.common.RegattaScoreCorrections.ScoreCorrectionForCompetitorInRace;
import com.sap.sailing.domain.common.RegattaScoreCorrections.ScoreCorrectionsForRace;
import com.sap.sailing.domain.common.impl.Util;
import com.sap.sailing.winregatta.resultimport.CompetitorEntry;
import com.sap.sailing.winregatta.resultimport.CompetitorResult;
import com.sap.sailing.winregatta.resultimport.RegattaResults;
import com.sap.sailing.resultimport.CompetitorEntry;
import com.sap.sailing.resultimport.CompetitorRow;
import com.sap.sailing.resultimport.RegattaResults;
public class ScoreCorrectionForRaceImpl implements ScoreCorrectionsForRace {
private final int raceNumberStartingWithOne;
private final int raceNumber;
private final Map<String, ScoreCorrectionForCompetitorInRace> scoreCorrectionsBySailID;
public ScoreCorrectionForRaceImpl(RegattaResults regattaResult, int raceNumberStartingWithZero) {
this.raceNumberStartingWithOne = raceNumberStartingWithZero+1;
public ScoreCorrectionForRaceImpl(RegattaResults regattaResult, int raceNumber) {
this.raceNumber = raceNumber;
this.scoreCorrectionsBySailID = new HashMap<String, ScoreCorrectionForCompetitorInRace>();
for (CompetitorResult competitorResult : regattaResult.getCompetitorResults()) {
for (CompetitorRow competitorResult : regattaResult.getCompetitorResults()) {
String teamName = competitorResult.getTeamName();
CompetitorEntry competitorEntry;
if (raceNumberStartingWithZero < Util.size(competitorResult.getRankAndMaxPointsReasonAndPointsAndDiscarded())) {
competitorEntry = Util.get(competitorResult.getRankAndMaxPointsReasonAndPointsAndDiscarded(), raceNumberStartingWithZero);
if (raceNumber < Util.size(competitorResult.getRankAndMaxPointsReasonAndPointsAndDiscarded())) {
competitorEntry = Util.get(competitorResult.getRankAndMaxPointsReasonAndPointsAndDiscarded(), raceNumber);
} else {
competitorEntry = null;
}
@@ -33,7 +33,7 @@ public class ScoreCorrectionForRaceImpl implements ScoreCorrectionsForRace {
@Override
public String getRaceNameOrNumber() {
return ""+raceNumberStartingWithOne;
return ""+raceNumber;
}
@Override
@@ -1,6 +1,5 @@
package com.sap.sailing.winregatta.resultimport.impl;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
@@ -8,7 +7,6 @@ import java.net.URLConnection;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -17,13 +15,13 @@ import com.sap.sailing.domain.common.RegattaScoreCorrections;
import com.sap.sailing.domain.common.ScoreCorrectionProvider;
import com.sap.sailing.domain.common.TimePoint;
import com.sap.sailing.domain.common.impl.Util.Pair;
import com.sap.sailing.winregatta.resultimport.RegattaResults;
import com.sap.sailing.winregatta.resultimport.WinRegattaResultProvider;
import com.sap.sailing.resultimport.RegattaResults;
import com.sap.sailing.resultimport.UrlResultProvider;
public class ScoreCorrectionProviderImpl implements ScoreCorrectionProvider, WinRegattaResultProvider {
public class ScoreCorrectionProviderImpl implements ScoreCorrectionProvider, UrlResultProvider {
private static final long serialVersionUID = -52564333737320563L;
private static final String name = "Results from 'WinRegatta Plus'";
private static final String name = "'WinRegatta Plus' XLS Score Importer";
private final Set<URL> allUrls;
+3
View File
@@ -53,12 +53,15 @@
<module>com.sap.sailing.feature.runtime</module>
<module>com.sap.sailing.feature.p2build</module>
<module>org.moxieapps.gwt.highcharts</module>
<module>com.sap.sailing.resultimport</module>
<module>com.sap.sailing.kiworesultimport</module>
<module>com.sap.sailing.kiworesultimport.test</module>
<module>com.sap.sailing.ess40.resultimport</module>
<module>com.sap.sailing.ess40.resultimport.test</module>
<module>com.sap.sailing.freg.resultimport</module>
<module>com.sap.sailing.freg.resultimport.test</module>
<module>com.sap.sailing.winregatta.resultimport</module>
<module>com.sap.sailing.winregatta.resultimport.test</module>
</modules>
<properties>