Merge remote-tracking branch 'origin/master' into sse_gwt_theme
@@ -95,7 +95,7 @@ parallelexecution=0
|
||||
p2local=0
|
||||
|
||||
if [ $# -eq 0 ]; then
|
||||
echo "buildAndUpdateProduct [-b -u -g -t -a -r -o -c -p -v -m <config> -n <package> -l <port> -x <gwt-workers>] [build|install|all|hot-deploy|remote-deploy|local-deploy|release]"
|
||||
echo "buildAndUpdateProduct [-b -u -g -t -a -r -o -c -p -v -m <config> -n <package> -l <port> -x <gwt-workers> -j <test-package>] [build|install|all|hot-deploy|remote-deploy|local-deploy|release]"
|
||||
echo ""
|
||||
echo "-g Disable GWT compile, no gwt files will be generated, old ones will be preserved."
|
||||
echo "-b Build GWT permutation only for one browser and English language."
|
||||
@@ -115,6 +115,7 @@ if [ $# -eq 0 ]; then
|
||||
echo "-u Run without confirmation messages. Use with extreme care."
|
||||
echo "-v Build local p2 respository, and use this instead of p2.sapsailing.com"
|
||||
echo "-x <number-of-workers> use this many worker threads for building GWT permutations (default: 2)."
|
||||
echo "-j <test-package> only execute the provided test package during tests"
|
||||
echo ""
|
||||
echo "build: builds the server code using Maven to $PROJECT_HOME (log to $START_DIR/build.log)"
|
||||
echo ""
|
||||
@@ -151,7 +152,7 @@ echo SERVERS_HOME is $SERVERS_HOME
|
||||
echo BRANCH is $active_branch
|
||||
echo VERSION is $VERSION_INFO
|
||||
|
||||
options=':bgtocparvm:n:l:s:w:x:u'
|
||||
options=':bgtocparvm:n:l:s:w:x:j:u'
|
||||
while getopts $options option
|
||||
do
|
||||
case $option in
|
||||
@@ -172,6 +173,7 @@ do
|
||||
u) suppress_confirmation=1;;
|
||||
v) p2local=1;;
|
||||
x) GWT_WORKERS=$OPTARG;;
|
||||
j) TESTCASE_TO_EXECUTE=$OPTARG;;
|
||||
\?) echo "Invalid option"
|
||||
exit 4;;
|
||||
esac
|
||||
@@ -259,7 +261,7 @@ if [[ "$@" == "release" ]]; then
|
||||
cp -v $PROJECT_HOME/java/target/configuration/jetty/etc/jetty-deployer.xml configuration/jetty/etc
|
||||
cp -v $PROJECT_HOME/java/target/configuration/jetty/etc/realm.properties configuration/jetty/etc
|
||||
cp -v $PROJECT_HOME/java/target/configuration/monitoring.properties configuration/
|
||||
cp -v $PROJECT_HOME/java/target/configuration/security.properties configuration/
|
||||
cp -v $PROJECT_HOME/java/target/configuration/mail.properties configuration/
|
||||
cp -v $PROJECT_HOME/configuration/mongodb.cfg $ACDIR/
|
||||
cp -v $PROJECT_HOME/java/target/udpmirror $ACDIR/
|
||||
cp -v $PROJECT_HOME/java/target/http2udpmirror $ACDIR
|
||||
@@ -535,7 +537,7 @@ if [[ "$@" == "build" ]] || [[ "$@" == "all" ]]; then
|
||||
fi
|
||||
|
||||
cd $PROJECT_HOME/java
|
||||
if [ $gwtcompile -eq 1 ]; then
|
||||
if [ $gwtcompile -eq 1 ] && [[ "$clean" == "clean" ]]; then
|
||||
echo "INFO: Compiling GWT (rm -rf com.sap.$PROJECT_TYPE.gwt.ui/com.sap.$PROJECT_TYPE.*)"
|
||||
rm -rf com.sap.$PROJECT_TYPE.gwt.ui/com.sap.$PROJECT_TYPE.*
|
||||
GWT_XML_FILES=`find com.sap.$PROJECT_TYPE.gwt.ui/src/main/resources -name '*.gwt.xml'`
|
||||
@@ -587,6 +589,11 @@ if [[ "$@" == "build" ]] || [[ "$@" == "all" ]]; then
|
||||
else
|
||||
extra="$extra -DskipTests=false"
|
||||
# TODO: Think about http://maven.apache.org/surefire/maven-surefire-plugin/examples/fork-options-and-parallel-execution.html
|
||||
if [[ "$TESTCASE_TO_EXECUTE" != "" ]]; then
|
||||
# http://maven.apache.org/surefire/maven-surefire-plugin/examples/single-test.html
|
||||
echo "Running only testcase $TESTCASE_TO_EXECUTE"
|
||||
extra="$extra -Dtest=$TESTCASE_TO_EXECUTE"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ $android -eq 0 ] && [ $gwtcompile -eq 0 ] && [ $testing -eq 0 ]; then
|
||||
@@ -728,7 +735,7 @@ if [[ "$@" == "install" ]] || [[ "$@" == "all" ]]; then
|
||||
if [ ! -f "$ACDIR/env.sh" ]; then
|
||||
cp -v $PROJECT_HOME/java/target/env.sh $ACDIR/
|
||||
cp -v $PROJECT_HOME/java/target/configuration/monitoring.properties $ACDIR/configuration/
|
||||
cp -v $PROJECT_HOME/java/target/configuration/security.properties $ACDIR/configuration/
|
||||
cp -v $PROJECT_HOME/java/target/configuration/mail.properties $ACDIR/configuration/
|
||||
cp -v $PROJECT_HOME/java/target/configuration/logging.properties $ACDIR/configuration/
|
||||
fi
|
||||
|
||||
@@ -809,7 +816,7 @@ if [[ "$@" == "remote-deploy" ]]; then
|
||||
$SCP_CMD $PROJECT_HOME/java/target/configuration/jetty/etc/jetty-deployer.xml $REMOTE_SERVER_LOGIN:$REMOTE_SERVER/configuration/jetty/etc
|
||||
$SCP_CMD $PROJECT_HOME/java/target/configuration/jetty/etc/realm.properties $REMOTE_SERVER_LOGIN:$REMOTE_SERVER/configuration/jetty/etc
|
||||
$SCP_CMD $PROJECT_HOME/java/target/configuration/monitoring.properties $REMOTE_SERVER_LOGIN:$REMOTE_SERVER/configuration/
|
||||
$SCP_CMD $PROJECT_HOME/java/target/configuration/security.properties $REMOTE_SERVER_LOGIN:$REMOTE_SERVER/configuration/
|
||||
$SCP_CMD $PROJECT_HOME/java/target/configuration/mail.properties $REMOTE_SERVER_LOGIN:$REMOTE_SERVER/configuration/
|
||||
|
||||
$SCP_CMD $PROJECT_HOME/java/target/env.sh $REMOTE_SERVER_LOGIN:$REMOTE_SERVER/
|
||||
$SCP_CMD $PROJECT_HOME/java/target/start $REMOTE_SERVER_LOGIN:$REMOTE_SERVER/
|
||||
|
||||
@@ -1,95 +1,95 @@
|
||||
Manifest-Version: 1.0
|
||||
Bundle-ManifestVersion: 2
|
||||
Bundle-Name: mgwt
|
||||
Bundle-SymbolicName: com.googlecode.mgwt
|
||||
Bundle-Version: 2.0.0.qualifier
|
||||
Bundle-Vendor: GOOGLE
|
||||
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
|
||||
Bundle-ClassPath: lib/mgwt-2.0.0.jar,
|
||||
.
|
||||
Export-Package: com.googlecode.mgwt.collection.client,
|
||||
com.googlecode.mgwt.collection.shared,
|
||||
com.googlecode.mgwt.collection.shared.java,
|
||||
com.googlecode.mgwt.css.client.updater,
|
||||
com.googlecode.mgwt.css.rebind,
|
||||
com.googlecode.mgwt.dom.client.event.animation,
|
||||
com.googlecode.mgwt.dom.client.event.mouse,
|
||||
com.googlecode.mgwt.dom.client.event.orientation,
|
||||
com.googlecode.mgwt.dom.client.event.tap,
|
||||
com.googlecode.mgwt.dom.client.event.touch,
|
||||
com.googlecode.mgwt.dom.client.recognizer,
|
||||
com.googlecode.mgwt.dom.client.recognizer.longtap,
|
||||
com.googlecode.mgwt.dom.client.recognizer.pinch,
|
||||
com.googlecode.mgwt.dom.client.recognizer.swipe,
|
||||
com.googlecode.mgwt.dom.client.recognizer.tap,
|
||||
com.googlecode.mgwt.image.client,
|
||||
com.googlecode.mgwt.linker.client.cache,
|
||||
com.googlecode.mgwt.linker.client.cache.event,
|
||||
com.googlecode.mgwt.linker.client.cache.html5,
|
||||
com.googlecode.mgwt.linker.linker,
|
||||
com.googlecode.mgwt.linker.server,
|
||||
com.googlecode.mgwt.linker.server.propertyprovider,
|
||||
com.googlecode.mgwt.mvp.client,
|
||||
com.googlecode.mgwt.mvp.client.history,
|
||||
com.googlecode.mgwt.ui.client,
|
||||
com.googlecode.mgwt.ui.client.animation,
|
||||
com.googlecode.mgwt.ui.client.editor,
|
||||
com.googlecode.mgwt.ui.client.theme.platform.button,
|
||||
com.googlecode.mgwt.ui.client.theme.platform.buttonbar,
|
||||
com.googlecode.mgwt.ui.client.theme.platform.carousel,
|
||||
com.googlecode.mgwt.ui.client.theme.platform.dialog.options,
|
||||
com.googlecode.mgwt.ui.client.theme.platform.dialog.panel,
|
||||
com.googlecode.mgwt.ui.client.theme.platform.form,
|
||||
com.googlecode.mgwt.ui.client.theme.platform.header,
|
||||
com.googlecode.mgwt.ui.client.theme.platform.input,
|
||||
com.googlecode.mgwt.ui.client.theme.platform.input.checkbox,
|
||||
com.googlecode.mgwt.ui.client.theme.platform.input.listbox,
|
||||
com.googlecode.mgwt.ui.client.theme.platform.input.radio,
|
||||
com.googlecode.mgwt.ui.client.theme.platform.input.search,
|
||||
com.googlecode.mgwt.ui.client.theme.platform.input.slider,
|
||||
com.googlecode.mgwt.ui.client.theme.platform.list.celllist,
|
||||
com.googlecode.mgwt.ui.client.theme.platform.list.widgetlist,
|
||||
com.googlecode.mgwt.ui.client.theme.platform.main,
|
||||
com.googlecode.mgwt.ui.client.theme.platform.panel,
|
||||
com.googlecode.mgwt.ui.client.theme.platform.panel.pull,
|
||||
com.googlecode.mgwt.ui.client.theme.platform.progress,
|
||||
com.googlecode.mgwt.ui.client.theme.platform.tabbar,
|
||||
com.googlecode.mgwt.ui.client.util,
|
||||
com.googlecode.mgwt.ui.client.util.impl,
|
||||
com.googlecode.mgwt.ui.client.widget.animation,
|
||||
com.googlecode.mgwt.ui.client.widget.animation.bundle,
|
||||
com.googlecode.mgwt.ui.client.widget.animation.impl,
|
||||
com.googlecode.mgwt.ui.client.widget.base,
|
||||
com.googlecode.mgwt.ui.client.widget.button,
|
||||
com.googlecode.mgwt.ui.client.widget.button.image,
|
||||
com.googlecode.mgwt.ui.client.widget.buttonbar,
|
||||
com.googlecode.mgwt.ui.client.widget.carousel,
|
||||
com.googlecode.mgwt.ui.client.widget.dialog,
|
||||
com.googlecode.mgwt.ui.client.widget.dialog.options,
|
||||
com.googlecode.mgwt.ui.client.widget.dialog.overlay,
|
||||
com.googlecode.mgwt.ui.client.widget.dialog.panel,
|
||||
com.googlecode.mgwt.ui.client.widget.form,
|
||||
com.googlecode.mgwt.ui.client.widget.header,
|
||||
com.googlecode.mgwt.ui.client.widget.image,
|
||||
com.googlecode.mgwt.ui.client.widget.input,
|
||||
com.googlecode.mgwt.ui.client.widget.input.checkbox,
|
||||
com.googlecode.mgwt.ui.client.widget.input.listbox,
|
||||
com.googlecode.mgwt.ui.client.widget.input.radio,
|
||||
com.googlecode.mgwt.ui.client.widget.input.search,
|
||||
com.googlecode.mgwt.ui.client.widget.input.slider,
|
||||
com.googlecode.mgwt.ui.client.widget.list.celllist,
|
||||
com.googlecode.mgwt.ui.client.widget.list.widgetlist,
|
||||
com.googlecode.mgwt.ui.client.widget.main,
|
||||
com.googlecode.mgwt.ui.client.widget.menu.overlay,
|
||||
com.googlecode.mgwt.ui.client.widget.menu.swipe,
|
||||
com.googlecode.mgwt.ui.client.widget.panel,
|
||||
com.googlecode.mgwt.ui.client.widget.panel.flex,
|
||||
com.googlecode.mgwt.ui.client.widget.panel.pull,
|
||||
com.googlecode.mgwt.ui.client.widget.panel.scroll,
|
||||
com.googlecode.mgwt.ui.client.widget.panel.scroll.impl,
|
||||
com.googlecode.mgwt.ui.client.widget.progress,
|
||||
com.googlecode.mgwt.ui.client.widget.tabbar,
|
||||
com.googlecode.mgwt.ui.client.widget.tabbar.resources,
|
||||
com.googlecode.mgwt.ui.client.widget.touch,
|
||||
com.googlecode.mgwt.ui.generator,
|
||||
com.googlecode.mgwt.ui.server.util
|
||||
Manifest-Version: 1.0
|
||||
Bundle-ManifestVersion: 2
|
||||
Bundle-Name: mgwt
|
||||
Bundle-SymbolicName: com.googlecode.mgwt
|
||||
Bundle-Version: 2.0.0.qualifier
|
||||
Bundle-Vendor: GOOGLE
|
||||
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
|
||||
Bundle-ClassPath: lib/mgwt-2.0.0.jar,
|
||||
.
|
||||
Export-Package: com.googlecode.mgwt.collection.client,
|
||||
com.googlecode.mgwt.collection.shared,
|
||||
com.googlecode.mgwt.collection.shared.java,
|
||||
com.googlecode.mgwt.css.client.updater,
|
||||
com.googlecode.mgwt.css.rebind,
|
||||
com.googlecode.mgwt.dom.client.event.animation,
|
||||
com.googlecode.mgwt.dom.client.event.mouse,
|
||||
com.googlecode.mgwt.dom.client.event.orientation,
|
||||
com.googlecode.mgwt.dom.client.event.tap,
|
||||
com.googlecode.mgwt.dom.client.event.touch,
|
||||
com.googlecode.mgwt.dom.client.recognizer,
|
||||
com.googlecode.mgwt.dom.client.recognizer.longtap,
|
||||
com.googlecode.mgwt.dom.client.recognizer.pinch,
|
||||
com.googlecode.mgwt.dom.client.recognizer.swipe,
|
||||
com.googlecode.mgwt.dom.client.recognizer.tap,
|
||||
com.googlecode.mgwt.image.client,
|
||||
com.googlecode.mgwt.linker.client.cache,
|
||||
com.googlecode.mgwt.linker.client.cache.event,
|
||||
com.googlecode.mgwt.linker.client.cache.html5,
|
||||
com.googlecode.mgwt.linker.linker,
|
||||
com.googlecode.mgwt.linker.server,
|
||||
com.googlecode.mgwt.linker.server.propertyprovider,
|
||||
com.googlecode.mgwt.mvp.client,
|
||||
com.googlecode.mgwt.mvp.client.history,
|
||||
com.googlecode.mgwt.ui.client,
|
||||
com.googlecode.mgwt.ui.client.animation,
|
||||
com.googlecode.mgwt.ui.client.editor,
|
||||
com.googlecode.mgwt.ui.client.theme.platform.button,
|
||||
com.googlecode.mgwt.ui.client.theme.platform.buttonbar,
|
||||
com.googlecode.mgwt.ui.client.theme.platform.carousel,
|
||||
com.googlecode.mgwt.ui.client.theme.platform.dialog.options,
|
||||
com.googlecode.mgwt.ui.client.theme.platform.dialog.panel,
|
||||
com.googlecode.mgwt.ui.client.theme.platform.form,
|
||||
com.googlecode.mgwt.ui.client.theme.platform.header,
|
||||
com.googlecode.mgwt.ui.client.theme.platform.input,
|
||||
com.googlecode.mgwt.ui.client.theme.platform.input.checkbox,
|
||||
com.googlecode.mgwt.ui.client.theme.platform.input.listbox,
|
||||
com.googlecode.mgwt.ui.client.theme.platform.input.radio,
|
||||
com.googlecode.mgwt.ui.client.theme.platform.input.search,
|
||||
com.googlecode.mgwt.ui.client.theme.platform.input.slider,
|
||||
com.googlecode.mgwt.ui.client.theme.platform.list.celllist,
|
||||
com.googlecode.mgwt.ui.client.theme.platform.list.widgetlist,
|
||||
com.googlecode.mgwt.ui.client.theme.platform.main,
|
||||
com.googlecode.mgwt.ui.client.theme.platform.panel,
|
||||
com.googlecode.mgwt.ui.client.theme.platform.panel.pull,
|
||||
com.googlecode.mgwt.ui.client.theme.platform.progress,
|
||||
com.googlecode.mgwt.ui.client.theme.platform.tabbar,
|
||||
com.googlecode.mgwt.ui.client.util,
|
||||
com.googlecode.mgwt.ui.client.util.impl,
|
||||
com.googlecode.mgwt.ui.client.widget.animation,
|
||||
com.googlecode.mgwt.ui.client.widget.animation.bundle,
|
||||
com.googlecode.mgwt.ui.client.widget.animation.impl,
|
||||
com.googlecode.mgwt.ui.client.widget.base,
|
||||
com.googlecode.mgwt.ui.client.widget.button,
|
||||
com.googlecode.mgwt.ui.client.widget.button.image,
|
||||
com.googlecode.mgwt.ui.client.widget.buttonbar,
|
||||
com.googlecode.mgwt.ui.client.widget.carousel,
|
||||
com.googlecode.mgwt.ui.client.widget.dialog,
|
||||
com.googlecode.mgwt.ui.client.widget.dialog.options,
|
||||
com.googlecode.mgwt.ui.client.widget.dialog.overlay,
|
||||
com.googlecode.mgwt.ui.client.widget.dialog.panel,
|
||||
com.googlecode.mgwt.ui.client.widget.form,
|
||||
com.googlecode.mgwt.ui.client.widget.header,
|
||||
com.googlecode.mgwt.ui.client.widget.image,
|
||||
com.googlecode.mgwt.ui.client.widget.input,
|
||||
com.googlecode.mgwt.ui.client.widget.input.checkbox,
|
||||
com.googlecode.mgwt.ui.client.widget.input.listbox,
|
||||
com.googlecode.mgwt.ui.client.widget.input.radio,
|
||||
com.googlecode.mgwt.ui.client.widget.input.search,
|
||||
com.googlecode.mgwt.ui.client.widget.input.slider,
|
||||
com.googlecode.mgwt.ui.client.widget.list.celllist,
|
||||
com.googlecode.mgwt.ui.client.widget.list.widgetlist,
|
||||
com.googlecode.mgwt.ui.client.widget.main,
|
||||
com.googlecode.mgwt.ui.client.widget.menu.overlay,
|
||||
com.googlecode.mgwt.ui.client.widget.menu.swipe,
|
||||
com.googlecode.mgwt.ui.client.widget.panel,
|
||||
com.googlecode.mgwt.ui.client.widget.panel.flex,
|
||||
com.googlecode.mgwt.ui.client.widget.panel.pull,
|
||||
com.googlecode.mgwt.ui.client.widget.panel.scroll,
|
||||
com.googlecode.mgwt.ui.client.widget.panel.scroll.impl,
|
||||
com.googlecode.mgwt.ui.client.widget.progress,
|
||||
com.googlecode.mgwt.ui.client.widget.tabbar,
|
||||
com.googlecode.mgwt.ui.client.widget.tabbar.resources,
|
||||
com.googlecode.mgwt.ui.client.widget.touch,
|
||||
com.googlecode.mgwt.ui.generator,
|
||||
com.googlecode.mgwt.ui.server.util
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
bin/
|
||||
@@ -1,5 +0,0 @@
|
||||
#Fri Jul 29 09:33:56 CEST 2011
|
||||
activeProfiles=
|
||||
eclipse.preferences.version=1
|
||||
resolveWorkspaceProjects=true
|
||||
version=1
|
||||
@@ -1,18 +0,0 @@
|
||||
Manifest-Version: 1.0
|
||||
Bundle-ManifestVersion: 2
|
||||
Bundle-Name: Driver
|
||||
Bundle-SymbolicName: com.mongodb.driver
|
||||
Bundle-Version: 2.6.2
|
||||
Bundle-Vendor: MONGODB
|
||||
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
|
||||
Bundle-ActivationPolicy: lazy
|
||||
Bundle-ClassPath: lib/mongo-2.6.2.jar,
|
||||
.
|
||||
Export-Package: com.mongodb,
|
||||
com.mongodb.gridfs,
|
||||
com.mongodb.io,
|
||||
com.mongodb.util,
|
||||
org.bson,
|
||||
org.bson.io,
|
||||
org.bson.types,
|
||||
org.bson.util
|
||||
@@ -1,3 +0,0 @@
|
||||
bin.includes = META-INF/,\
|
||||
.,\
|
||||
lib/mongo-2.6.2.jar
|
||||
|
Before Width: | Height: | Size: 6.1 KiB After Width: | Height: | Size: 6.1 KiB |
|
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 36 KiB |
|
Before Width: | Height: | Size: 9.8 KiB After Width: | Height: | Size: 9.8 KiB |
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 585 B After Width: | Height: | Size: 585 B |
|
Before Width: | Height: | Size: 6.9 KiB After Width: | Height: | Size: 6.9 KiB |
|
Before Width: | Height: | Size: 64 KiB After Width: | Height: | Size: 64 KiB |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 626 B After Width: | Height: | Size: 626 B |
|
Before Width: | Height: | Size: 416 B After Width: | Height: | Size: 416 B |
|
Before Width: | Height: | Size: 4.8 KiB After Width: | Height: | Size: 4.8 KiB |
|
Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 3.5 KiB |
@@ -1,25 +1,25 @@
|
||||
Manifest-Version: 1.0
|
||||
Bundle-ManifestVersion: 2
|
||||
Bundle-Name: SAP Sailing Common
|
||||
Bundle-SymbolicName: com.sap.sailing.domain.common
|
||||
Bundle-Version: 1.0.0.qualifier
|
||||
Bundle-Vendor: SAP
|
||||
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
|
||||
Bundle-ActivationPolicy: lazy
|
||||
Export-Package: com.sap.sailing.domain.common,
|
||||
com.sap.sailing.domain.common.abstractlog,
|
||||
com.sap.sailing.domain.common.confidence,
|
||||
com.sap.sailing.domain.common.confidence.impl,
|
||||
com.sap.sailing.domain.common.configuration,
|
||||
com.sap.sailing.domain.common.dto,
|
||||
com.sap.sailing.domain.common.impl,
|
||||
com.sap.sailing.domain.common.media,
|
||||
com.sap.sailing.domain.common.quadtree,
|
||||
com.sap.sailing.domain.common.quadtree.impl;x-friends:="com.sap.sailing.domain.test",
|
||||
com.sap.sailing.domain.common.racelog,
|
||||
com.sap.sailing.domain.common.racelog.tracking,
|
||||
com.sap.sailing.domain.common.racelog.utils,
|
||||
com.sap.sailing.domain.common.scalablevalue.impl,
|
||||
com.sap.sailing.domain.common.trackfiles
|
||||
Require-Bundle: com.sap.sse.datamining.shared,
|
||||
com.sap.sse.common
|
||||
Manifest-Version: 1.0
|
||||
Bundle-ManifestVersion: 2
|
||||
Bundle-Name: SAP Sailing Common
|
||||
Bundle-SymbolicName: com.sap.sailing.domain.common
|
||||
Bundle-Version: 1.0.0.qualifier
|
||||
Bundle-Vendor: SAP
|
||||
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
|
||||
Bundle-ActivationPolicy: lazy
|
||||
Export-Package: com.sap.sailing.domain.common,
|
||||
com.sap.sailing.domain.common.abstractlog,
|
||||
com.sap.sailing.domain.common.confidence,
|
||||
com.sap.sailing.domain.common.confidence.impl,
|
||||
com.sap.sailing.domain.common.configuration,
|
||||
com.sap.sailing.domain.common.dto,
|
||||
com.sap.sailing.domain.common.impl,
|
||||
com.sap.sailing.domain.common.media,
|
||||
com.sap.sailing.domain.common.quadtree,
|
||||
com.sap.sailing.domain.common.quadtree.impl;x-friends:="com.sap.sailing.domain.test",
|
||||
com.sap.sailing.domain.common.racelog,
|
||||
com.sap.sailing.domain.common.racelog.tracking,
|
||||
com.sap.sailing.domain.common.racelog.utils,
|
||||
com.sap.sailing.domain.common.scalablevalue.impl,
|
||||
com.sap.sailing.domain.common.trackfiles
|
||||
Require-Bundle: com.sap.sse.datamining.shared,
|
||||
com.sap.sse.common
|
||||
|
||||
@@ -22,6 +22,10 @@ public interface CompetitorDTO extends Serializable, MappableToDevice {
|
||||
String getName();
|
||||
|
||||
Color getColor();
|
||||
|
||||
String getEmail();
|
||||
|
||||
boolean hasEmail();
|
||||
|
||||
/**
|
||||
* A regular instance will simply return this object. A compacted version may compute the result by looking it up
|
||||
|
||||
@@ -19,16 +19,18 @@ public class CompetitorDTOImpl extends NamedDTO implements CompetitorDTO, Serial
|
||||
private String twoLetterIsoCountryCode;
|
||||
private String threeLetterIocCountryCode;
|
||||
private Color color;
|
||||
private String email;
|
||||
private String sailID;
|
||||
private String idAsString;
|
||||
private BoatClassDTO boatClass;
|
||||
|
||||
public CompetitorDTOImpl() {}
|
||||
|
||||
public CompetitorDTOImpl(String name, Color color, String twoLetterIsoCountryCode, String threeLetterIocCountryCode,
|
||||
public CompetitorDTOImpl(String name, Color color, String email, String twoLetterIsoCountryCode, String threeLetterIocCountryCode,
|
||||
String countryName, String sailID, String idAsString, BoatClassDTO boatClass) {
|
||||
super(name);
|
||||
this.color = color;
|
||||
this.email = email;
|
||||
this.twoLetterIsoCountryCode = twoLetterIsoCountryCode;
|
||||
this.threeLetterIocCountryCode = threeLetterIocCountryCode;
|
||||
this.countryName = countryName;
|
||||
@@ -45,6 +47,7 @@ public class CompetitorDTOImpl extends NamedDTO implements CompetitorDTO, Serial
|
||||
result = prime * result + ((idAsString == null) ? 0 : idAsString.hashCode());
|
||||
result = prime * result + ((sailID == null) ? 0 : sailID.hashCode());
|
||||
result = prime * result + ((color == null) ? 0 : color.hashCode());
|
||||
result = prime * result + ((email == null) ? 0 : email.hashCode());
|
||||
result = prime * result + ((threeLetterIocCountryCode == null) ? 0 : threeLetterIocCountryCode.hashCode());
|
||||
return result;
|
||||
}
|
||||
@@ -83,6 +86,11 @@ public class CompetitorDTOImpl extends NamedDTO implements CompetitorDTO, Serial
|
||||
return false;
|
||||
} else if (!color.equals(other.color))
|
||||
return false;
|
||||
if (email == null) {
|
||||
if (other.email != null)
|
||||
return false;
|
||||
} else if (!email.equals(other.email))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -124,4 +132,17 @@ public class CompetitorDTOImpl extends NamedDTO implements CompetitorDTO, Serial
|
||||
public Color getColor() {
|
||||
return color;
|
||||
}
|
||||
|
||||
public String getEmail() {
|
||||
return email;
|
||||
}
|
||||
|
||||
public String email(){
|
||||
return email;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasEmail() {
|
||||
return email != null && !email.isEmpty();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -92,9 +92,20 @@ public class PreviousCompetitorDTOImpl implements CompetitorDTO {
|
||||
throw new RuntimeException("Internal error. Objects of type "+PreviousCompetitorDTOImpl.class.getName()+
|
||||
" need to be replaced by an object of "+CompetitorDTOImpl.class.getName()+" after deserialization");
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getEmail() {
|
||||
throw new RuntimeException("Internal error. Objects of type "+PreviousCompetitorDTOImpl.class.getName()+
|
||||
" need to be replaced by an object of "+CompetitorDTOImpl.class.getName()+" after deserialization");
|
||||
}
|
||||
|
||||
@Override
|
||||
public CompetitorDTO getCompetitorFromPrevious(LeaderboardDTO previousVersion) {
|
||||
return previousVersion.competitors.get(indexInPreviousCompetitorList);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasEmail() {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,8 @@
|
||||
package com.sap.sailing.domain.common.racelog.tracking;
|
||||
|
||||
import com.sap.sailing.domain.common.racelog.RaceLogServletConstants;
|
||||
import com.sap.sse.common.util.UrlHelper;
|
||||
|
||||
/**
|
||||
* Shared between GWT and Android. Used for creating and deciphering the URL encoded by the QRCode, which gives the
|
||||
* tracking app all necessary information for creating the device mapping of either the race or leaderboard/regatta.
|
||||
@@ -13,28 +16,50 @@ package com.sap.sailing.domain.common.racelog.tracking;
|
||||
*
|
||||
* @author Fredrik Teschke
|
||||
*/
|
||||
public interface DeviceMappingConstants {
|
||||
public class DeviceMappingConstants {
|
||||
// According to the HTTP protocol definition (http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.2.3), only
|
||||
// schema and host are case insensitive.
|
||||
// But to adhere to best practices, and due to the deficiencies of some web servers and clients,
|
||||
// all URL components should be treated as case insensitive, preferring _underscores_ to CamelCase.
|
||||
static final String URL_BASE = "/tracking/checkin";
|
||||
static final String URL_EVENT_ID = "event_id";
|
||||
static final String URL_LEADERBOARD_NAME = "leaderboard_name";
|
||||
static final String URL_COMPETITOR_ID_AS_STRING = "competitor_id";
|
||||
static final String URL_MARK_ID_AS_STRING = "mark_id";
|
||||
static final String URL_FROM_MILLIS = "from_millis";
|
||||
static final String URL_TO_MILLIS = "to_millis";
|
||||
public static final String URL_BASE = "/tracking/checkin";
|
||||
public static final String URL_EVENT_ID = "event_id";
|
||||
public static final String URL_LEADERBOARD_NAME = "leaderboard_name";
|
||||
public static final String URL_COMPETITOR_ID_AS_STRING = "competitor_id";
|
||||
public static final String URL_MARK_ID_AS_STRING = "mark_id";
|
||||
public static final String URL_FROM_MILLIS = "from_millis";
|
||||
public static final String URL_TO_MILLIS = "to_millis";
|
||||
|
||||
static final String JSON_COMPETITOR_ID_AS_STRING = "competitorId";
|
||||
static final String JSON_MARK_ID_AS_STRING = "markId";
|
||||
static final String JSON_DEVICE_UUID = "deviceUuid";
|
||||
static final String JSON_DEVICE_TYPE = "deviceType";
|
||||
static final String JSON_PUSH_DEVICE_ID = "pushDeviceId";
|
||||
static final String JSON_FROM_MILLIS = "fromMillis";
|
||||
static final String JSON_TO_MILLIS = "toMillis";
|
||||
static final String JSON_TEAM_IMAGE_URI = "teamImageUri";
|
||||
public static final String JSON_COMPETITOR_ID_AS_STRING = "competitorId";
|
||||
public static final String JSON_MARK_ID_AS_STRING = "markId";
|
||||
public static final String JSON_DEVICE_UUID = "deviceUuid";
|
||||
public static final String JSON_DEVICE_TYPE = "deviceType";
|
||||
public static final String JSON_PUSH_DEVICE_ID = "pushDeviceId";
|
||||
public static final String JSON_FROM_MILLIS = "fromMillis";
|
||||
public static final String JSON_TO_MILLIS = "toMillis";
|
||||
public static final String JSON_TEAM_IMAGE_URI = "teamImageUri";
|
||||
|
||||
@Deprecated
|
||||
static final String APK_PATH = "/apps/com.sap.sailing.android.tracking.app.apk";
|
||||
|
||||
public static String getDeviceMappingForRegattaLogUrl(String serverUrlWithoutTrailingSlash, String eventId,
|
||||
String leaderboardName, String mappedItemType, String mappedItemId, UrlHelper helper) {
|
||||
return helper.encodeUrl(serverUrlWithoutTrailingSlash + URL_BASE + "?" + URL_EVENT_ID + "=" + eventId + "&"
|
||||
+ URL_LEADERBOARD_NAME + "=" + leaderboardName + "&" + mappedItemType + "="
|
||||
+ mappedItemId);
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public static String getDeviceMappingForRaceLogUrl(String serverUrlWithoutTrailingSlash, String leaderboardName,
|
||||
String raceColumnName, String fleetName, String mappedItemType, String mappedItemId, long fromMillis,
|
||||
long toMillis, UrlHelper helper) throws QRCodeURLCreationException {
|
||||
if (fromMillis > toMillis) {
|
||||
throw new QRCodeURLCreationException("from can't lie after to");
|
||||
}
|
||||
return helper.encodeUrl(serverUrlWithoutTrailingSlash + DeviceMappingConstants.APK_PATH + "?"
|
||||
+ RaceLogServletConstants.PARAMS_LEADERBOARD_NAME + "=" + leaderboardName + "&"
|
||||
+ RaceLogServletConstants.PARAMS_RACE_COLUMN_NAME + "=" + raceColumnName + "&"
|
||||
+ RaceLogServletConstants.PARAMS_RACE_FLEET_NAME + "=" + fleetName + "&" + mappedItemType + "="
|
||||
+ mappedItemId + "&" + DeviceMappingConstants.URL_FROM_MILLIS + "=" + fromMillis + "&"
|
||||
+ DeviceMappingConstants.URL_TO_MILLIS + "=" + toMillis);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
package com.sap.sailing.domain.common.racelog.tracking;
|
||||
|
||||
public class QRCodeURLCreationException extends Exception {
|
||||
private static final long serialVersionUID = -8243995470804772458L;
|
||||
|
||||
public QRCodeURLCreationException(String message) {
|
||||
super(message);
|
||||
}
|
||||
}
|
||||
@@ -6,7 +6,7 @@ Bundle-Version: 1.0.0.qualifier
|
||||
Bundle-Vendor: SAP
|
||||
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
|
||||
Require-Bundle: com.sap.sse.mongodb,
|
||||
com.mongodb.driver;bundle-version="2.6.2"
|
||||
org.mongodb.mongo-java-driver;bundle-version="2.13.0"
|
||||
Export-Package: com.sap.sailing.domain.igtimiadapter.persistence
|
||||
Import-Package: org.osgi.framework
|
||||
Bundle-Activator: com.sap.sailing.domain.igtimiadapter.persistence.impl.Activator
|
||||
|
||||
@@ -19,7 +19,7 @@ public class DomainObjectFactoryImpl implements DomainObjectFactory {
|
||||
public Iterable<String> getAccessTokens() {
|
||||
List<String> result = new ArrayList<>();
|
||||
final DBCollection accessTokenCollection = db.getCollection(CollectionNames.IGTIMI_ACCESS_TOKENS.name());
|
||||
accessTokenCollection.ensureIndex(new BasicDBObject(FieldNames.IGTIMI_ACCESS_TOKENS_ACCESS_TOKEN.name(), 1));
|
||||
accessTokenCollection.createIndex(new BasicDBObject(FieldNames.IGTIMI_ACCESS_TOKENS_ACCESS_TOKEN.name(), 1));
|
||||
for (Object o : accessTokenCollection.find()) {
|
||||
result.add((String) ((DBObject) o).get(FieldNames.IGTIMI_ACCESS_TOKENS_ACCESS_TOKEN.name()));
|
||||
}
|
||||
|
||||
@@ -27,7 +27,8 @@ Import-Package: javax.ws.rs;version="1.1.1",
|
||||
org.eclipse.jetty.websocket.api.extensions;version="9.0.0",
|
||||
org.eclipse.jetty.websocket.client;version="9.0.0",
|
||||
org.eclipse.jetty.websocket.common;version="9.0.0",
|
||||
org.osgi.framework;version="1.7.0"
|
||||
org.osgi.framework;version="1.7.0",
|
||||
org.codehaus.jackson.jaxrs;version="1.9.13"
|
||||
Web-ContextPath: /igtimi
|
||||
Bundle-Activator: com.sap.sailing.domain.igtimiadapter.impl.Activator
|
||||
Export-Package: com.sap.sailing.domain.igtimiadapter,
|
||||
|
||||
@@ -8,7 +8,7 @@ Bundle-RequiredExecutionEnvironment: JavaSE-1.8
|
||||
Bundle-Activator: com.sap.sailing.domain.persistence.impl.Activator
|
||||
Require-Bundle: com.sap.sse.mongodb,
|
||||
com.sap.sailing.domain,
|
||||
com.mongodb.driver;bundle-version="2.6.2",
|
||||
org.mongodb.mongo-java-driver;bundle-version="2.13.0",
|
||||
com.sap.sailing.domain.common,
|
||||
com.sap.sailing.domain.shared.android,
|
||||
com.sap.sailing.server.gateway.serialization,
|
||||
|
||||
@@ -277,14 +277,14 @@ public class DomainObjectFactoryImpl implements DomainObjectFactory {
|
||||
}
|
||||
|
||||
private void ensureIndicesOnWindTracks(DBCollection windTracks) {
|
||||
windTracks.ensureIndex(FieldNames.RACE_ID.name()); // for new programmatic access
|
||||
windTracks.ensureIndex(FieldNames.REGATTA_NAME.name()); // for export or human look-up
|
||||
windTracks.createIndex(new BasicDBObject(FieldNames.RACE_ID.name(), 1)); // for new programmatic access
|
||||
windTracks.createIndex(new BasicDBObject(FieldNames.REGATTA_NAME.name(), 1)); // for export or human look-up
|
||||
// for legacy access to not yet migrated fixes
|
||||
windTracks.ensureIndex(new BasicDBObjectBuilder().add(FieldNames.EVENT_NAME.name(), 1)
|
||||
windTracks.createIndex(new BasicDBObjectBuilder().add(FieldNames.EVENT_NAME.name(), 1)
|
||||
.add(FieldNames.RACE_NAME.name(), 1).get());
|
||||
// Unique index
|
||||
try {
|
||||
windTracks.ensureIndex(
|
||||
windTracks.createIndex(
|
||||
new BasicDBObjectBuilder().add(FieldNames.RACE_ID.name(), 1)
|
||||
.add(FieldNames.WIND_SOURCE_NAME.name(), 1).add(FieldNames.WIND_SOURCE_ID.name(), 1)
|
||||
.add(FieldNames.WIND.name() + "." + FieldNames.TIME_AS_MILLIS.name(), 1).get(),
|
||||
|
||||
@@ -201,7 +201,7 @@ public class MongoObjectFactoryImpl implements MongoObjectFactory {
|
||||
|
||||
public DBCollection getWindTrackCollection() {
|
||||
DBCollection result = database.getCollection(CollectionNames.WIND_TRACKS.name());
|
||||
result.ensureIndex(new BasicDBObject(FieldNames.REGATTA_NAME.name(), null));
|
||||
result.createIndex(new BasicDBObject(FieldNames.REGATTA_NAME.name(), null));
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -210,7 +210,7 @@ public class MongoObjectFactoryImpl implements MongoObjectFactory {
|
||||
DBObject index = new BasicDBObject();
|
||||
index.put(FieldNames.DEVICE_ID.name(), null);
|
||||
index.put(FieldNames.TIME_AS_MILLIS.name(), null);
|
||||
gpsFixCollection.ensureIndex(index);
|
||||
gpsFixCollection.createIndex(index);
|
||||
return gpsFixCollection;
|
||||
}
|
||||
|
||||
@@ -218,7 +218,7 @@ public class MongoObjectFactoryImpl implements MongoObjectFactory {
|
||||
DBCollection collection = database.getCollection(CollectionNames.GPS_FIXES_METADATA.name());
|
||||
DBObject index = new BasicDBObject();
|
||||
index.put(FieldNames.DEVICE_ID.name(), null);
|
||||
collection.ensureIndex(index);
|
||||
collection.createIndex(index);
|
||||
return collection;
|
||||
}
|
||||
|
||||
@@ -263,7 +263,7 @@ public class MongoObjectFactoryImpl implements MongoObjectFactory {
|
||||
public void storeLeaderboard(Leaderboard leaderboard) {
|
||||
DBCollection leaderboardCollection = database.getCollection(CollectionNames.LEADERBOARDS.name());
|
||||
try {
|
||||
leaderboardCollection.ensureIndex(FieldNames.LEADERBOARD_NAME.name());
|
||||
leaderboardCollection.createIndex(new BasicDBObject(FieldNames.LEADERBOARD_NAME.name(), 1));
|
||||
} catch (NullPointerException npe) {
|
||||
// sometimes, for reasons yet to be clarified, ensuring an index on the name field causes an NPE
|
||||
logger.log(Level.SEVERE, "storeLeaderboard", npe);
|
||||
@@ -438,7 +438,7 @@ public class MongoObjectFactoryImpl implements MongoObjectFactory {
|
||||
DBCollection leaderboardCollection = database.getCollection(CollectionNames.LEADERBOARDS.name());
|
||||
|
||||
try {
|
||||
leaderboardGroupCollection.ensureIndex(FieldNames.LEADERBOARD_GROUP_NAME.name());
|
||||
leaderboardGroupCollection.createIndex(new BasicDBObject(FieldNames.LEADERBOARD_GROUP_NAME.name(), 1));
|
||||
} catch (NullPointerException npe) {
|
||||
// sometimes, for reasons yet to be clarified, ensuring an index on the name field causes an NPE
|
||||
logger.log(Level.SEVERE, "storeLeaderboardGroup", npe);
|
||||
@@ -494,7 +494,7 @@ public class MongoObjectFactoryImpl implements MongoObjectFactory {
|
||||
@Override
|
||||
public void storeSailingServer(RemoteSailingServerReference server) {
|
||||
DBCollection serverCollection = database.getCollection(CollectionNames.SAILING_SERVERS.name());
|
||||
serverCollection.ensureIndex(FieldNames.SERVER_NAME.name());
|
||||
serverCollection.createIndex(new BasicDBObject(FieldNames.SERVER_NAME.name(), 1));
|
||||
DBObject query = new BasicDBObject();
|
||||
query.put(FieldNames.SERVER_NAME.name(), server.getName());
|
||||
DBObject serverDBObject = new BasicDBObject();
|
||||
@@ -513,7 +513,7 @@ public class MongoObjectFactoryImpl implements MongoObjectFactory {
|
||||
@Override
|
||||
public void storeEvent(Event event) {
|
||||
DBCollection eventCollection = database.getCollection(CollectionNames.EVENTS.name());
|
||||
eventCollection.ensureIndex(FieldNames.EVENT_ID.name());
|
||||
eventCollection.createIndex(new BasicDBObject(FieldNames.EVENT_ID.name(), 1));
|
||||
DBObject query = new BasicDBObject();
|
||||
query.put(FieldNames.EVENT_ID.name(), event.getId());
|
||||
DBObject eventDBObject = new BasicDBObject();
|
||||
@@ -545,7 +545,7 @@ public class MongoObjectFactoryImpl implements MongoObjectFactory {
|
||||
eventCollection.update(query, eventDBObject, /* upsrt */ true, /* multi */ false, WriteConcern.SAFE);
|
||||
// now store the links to the leaderboard groups
|
||||
DBCollection linksCollection = database.getCollection(CollectionNames.LEADERBOARD_GROUP_LINKS_FOR_EVENTS.name());
|
||||
linksCollection.ensureIndex(FieldNames.EVENT_ID.name());
|
||||
linksCollection.createIndex(new BasicDBObject(FieldNames.EVENT_ID.name(), 1));
|
||||
BasicDBList lgUUIDs = new BasicDBList();
|
||||
for (LeaderboardGroup lg : event.getLeaderboardGroups()) {
|
||||
lgUUIDs.add(lg.getId());
|
||||
@@ -588,8 +588,8 @@ public class MongoObjectFactoryImpl implements MongoObjectFactory {
|
||||
@Override
|
||||
public void storeRegatta(Regatta regatta) {
|
||||
DBCollection regattasCollection = database.getCollection(CollectionNames.REGATTAS.name());
|
||||
regattasCollection.ensureIndex(FieldNames.REGATTA_NAME.name());
|
||||
regattasCollection.ensureIndex(FieldNames.REGATTA_ID.name());
|
||||
regattasCollection.createIndex(new BasicDBObject(FieldNames.REGATTA_NAME.name(), 1));
|
||||
regattasCollection.createIndex(new BasicDBObject(FieldNames.REGATTA_ID.name(), 1));
|
||||
DBObject dbRegatta = new BasicDBObject();
|
||||
DBObject query = new BasicDBObject(FieldNames.REGATTA_NAME.name(), regatta.getName());
|
||||
dbRegatta.put(FieldNames.REGATTA_NAME.name(), regatta.getName());
|
||||
@@ -690,7 +690,7 @@ public class MongoObjectFactoryImpl implements MongoObjectFactory {
|
||||
|
||||
public DBCollection getRaceLogCollection() {
|
||||
DBCollection result = database.getCollection(CollectionNames.RACE_LOGS.name());
|
||||
result.ensureIndex(new BasicDBObject(FieldNames.RACE_LOG_IDENTIFIER.name(), null));
|
||||
result.createIndex(new BasicDBObject(FieldNames.RACE_LOG_IDENTIFIER.name(), null));
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -1279,7 +1279,7 @@ public class MongoObjectFactoryImpl implements MongoObjectFactory {
|
||||
DBCollection result = database.getCollection(CollectionNames.REGATTA_LOGS.name());
|
||||
DBObject index = new BasicDBObject(FieldNames.REGATTA_LOG_IDENTIFIER_TYPE.name(), null);
|
||||
index.put(FieldNames.REGATTA_LOG_IDENTIFIER_NAME.name(), null);
|
||||
result.ensureIndex(index);
|
||||
result.createIndex(index);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@ import com.mongodb.DB;
|
||||
import com.mongodb.DBCollection;
|
||||
import com.mongodb.DBCursor;
|
||||
import com.mongodb.DBObject;
|
||||
import com.mongodb.MongoException;
|
||||
import com.mongodb.DuplicateKeyException;
|
||||
import com.mongodb.WriteConcern;
|
||||
import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
|
||||
import com.sap.sailing.domain.common.RegattaNameAndRaceName;
|
||||
@@ -70,7 +70,7 @@ public class MediaDBImpl implements MediaDB {
|
||||
dbMediaTrack.put(DbNames.Fields.ASSIGNED_RACES.name(), assignedRacesDb);
|
||||
DBCollection dbVideos = getVideoCollection();
|
||||
dbVideos.insert(dbMediaTrack);
|
||||
return ((ObjectId) dbMediaTrack.get(DbNames.Fields._id.name())).toStringMongod();
|
||||
return ((ObjectId) dbMediaTrack.get(DbNames.Fields._id.name())).toHexString();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -99,7 +99,7 @@ public class MediaDBImpl implements MediaDB {
|
||||
DBCollection dbVideos = getVideoCollection();
|
||||
try {
|
||||
dbVideos.insert(dbMediaTrack);
|
||||
} catch (MongoException.DuplicateKey e) {
|
||||
} catch (DuplicateKeyException e) {
|
||||
throw new IllegalArgumentException("Duplicate key '" + dbId
|
||||
+ "' caused an error when importing media (title: '" + title + "')", e);
|
||||
}
|
||||
@@ -109,7 +109,7 @@ public class MediaDBImpl implements MediaDB {
|
||||
try {
|
||||
DBCollection dbVideos = database.getCollection(DbNames.Collections.VIDEOS.name());
|
||||
dbVideos.setWriteConcern(WriteConcern.FSYNC_SAFE);
|
||||
dbVideos.ensureIndex(DbNames.Collections.VIDEOS.name());
|
||||
dbVideos.createIndex(new BasicDBObject(DbNames.Collections.VIDEOS.name(), 1));
|
||||
return dbVideos;
|
||||
} catch (NullPointerException e) {
|
||||
// sometimes, for reasons yet to be clarified, ensuring an index on the name field causes an NPE
|
||||
@@ -118,7 +118,7 @@ public class MediaDBImpl implements MediaDB {
|
||||
}
|
||||
|
||||
private MediaTrack createMediaTrackFromDb(DBObject dbObject) {
|
||||
String dbId = ((ObjectId) dbObject.get(DbNames.Fields._id.name())).toStringMongod();
|
||||
String dbId = ((ObjectId) dbObject.get(DbNames.Fields._id.name())).toHexString();
|
||||
String title = (String) dbObject.get(DbNames.Fields.MEDIA_TITLE.name());
|
||||
String url = (String) dbObject.get(DbNames.Fields.MEDIA_URL.name());
|
||||
Date startTime = (Date) dbObject.get(DbNames.Fields.STARTTIME.name());
|
||||
|
||||
@@ -11,7 +11,7 @@ Require-Bundle: org.junit4;bundle-version="4.8.2",
|
||||
org.mockito.mockito-core;bundle-version="1.9.5",
|
||||
org.objenesis;bundle-version="1.3.0",
|
||||
org.hamcrest;bundle-version="1.1.0",
|
||||
com.mongodb.driver;bundle-version="2.6.2",
|
||||
org.mongodb.mongo-java-driver;bundle-version="2.13.0",
|
||||
com.sap.sse.common
|
||||
Import-Package: com.sap.sailing.domain.abstractlog.regatta.events,
|
||||
com.sap.sailing.domain.persistence.impl,
|
||||
|
||||
@@ -40,7 +40,7 @@ public class AbstractGPSFixStoreTest {
|
||||
protected final DeviceIdentifier device = new SmartphoneImeiIdentifier("a");
|
||||
protected RaceLog raceLog;
|
||||
protected GPSFixStore store;
|
||||
protected final Competitor comp = DomainFactory.INSTANCE.getOrCreateCompetitor("comp", "comp", null, null, null);
|
||||
protected final Competitor comp = DomainFactory.INSTANCE.getOrCreateCompetitor("comp", "comp", null, null, null, null);
|
||||
protected final Mark mark = DomainFactory.INSTANCE.getOrCreateMark("mark");
|
||||
|
||||
private final AbstractLogEventAuthor author = new LogEventAuthorImpl("author", 0);
|
||||
|
||||
@@ -168,7 +168,7 @@ public class CreateAndTrackWithRaceLogTest {
|
||||
assertFalse(raceLog.isEmpty());
|
||||
|
||||
// add a mapping and one fix in, one out of mapping
|
||||
Competitor comp1 = DomainFactory.INSTANCE.getOrCreateCompetitor("comp1", "comp1", null, null, null);
|
||||
Competitor comp1 = DomainFactory.INSTANCE.getOrCreateCompetitor("comp1", "comp1", null, null, null, null);
|
||||
DeviceIdentifier dev1 = new SmartphoneImeiIdentifier("dev1");
|
||||
raceLog.add(factory.createDeviceCompetitorMappingEvent(t(), author, dev1, comp1, 0, t(0), t(10)));
|
||||
addFixes0(dev1);
|
||||
@@ -202,7 +202,7 @@ public class CreateAndTrackWithRaceLogTest {
|
||||
adapter.denoteRaceForRaceLogTracking(service, leaderboard, column, fleet, "race");
|
||||
|
||||
// add a mapping and one fix in, one out of mapping
|
||||
Competitor comp1 = DomainFactory.INSTANCE.getOrCreateCompetitor("comp1", "comp1", null, null, null);
|
||||
Competitor comp1 = DomainFactory.INSTANCE.getOrCreateCompetitor("comp1", "comp1", null, null, null, null);
|
||||
DeviceIdentifier dev1 = new SmartphoneImeiIdentifier("dev1");
|
||||
regattaLog.add(new RegattaLogDeviceCompetitorMappingEventImpl(t(), author, t(), UUID.randomUUID(), comp1, dev1,
|
||||
t(0), t(10)));
|
||||
|
||||
@@ -49,7 +49,7 @@ public class TrackedRaceLoadsFixesTest extends AbstractGPSFixStoreTest {
|
||||
@Test
|
||||
public void areFixesStoredInDb() throws TransformationException, NoCorrespondingServiceRegisteredException,
|
||||
InterruptedException {
|
||||
Competitor comp2 = DomainFactory.INSTANCE.getOrCreateCompetitor("comp2", "comp2", null, null, null);
|
||||
Competitor comp2 = DomainFactory.INSTANCE.getOrCreateCompetitor("comp2", "comp2", null, null, null, null);
|
||||
Mark mark2 = DomainFactory.INSTANCE.getOrCreateMark("mark2");
|
||||
DeviceIdentifier device2 = new SmartphoneImeiIdentifier("imei2");
|
||||
DeviceIdentifier device3 = new SmartphoneImeiIdentifier("imei3");
|
||||
|
||||
@@ -1,21 +1,21 @@
|
||||
Manifest-Version: 1.0
|
||||
Bundle-ManifestVersion: 2
|
||||
Bundle-Name: Testsupport
|
||||
Bundle-SymbolicName: com.sap.sailing.domain.racelogtrackingadapter.testsupport
|
||||
Bundle-Version: 1.0.0.qualifier
|
||||
Bundle-Vendor: SAP
|
||||
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
|
||||
Require-Bundle: com.sap.sailing.domain.shared.android,
|
||||
com.sap.sailing.domain,
|
||||
com.sap.sailing.domain.common,
|
||||
com.mongodb.driver,
|
||||
com.sap.sailing.domain.persistence,
|
||||
com.sap.sailing.domain.racelogtrackingadapter,
|
||||
com.sap.sailing.server.gateway.serialization;bundle-version="1.0.0",
|
||||
org.json.simple;bundle-version="1.1.0",
|
||||
org.mockito.mockito-core;bundle-version="1.9.5",
|
||||
org.hamcrest;bundle-version="1.1.0",
|
||||
org.junit4;bundle-version="4.8.2",
|
||||
com.sap.sse.common,
|
||||
com.sap.sailing.server.gateway.serialization.shared.android
|
||||
Export-Package: com.sap.sailing.domain.racelog.tracking.test.mock
|
||||
Manifest-Version: 1.0
|
||||
Bundle-ManifestVersion: 2
|
||||
Bundle-Name: Testsupport
|
||||
Bundle-SymbolicName: com.sap.sailing.domain.racelogtrackingadapter.testsupport
|
||||
Bundle-Version: 1.0.0.qualifier
|
||||
Bundle-Vendor: SAP
|
||||
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
|
||||
Require-Bundle: com.sap.sailing.domain.shared.android,
|
||||
com.sap.sailing.domain,
|
||||
com.sap.sailing.domain.common,
|
||||
org.mongodb.mongo-java-driver;bundle-version="2.13.0",
|
||||
com.sap.sailing.domain.persistence,
|
||||
com.sap.sailing.domain.racelogtrackingadapter,
|
||||
com.sap.sailing.server.gateway.serialization;bundle-version="1.0.0",
|
||||
org.json.simple;bundle-version="1.1.0",
|
||||
org.mockito.mockito-core;bundle-version="1.9.5",
|
||||
org.hamcrest;bundle-version="1.1.0",
|
||||
org.junit4;bundle-version="4.8.2",
|
||||
com.sap.sse.common,
|
||||
com.sap.sailing.server.gateway.serialization.shared.android
|
||||
Export-Package: com.sap.sailing.domain.racelog.tracking.test.mock
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
<classpath>
|
||||
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
|
||||
<classpathentry kind="src" path="src"/>
|
||||
<classpathentry kind="src" path="resources"/>
|
||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
|
||||
<classpathentry kind="output" path="bin"/>
|
||||
</classpath>
|
||||
|
||||
@@ -0,0 +1,2 @@
|
||||
eclipse.preferences.version=1
|
||||
encoding//resources/stringmessages/TrackingStringMessages_de.properties=UTF-8
|
||||
@@ -13,12 +13,17 @@ Require-Bundle: com.sap.sailing.domain,
|
||||
com.sap.sailing.domain.persistence,
|
||||
com.sap.sailing.server,
|
||||
com.googlecode.java-diff-utils;bundle-version="1.3.0",
|
||||
com.mongodb.driver,
|
||||
org.mongodb.mongo-java-driver;bundle-version="2.13.0",
|
||||
com.sap.sse.common,
|
||||
com.sap.sse.replication,
|
||||
com.sap.sse,
|
||||
com.sap.sailing.server.gateway.serialization.shared.android
|
||||
Import-Package: com.mongodb,
|
||||
com.sap.sailing.server.gateway.serialization.shared.android,
|
||||
com.sap.sse.mail
|
||||
Import-Package: com.google.zxing;version="3.1.0",
|
||||
com.mongodb,
|
||||
javax.mail;version="1.4.0",
|
||||
javax.mail.internet;version="1.4.0",
|
||||
javax.mail.util;version="1.4.0",
|
||||
javax.servlet;version="2.6.0",
|
||||
org.json.simple,
|
||||
org.json.simple.parser,
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
source.. = src/
|
||||
source.. = src/,\
|
||||
resources/
|
||||
output.. = bin/
|
||||
bin.includes = META-INF/,\
|
||||
.
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
trackingInvitationFor=Einladung zum Tracken für
|
||||
scanQRCodeOrVisitUrlToRegisterAs=Scanne den QRCode oder klicke den Link mit deinem Smartphone an um dich zu registrieren als
|
||||
welcomeTo=Willkommen zu
|
||||
alternativelyVisitThisLink=Alternativ kannst du diesen Link anklicken
|
||||
@@ -0,0 +1,4 @@
|
||||
trackingInvitationFor=Tracking Invitation for
|
||||
scanQRCodeOrVisitUrlToRegisterAs=Scan the following QRCode or click the link using your smartphone to register as
|
||||
welcomeTo=Welcome to
|
||||
alternativelyVisitThisLink=Alternatively, you can click this Link
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.sap.sailing.domain.racelogtracking;
|
||||
|
||||
import java.util.Locale;
|
||||
import java.util.Set;
|
||||
|
||||
import com.sap.sailing.domain.abstractlog.race.RaceLog;
|
||||
@@ -10,6 +11,7 @@ import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogStartTrackingEven
|
||||
import com.sap.sailing.domain.abstractlog.regatta.RegattaLog;
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.base.ControlPoint;
|
||||
import com.sap.sailing.domain.base.Event;
|
||||
import com.sap.sailing.domain.base.Fleet;
|
||||
import com.sap.sailing.domain.base.Mark;
|
||||
import com.sap.sailing.domain.base.RaceColumn;
|
||||
@@ -24,12 +26,14 @@ import com.sap.sailing.domain.racelogtracking.impl.RaceLogRaceTracker;
|
||||
import com.sap.sailing.domain.tracking.GPSFix;
|
||||
import com.sap.sailing.domain.tracking.TrackedRace;
|
||||
import com.sap.sailing.server.RacingEventService;
|
||||
import com.sap.sse.common.mail.MailException;
|
||||
|
||||
public interface RaceLogTrackingAdapter {
|
||||
public interface RaceLogTrackingAdapter {
|
||||
/**
|
||||
* Performs the necessary steps to ensure that the race is tracked (aka that a {@link TrackedRace}
|
||||
* is created from the data in this {@code RaceLog}).<p>
|
||||
* The following steps are performed to achieve this:
|
||||
* Performs the necessary steps to ensure that the race is tracked (aka that a {@link TrackedRace} is created from
|
||||
* the data in this {@code RaceLog}).
|
||||
* <p>
|
||||
* The following steps are performed to achieve this:
|
||||
* <ul>
|
||||
* <li>Is the racelog denoted for tracking? If not, throw exception.</li>
|
||||
* <li>Is a {@link RaceLogRaceTracker} already listening for this racelog? If not, add one.</li>
|
||||
@@ -38,7 +42,7 @@ public interface RaceLogTrackingAdapter {
|
||||
*/
|
||||
void startTracking(RacingEventService service, Leaderboard leaderboard, RaceColumn raceColumn, Fleet fleet)
|
||||
throws NotDenotedForRaceLogTrackingException, Exception;
|
||||
|
||||
|
||||
RaceLogTrackingState getRaceLogTrackingState(RacingEventService service, RaceColumn raceColumn, Fleet fleet);
|
||||
|
||||
/**
|
||||
@@ -51,16 +55,15 @@ public interface RaceLogTrackingAdapter {
|
||||
*
|
||||
* @throws NotDenotableForRaceLogTrackingException
|
||||
* Fails, if no {@link RaceLog}, or a non-empty {@link RaceLog}, or one with attached
|
||||
* {@link TrackedRace} is found already in place.
|
||||
* Also fails, if the {@code leaderboard} is not a {@link RegattaLeaderboard}.
|
||||
* {@link TrackedRace} is found already in place. Also fails, if the {@code leaderboard} is not a
|
||||
* {@link RegattaLeaderboard}.
|
||||
*/
|
||||
void denoteRaceForRaceLogTracking(RacingEventService service, Leaderboard leaderboard, RaceColumn raceColumn,
|
||||
Fleet fleet, String raceName) throws NotDenotableForRaceLogTrackingException;
|
||||
|
||||
|
||||
/**
|
||||
* Revoke the {@link RaceLogDenoteForTrackingEvent}, and if it exists the {@link RaceLogStartTrackingEvent}.
|
||||
* This does not affect existing an {@link RaceLogRaceTracker}
|
||||
* or {@link TrackedRace} for this {@code RaceLog}.
|
||||
* Revoke the {@link RaceLogDenoteForTrackingEvent}, and if it exists the {@link RaceLogStartTrackingEvent}. This
|
||||
* does not affect existing an {@link RaceLogRaceTracker} or {@link TrackedRace} for this {@code RaceLog}.
|
||||
*/
|
||||
void removeDenotationForRaceLogTracking(RacingEventService service, RaceLog raceLog);
|
||||
|
||||
@@ -71,30 +74,35 @@ public interface RaceLogTrackingAdapter {
|
||||
*/
|
||||
void denoteAllRacesForRaceLogTracking(RacingEventService service, Leaderboard leaderboard)
|
||||
throws NotDenotableForRaceLogTrackingException;
|
||||
|
||||
|
||||
/**
|
||||
* Add a fix to the {@link GPSFixStore}, and create a mapping with a virtual device for exactly that timepoint.
|
||||
*/
|
||||
void pingMark(RaceLog raceLogToAddTo, Mark mark, GPSFix gpsFix, RacingEventService service);
|
||||
|
||||
|
||||
/**
|
||||
* Duplicate the course and competitor registrations in the newest {@link RaceLogCourseDesignChangedEvent}
|
||||
* in {@code from} race log to the {@code to} race logs.
|
||||
* The {@link Mark}s and {@link ControlPoint}s are duplicated and not reused. This also inserts the necessary
|
||||
* {@link RaceLogDefineMarkEvent}s into the {@code to} race logs.
|
||||
* Duplicate the course and competitor registrations in the newest {@link RaceLogCourseDesignChangedEvent} in
|
||||
* {@code from} race log to the {@code to} race logs. The {@link Mark}s and {@link ControlPoint}s are duplicated and
|
||||
* not reused. This also inserts the necessary {@link RaceLogDefineMarkEvent}s into the {@code to} race logs.
|
||||
*/
|
||||
void copyCourseAndCompetitors(RaceLog from, Set<RaceLog> to, SharedDomainFactory baseDomainFactory,
|
||||
RacingEventService service);
|
||||
|
||||
|
||||
/**
|
||||
* If not yet registered, register the competitors in {@code competitors},
|
||||
* and unregister all already registered competitors not in {@code competitors}.
|
||||
* If not yet registered, register the competitors in {@code competitors}, and unregister all already registered
|
||||
* competitors not in {@code competitors}.
|
||||
*/
|
||||
void registerCompetitors(RacingEventService service, RaceLog raceLog, Set<Competitor> competitors);
|
||||
|
||||
|
||||
/**
|
||||
* If not yet registered, register the competitors in {@code competitors},
|
||||
* and unregister all already registered competitors not in {@code competitors}.
|
||||
* If not yet registered, register the competitors in {@code competitors}, and unregister all already registered
|
||||
* competitors not in {@code competitors}.
|
||||
*/
|
||||
void registerCompetitors(RacingEventService service, RegattaLog regattaLog, Set<Competitor> competitors);
|
||||
|
||||
/**
|
||||
* Invite competitors for tracking via the Tracking App by sending out emails.
|
||||
*/
|
||||
void inviteCompetitorsForTrackingViaEmail(Event event, Leaderboard leaderboard,
|
||||
String serverUrlWithoutTrailingSlash, Set<Competitor> competitors, Locale locale) throws MailException;
|
||||
}
|
||||
|
||||
@@ -36,6 +36,12 @@ import com.sap.sse.common.TypeBasedServiceFinder;
|
||||
|
||||
public class Activator implements BundleActivator {
|
||||
private static final Logger logger = Logger.getLogger(Activator.class.getName());
|
||||
|
||||
private static BundleContext context;
|
||||
|
||||
public static BundleContext getContext() {
|
||||
return context;
|
||||
}
|
||||
|
||||
private Set<ServiceRegistration<?>> registrations = new HashSet<>();
|
||||
|
||||
@@ -53,6 +59,8 @@ public class Activator implements BundleActivator {
|
||||
|
||||
@Override
|
||||
public void start(BundleContext context) throws Exception {
|
||||
Activator.context = context;
|
||||
|
||||
registrations.add(context.registerService(DeviceIdentifierMongoHandler.class, new SmartphoneUUIDMongoHandler(), getDict(SmartphoneUUIDIdentifier.TYPE)));
|
||||
registrations.add(context.registerService(DeviceIdentifierJsonHandler.class, new SmartphoneUUIDJsonHandler(), getDict(SmartphoneUUIDIdentifier.TYPE)));
|
||||
registrations.add(context.registerService(DeviceIdentifierStringSerializationHandler.class, new SmartphoneUUIDStringSerializationHandler(), getDict(SmartphoneUUIDIdentifier.TYPE)));
|
||||
@@ -75,6 +83,8 @@ public class Activator implements BundleActivator {
|
||||
|
||||
@Override
|
||||
public void stop(BundleContext context) throws Exception {
|
||||
Activator.context = null;
|
||||
|
||||
for (ServiceRegistration<?> reg : registrations) {
|
||||
reg.unregister();
|
||||
}
|
||||
|
||||
@@ -1,8 +1,11 @@
|
||||
package com.sap.sailing.domain.racelogtracking.impl;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
@@ -10,6 +13,17 @@ import java.util.function.Function;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import javax.activation.DataHandler;
|
||||
import javax.activation.DataSource;
|
||||
import javax.mail.BodyPart;
|
||||
import javax.mail.MessagingException;
|
||||
import javax.mail.internet.MimeBodyPart;
|
||||
import javax.mail.internet.MimeMultipart;
|
||||
import javax.mail.util.ByteArrayDataSource;
|
||||
|
||||
import org.osgi.framework.ServiceReference;
|
||||
|
||||
import com.google.zxing.WriterException;
|
||||
import com.sap.sailing.domain.abstractlog.AbstractLog;
|
||||
import com.sap.sailing.domain.abstractlog.AbstractLogEvent;
|
||||
import com.sap.sailing.domain.abstractlog.AbstractLogEventAuthor;
|
||||
@@ -32,6 +46,7 @@ import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.base.ControlPoint;
|
||||
import com.sap.sailing.domain.base.CourseBase;
|
||||
import com.sap.sailing.domain.base.DomainFactory;
|
||||
import com.sap.sailing.domain.base.Event;
|
||||
import com.sap.sailing.domain.base.Fleet;
|
||||
import com.sap.sailing.domain.base.Mark;
|
||||
import com.sap.sailing.domain.base.RaceColumn;
|
||||
@@ -42,6 +57,7 @@ import com.sap.sailing.domain.base.impl.CourseDataImpl;
|
||||
import com.sap.sailing.domain.common.PassingInstruction;
|
||||
import com.sap.sailing.domain.common.RegattaIdentifier;
|
||||
import com.sap.sailing.domain.common.abstractlog.NotRevokableException;
|
||||
import com.sap.sailing.domain.common.racelog.tracking.DeviceMappingConstants;
|
||||
import com.sap.sailing.domain.common.racelog.tracking.NotDenotableForRaceLogTrackingException;
|
||||
import com.sap.sailing.domain.common.racelog.tracking.NotDenotedForRaceLogTrackingException;
|
||||
import com.sap.sailing.domain.common.racelog.tracking.RaceLogRaceTrackerExistsException;
|
||||
@@ -61,6 +77,10 @@ import com.sap.sse.common.NoCorrespondingServiceRegisteredException;
|
||||
import com.sap.sse.common.TimePoint;
|
||||
import com.sap.sse.common.Util;
|
||||
import com.sap.sse.common.impl.MillisecondsTimePoint;
|
||||
import com.sap.sse.common.mail.MailException;
|
||||
import com.sap.sse.mail.MailService;
|
||||
import com.sap.sse.qrcode.QRCodeGenerationUtil;
|
||||
import com.sap.sse.util.impl.NonGwtUrlHelper;
|
||||
|
||||
public class RaceLogTrackingAdapterImpl implements RaceLogTrackingAdapter {
|
||||
private static final Logger logger = Logger.getLogger(RaceLogTrackingAdapterImpl.class.getName());
|
||||
@@ -325,4 +345,66 @@ public class RaceLogTrackingAdapterImpl implements RaceLogTrackingAdapter {
|
||||
c -> new RegattaLogRegisterCompetitorEventImpl(MillisecondsTimePoint.now(), service.getServerAuthor(),
|
||||
MillisecondsTimePoint.now(), UUID.randomUUID(), c));
|
||||
}
|
||||
|
||||
private MailService getMailService() {
|
||||
ServiceReference<MailService> ref = Activator.getContext()
|
||||
.getServiceReference(MailService.class);
|
||||
if (ref == null) {
|
||||
logger.warning("No file storage management service registered");
|
||||
return null;
|
||||
}
|
||||
return Activator.getContext().getService(ref);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void inviteCompetitorsForTrackingViaEmail(Event event, Leaderboard leaderboard,
|
||||
String serverUrlWithoutTrailingSlash, Set<Competitor> competitors, Locale locale) throws MailException {
|
||||
StringBuilder occuredExceptions = new StringBuilder();
|
||||
|
||||
for (Competitor competitor : competitors){
|
||||
final String toAddress = competitor.getEmail();
|
||||
if (toAddress != null) {
|
||||
String leaderboardName = leaderboard.getName();
|
||||
String competitorName = competitor.getName();
|
||||
|
||||
String url = DeviceMappingConstants.getDeviceMappingForRegattaLogUrl(serverUrlWithoutTrailingSlash,
|
||||
event.getId().toString(), leaderboardName, DeviceMappingConstants.URL_COMPETITOR_ID_AS_STRING,
|
||||
competitor.getId().toString(), NonGwtUrlHelper.INSTANCE);
|
||||
String subject = String.format("%s %s",
|
||||
RaceLogTrackingI18n.STRING_MESSAGES.get(locale, "trackingInvitationFor"), competitorName);
|
||||
|
||||
// taken from http://www.tutorialspoint.com/javamail_api/javamail_api_send_inlineimage_in_email.htm
|
||||
BodyPart messageTextPart = new MimeBodyPart();
|
||||
String htmlText = String.format("<h1>%s %s</h1>" + "<p>%s <b>%s</b></p>"
|
||||
+ "<img src=\"cid:image\" title=\"%s\"><br/>"
|
||||
+ "<a href=\"%s\">%s</a>",
|
||||
RaceLogTrackingI18n.STRING_MESSAGES.get(locale, "welcomeTo"), leaderboardName,
|
||||
RaceLogTrackingI18n.STRING_MESSAGES.get(locale, "scanQRCodeOrVisitUrlToRegisterAs"), competitorName,
|
||||
url, url, RaceLogTrackingI18n.STRING_MESSAGES.get(locale, "alternativelyVisitThisLink"));
|
||||
|
||||
try {
|
||||
messageTextPart.setContent(htmlText, "text/html");
|
||||
|
||||
BodyPart messageImagePart = new MimeBodyPart();
|
||||
InputStream imageIs = QRCodeGenerationUtil.create(url, 250);
|
||||
DataSource imageDs = new ByteArrayDataSource(imageIs, "image/png");
|
||||
messageImagePart.setDataHandler(new DataHandler(imageDs));
|
||||
messageImagePart.setHeader("Content-ID", "<image>");
|
||||
|
||||
MimeMultipart multipart = new MimeMultipart();
|
||||
multipart.addBodyPart(messageTextPart);
|
||||
multipart.addBodyPart(messageImagePart);
|
||||
|
||||
getMailService().sendMail(toAddress, subject, multipart);
|
||||
} catch (MessagingException | MailException | WriterException | IOException e) {
|
||||
logger.log(Level.SEVERE, "Error trying to send mail to " + competitor.getName()
|
||||
+ " with e-mail address " + toAddress, e);
|
||||
occuredExceptions.append(e.getMessage()+"\r\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!(occuredExceptions.length() == 0)){
|
||||
throw new MailException(occuredExceptions.toString());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
package com.sap.sailing.domain.racelogtracking.impl;
|
||||
|
||||
import com.sap.sse.i18n.ResourceBundleStringMessages;
|
||||
import com.sap.sse.i18n.impl.ResourceBundleStringMessagesImpl;
|
||||
|
||||
public class RaceLogTrackingI18n {
|
||||
private static final String RESOURCE_BASE_NAME = "stringmessages/TrackingStringMessages";
|
||||
|
||||
public static final ResourceBundleStringMessages STRING_MESSAGES = new ResourceBundleStringMessagesImpl(
|
||||
RESOURCE_BASE_NAME, RaceLogTrackingI18n.class.getClassLoader());
|
||||
}
|
||||
@@ -1,18 +1,18 @@
|
||||
Manifest-Version: 1.0
|
||||
Bundle-ManifestVersion: 2
|
||||
Bundle-Name: com.sap.sailing.domain.shared.android.test
|
||||
Bundle-SymbolicName: com.sap.sailing.domain.shared.android.test
|
||||
Bundle-Version: 1.0.0.qualifier
|
||||
Bundle-Vendor: SAP
|
||||
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
|
||||
Require-Bundle: com.sap.sailing.domain.common;bundle-version="1.0.0",
|
||||
com.sap.sailing.domain.shared.android;bundle-version="1.0.0",
|
||||
org.hamcrest;bundle-version="1.1.0",
|
||||
org.junit4;bundle-version="4.8.2",
|
||||
org.objenesis;bundle-version="1.3.0",
|
||||
org.mockito.mockito-core;bundle-version="1.9.5",
|
||||
com.sap.sailing.domain.test,
|
||||
com.sap.sailing.domain.racelogtrackingadapter.testsupport;bundle-version="1.0.0",
|
||||
com.sap.sse.common,
|
||||
com.sap.sse,
|
||||
com.sap.sse.shared.android
|
||||
Manifest-Version: 1.0
|
||||
Bundle-ManifestVersion: 2
|
||||
Bundle-Name: com.sap.sailing.domain.shared.android.test
|
||||
Bundle-SymbolicName: com.sap.sailing.domain.shared.android.test
|
||||
Bundle-Version: 1.0.0.qualifier
|
||||
Bundle-Vendor: SAP
|
||||
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
|
||||
Require-Bundle: com.sap.sailing.domain.common;bundle-version="1.0.0",
|
||||
com.sap.sailing.domain.shared.android;bundle-version="1.0.0",
|
||||
org.hamcrest;bundle-version="1.1.0",
|
||||
org.junit4;bundle-version="4.8.2",
|
||||
org.objenesis;bundle-version="1.3.0",
|
||||
org.mockito.mockito-core;bundle-version="1.9.5",
|
||||
com.sap.sailing.domain.test,
|
||||
com.sap.sailing.domain.racelogtrackingadapter.testsupport;bundle-version="1.0.0",
|
||||
com.sap.sse.common,
|
||||
com.sap.sse,
|
||||
com.sap.sse.shared.android
|
||||
|
||||
@@ -52,7 +52,7 @@ public class MultiLogAnalyzerTest {
|
||||
private AbstractLogEventAuthor author;
|
||||
|
||||
private static Competitor createCompetitor(int n) {
|
||||
return new CompetitorImpl(n, n + "", null, null, null);
|
||||
return new CompetitorImpl(n, n + "", null, null, null, null);
|
||||
}
|
||||
|
||||
private static DeviceIdentifier createDevice() {
|
||||
|
||||
@@ -22,8 +22,8 @@ import com.sap.sse.common.TimePoint;
|
||||
import com.sap.sse.common.impl.MillisecondsTimePoint;
|
||||
|
||||
public class DeviceMappingFinderTest extends AbstractRaceLogTrackingTest {
|
||||
private final Competitor competitor = new CompetitorImpl("comp", "Comp", null, null, null);
|
||||
private final Competitor competitor2 = new CompetitorImpl("comp2", "Comp2", null, null, null);
|
||||
private final Competitor competitor = new CompetitorImpl("comp", "Comp", null, null, null, null);
|
||||
private final Competitor competitor2 = new CompetitorImpl("comp2", "Comp2", null, null, null, null);
|
||||
private final DeviceIdentifier device = new SmartphoneImeiIdentifier("imei");
|
||||
|
||||
private int time = 0;
|
||||
|
||||
@@ -1,50 +1,50 @@
|
||||
Manifest-Version: 1.0
|
||||
Bundle-ManifestVersion: 2
|
||||
Bundle-Name: com.sap.sailing.domain.shared.android
|
||||
Bundle-SymbolicName: com.sap.sailing.domain.shared.android
|
||||
Bundle-Version: 1.0.0.qualifier
|
||||
Bundle-Vendor: SAP
|
||||
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
|
||||
Require-Bundle: com.sap.sailing.domain.common,
|
||||
com.sap.sse.datamining.shared,
|
||||
com.sap.sse.common,
|
||||
com.sap.sse.shared.android
|
||||
Export-Package: com.sap.sailing.domain.abstractlog,
|
||||
com.sap.sailing.domain.abstractlog.impl,
|
||||
com.sap.sailing.domain.abstractlog.race,
|
||||
com.sap.sailing.domain.abstractlog.race.analyzing.impl,
|
||||
com.sap.sailing.domain.abstractlog.race.impl,
|
||||
com.sap.sailing.domain.abstractlog.race.scoring,
|
||||
com.sap.sailing.domain.abstractlog.race.scoring.impl,
|
||||
com.sap.sailing.domain.abstractlog.race.state,
|
||||
com.sap.sailing.domain.abstractlog.race.state.impl,
|
||||
com.sap.sailing.domain.abstractlog.race.state.racingprocedure,
|
||||
com.sap.sailing.domain.abstractlog.race.state.racingprocedure.basic,
|
||||
com.sap.sailing.domain.abstractlog.race.state.racingprocedure.basic.impl,
|
||||
com.sap.sailing.domain.abstractlog.race.state.racingprocedure.ess,
|
||||
com.sap.sailing.domain.abstractlog.race.state.racingprocedure.ess.impl,
|
||||
com.sap.sailing.domain.abstractlog.race.state.racingprocedure.gate,
|
||||
com.sap.sailing.domain.abstractlog.race.state.racingprocedure.gate.impl,
|
||||
com.sap.sailing.domain.abstractlog.race.state.racingprocedure.impl,
|
||||
com.sap.sailing.domain.abstractlog.race.state.racingprocedure.rrs26,
|
||||
com.sap.sailing.domain.abstractlog.race.state.racingprocedure.rrs26.impl,
|
||||
com.sap.sailing.domain.abstractlog.race.tracking,
|
||||
com.sap.sailing.domain.abstractlog.race.tracking.analyzing.impl,
|
||||
com.sap.sailing.domain.abstractlog.race.tracking.impl,
|
||||
com.sap.sailing.domain.abstractlog.regatta,
|
||||
com.sap.sailing.domain.abstractlog.regatta.events,
|
||||
com.sap.sailing.domain.abstractlog.regatta.events.impl,
|
||||
com.sap.sailing.domain.abstractlog.regatta.impl,
|
||||
com.sap.sailing.domain.abstractlog.shared.analyzing,
|
||||
com.sap.sailing.domain.abstractlog.shared.events,
|
||||
com.sap.sailing.domain.base,
|
||||
com.sap.sailing.domain.base.configuration,
|
||||
com.sap.sailing.domain.base.configuration.impl,
|
||||
com.sap.sailing.domain.base.configuration.procedures,
|
||||
com.sap.sailing.domain.base.impl,
|
||||
com.sap.sailing.domain.base.racegroup,
|
||||
com.sap.sailing.domain.base.racegroup.impl,
|
||||
com.sap.sailing.domain.racelogtracking,
|
||||
com.sap.sailing.domain.racelogtracking.impl,
|
||||
com.sap.sailing.domain.tracking,
|
||||
com.sap.sailing.domain.tracking.impl
|
||||
Manifest-Version: 1.0
|
||||
Bundle-ManifestVersion: 2
|
||||
Bundle-Name: com.sap.sailing.domain.shared.android
|
||||
Bundle-SymbolicName: com.sap.sailing.domain.shared.android
|
||||
Bundle-Version: 1.0.0.qualifier
|
||||
Bundle-Vendor: SAP
|
||||
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
|
||||
Require-Bundle: com.sap.sailing.domain.common,
|
||||
com.sap.sse.datamining.shared,
|
||||
com.sap.sse.common,
|
||||
com.sap.sse.shared.android
|
||||
Export-Package: com.sap.sailing.domain.abstractlog,
|
||||
com.sap.sailing.domain.abstractlog.impl,
|
||||
com.sap.sailing.domain.abstractlog.race,
|
||||
com.sap.sailing.domain.abstractlog.race.analyzing.impl,
|
||||
com.sap.sailing.domain.abstractlog.race.impl,
|
||||
com.sap.sailing.domain.abstractlog.race.scoring,
|
||||
com.sap.sailing.domain.abstractlog.race.scoring.impl,
|
||||
com.sap.sailing.domain.abstractlog.race.state,
|
||||
com.sap.sailing.domain.abstractlog.race.state.impl,
|
||||
com.sap.sailing.domain.abstractlog.race.state.racingprocedure,
|
||||
com.sap.sailing.domain.abstractlog.race.state.racingprocedure.basic,
|
||||
com.sap.sailing.domain.abstractlog.race.state.racingprocedure.basic.impl,
|
||||
com.sap.sailing.domain.abstractlog.race.state.racingprocedure.ess,
|
||||
com.sap.sailing.domain.abstractlog.race.state.racingprocedure.ess.impl,
|
||||
com.sap.sailing.domain.abstractlog.race.state.racingprocedure.gate,
|
||||
com.sap.sailing.domain.abstractlog.race.state.racingprocedure.gate.impl,
|
||||
com.sap.sailing.domain.abstractlog.race.state.racingprocedure.impl,
|
||||
com.sap.sailing.domain.abstractlog.race.state.racingprocedure.rrs26,
|
||||
com.sap.sailing.domain.abstractlog.race.state.racingprocedure.rrs26.impl,
|
||||
com.sap.sailing.domain.abstractlog.race.tracking,
|
||||
com.sap.sailing.domain.abstractlog.race.tracking.analyzing.impl,
|
||||
com.sap.sailing.domain.abstractlog.race.tracking.impl,
|
||||
com.sap.sailing.domain.abstractlog.regatta,
|
||||
com.sap.sailing.domain.abstractlog.regatta.events,
|
||||
com.sap.sailing.domain.abstractlog.regatta.events.impl,
|
||||
com.sap.sailing.domain.abstractlog.regatta.impl,
|
||||
com.sap.sailing.domain.abstractlog.shared.analyzing,
|
||||
com.sap.sailing.domain.abstractlog.shared.events,
|
||||
com.sap.sailing.domain.base,
|
||||
com.sap.sailing.domain.base.configuration,
|
||||
com.sap.sailing.domain.base.configuration.impl,
|
||||
com.sap.sailing.domain.base.configuration.procedures,
|
||||
com.sap.sailing.domain.base.impl,
|
||||
com.sap.sailing.domain.base.racegroup,
|
||||
com.sap.sailing.domain.base.racegroup.impl,
|
||||
com.sap.sailing.domain.racelogtracking,
|
||||
com.sap.sailing.domain.racelogtracking.impl,
|
||||
com.sap.sailing.domain.tracking,
|
||||
com.sap.sailing.domain.tracking.impl
|
||||
|
||||
@@ -15,6 +15,10 @@ public interface Competitor extends Named, WithID, IsManagedByCache<SharedDomain
|
||||
|
||||
Color getColor();
|
||||
|
||||
String getEmail();
|
||||
|
||||
boolean hasEmail();
|
||||
|
||||
/**
|
||||
* Adds a listener to this competitor. The listener is also added to the boat and the team for changes.
|
||||
* Adding a listener that is already part of this competitor's listeners set remains without effect.
|
||||
|
||||
@@ -6,4 +6,6 @@ public interface CompetitorChangeListener extends BoatChangeListener, Nationalit
|
||||
void colorChanged(Color oldColor, Color newColor);
|
||||
|
||||
void nameChanged(String oldName, String newName);
|
||||
|
||||
void emailChanged(String oldEmail, String newEmail);
|
||||
}
|
||||
|
||||
@@ -26,5 +26,5 @@ public interface CompetitorFactory {
|
||||
*/
|
||||
boolean isCompetitorToUpdateDuringGetOrCreate(Competitor result);
|
||||
|
||||
Competitor getOrCreateCompetitor(Serializable competitorId, String name, Color displayColor, DynamicTeam team, DynamicBoat boat);
|
||||
Competitor getOrCreateCompetitor(Serializable competitorId, String name, Color displayColor, String email, DynamicTeam team, DynamicBoat boat);
|
||||
}
|
||||
|
||||
@@ -63,7 +63,7 @@ public interface CompetitorStore extends CompetitorFactory {
|
||||
*
|
||||
* If no competitor with the ID requested is found, the call is a no-op, doing nothing, not even throwing an exception.
|
||||
*/
|
||||
Competitor updateCompetitor(String idAsString, String newName, Color newDisplayColor, String newSailId,
|
||||
Competitor updateCompetitor(String idAsString, String newName, Color newDisplayColor, String newEmail, String newSailId,
|
||||
Nationality newNationality, URI newTeamImageUri);
|
||||
|
||||
CompetitorDTO convertToCompetitorDTO(Competitor c);
|
||||
|
||||
@@ -20,13 +20,15 @@ public class CompetitorImpl implements DynamicCompetitor {
|
||||
private String name;
|
||||
private Color color;
|
||||
private transient Set<CompetitorChangeListener> listeners;
|
||||
private String email;
|
||||
|
||||
public CompetitorImpl(Serializable id, String name, Color color, DynamicTeam team, DynamicBoat boat) {
|
||||
public CompetitorImpl(Serializable id, String name, Color color, String email, DynamicTeam team, DynamicBoat boat) {
|
||||
this.id = id;
|
||||
this.name = name;
|
||||
this.team = team;
|
||||
this.boat = boat;
|
||||
this.color = color;
|
||||
this.email = email;
|
||||
this.listeners = new HashSet<CompetitorChangeListener>();
|
||||
}
|
||||
|
||||
@@ -73,7 +75,7 @@ public class CompetitorImpl implements DynamicCompetitor {
|
||||
|
||||
@Override
|
||||
public Competitor resolve(SharedDomainFactory domainFactory) {
|
||||
Competitor result = domainFactory.getOrCreateCompetitor(getId(), getName(), getColor(), getTeam(), getBoat());
|
||||
Competitor result = domainFactory.getOrCreateCompetitor(getId(), getName(), getColor(), getEmail(), getTeam(), getBoat());
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -114,4 +116,22 @@ public class CompetitorImpl implements DynamicCompetitor {
|
||||
return new HashSet<CompetitorChangeListener>(listeners);
|
||||
}
|
||||
}
|
||||
|
||||
public String getEmail() {
|
||||
return email;
|
||||
}
|
||||
|
||||
public void setEmail(String newEmail) {
|
||||
final String oldEmail = this.email;
|
||||
if (!Util.equalsWithNull(oldEmail, newEmail)) {
|
||||
this.email = newEmail;
|
||||
for (CompetitorChangeListener listener : getListeners()) {
|
||||
listener.emailChanged(oldEmail, newEmail);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public boolean hasEmail(){
|
||||
return email != null && !email.isEmpty();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,7 +6,10 @@ import com.sap.sse.common.Color;
|
||||
|
||||
public interface DynamicCompetitor extends Competitor, Renamable {
|
||||
DynamicBoat getBoat();
|
||||
|
||||
DynamicTeam getTeam();
|
||||
|
||||
|
||||
void setColor(Color displayColor);
|
||||
|
||||
void setEmail(String email);
|
||||
}
|
||||
|
||||
@@ -332,11 +332,11 @@ public class SharedDomainFactoryImpl implements SharedDomainFactory {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Competitor getOrCreateCompetitor(Serializable competitorId, String name, Color displayColor, DynamicTeam team, DynamicBoat boat) {
|
||||
public Competitor getOrCreateCompetitor(Serializable competitorId, String name, Color displayColor, String email, DynamicTeam team, DynamicBoat boat) {
|
||||
if (logger.isLoggable(Level.FINEST)) {
|
||||
logger.log(Level.FINEST, "getting or creating competitor "+name+" with ID "+competitorId+" in domain factory "+this);
|
||||
}
|
||||
return getCompetitorStore().getOrCreateCompetitor(competitorId, name, displayColor, team, boat);
|
||||
return getCompetitorStore().getOrCreateCompetitor(competitorId, name, displayColor, email, team, boat);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -68,8 +68,8 @@ public class TransientCompetitorStoreImpl implements CompetitorStore, Serializab
|
||||
listeners.remove(listener);
|
||||
}
|
||||
|
||||
private Competitor createCompetitor(Serializable id, String name, Color displayColor, DynamicTeam team, DynamicBoat boat) {
|
||||
Competitor result = new CompetitorImpl(id, name, displayColor, team, boat);
|
||||
private Competitor createCompetitor(Serializable id, String name, Color displayColor, String email, DynamicTeam team, DynamicBoat boat) {
|
||||
Competitor result = new CompetitorImpl(id, name, displayColor, email, team, boat);
|
||||
addNewCompetitor(id, result);
|
||||
if (logger.isLoggable(Level.FINEST)) {
|
||||
logger.log(Level.FINEST, "Created competitor "+name+" with ID "+id, new Exception("Here is where it happened"));
|
||||
@@ -93,20 +93,20 @@ public class TransientCompetitorStoreImpl implements CompetitorStore, Serializab
|
||||
}
|
||||
|
||||
@Override
|
||||
public Competitor getOrCreateCompetitor(Serializable competitorId, String name, Color displayColor, DynamicTeam team, DynamicBoat boat) {
|
||||
public Competitor getOrCreateCompetitor(Serializable competitorId, String name, Color displayColor, String email, DynamicTeam team, DynamicBoat boat) {
|
||||
Competitor result = getExistingCompetitorById(competitorId); // avoid synchronization for successful read access
|
||||
if (result == null) {
|
||||
LockUtil.lockForWrite(lock);
|
||||
try {
|
||||
result = getExistingCompetitorById(competitorId); // try again, now while holding the write lock
|
||||
if (result == null) {
|
||||
result = createCompetitor(competitorId, name, displayColor, team, boat);
|
||||
result = createCompetitor(competitorId, name, displayColor, email, team, boat);
|
||||
}
|
||||
} finally {
|
||||
LockUtil.unlockAfterWrite(lock);
|
||||
}
|
||||
} else if (isCompetitorToUpdateDuringGetOrCreate(result)) {
|
||||
updateCompetitor(result.getId().toString(), name, displayColor, boat.getSailID(), team.getNationality(),
|
||||
updateCompetitor(result.getId().toString(), name, displayColor, email, boat.getSailID(), team.getNationality(),
|
||||
team.getImage());
|
||||
competitorNoLongerToUpdateDuringGetOrCreate(result);
|
||||
}
|
||||
@@ -191,7 +191,7 @@ public class TransientCompetitorStoreImpl implements CompetitorStore, Serializab
|
||||
}
|
||||
|
||||
@Override
|
||||
public Competitor updateCompetitor(String idAsString, String newName, Color newDisplayColor, String newSailId,
|
||||
public Competitor updateCompetitor(String idAsString, String newName, Color newDisplayColor, String newEmail, String newSailId,
|
||||
Nationality newNationality, URI newTeamImageUri) {
|
||||
DynamicCompetitor competitor = (DynamicCompetitor) getExistingCompetitorByIdAsString(idAsString);
|
||||
if (competitor != null) {
|
||||
@@ -199,6 +199,7 @@ public class TransientCompetitorStoreImpl implements CompetitorStore, Serializab
|
||||
try {
|
||||
competitor.setName(newName);
|
||||
competitor.setColor(newDisplayColor);
|
||||
competitor.setEmail(newEmail);
|
||||
competitor.getBoat().setSailId(newSailId);
|
||||
competitor.getTeam().setNationality(newNationality);
|
||||
competitor.getTeam().setImage(newTeamImageUri);
|
||||
@@ -229,7 +230,7 @@ public class TransientCompetitorStoreImpl implements CompetitorStore, Serializab
|
||||
if (competitorDTO == null) {
|
||||
final Nationality nationality = c.getTeam().getNationality();
|
||||
CountryCode countryCode = nationality == null ? null : nationality.getCountryCode();
|
||||
competitorDTO = new CompetitorDTOImpl(c.getName(), c.getColor(), countryCode == null ? ""
|
||||
competitorDTO = new CompetitorDTOImpl(c.getName(), c.getColor(), c.getEmail(), countryCode == null ? ""
|
||||
: countryCode.getTwoLetterISOCode(), countryCode == null ? ""
|
||||
: countryCode.getThreeLetterIOCCode(), countryCode == null ? "" : countryCode.getName(), c
|
||||
.getBoat().getSailID(), c.getId().toString(), new BoatClassDTO(c.getBoat().getBoatClass()
|
||||
|
||||
@@ -7,7 +7,7 @@ Bundle-Vendor: SAP
|
||||
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
|
||||
Bundle-ActivationPolicy: lazy
|
||||
Require-Bundle: com.sap.sailing.domain.swisstimingadapter,
|
||||
com.mongodb.driver;bundle-version="2.6.2",
|
||||
org.mongodb.mongo-java-driver;bundle-version="2.13.0",
|
||||
com.sap.sse.mongodb,
|
||||
com.sap.sailing.domain,
|
||||
com.sap.sailing.domain.common
|
||||
|
||||
@@ -87,7 +87,7 @@ public class SwissTimingAdapterPersistenceImpl implements SwissTimingAdapterPers
|
||||
@Override
|
||||
public void storeSwissTimingConfiguration(SwissTimingConfiguration swissTimingConfiguration) {
|
||||
DBCollection stConfigCollection = database.getCollection(CollectionNames.SWISSTIMING_CONFIGURATIONS.name());
|
||||
stConfigCollection.ensureIndex(CollectionNames.SWISSTIMING_CONFIGURATIONS.name());
|
||||
stConfigCollection.createIndex(new BasicDBObject(CollectionNames.SWISSTIMING_CONFIGURATIONS.name(), 1));
|
||||
BasicDBObject result = new BasicDBObject();
|
||||
result.put(FieldNames.ST_CONFIG_NAME.name(), swissTimingConfiguration.getName());
|
||||
for (DBObject equallyNamedConfig : stConfigCollection.find(result)) {
|
||||
@@ -104,7 +104,7 @@ public class SwissTimingAdapterPersistenceImpl implements SwissTimingAdapterPers
|
||||
public void storeSwissTimingArchiveConfiguration(
|
||||
SwissTimingArchiveConfiguration createSwissTimingArchiveConfiguration) {
|
||||
DBCollection stArchiveConfigCollection = database.getCollection(CollectionNames.SWISSTIMING_ARCHIVE_CONFIGURATIONS.name());
|
||||
stArchiveConfigCollection.ensureIndex(CollectionNames.SWISSTIMING_ARCHIVE_CONFIGURATIONS.name());
|
||||
stArchiveConfigCollection.createIndex(new BasicDBObject(CollectionNames.SWISSTIMING_ARCHIVE_CONFIGURATIONS.name(), 1));
|
||||
BasicDBObject result = new BasicDBObject();
|
||||
result.put(FieldNames.ST_ARCHIVE_JSON_URL.name(), createSwissTimingArchiveConfiguration.getJsonUrl());
|
||||
for (DBObject equallyNamedConfig : stArchiveConfigCollection.find(result)) {
|
||||
|
||||
@@ -8,7 +8,7 @@ Bundle-RequiredExecutionEnvironment: JavaSE-1.8
|
||||
Fragment-Host: com.sap.sailing.domain.swisstimingadapter
|
||||
Require-Bundle: com.sap.sailing.domain,
|
||||
com.sap.sailing.udpconnector,
|
||||
com.mongodb.driver;bundle-version="2.6.2",
|
||||
org.mongodb.mongo-java-driver;bundle-version="2.13.0",
|
||||
com.sap.sse.mongodb,
|
||||
com.googlecode.java-diff-utils;bundle-version="1.3.0",
|
||||
com.sap.sailing.server,
|
||||
|
||||
@@ -1,21 +1,21 @@
|
||||
Manifest-Version: 1.0
|
||||
Bundle-ManifestVersion: 2
|
||||
Bundle-Name: Swisstimingadapter
|
||||
Bundle-SymbolicName: com.sap.sailing.domain.swisstimingadapter
|
||||
Bundle-Version: 1.0.0.qualifier
|
||||
Bundle-Vendor: SAP
|
||||
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
|
||||
Bundle-ActivationPolicy: lazy
|
||||
Require-Bundle: com.sap.sailing.domain,
|
||||
com.sap.sailing.udpconnector,
|
||||
com.googlecode.java-diff-utils;bundle-version="1.3.0",
|
||||
com.sap.sailing.domain.common,
|
||||
com.sap.sailing.xrr.resultimport,
|
||||
com.sap.sse.common,
|
||||
com.sap.sse,
|
||||
com.sap.sailing.xrr.schema
|
||||
Export-Package: com.sap.sailing.domain.swisstimingadapter,
|
||||
com.sap.sailing.domain.swisstimingadapter.impl;x-friends:="com.sap.sailing.server.test"
|
||||
Import-Package: com.sap.sailing.xrr.schema,
|
||||
org.osgi.framework
|
||||
Bundle-Activator: com.sap.sailing.domain.swisstimingadapter.impl.Activator
|
||||
Manifest-Version: 1.0
|
||||
Bundle-ManifestVersion: 2
|
||||
Bundle-Name: Swisstimingadapter
|
||||
Bundle-SymbolicName: com.sap.sailing.domain.swisstimingadapter
|
||||
Bundle-Version: 1.0.0.qualifier
|
||||
Bundle-Vendor: SAP
|
||||
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
|
||||
Bundle-ActivationPolicy: lazy
|
||||
Require-Bundle: com.sap.sailing.domain,
|
||||
com.sap.sailing.udpconnector,
|
||||
com.googlecode.java-diff-utils;bundle-version="1.3.0",
|
||||
com.sap.sailing.domain.common,
|
||||
com.sap.sailing.xrr.resultimport,
|
||||
com.sap.sse.common,
|
||||
com.sap.sse,
|
||||
com.sap.sailing.xrr.schema
|
||||
Export-Package: com.sap.sailing.domain.swisstimingadapter,
|
||||
com.sap.sailing.domain.swisstimingadapter.impl;x-friends:="com.sap.sailing.server.test"
|
||||
Import-Package: com.sap.sailing.xrr.schema,
|
||||
org.osgi.framework
|
||||
Bundle-Activator: com.sap.sailing.domain.swisstimingadapter.impl.Activator
|
||||
|
||||
@@ -124,7 +124,7 @@ public class DomainFactoryImpl implements DomainFactory {
|
||||
teamMembers.add(person);
|
||||
}
|
||||
DynamicTeam team = new TeamImpl(competitor.getName(), teamMembers, /* coach */ null);
|
||||
result = competitorStore.getOrCreateCompetitor(competitor.getID(), competitor.getName(), null /*displayColor*/, team, boat);
|
||||
result = competitorStore.getOrCreateCompetitor(competitor.getID(), competitor.getName(), null /*displayColor*/, null /*email*/, team, boat);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
@@ -140,7 +140,7 @@ public class DomainFactoryImpl implements DomainFactory {
|
||||
}
|
||||
DynamicTeam team = new TeamImpl(competitor.getName(), teamMembers, /* coach */ null);
|
||||
result = baseDomainFactory.getCompetitorStore().getOrCreateCompetitor(getCompetitorID(competitor.getBoatID(), raceId, boatClass),
|
||||
competitor.getName(), null /*displayColor*/, team, boat);
|
||||
competitor.getName(), null /*displayColor*/, null /*email*/, team, boat);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
@@ -232,7 +232,7 @@ public class LeaderboardDTODiffingTest {
|
||||
@Test
|
||||
public void testCompetitorListChange() {
|
||||
newVersion.competitors = new ArrayList<CompetitorDTO>(newVersion.competitors); // clone competitor list so it's not identical to that of previous version
|
||||
CompetitorDTO somebodyNew = new CompetitorDTOImpl("Someone New", Color.RED, "DE", "GER", "Germany", "GER 1234", "912p09871203987",
|
||||
CompetitorDTO somebodyNew = new CompetitorDTOImpl("Someone New", Color.RED, "someone@nobody.de", "DE", "GER", "Germany", "GER 1234", "912p09871203987",
|
||||
new BoatClassDTO("505", 5.05));
|
||||
newVersion.competitors.add(13, somebodyNew); // insert a competitor; this should mess up all others' indexes; check if this works
|
||||
CompetitorDTO wolfgang = getPreviousCompetitorByName("HUNGER +JESS");
|
||||
@@ -252,7 +252,7 @@ public class LeaderboardDTODiffingTest {
|
||||
Util.addAll(newVersion.getSuppressedCompetitors(), newSuppressedCompetitors);
|
||||
newVersion.setSuppressedCompetitors(newSuppressedCompetitors);
|
||||
newVersion.competitors = new ArrayList<CompetitorDTO>(newVersion.competitors); // clone competitor list so it's not identical to that of previous version
|
||||
CompetitorDTO somebodyNew = new CompetitorDTOImpl("Someone New", Color.RED, "DE", "GER", "Germany", "GER 1234", "912p09871203987",
|
||||
CompetitorDTO somebodyNew = new CompetitorDTOImpl("Someone New", Color.RED, "someone@nobody.de", "DE", "GER", "Germany", "GER 1234", "912p09871203987",
|
||||
new BoatClassDTO("505", 5.05));
|
||||
newVersion.setSuppressed(newVersion.competitors.get(13), true); // suppress an existing competitor; compaction should reduce this to a single number only
|
||||
newVersion.setSuppressed(somebodyNew, true); // check that mixed mode with existing and new competitors works as well
|
||||
@@ -274,7 +274,7 @@ public class LeaderboardDTODiffingTest {
|
||||
@Test
|
||||
public void testDisplayNameChange() {
|
||||
newVersion.competitors = new ArrayList<CompetitorDTO>(newVersion.competitors); // clone competitor list so it's not identical to that of previous version
|
||||
CompetitorDTO somebodyNew = new CompetitorDTOImpl("Someone New", Color.RED, "DE", "GER", "Germany", "GER 1234", "912p09871203987",
|
||||
CompetitorDTO somebodyNew = new CompetitorDTOImpl("Someone New", Color.RED, "someone@nobody.de", "DE", "GER", "Germany", "GER 1234", "912p09871203987",
|
||||
new BoatClassDTO("505", 5.05));
|
||||
newVersion.competitors.add(somebodyNew);
|
||||
newVersion.competitorDisplayNames = new HashMap<CompetitorDTO, String>(newVersion.competitorDisplayNames);
|
||||
@@ -303,7 +303,7 @@ public class LeaderboardDTODiffingTest {
|
||||
List<CompetitorDTO> newOrdering = new ArrayList<CompetitorDTO>(newVersion.getCompetitorsFromBestToWorst(r9));
|
||||
newVersion.setCompetitorsFromBestToWorst(r9, newOrdering);
|
||||
newVersion.competitors = new ArrayList<CompetitorDTO>(newVersion.competitors); // clone competitor list so it's not identical to that of previous version
|
||||
CompetitorDTO somebodyNew = new CompetitorDTOImpl("Someone New", Color.RED, "DE", "GER", "Germany", "GER 1234", "912p09871203987",
|
||||
CompetitorDTO somebodyNew = new CompetitorDTOImpl("Someone New", Color.RED, "someone@nobody.de", "DE", "GER", "Germany", "GER 1234", "912p09871203987",
|
||||
new BoatClassDTO("505", 5.05));
|
||||
newVersion.competitors.add(somebodyNew);
|
||||
newOrdering.add(somebodyNew);
|
||||
|
||||
@@ -15,16 +15,16 @@ import com.sap.sse.common.Color;
|
||||
|
||||
public abstract class AbstractLeaderboardTest {
|
||||
public static CompetitorImpl createCompetitor(String competitorName) {
|
||||
return new CompetitorImpl(competitorName, competitorName, Color.RED, new TeamImpl("STG", Collections.singleton(
|
||||
new PersonImpl(competitorName, new NationalityImpl("GER"),
|
||||
/* dateOfBirth */ null, "This is famous "+competitorName)),
|
||||
new PersonImpl("Rigo van Maas", new NationalityImpl("NED"),
|
||||
/* dateOfBirth */null, "This is Rigo, the coach")), new BoatImpl(competitorName + "'s boat",
|
||||
return new CompetitorImpl(competitorName, competitorName, Color.RED, null, new TeamImpl("STG", Collections.singleton(
|
||||
new PersonImpl(competitorName, new NationalityImpl("GER"),
|
||||
/* dateOfBirth */ null, "This is famous "+competitorName)),
|
||||
new PersonImpl("Rigo van Maas", new NationalityImpl("NED"),
|
||||
/* dateOfBirth */null, "This is Rigo, the coach")), new BoatImpl(competitorName + "'s boat",
|
||||
new BoatClassImpl("505", /* typicallyStartsUpwind */ true), /* sailID */ null));
|
||||
}
|
||||
|
||||
public static Competitor createCompetitor(String competitorName, CompetitorFactory competitorFactory) {
|
||||
return competitorFactory.getOrCreateCompetitor(competitorName, competitorName, Color.RED, new TeamImpl("STG", Collections.singleton(
|
||||
return competitorFactory.getOrCreateCompetitor(competitorName, competitorName, Color.RED, "someone@nobody.de", new TeamImpl("STG", Collections.singleton(
|
||||
new PersonImpl(competitorName, new NationalityImpl("GER"),
|
||||
/* dateOfBirth */ null, "This is famous "+competitorName)),
|
||||
new PersonImpl("Rigo van Maas", new NationalityImpl("NED"),
|
||||
@@ -33,11 +33,11 @@ public abstract class AbstractLeaderboardTest {
|
||||
}
|
||||
|
||||
public static CompetitorImpl createCompetitor(String competitorName, Serializable id) {
|
||||
return new CompetitorImpl(id, competitorName, Color.RED, new TeamImpl("STG", Collections.singleton(
|
||||
new PersonImpl(competitorName, new NationalityImpl("GER"),
|
||||
/* dateOfBirth */ null, "This is famous "+competitorName)),
|
||||
new PersonImpl("Rigo van Maas", new NationalityImpl("NED"),
|
||||
/* dateOfBirth */null, "This is Rigo, the coach")), new BoatImpl(competitorName + "'s boat",
|
||||
return new CompetitorImpl(id, competitorName, Color.RED, null, new TeamImpl("STG", Collections.singleton(
|
||||
new PersonImpl(competitorName, new NationalityImpl("GER"),
|
||||
/* dateOfBirth */ null, "This is famous "+competitorName)),
|
||||
new PersonImpl("Rigo van Maas", new NationalityImpl("NED"),
|
||||
/* dateOfBirth */null, "This is Rigo, the coach")), new BoatImpl(competitorName + "'s boat",
|
||||
new BoatClassImpl("505", /* typicallyStartsUpwind */ true), /* sailID */ null));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -94,6 +94,11 @@ public class CompetitorListenerTest extends AbstractSerializationTest {
|
||||
CompetitorListenerTest.this.oldColor = oldColor;
|
||||
CompetitorListenerTest.this.newColor = newColor;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void emailChanged(String oldEmail, String newEmail) {
|
||||
//TODO
|
||||
}
|
||||
};
|
||||
competitor.addCompetitorChangeListener(listener);
|
||||
}
|
||||
|
||||
@@ -157,8 +157,8 @@ public class LeaderboardCourseChangeTest {
|
||||
Set<Competitor> competitors = new HashSet<>();
|
||||
DynamicBoat mockedBoat = mock(DynamicBoat.class);
|
||||
when(mockedBoat.getBoatClass()).thenReturn(boatClass);
|
||||
competitors.add(new CompetitorImpl(UUID.randomUUID(), "TestCompetitor", Color.BLACK, mock(DynamicTeam.class),
|
||||
mockedBoat));
|
||||
competitors.add(new CompetitorImpl(UUID.randomUUID(), "TestCompetitor", Color.BLACK, null,
|
||||
mock(DynamicTeam.class), mockedBoat));
|
||||
return competitors;
|
||||
}
|
||||
|
||||
|
||||
@@ -188,11 +188,11 @@ public class OfflineSerializationTest extends AbstractSerializationTest {
|
||||
DomainFactory senderDomainFactory = new DomainFactoryImpl();
|
||||
DomainFactory receiverDomainFactory = new DomainFactoryImpl();
|
||||
String competitorName = "Tina Maximiliane Lutz";
|
||||
Competitor sendersCompetitor1 = new CompetitorImpl(123, competitorName, Color.RED, new TeamImpl("STG", Collections.singleton(
|
||||
new PersonImpl(competitorName, senderDomainFactory.getOrCreateNationality("GER"),
|
||||
/* dateOfBirth */ null, "This is famous "+competitorName)),
|
||||
new PersonImpl("Rigo van Maas", senderDomainFactory.getOrCreateNationality("GER"),
|
||||
/* dateOfBirth */null, "This is Rigo, the coach")), new BoatImpl(competitorName + "'s boat",
|
||||
Competitor sendersCompetitor1 = new CompetitorImpl(123, competitorName, Color.RED, null, new TeamImpl("STG", Collections.singleton(
|
||||
new PersonImpl(competitorName, senderDomainFactory.getOrCreateNationality("GER"),
|
||||
/* dateOfBirth */ null, "This is famous "+competitorName)),
|
||||
new PersonImpl("Rigo van Maas", senderDomainFactory.getOrCreateNationality("GER"),
|
||||
/* dateOfBirth */null, "This is Rigo, the coach")), new BoatImpl(competitorName + "'s boat",
|
||||
senderDomainFactory.getOrCreateBoatClass("470", /* typicallyStartsUpwind */ true), "GER 61"));
|
||||
Competitor receiversCompetitor1 = cloneBySerialization(sendersCompetitor1, receiverDomainFactory);
|
||||
Competitor receiversSecondCopyOfCompetitor1 = cloneBySerialization(sendersCompetitor1, receiverDomainFactory);
|
||||
|
||||
@@ -117,7 +117,7 @@ public abstract class StoredTrackBasedTest extends TrackBasedTest {
|
||||
for (String competitorName : getCompetitorNamesOfStoredTracks(KIELER_WOCHE)) {
|
||||
DynamicPerson p = new PersonImpl(competitorName, /* nationality */ null, /* dateOfBirth */ null, /* description */ null);
|
||||
DynamicTeam t = new TeamImpl(competitorName, Collections.singleton(p), /* coach */ null);
|
||||
Competitor c = new CompetitorImpl(competitorName, competitorName, Color.RED, t, new BoatImpl(competitorName,
|
||||
Competitor c = new CompetitorImpl(competitorName, competitorName, Color.RED, null, t, new BoatImpl(competitorName,
|
||||
new BoatClassImpl("505", /* typicallyStartsUpwind */ true), null));
|
||||
DynamicGPSFixTrack<Competitor, GPSFixMoving> track = readTrack(c, KIELER_WOCHE);
|
||||
if (track != null) {
|
||||
|
||||
@@ -34,11 +34,11 @@ public class TackTest extends StoredTrackBasedTestWithTrackedRace {
|
||||
@Override
|
||||
@Before
|
||||
public void setUp() {
|
||||
competitor = new CompetitorImpl(123, "Wolfgang Hunger", Color.RED, new TeamImpl("STG", Collections.singleton(
|
||||
new PersonImpl("Wolfgang Hunger", new NationalityImpl("GER"),
|
||||
/* dateOfBirth */null, "This is famous Wolfgang Hunger")), new PersonImpl("Rigo van Maas",
|
||||
new NationalityImpl("NED"),
|
||||
/* dateOfBirth */null, "This is Rigo, the coach")), new BoatImpl("Wolfgang Hunger's boat",
|
||||
competitor = new CompetitorImpl(123, "Wolfgang Hunger", Color.RED, null, new TeamImpl("STG", Collections.singleton(
|
||||
new PersonImpl("Wolfgang Hunger", new NationalityImpl("GER"),
|
||||
/* dateOfBirth */null, "This is famous Wolfgang Hunger")), new PersonImpl("Rigo van Maas",
|
||||
new NationalityImpl("NED"),
|
||||
/* dateOfBirth */null, "This is Rigo, the coach")), new BoatImpl("Wolfgang Hunger's boat",
|
||||
new BoatClassImpl("505", /* typicallyStartsUpwind */ true), null));
|
||||
setTrackedRace(createTestTrackedRace("Kieler Woche", "505 Race 2", "505", Collections.singleton(competitor),
|
||||
new MillisecondsTimePoint(new GregorianCalendar(2011, 05, 23).getTime())));
|
||||
|
||||
@@ -60,11 +60,11 @@ public abstract class TrackBasedTest {
|
||||
}
|
||||
|
||||
public static CompetitorImpl createCompetitor(String competitorName) {
|
||||
return new CompetitorImpl(UUID.randomUUID(), competitorName, Color.RED, new TeamImpl("STG", Collections.singleton(
|
||||
new PersonImpl(competitorName, new NationalityImpl("GER"),
|
||||
/* dateOfBirth */null, "This is famous " + competitorName)), new PersonImpl("Rigo van Maas",
|
||||
new NationalityImpl("NED"),
|
||||
/* dateOfBirth */null, "This is Rigo, the coach")), new BoatImpl(competitorName + "'s boat",
|
||||
return new CompetitorImpl(UUID.randomUUID(), competitorName, Color.RED, null, new TeamImpl("STG", Collections.singleton(
|
||||
new PersonImpl(competitorName, new NationalityImpl("GER"),
|
||||
/* dateOfBirth */null, "This is famous " + competitorName)), new PersonImpl("Rigo van Maas",
|
||||
new NationalityImpl("NED"),
|
||||
/* dateOfBirth */null, "This is Rigo, the coach")), new BoatImpl(competitorName + "'s boat",
|
||||
new BoatClassImpl("505", /* typicallyStartsUpwind */true), null));
|
||||
}
|
||||
|
||||
|
||||
@@ -270,11 +270,11 @@ public class WindTest {
|
||||
Waypoint w1 = domainFactory.createWaypoint(startFinish, /*passingInstruction*/ null);
|
||||
Waypoint w2 = domainFactory.createWaypoint(top, /*passingInstruction*/ null);
|
||||
Waypoint w3 = domainFactory.createWaypoint(startFinish, /*passingInstruction*/ null);
|
||||
Competitor competitor = new CompetitorImpl(123, "Test Competitor", Color.RED, new TeamImpl("STG", Collections.singleton(
|
||||
new PersonImpl("Test Competitor", new NationalityImpl("GER"),
|
||||
/* dateOfBirth */null, "This is famous " + "Test Competitor")), new PersonImpl("Rigo van Maas",
|
||||
new NationalityImpl("NED"),
|
||||
/* dateOfBirth */null, "This is Rigo, the coach")), new BoatImpl("Test Competitor" + "'s boat",
|
||||
Competitor competitor = new CompetitorImpl(123, "Test Competitor", Color.RED, null, new TeamImpl("STG", Collections.singleton(
|
||||
new PersonImpl("Test Competitor", new NationalityImpl("GER"),
|
||||
/* dateOfBirth */null, "This is famous " + "Test Competitor")), new PersonImpl("Rigo van Maas",
|
||||
new NationalityImpl("NED"),
|
||||
/* dateOfBirth */null, "This is Rigo, the coach")), new BoatImpl("Test Competitor" + "'s boat",
|
||||
new BoatClassImpl("505", /* typicallyStartsUpwind */true), null));
|
||||
final BoatClass boatClass = domainFactory.getOrCreateBoatClass("ESS40");
|
||||
DynamicTrackedRace trackedRace = new DynamicTrackedRaceImpl(new DynamicTrackedRegattaImpl(
|
||||
|
||||
@@ -45,9 +45,9 @@ import com.sap.sse.common.Util;
|
||||
import com.sap.sse.common.impl.MillisecondsTimePoint;
|
||||
|
||||
public class AbstractMockedRaceMarkPassingTest {
|
||||
protected Competitor bob = new CompetitorImpl("Bob", "Bob", null, null, null);
|
||||
protected Competitor joe = new CompetitorImpl("Joe", "Joe", null, null, null);
|
||||
protected Competitor mike = new CompetitorImpl("Mike", "Mike", null, null, null);
|
||||
protected Competitor bob = new CompetitorImpl("Bob", "Bob", null, null, null, null);
|
||||
protected Competitor joe = new CompetitorImpl("Joe", "Joe", null, null, null, null);
|
||||
protected Competitor mike = new CompetitorImpl("Mike", "Mike", null, null, null, null);
|
||||
|
||||
protected Mark m = new MarkImpl("black");
|
||||
protected Mark m2 = new MarkImpl("white 1");
|
||||
|
||||
@@ -13,6 +13,7 @@ import com.sap.sailing.domain.base.BoatClass;
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.base.CourseArea;
|
||||
import com.sap.sailing.domain.base.CourseBase;
|
||||
import com.sap.sailing.domain.base.EventFetcher;
|
||||
import com.sap.sailing.domain.base.Leg;
|
||||
import com.sap.sailing.domain.base.Mark;
|
||||
import com.sap.sailing.domain.base.RaceColumnListener;
|
||||
@@ -290,7 +291,7 @@ public class MockedTrackedRace implements DynamicTrackedRace {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Iterable<Competitor> getCompetitors() {
|
||||
public Iterable<Competitor> getAllCompetitors() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -430,6 +431,10 @@ public class MockedTrackedRace implements DynamicTrackedRace {
|
||||
@Override
|
||||
public void removeListener(RegattaLikeListener listener) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void adjustEventToRegattaAssociation(EventFetcher eventFetcher) {
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ Bundle-Version: 1.0.0.qualifier
|
||||
Bundle-Vendor: SAP
|
||||
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
|
||||
Bundle-ActivationPolicy: lazy
|
||||
Require-Bundle: com.mongodb.driver;bundle-version="2.6.2",
|
||||
Require-Bundle: org.mongodb.mongo-java-driver;bundle-version="2.13.0",
|
||||
com.sap.sse.mongodb,
|
||||
com.sap.sailing.domain.tractracadapter,
|
||||
com.sap.sailing.domain,
|
||||
|
||||
@@ -18,7 +18,7 @@ public class MongoObjectFactoryImpl implements MongoObjectFactory {
|
||||
@Override
|
||||
public void storeTracTracConfiguration(TracTracConfiguration tracTracConfiguration) {
|
||||
DBCollection ttConfigCollection = database.getCollection(CollectionNames.TRACTRAC_CONFIGURATIONS.name());
|
||||
ttConfigCollection.ensureIndex(CollectionNames.TRACTRAC_CONFIGURATIONS.name());
|
||||
ttConfigCollection.createIndex(new BasicDBObject(CollectionNames.TRACTRAC_CONFIGURATIONS.name(), 1));
|
||||
BasicDBObject result = new BasicDBObject();
|
||||
result.put(FieldNames.TT_CONFIG_NAME.name(), tracTracConfiguration.getName());
|
||||
for (DBObject equallyNamedConfig : ttConfigCollection.find(result)) {
|
||||
|
||||
@@ -259,7 +259,7 @@ public class DomainFactoryImpl implements DomainFactory {
|
||||
}
|
||||
DynamicTeam team = getOrCreateTeam(name, nationality, competitorId);
|
||||
DynamicBoat boat = new BoatImpl(shortName, boatClass, shortName);
|
||||
result = competitorStore.getOrCreateCompetitor(competitorId, name, null /*displayColor*/, team, boat);
|
||||
result = competitorStore.getOrCreateCompetitor(competitorId, name, null /*displayColor*/, null /*email*/, team, boat);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -1,40 +1,40 @@
|
||||
Manifest-Version: 1.0
|
||||
Bundle-ManifestVersion: 2
|
||||
Bundle-Name: Domain
|
||||
Bundle-SymbolicName: com.sap.sailing.domain
|
||||
Bundle-Version: 1.0.0.qualifier
|
||||
Bundle-Vendor: SAP
|
||||
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
|
||||
Bundle-ClassPath: .
|
||||
Export-Package: com.sap.sailing.domain.base,
|
||||
com.sap.sailing.domain.base.impl,
|
||||
com.sap.sailing.domain.confidence,
|
||||
com.sap.sailing.domain.leaderboard,
|
||||
com.sap.sailing.domain.leaderboard.caching,
|
||||
com.sap.sailing.domain.leaderboard.impl,
|
||||
com.sap.sailing.domain.leaderboard.meta,
|
||||
com.sap.sailing.domain.markpassingcalculation,
|
||||
com.sap.sailing.domain.markpassingcalculation.splining,
|
||||
com.sap.sailing.domain.masterdataimport,
|
||||
com.sap.sailing.domain.racelog,
|
||||
com.sap.sailing.domain.racelog.impl,
|
||||
com.sap.sailing.domain.racelog.tracking,
|
||||
com.sap.sailing.domain.regattalike,
|
||||
com.sap.sailing.domain.regattalog,
|
||||
com.sap.sailing.domain.regattalog.impl,
|
||||
com.sap.sailing.domain.trackfiles,
|
||||
com.sap.sailing.domain.trackimport,
|
||||
com.sap.sailing.domain.tracking,
|
||||
com.sap.sailing.domain.tracking.impl,
|
||||
com.sap.sailing.util,
|
||||
com.sap.sailing.util.impl;x-friends:="com.sap.sailing.server.replication,com.sap.sailing.domain.test"
|
||||
Bundle-ActivationPolicy: lazy
|
||||
Require-Bundle: com.googlecode.java-diff-utils;bundle-version="1.3.0",
|
||||
com.sap.sailing.domain.shared.android,
|
||||
com.sap.sailing.domain.common,
|
||||
org.json.simple;bundle-version="1.1.0",
|
||||
com.sap.sailing.geocoding,
|
||||
com.sap.sse.datamining.shared,
|
||||
com.sap.sse.common,
|
||||
com.sap.sse,
|
||||
com.sap.sse.shared.android
|
||||
Manifest-Version: 1.0
|
||||
Bundle-ManifestVersion: 2
|
||||
Bundle-Name: Domain
|
||||
Bundle-SymbolicName: com.sap.sailing.domain
|
||||
Bundle-Version: 1.0.0.qualifier
|
||||
Bundle-Vendor: SAP
|
||||
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
|
||||
Bundle-ClassPath: .
|
||||
Export-Package: com.sap.sailing.domain.base,
|
||||
com.sap.sailing.domain.base.impl,
|
||||
com.sap.sailing.domain.confidence,
|
||||
com.sap.sailing.domain.leaderboard,
|
||||
com.sap.sailing.domain.leaderboard.caching,
|
||||
com.sap.sailing.domain.leaderboard.impl,
|
||||
com.sap.sailing.domain.leaderboard.meta,
|
||||
com.sap.sailing.domain.markpassingcalculation,
|
||||
com.sap.sailing.domain.markpassingcalculation.splining,
|
||||
com.sap.sailing.domain.masterdataimport,
|
||||
com.sap.sailing.domain.racelog,
|
||||
com.sap.sailing.domain.racelog.impl,
|
||||
com.sap.sailing.domain.racelog.tracking,
|
||||
com.sap.sailing.domain.regattalike,
|
||||
com.sap.sailing.domain.regattalog,
|
||||
com.sap.sailing.domain.regattalog.impl,
|
||||
com.sap.sailing.domain.trackfiles,
|
||||
com.sap.sailing.domain.trackimport,
|
||||
com.sap.sailing.domain.tracking,
|
||||
com.sap.sailing.domain.tracking.impl,
|
||||
com.sap.sailing.util,
|
||||
com.sap.sailing.util.impl;x-friends:="com.sap.sailing.server.replication,com.sap.sailing.domain.test"
|
||||
Bundle-ActivationPolicy: lazy
|
||||
Require-Bundle: com.googlecode.java-diff-utils;bundle-version="1.3.0",
|
||||
com.sap.sailing.domain.shared.android,
|
||||
com.sap.sailing.domain.common,
|
||||
org.json.simple;bundle-version="1.1.0",
|
||||
com.sap.sailing.geocoding,
|
||||
com.sap.sse.datamining.shared,
|
||||
com.sap.sse.common,
|
||||
com.sap.sse,
|
||||
com.sap.sse.shared.android
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
package com.sap.sailing.domain.base;
|
||||
|
||||
public interface EventFetcher {
|
||||
Iterable<Event> getAllEvents();
|
||||
}
|
||||
@@ -103,7 +103,7 @@ public interface Regatta extends Named, WithID, IsRegattaLike {
|
||||
|
||||
BoatClass getBoatClass();
|
||||
|
||||
Iterable<Competitor> getCompetitors();
|
||||
Iterable<Competitor> getAllCompetitors();
|
||||
|
||||
/**
|
||||
* Will remove the series from this regatta. Will also call {@link RaceColumn#removeRaceIdentifier(Fleet)} to make
|
||||
@@ -168,4 +168,12 @@ public interface Regatta extends Named, WithID, IsRegattaLike {
|
||||
* Updates the flag deciding whether to use start time inference. See {@link #useStartTimeInference()}.
|
||||
*/
|
||||
void setUseStartTimeInference(boolean useStartTimeInference);
|
||||
|
||||
/**
|
||||
* {@link Event} manages an association to its {@link Event#getRegattas() regattas}. When something on the
|
||||
* regatta changes (in particular, the implicit link to an event through an event's {@link CourseArea} that
|
||||
* is assigned as this regatta's {@link #setDefaultCourseArea(CourseArea) default course area}), the
|
||||
* opposite end of the association needs to be maintained on the event's side.
|
||||
*/
|
||||
void adjustEventToRegattaAssociation(EventFetcher eventFetcher);
|
||||
}
|
||||
|
||||
@@ -10,7 +10,7 @@ public interface DynamicCompetitorStore extends CompetitorStore {
|
||||
DynamicCompetitor getExistingCompetitorById(Serializable competitorId);
|
||||
|
||||
@Override
|
||||
DynamicCompetitor getOrCreateCompetitor(Serializable competitorId, String name, Color displayColor, DynamicTeam team, DynamicBoat boat);
|
||||
DynamicCompetitor getOrCreateCompetitor(Serializable competitorId, String name, Color displayColor, String email, DynamicTeam team, DynamicBoat boat);
|
||||
|
||||
@Override
|
||||
Iterable<? extends DynamicCompetitor> getCompetitors();
|
||||
|
||||
@@ -12,9 +12,12 @@ import java.util.logging.Logger;
|
||||
|
||||
import com.sap.sailing.domain.abstractlog.race.RaceLogEvent;
|
||||
import com.sap.sailing.domain.abstractlog.regatta.RegattaLog;
|
||||
import com.sap.sailing.domain.abstractlog.shared.analyzing.RegisteredCompetitorsAnalyzer;
|
||||
import com.sap.sailing.domain.base.BoatClass;
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.base.CourseArea;
|
||||
import com.sap.sailing.domain.base.Event;
|
||||
import com.sap.sailing.domain.base.EventFetcher;
|
||||
import com.sap.sailing.domain.base.Fleet;
|
||||
import com.sap.sailing.domain.base.RaceColumn;
|
||||
import com.sap.sailing.domain.base.RaceColumnInSeries;
|
||||
@@ -297,13 +300,26 @@ public class RegattaImpl extends NamedImpl implements Regatta, RaceColumnListene
|
||||
}
|
||||
|
||||
@Override
|
||||
public Iterable<Competitor> getCompetitors() {
|
||||
public Iterable<Competitor> getAllCompetitors() {
|
||||
Set<Competitor> result = new HashSet<Competitor>();
|
||||
for (RaceDefinition race : getAllRaces()) {
|
||||
for (Competitor c : race.getCompetitors()) {
|
||||
result.add(c);
|
||||
}
|
||||
}
|
||||
for (Series series : getSeries()) {
|
||||
for (RaceColumn rc : series.getRaceColumns()) {
|
||||
for (Fleet fleet : rc.getFleets()) {
|
||||
TrackedRace trackedRace = rc.getTrackedRace(fleet);
|
||||
if (trackedRace != null) {
|
||||
Util.addAll(trackedRace.getRace().getCompetitors(), result);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
//consider {@link RegattaLog}
|
||||
Set<Competitor> viaLog = new RegisteredCompetitorsAnalyzer<>(regattaLikeHelper.getRegattaLog()).analyze();
|
||||
result.addAll(viaLog);
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -551,4 +567,17 @@ public class RegattaImpl extends NamedImpl implements Regatta, RaceColumnListene
|
||||
public void removeListener(RegattaLikeListener listener) {
|
||||
regattaLikeHelper.removeListener(listener);
|
||||
}
|
||||
|
||||
public void adjustEventToRegattaAssociation(EventFetcher eventFetcher) {
|
||||
CourseArea defaultCourseArea = getDefaultCourseArea();
|
||||
for (Event event : eventFetcher.getAllEvents()) {
|
||||
event.removeRegatta(this);
|
||||
for (CourseArea courseArea : event.getVenue().getCourseAreas()) {
|
||||
if (defaultCourseArea != null && courseArea.getId().equals(defaultCourseArea)) {
|
||||
event.addRegatta(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -88,7 +88,9 @@ public interface Leaderboard extends LeaderboardBase {
|
||||
* in a regular view of the leaderboard. Editors for leaderboards shall, though, also display the suppressed competitors
|
||||
* together with a visual indication showing which competitors are currently suppressed. The "suppressed-state" of a
|
||||
* competitor can change over the life cycle of a leaderboard. A typical use case for suppressing a competitor is
|
||||
* removing one-time entries from a series (meta-)leaderboard or suppressing a camera boat in scoring.
|
||||
* removing one-time entries from a series (meta-)leaderboard or suppressing a camera boat in scoring.<p>
|
||||
*
|
||||
* @return all competitors in this leaderboard, including the suppressed ones.
|
||||
*/
|
||||
Iterable<Competitor> getAllCompetitors();
|
||||
|
||||
|
||||
@@ -116,6 +116,11 @@ public class LeaderboardCacheManager {
|
||||
competitor.removeCompetitorChangeListener(this);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void emailChanged(String oldEmail, String newEmail) {
|
||||
//ignore (email not shown in leaderboard)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -70,6 +70,10 @@ public abstract class AbstractLeaderboardImpl extends AbstractSimpleLeaderboardI
|
||||
return Collections.unmodifiableSet(trackedRaces);
|
||||
}
|
||||
|
||||
/**
|
||||
* This default implementation collects all competitors by visiting all {@link TrackedRace}s associated with this
|
||||
* leaderboard's columns (see {@link #getTrackedRaces()}).
|
||||
*/
|
||||
@Override
|
||||
public Iterable<Competitor> getAllCompetitors() {
|
||||
if (allCompetitorsCache == null) {
|
||||
|
||||
@@ -6,10 +6,14 @@ import java.io.ObjectOutputStream;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import com.sap.sailing.domain.abstractlog.regatta.RegattaLog;
|
||||
import com.sap.sailing.domain.abstractlog.shared.analyzing.RegisteredCompetitorsAnalyzer;
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.base.CourseArea;
|
||||
import com.sap.sailing.domain.base.Fleet;
|
||||
import com.sap.sailing.domain.base.RaceColumn;
|
||||
@@ -275,4 +279,16 @@ public class FlexibleLeaderboardImpl extends AbstractLeaderboardImpl implements
|
||||
public void removeListener(RegattaLikeListener listener) {
|
||||
regattaLikeHelper.removeListener(listener);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Iterable<Competitor> getAllCompetitors() {
|
||||
Set<Competitor> result = new HashSet<>();
|
||||
for (Competitor c : super.getAllCompetitors()) {
|
||||
result.add(c);
|
||||
}
|
||||
//consider {@link RegattaLog}
|
||||
Set<Competitor> viaLog = new RegisteredCompetitorsAnalyzer<>(regattaLikeHelper.getRegattaLog()).analyze();
|
||||
result.addAll(viaLog);
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,11 +3,14 @@ package com.sap.sailing.domain.leaderboard.impl;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import com.sap.sailing.domain.abstractlog.regatta.RegattaLog;
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.base.CourseArea;
|
||||
import com.sap.sailing.domain.base.Fleet;
|
||||
import com.sap.sailing.domain.base.RaceColumn;
|
||||
import com.sap.sailing.domain.base.RaceColumnInSeries;
|
||||
import com.sap.sailing.domain.base.RaceColumnListener;
|
||||
import com.sap.sailing.domain.base.RaceDefinition;
|
||||
import com.sap.sailing.domain.base.Regatta;
|
||||
import com.sap.sailing.domain.base.Series;
|
||||
import com.sap.sailing.domain.base.impl.RaceColumnInSeriesImpl;
|
||||
@@ -96,6 +99,17 @@ public class RegattaLeaderboardImpl extends AbstractLeaderboardImpl implements R
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Delegates to {@link Regatta#getAllCompetitors()} which is expected to deliver all competitors from this
|
||||
* leaderboard's regatta which includes those belonging to {@link RaceDefinition races}
|
||||
* {@link Regatta#getAllRaces() belonging to the regatta} as well as competitors listed on the regatta's
|
||||
* {@link RegattaLog}.
|
||||
*/
|
||||
@Override
|
||||
public Iterable<Competitor> getAllCompetitors() {
|
||||
return regatta.getAllCompetitors();
|
||||
}
|
||||
|
||||
@Override
|
||||
public IsRegattaLike getRegattaLike() {
|
||||
return regatta;
|
||||
|
||||
@@ -72,6 +72,16 @@ public class DummyMarkPassingWithTimePointOnly implements MarkPassing {
|
||||
@Override
|
||||
public void removeCompetitorChangeListener(CompetitorChangeListener listener) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getEmail() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasEmail() {
|
||||
return false;
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,392 +9,392 @@
|
||||
The SAP Sailing Server.
|
||||
|
||||
Provides connectivity to a TracTrac live GPS feed as well as a live feed from an Expedition system.
|
||||
Computes leaderboard information for sailing races and offers RESTful APIs to all of this.
|
||||
</description>
|
||||
|
||||
<copyright url="http://www.example.com/copyright">
|
||||
[Enter Copyright Description here.]
|
||||
</copyright>
|
||||
|
||||
<license url="http://www.example.com/license">
|
||||
[Enter License Description here.]
|
||||
</license>
|
||||
|
||||
<requires>
|
||||
<import plugin="com.googlecode.java-diff-utils" version="1.3.0" match="greaterOrEqual"/>
|
||||
<import plugin="org.eclipse.osgi" version="3.10.1" match="greaterOrEqual"/>
|
||||
<import plugin="javax.servlet" version="3.1.0" match="greaterOrEqual"/>
|
||||
<import plugin="com.mongodb.driver" version="2.6.2" match="greaterOrEqual"/>
|
||||
<import plugin="com.google.gwt.osgi" version="2.6.1" match="greaterOrEqual"/>
|
||||
<import plugin="org.json.simple" version="1.1.0" match="greaterOrEqual"/>
|
||||
<import plugin="org.moxieapps.gwt.highcharts" version="1.1.4" match="greaterOrEqual"/>
|
||||
<import plugin="org.apache.geronimo.specs.geronimo-jms_1.1_spec"/>
|
||||
<import plugin="com.rabbitmq.client"/>
|
||||
<import plugin="org.apache.geronimo.specs.geronimo-j2ee-management_1.1_spec"/>
|
||||
</requires>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sailing.geocoding"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sailing.domain.common"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sailing.domain"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sailing.domain.tractracadapter"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sailing.expeditionconnector"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sailing.server"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sailing.server.gateway"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sailing.server.gateway.ess40"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.tractrac.clientmodule"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sailing.declination"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sailing.domain.persistence"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sailing.domain.swisstimingadapter"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sailing.domain.swisstimingadapter.persistence"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sailing.domain.swisstimingreplayadapter"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sailing.domain.tractracadapter.persistence"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sse.gwt"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sse.security"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sse.security.ui"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sse.security.userstore.mongodb"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sailing.gwt.ui"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sailing.udpconnector"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sailing.xmlexport"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sailing.simulator"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sailing.www"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sailing.www.events"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"/>
|
||||
|
||||
<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"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sailing.ess40.resultimport"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sailing.freg.resultimport"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sailing.barbados.resultimport"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sailing.sailwave.resultimport"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sailing.manage2sail.resultimport"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sailing.velum.resultimport"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sailing.monitoring"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sailing.xrr.resultimport"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sailing.domain.igtimiadapter"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sailing.domain.igtimiadapter.persistence"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sailing.domain.racelogtrackingadapter"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sailing.domain.deckmanadapter"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sailing.autoload"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sse"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sse.common"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sse.datamining"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sse.datamining.shared"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sse.gateway"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sse.gwt.adminconsole"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sse.mongodb"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sse.operationaltransformation"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sse.replication"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sailing.xrr.structureimport"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sailing.server.gateway.serialization.shared.android"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sailing.server.gateway.serialization"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
Computes leaderboard information for sailing races and offers RESTful APIs to all of this.
|
||||
</description>
|
||||
|
||||
<copyright url="http://www.example.com/copyright">
|
||||
[Enter Copyright Description here.]
|
||||
</copyright>
|
||||
|
||||
<license url="http://www.example.com/license">
|
||||
[Enter License Description here.]
|
||||
</license>
|
||||
|
||||
<requires>
|
||||
<import plugin="com.googlecode.java-diff-utils" version="1.3.0" match="greaterOrEqual"/>
|
||||
<import plugin="org.eclipse.osgi" version="3.10.1" match="greaterOrEqual"/>
|
||||
<import plugin="javax.servlet" version="3.1.0" match="greaterOrEqual"/>
|
||||
<import plugin="com.mongodb.driver" version="2.6.2" match="greaterOrEqual"/>
|
||||
<import plugin="com.google.gwt.osgi" version="2.6.1" match="greaterOrEqual"/>
|
||||
<import plugin="org.json.simple" version="1.1.0" match="greaterOrEqual"/>
|
||||
<import plugin="org.moxieapps.gwt.highcharts" version="1.1.4" match="greaterOrEqual"/>
|
||||
<import plugin="org.apache.geronimo.specs.geronimo-jms_1.1_spec"/>
|
||||
<import plugin="com.rabbitmq.client"/>
|
||||
<import plugin="org.apache.geronimo.specs.geronimo-j2ee-management_1.1_spec"/>
|
||||
</requires>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sailing.geocoding"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sailing.domain.common"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sailing.domain"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sailing.domain.tractracadapter"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sailing.expeditionconnector"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sailing.server"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sailing.server.gateway"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sailing.server.gateway.ess40"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.tractrac.clientmodule"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sailing.declination"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sailing.domain.persistence"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sailing.domain.swisstimingadapter"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sailing.domain.swisstimingadapter.persistence"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sailing.domain.swisstimingreplayadapter"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sailing.domain.tractracadapter.persistence"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sse.gwt"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sse.security"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sse.security.ui"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sse.security.userstore.mongodb"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sailing.gwt.ui"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sailing.udpconnector"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sailing.xmlexport"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sailing.simulator"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sailing.www"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sailing.www.events"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"/>
|
||||
|
||||
<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"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sailing.ess40.resultimport"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sailing.freg.resultimport"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sailing.barbados.resultimport"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sailing.sailwave.resultimport"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sailing.manage2sail.resultimport"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sailing.velum.resultimport"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sailing.monitoring"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sailing.xrr.resultimport"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sailing.domain.igtimiadapter"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sailing.domain.igtimiadapter.persistence"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sailing.domain.racelogtrackingadapter"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sailing.domain.deckmanadapter"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sailing.autoload"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sse"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sse.common"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sse.datamining"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sse.datamining.shared"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sse.gateway"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sse.gwt.adminconsole"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sse.mongodb"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sse.operationaltransformation"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sse.replication"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sailing.xrr.structureimport"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sailing.server.gateway.serialization.shared.android"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sailing.server.gateway.serialization"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sse.filestorage"
|
||||
download-size="0"
|
||||
@@ -402,18 +402,32 @@ Computes leaderboard information for sailing races and offers RESTful APIs to al
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sse.shared.android"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sailing.dashboards.gwt"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
</feature>
|
||||
<plugin
|
||||
id="com.sap.sse.shared.android"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sailing.dashboards.gwt"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sse.mail"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.sap.sailing.dashboards.gwt"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
</feature>
|
||||
|
||||
@@ -11,6 +11,7 @@ import com.sap.sailing.domain.base.BoatClass;
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.base.CourseArea;
|
||||
import com.sap.sailing.domain.base.CourseBase;
|
||||
import com.sap.sailing.domain.base.EventFetcher;
|
||||
import com.sap.sailing.domain.base.Leg;
|
||||
import com.sap.sailing.domain.base.Mark;
|
||||
import com.sap.sailing.domain.base.RaceColumnListener;
|
||||
@@ -335,7 +336,7 @@ public class MockedTrackedRace implements DynamicTrackedRace {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Iterable<Competitor> getCompetitors() {
|
||||
public Iterable<Competitor> getAllCompetitors() {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
@@ -517,6 +518,12 @@ public class MockedTrackedRace implements DynamicTrackedRace {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void adjustEventToRegattaAssociation(EventFetcher eventFetcher) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -163,8 +163,8 @@ public class PolarSheetGenerationServiceTest {
|
||||
waypoints.add(new WaypointImpl(null));
|
||||
waypoints.add(new WaypointImpl(null));
|
||||
ArrayList<Competitor> competitors = new ArrayList<Competitor>();
|
||||
Competitor competitor = new CompetitorImpl(UUID.randomUUID(), "Hans Frantz", Color.RED, new TeamImpl("SAP", null, null),
|
||||
new BoatImpl("Schnelle Forelle", forelle, "GER000"));
|
||||
Competitor competitor = new CompetitorImpl(UUID.randomUUID(), "Hans Frantz", Color.RED, null,
|
||||
new TeamImpl("SAP", null, null), new BoatImpl("Schnelle Forelle", forelle, "GER000"));
|
||||
competitors.add(competitor);
|
||||
RaceDefinition race = new RaceDefinitionImpl("Forelle1", new CourseImpl("ForelleCourse", waypoints), forelle, competitors);
|
||||
return race;
|
||||
|
||||
@@ -1,8 +1,5 @@
|
||||
package com.sap.sailing.gwt.ui.test;
|
||||
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.UnknownHostException;
|
||||
import java.text.ParseException;
|
||||
@@ -11,9 +8,6 @@ import java.util.List;
|
||||
|
||||
import javax.xml.bind.JAXBException;
|
||||
|
||||
import org.osgi.framework.BundleContext;
|
||||
import org.osgi.util.tracker.ServiceTracker;
|
||||
|
||||
import com.sap.sailing.domain.base.BoatClass;
|
||||
import com.sap.sailing.domain.base.DomainFactory;
|
||||
import com.sap.sailing.domain.common.RegattaIdentifier;
|
||||
@@ -27,7 +21,6 @@ import com.sap.sailing.domain.swisstimingadapter.SwissTimingAdapter;
|
||||
import com.sap.sailing.domain.swisstimingadapter.SwissTimingAdapterFactory;
|
||||
import com.sap.sailing.domain.swisstimingadapter.SwissTimingFactory;
|
||||
import com.sap.sailing.domain.swisstimingreplayadapter.SwissTimingReplayService;
|
||||
import com.sap.sailing.domain.swisstimingreplayadapter.SwissTimingReplayServiceFactory;
|
||||
import com.sap.sailing.domain.tracking.RaceHandle;
|
||||
import com.sap.sailing.domain.tracking.TrackerManager;
|
||||
import com.sap.sailing.domain.tractracadapter.TracTracAdapterFactory;
|
||||
@@ -43,72 +36,37 @@ import com.sap.sse.replication.impl.ReplicationServiceImpl;
|
||||
|
||||
public class SailingServiceImplMock extends SailingServiceImpl {
|
||||
private static final long serialVersionUID = 8564037671550730455L;
|
||||
private RacingEventService service;
|
||||
|
||||
|
||||
private final RacingEventService service;
|
||||
private ReplicationService replicationService;
|
||||
private final ScoreCorrectionProvider scoreCorrectionProvider = null;
|
||||
private final TracTracAdapterFactory tracTracAdapterFactory = TracTracAdapterFactory.INSTANCE;
|
||||
private final SwissTimingAdapterFactory swissTimingAdapterFactory;
|
||||
private final SwissTimingReplayService swissTimingReplayService = null;
|
||||
private final RaceLogTrackingAdapterFactory raceLogTrackingAdapterFactory = RaceLogTrackingAdapterFactory.INSTANCE;
|
||||
|
||||
public SailingServiceImplMock() {
|
||||
super();
|
||||
service = new RacingEventServiceImpl(true, new MockSmartphoneImeiServiceFinderFactory());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected ServiceTracker<RacingEventService, RacingEventService> createAndOpenRacingEventServiceTracker(
|
||||
BundleContext context) {
|
||||
@SuppressWarnings("unchecked")
|
||||
ServiceTracker<RacingEventService, RacingEventService> result = mock(ServiceTracker.class);
|
||||
when(result.getService()).thenReturn(new RacingEventServiceImpl());
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected ServiceTracker<ReplicationService, ReplicationService> createAndOpenReplicationServiceTracker(
|
||||
BundleContext context) {
|
||||
@SuppressWarnings("unchecked")
|
||||
ServiceTracker<ReplicationService, ReplicationService> result = mock(ServiceTracker.class);
|
||||
try {
|
||||
final RacingEventService replicable = new RacingEventServiceImpl();
|
||||
final ReplicationServiceImpl replicationService =
|
||||
new ReplicationServiceImpl("test exchange", "localhost", 0,
|
||||
new ReplicationInstancesManager(), new AbstractReplicablesProvider() {
|
||||
@Override
|
||||
public Iterable<Replicable<?, ?>> getReplicables() {
|
||||
return Collections.<Replicable<?, ?>>singleton(replicable);
|
||||
}
|
||||
});
|
||||
when(result.getService()).thenReturn(replicationService);
|
||||
replicationService = new ReplicationServiceImpl("test exchange", "localhost", 0,
|
||||
new ReplicationInstancesManager(), new AbstractReplicablesProvider() {
|
||||
@Override
|
||||
public Iterable<Replicable<?, ?>> getReplicables() {
|
||||
return Collections.<Replicable<?, ?>> singleton(service);
|
||||
}
|
||||
});
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException();
|
||||
e.printStackTrace();
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected ServiceTracker<ScoreCorrectionProvider, ScoreCorrectionProvider> createAndOpenScoreCorrectionProviderServiceTracker(
|
||||
BundleContext bundleContext) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected ServiceTracker<TracTracAdapterFactory, TracTracAdapterFactory> createAndOpenTracTracAdapterTracker(
|
||||
BundleContext context) {
|
||||
@SuppressWarnings("unchecked")
|
||||
ServiceTracker<TracTracAdapterFactory, TracTracAdapterFactory> result = mock(ServiceTracker.class);
|
||||
when(result.getService()).thenReturn(TracTracAdapterFactory.INSTANCE);
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected ServiceTracker<SwissTimingAdapterFactory, SwissTimingAdapterFactory> createAndOpenSwissTimingAdapterTracker(
|
||||
BundleContext context) {
|
||||
@SuppressWarnings("unchecked")
|
||||
ServiceTracker<SwissTimingAdapterFactory, SwissTimingAdapterFactory> result = mock(ServiceTracker.class);
|
||||
when(result.getService()).thenReturn(new SwissTimingAdapterFactory() {
|
||||
swissTimingAdapterFactory = new SwissTimingAdapterFactory() {
|
||||
@Override
|
||||
public SwissTimingAdapter getOrCreateSwissTimingAdapter(DomainFactory baseDomainFactory) {
|
||||
return new SwissTimingAdapter() {
|
||||
@Override
|
||||
public List<com.sap.sailing.domain.swisstimingadapter.RaceRecord> getSwissTimingRaceRecords(
|
||||
String hostname, int port) throws InterruptedException,
|
||||
UnknownHostException, IOException, ParseException {
|
||||
String hostname, int port) throws InterruptedException, UnknownHostException, IOException,
|
||||
ParseException {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
@@ -148,45 +106,43 @@ public class SailingServiceImplMock extends SailingServiceImpl {
|
||||
}
|
||||
};
|
||||
}
|
||||
});
|
||||
return result;
|
||||
};
|
||||
}
|
||||
|
||||
public ScoreCorrectionProvider getScoreCorrectionProvider() {
|
||||
return scoreCorrectionProvider;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected ServiceTracker<SwissTimingReplayServiceFactory, SwissTimingReplayServiceFactory> createAndOpenSwissTimingReplayServiceTracker(
|
||||
BundleContext context) {
|
||||
@SuppressWarnings("unchecked")
|
||||
ServiceTracker<SwissTimingReplayServiceFactory, SwissTimingReplayServiceFactory> result = mock(ServiceTracker.class);
|
||||
final SwissTimingReplayServiceFactory swissTimingReplayService = new SwissTimingReplayServiceFactory() {
|
||||
@Override
|
||||
public SwissTimingReplayService createSwissTimingReplayService(
|
||||
com.sap.sailing.domain.swisstimingadapter.DomainFactory domainFactory) {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
};
|
||||
when(result.getService()).thenReturn(swissTimingReplayService);
|
||||
return result;
|
||||
protected TracTracAdapterFactory getTracTracAdapterFactory() {
|
||||
return tracTracAdapterFactory;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected SwissTimingAdapterFactory getSwissTimingAdapterFactory() {
|
||||
return swissTimingAdapterFactory;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected SwissTimingReplayService getSwissTimingReplayService() {
|
||||
return swissTimingReplayService;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected RaceLogTrackingAdapterFactory getRaceLogTrackingAdapterFactory() {
|
||||
return raceLogTrackingAdapterFactory;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected ServiceTracker<RaceLogTrackingAdapterFactory, RaceLogTrackingAdapterFactory> createAndOpenRaceLogTrackingAdapterTracker(
|
||||
BundleContext context) {
|
||||
@SuppressWarnings("unchecked")
|
||||
ServiceTracker<RaceLogTrackingAdapterFactory, RaceLogTrackingAdapterFactory> result = mock(ServiceTracker.class);
|
||||
RaceLogTrackingAdapterFactory factory = RaceLogTrackingAdapterFactory.INSTANCE;
|
||||
when(result.getService()).thenReturn(factory);
|
||||
return result;
|
||||
protected ReplicationService getReplicationService() {
|
||||
return replicationService;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected RacingEventService getService() {
|
||||
if (service == null) {
|
||||
service = new RacingEventServiceImpl();
|
||||
}
|
||||
return service;
|
||||
}
|
||||
|
||||
|
||||
public RacingEventService getRacingEventService() {
|
||||
return getService();
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
eclipse.preferences.version=1
|
||||
entryPointModules=
|
||||
filesCopiedToWebInfLib=gwt-servlet.jar
|
||||
gwtCompileSettings=PGd3dC1jb21waWxlLXNldHRpbmdzPjxsb2ctbGV2ZWw+SU5GTzwvbG9nLWxldmVsPjxvdXRwdXQtc3R5bGU+T0JGVVNDQVRFRDwvb3V0cHV0LXN0eWxlPjxleHRyYS1hcmdzPjwhW0NEQVRBWy13YXIgLiAtbG9jYWxXb3JrZXJzIDQgLXN0cmljdCAtbG9nTGV2ZWwgVFJBQ0VdXT48L2V4dHJhLWFyZ3M+PHZtLWFyZ3M+PCFbQ0RBVEFbLVhteDIwMjRtIC1EZ3d0LnVzZWFyY2hpdmVzPWZhbHNlXV0+PC92bS1hcmdzPjxlbnRyeS1wb2ludC1tb2R1bGU+Y29tLnNhcC5zYWlsaW5nLmd3dC5Ib21lPC9lbnRyeS1wb2ludC1tb2R1bGU+PC9nd3QtY29tcGlsZS1zZXR0aW5ncz4\=
|
||||
gwtCompileSettings=PGd3dC1jb21waWxlLXNldHRpbmdzPjxsb2ctbGV2ZWw+SU5GTzwvbG9nLWxldmVsPjxvdXRwdXQtc3R5bGU+T0JGVVNDQVRFRDwvb3V0cHV0LXN0eWxlPjxleHRyYS1hcmdzPjwhW0NEQVRBWy13YXIgLiAtbG9jYWxXb3JrZXJzIDQgLXN0cmljdCAtbG9nTGV2ZWwgVFJBQ0VdXT48L2V4dHJhLWFyZ3M+PHZtLWFyZ3M+PCFbQ0RBVEFbLVhteDIwMjRtIC1EZ3d0LnVzZWFyY2hpdmVzPWZhbHNlXV0+PC92bS1hcmdzPjxlbnRyeS1wb2ludC1tb2R1bGU+Y29tLnNhcC5zYWlsaW5nLmd3dC5BdXRvUGxheTwvZW50cnktcG9pbnQtbW9kdWxlPjwvZ3d0LWNvbXBpbGUtc2V0dGluZ3M+
|
||||
|
||||
@@ -10,7 +10,7 @@ Require-Bundle: com.sap.sailing.domain,
|
||||
com.sap.sailing.server,
|
||||
com.sap.sailing.domain.tractracadapter,
|
||||
com.sap.sse.mongodb,
|
||||
com.mongodb.driver;bundle-version="2.6.2",
|
||||
org.mongodb.mongo-java-driver;bundle-version="2.13.0",
|
||||
com.sap.sailing.domain.swisstimingadapter,
|
||||
com.sap.sailing.domain.persistence,
|
||||
com.sap.sailing.domain.swisstimingadapter.persistence,
|
||||
|
||||
@@ -69,7 +69,7 @@
|
||||
<booleanAttribute key="org.eclipse.jdt.launching.DEFAULT_CLASSPATH" value="false"/>
|
||||
<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
|
||||
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="com.google.gwt.dev.DevMode"/>
|
||||
<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-superDevMode -incremental -war "${project_loc:com.sap.sailing.gwt.ui}" -noserver -remoteUI "${gwt_remote_ui_server_port}:${unique_id}" -logLevel INFO -codeServerPort 9997 -startupUrl /gwt/Home.html com.sap.sailing.gwt.Home -startupUrl /gwt/AdminConsole.html com.sap.sailing.gwt.ui.AdminConsole -startupUrl /gwt/LeaderboardEditing.html com.sap.sailing.gwt.ui.LeaderboardEditing -startupUrl /gwt/Leaderboard.html com.sap.sailing.gwt.ui.Leaderboard -startupUrl /gwt/Spectator.html com.sap.sailing.gwt.ui.Spectator -startupUrl /gwt/RaceBoard.html com.sap.sailing.gwt.ui.RaceBoard -startupUrl /gwt/PolarSheets.html com.sap.sailing.gwt.ui.PolarSheets -startupUrl /gwt/RegattaOverview.html com.sap.sailing.gwt.ui.RegattaOverview -startupUrl /gwt/DataMining.html com.sap.sailing.gwt.ui.DataMining -startupUrl /gwt/Simulator.html com.sap.sailing.gwt.ui.Simulator -startupUrl /gwt/VideoPopup.html com.sap.sailing.gwt.ui.VideoPopup com.sap.sailing.gwt.AutoPlay com.sap.sailing.gwt.ui.YoutubePopup"/>
|
||||
<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-superDevMode -incremental -war "${project_loc:com.sap.sailing.gwt.ui}" -noserver -remoteUI "${gwt_remote_ui_server_port}:${unique_id}" -logLevel INFO -codeServerPort 9997 -startupUrl /gwt/Home.html com.sap.sailing.gwt.Home -startupUrl /gwt/AdminConsole.html com.sap.sailing.gwt.ui.AdminConsole -startupUrl /gwt/LeaderboardEditing.html com.sap.sailing.gwt.ui.LeaderboardEditing -startupUrl /gwt/Leaderboard.html com.sap.sailing.gwt.ui.Leaderboard -startupUrl /gwt/Spectator.html com.sap.sailing.gwt.ui.Spectator -startupUrl /gwt/RaceBoard.html com.sap.sailing.gwt.ui.RaceBoard -startupUrl /gwt/PolarSheets.html com.sap.sailing.gwt.ui.PolarSheets -startupUrl /gwt/RegattaOverview.html com.sap.sailing.gwt.ui.RegattaOverview -startupUrl /gwt/DataMining.html com.sap.sailing.gwt.ui.DataMining -startupUrl /gwt/Simulator.html com.sap.sailing.gwt.ui.Simulator -startupUrl /gwt/VideoPopup.html com.sap.sailing.gwt.ui.VideoPopup com.sap.sailing.gwt.AutoPlay com.sap.sailing.gwt.ui.YoutubePopup com.sap.sailing.gwt.ui.Simulator com.sap.sailing.gwt.ui.Leaderboard com.sap.sailing.gwt.ui.PolarSheets com.sap.sailing.gwt.ui.RegattaOverview com.sap.sailing.gwt.ui.Spectator com.sap.sailing.gwt.ui.AdminConsole com.sap.sailing.gwt.ui.LeaderboardEditing com.sap.sailing.gwt.ui.DataMining com.sap.sailing.gwt.Home com.sap.sailing.gwt.ui.RaceBoard"/>
|
||||
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="com.sap.sailing.gwt.ui"/>
|
||||
<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xms1024m -Xmx3072m"/>
|
||||
</launchConfiguration>
|
||||
|
||||
@@ -6,6 +6,7 @@ import com.google.gwt.i18n.client.Messages;
|
||||
public interface TextMessages extends Messages {
|
||||
public static final TextMessages INSTANCE = GWT.create(TextMessages.class);
|
||||
|
||||
String chartSelectionHint();
|
||||
String chooseALanguage();
|
||||
String home();
|
||||
String events();
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
chartSelectionHint=Hint: You can also use the leaderboard (on the LEADERBOARD tab) to select the competitors displayed in the chart.
|
||||
chooseALanguage=Choose a language
|
||||
events=Events
|
||||
home=Home
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
chartSelectionHint=Hinweis: Sie können auch Ergebnisstabelle (im Menü ERGEBNISSE) nutzen, um die im Diagramm angezeigten Teilnehmer auszuwählen.
|
||||
chooseALanguage=Wähle eine Sprache
|
||||
events=Veranstaltungen
|
||||
home=Startseite
|
||||
|
||||