diff --git a/.gitignore b/.gitignore index 0598c974e59..df06bb33160 100644 --- a/.gitignore +++ b/.gitignore @@ -12,20 +12,7 @@ sailing_debug0* dist build /java/.settings/org.eclipse.jdt.core.prefs -/mobile/com.sap.sailing.racecommittee.app/.settings/org.eclipse.jdt.core.prefs -/mobile/com.sap.sailing.racecommittee.app/bin/* -/mobile/com.sap.sailing.racecommittee.app/gen/* -/mobile/com.sap.sailing.racecommittee.glue/.settings/org.eclipse.jdt.core.prefs -/mobile/com.sap.sailing.racecommittee.glue/bin/* -/mobile/com.sap.sailing.racecommittee.glue/gen/* -/mobile/com.sap.sailing.racecommittee.glue/bin -/mobile/com.sap.sailing.racecommittee.glue/gen -/mobile/com.sap.sailing.racecommittee.glue/bin/com.sap.sailing.racecommittee.glue.jar -/mobile/com.sap.sailing.racecommittee.glue/bin/jarlist.cache /java/com.sap.sailing.server.gateway.serialization.test/.settings/*.prefs .DS_Store java/com.sap.sailing.simulator/bin/com/sap/sailing/simulator/Simulator.gwt.xml -/mobile/google-play-services_lib/bin/* - /mobile/com.sap.sailing.racecommittee.app/res/values/keys.xml -/mobile/google-play-services_lib/gen/* diff --git a/configuration/buildAndUpdateProduct.sh b/configuration/buildAndUpdateProduct.sh index 47413897e0f..4b2b783f0fb 100755 --- a/configuration/buildAndUpdateProduct.sh +++ b/configuration/buildAndUpdateProduct.sh @@ -126,6 +126,8 @@ if [ $# -eq 0 ]; then echo "remote-deploy: performs hot deployment of the java code to a remote server" echo "Example: $0 -s dev -w trac@sapsailing.com remote-deploy" echo "" + echo "clean: cleans all code and GWT files" + echo "" echo "Active branch is $active_branch" echo "Project home is $PROJECT_HOME" echo "Server home is $SERVERS_HOME" @@ -174,6 +176,18 @@ if [[ $@ == "" ]]; then fi +if [[ "$@" == "clean" ]]; then + cd $PROJECT_HOME/java + rm -rf com.sap.$PROJECT_TYPE.gwt.ui/com.sap.$PROJECT_TYPE.* + cd $PROJECT_HOME + echo "Using following command: mvn $extra -DargLine=\"$APP_PARAMETERS\" -fae -s $MAVEN_SETTINGS $clean" + echo "Maven version used: `mvn --version`" + mvn $extra -DargLine="$APP_PARAMETERS" -fae -s $MAVEN_SETTINGS $clean 2>&1 | tee $START_DIR/build.log + MVN_EXIT_CODE=${PIPESTATUS[0]} + echo "Maven exit code is $MVN_EXIT_CODE" + exit 0 +fi + if [[ "$@" == "release" ]]; then if [ ! -d $p2PluginRepository/plugins ]; then echo "Could not find source directory $p2PluginRepository!" @@ -231,6 +245,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/configuration/mongodb.cfg $ACDIR/ cp -v $PROJECT_HOME/java/target/udpmirror $ACDIR/ cp -v $PROJECT_HOME/java/target/http2udpmirror $ACDIR @@ -661,6 +676,7 @@ if [[ "$@" == "install" ]] || [[ "$@" == "all" ]]; 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/udpmirror $ACDIR/ cp -v $PROJECT_HOME/java/target/http2udpmirror $ACDIR @@ -744,6 +760,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/env.sh $REMOTE_SERVER_LOGIN:$REMOTE_SERVER/ $SCP_CMD $PROJECT_HOME/java/target/start $REMOTE_SERVER_LOGIN:$REMOTE_SERVER/ diff --git a/home.md b/home.md index 4bbcf4a4368..9bacee0870f 100644 --- a/home.md +++ b/home.md @@ -12,6 +12,16 @@ SAP is at the center of today’s technology revolution, developing innovations * [[Information about this Wiki and HowTo|wiki/howto]] * [[General Project Information|wiki/general-information]] +* General Information + * [[Architecture and Infrastructure|wiki/architecture-and-infrastructure]] + * [[Big Data - Numbers|wiki/big-data-numbers]] + * [[Sailing Domain Algorithms|wiki/sailing-domain-algorithms]] + * [[Inventory|wiki/inventar-liste]] + * [[RaceLog tracking|wiki/racelog-tracking]] + * [[Racecommittee App|wiki/racecommittee-app]] + * [[Web Services API|wiki/sailing-webservices]] + * [[Theses (Bachelor, Master, ...)|wiki/theses]] + * [[Google Analytics (Web Page Tracking)|wiki/ganalytics]] * Production Environment * [[Amazon EC2|wiki/amazon-ec2]] * [[EC2 Backup Strategy|wiki/amazon-ec2-backup-strategy]] @@ -35,27 +45,21 @@ SAP is at the center of today’s technology revolution, developing innovations * [[Working with GWT UI Binder|wiki/gwt-ui-binder]] * [[Working with GWT Locally|wiki/local-gwt]] * [[Mobile Development|wiki/mobile-development]] + * [[Security|wiki/security]] * [[Java De(Serialization) and Circular Dependencies|wiki/java-de-serialization-and-circular-dependencies]] * Information for Webdesigners * [[Layout repository|wiki/webdesign]] * [[Create boat graphics for the 2D race viewer|wiki/boatGraphicsSVG]] * [[Create clickable UI prototypes with Axure|wiki/ui-clickable-prototypes]] * [[Uploading Media Content|wiki/uploading-media-content]] -* General Information - * [[Architecture and Infrastructure|wiki/architecture-and-infrastructure]] - * [[Sailing Domain Algorithms|wiki/sailing-domain-algorithms]] - * [[Inventory|wiki/inventar-liste]] - * [[RaceLog tracking|wiki/racelog-tracking]] - * [[Racecommittee App|wiki/racecommittee-app]] - * [[Web Services API|wiki/sailing-webservices]] - * [[Theses (Bachelor, Master, ...)|wiki/theses]] - * [[Google Analytics (Web Page Tracking)|wiki/ganalytics]] * Planning and Event Information * [[Project Planning (bigger development)|wiki/planning]] * [[General Event Planning|wiki/general-event-planning]] * [[Information about Extreme Sailing Series|wiki/extreme-sailing-series]] * [[Travemünder Woche 2014 event page|wiki/tw2014]] * [[505 worlds Kiel 2014 event page|wiki/505-worlds-kiel-2014]] +* Event Content Management + * [[Link Race Videos|wiki/linking-race-videos]] ### Internal services (not related to wiki but useful) diff --git a/java/.gitignore b/java/.gitignore index 14676bbc296..7b52b85780a 100644 --- a/java/.gitignore +++ b/java/.gitignore @@ -2,3 +2,4 @@ build.log gwt-unitCache bin/ log +**/*.orig \ No newline at end of file diff --git a/java/com.google.gwt.osgi/.classpath b/java/com.google.gwt.osgi/.classpath old mode 100755 new mode 100644 index d3b062d279c..3e6ed088cad --- a/java/com.google.gwt.osgi/.classpath +++ b/java/com.google.gwt.osgi/.classpath @@ -1,7 +1,7 @@ - - - - - - - + + + + + + + diff --git a/java/com.google.gwt.osgi/.settings/org.eclipse.jdt.core.prefs b/java/com.google.gwt.osgi/.settings/org.eclipse.jdt.core.prefs old mode 100755 new mode 100644 index d8047f8db9d..a698e59674f --- a/java/com.google.gwt.osgi/.settings/org.eclipse.jdt.core.prefs +++ b/java/com.google.gwt.osgi/.settings/org.eclipse.jdt.core.prefs @@ -1,8 +1,12 @@ -#Thu Jan 19 09:46:08 CET 2012 -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 -org.eclipse.jdt.core.compiler.compliance=1.7 -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.7 +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/java/com.google.gwt.osgi/META-INF/MANIFEST.MF b/java/com.google.gwt.osgi/META-INF/MANIFEST.MF old mode 100755 new mode 100644 index 111bfccff26..3cd5121411c --- a/java/com.google.gwt.osgi/META-INF/MANIFEST.MF +++ b/java/com.google.gwt.osgi/META-INF/MANIFEST.MF @@ -1,187 +1,187 @@ -Manifest-Version: 1.0 -Bundle-ManifestVersion: 2 -Bundle-Name: Osgi -Bundle-SymbolicName: com.google.gwt.osgi -Bundle-Version: 2.6.1.qualifier -Bundle-Vendor: GOOGLE -Bundle-RequiredExecutionEnvironment: JavaSE-1.7 -Bundle-ClassPath: lib/gwt-user.jar, - . -Export-Package: com.google.gwt.activity.shared, - com.google.gwt.animation.client, - com.google.gwt.animation.client.testing, - com.google.gwt.aria.client, - com.google.gwt.canvas.client, - com.google.gwt.canvas.dom.client, - com.google.gwt.cell.client, - com.google.gwt.codegen.rebind, - com.google.gwt.codegen.server, - com.google.gwt.core.client, - com.google.gwt.core.client.debug, - com.google.gwt.core.client.impl, - com.google.gwt.core.client.prefetch, - com.google.gwt.core.client.testing, - com.google.gwt.core.server, - com.google.gwt.core.shared, - com.google.gwt.debug.client, - com.google.gwt.dom.builder.client, - com.google.gwt.dom.builder.shared, - com.google.gwt.dom.client, - com.google.gwt.editor.client, - com.google.gwt.editor.client.adapters, - com.google.gwt.editor.client.impl, - com.google.gwt.editor.client.testing, - com.google.gwt.editor.rebind, - com.google.gwt.editor.rebind.model, - com.google.gwt.editor.ui.client, - com.google.gwt.editor.ui.client.adapters, - com.google.gwt.event.dom.client, - com.google.gwt.event.logical.shared, - com.google.gwt.event.shared, - com.google.gwt.event.shared.testing, - com.google.gwt.geolocation.client, - com.google.gwt.http.client, - com.google.gwt.i18n.client, - com.google.gwt.i18n.client.constants, - com.google.gwt.i18n.client.impl, - com.google.gwt.i18n.client.impl.cldr, - com.google.gwt.i18n.client.impl.plurals, - com.google.gwt.i18n.linker, - com.google.gwt.i18n.rebind, - com.google.gwt.i18n.rebind.format, - com.google.gwt.i18n.rebind.keygen, - com.google.gwt.i18n.server, - com.google.gwt.i18n.server.impl, - com.google.gwt.i18n.server.keygen, - com.google.gwt.i18n.server.testing, - com.google.gwt.i18n.shared, - com.google.gwt.i18n.shared.impl, - com.google.gwt.i18n.shared.impl.cldr, - com.google.gwt.i18n.tools, - com.google.gwt.json.client, - com.google.gwt.jsonp.client, - com.google.gwt.junit, - com.google.gwt.junit.client, - com.google.gwt.junit.client.impl, - com.google.gwt.junit.linker, - com.google.gwt.junit.rebind, - com.google.gwt.junit.remote, - com.google.gwt.junit.server, - com.google.gwt.junit.tools, - com.google.gwt.layout.client, - com.google.gwt.logging.client, - com.google.gwt.logging.impl, - com.google.gwt.logging.server, - com.google.gwt.logging.shared, - com.google.gwt.media.client, - com.google.gwt.media.dom.client, - com.google.gwt.place.impl, - com.google.gwt.place.rebind, - com.google.gwt.place.shared, - com.google.gwt.precompress.linker, - com.google.gwt.regexp.shared, - com.google.gwt.resources.client, - com.google.gwt.resources.client.impl, - com.google.gwt.resources.css, - com.google.gwt.resources.css.ast, - com.google.gwt.resources.ext, - com.google.gwt.resources.rebind.context, - com.google.gwt.resources.rg, - com.google.gwt.rpc.client, - com.google.gwt.rpc.client.ast, - com.google.gwt.rpc.client.impl, - com.google.gwt.rpc.linker, - com.google.gwt.rpc.rebind, - com.google.gwt.rpc.server, - com.google.gwt.safecss.shared, - com.google.gwt.safehtml.client, - com.google.gwt.safehtml.rebind, - com.google.gwt.safehtml.shared, - com.google.gwt.storage.client, - com.google.gwt.text.client, - com.google.gwt.text.shared, - com.google.gwt.text.shared.testing, - com.google.gwt.thirdparty.streamhtmlparser, - com.google.gwt.thirdparty.streamhtmlparser.impl, - com.google.gwt.thirdparty.streamhtmlparser.util, - com.google.gwt.touch.client, - com.google.gwt.typedarrays.client, - com.google.gwt.typedarrays.server, - com.google.gwt.typedarrays.shared, - com.google.gwt.uibinder.attributeparsers, - com.google.gwt.uibinder.client, - com.google.gwt.uibinder.client.impl, - com.google.gwt.uibinder.elementparsers, - com.google.gwt.uibinder.rebind, - com.google.gwt.uibinder.rebind.messages, - com.google.gwt.uibinder.rebind.model, - com.google.gwt.user.cellview.client, - com.google.gwt.user.client, - com.google.gwt.user.client.impl, - com.google.gwt.user.client.rpc, - com.google.gwt.user.client.rpc.core.java.lang, - com.google.gwt.user.client.rpc.core.java.math, - com.google.gwt.user.client.rpc.core.java.sql, - com.google.gwt.user.client.rpc.core.java.util, - com.google.gwt.user.client.rpc.core.java.util.logging, - com.google.gwt.user.client.rpc.impl, - com.google.gwt.user.client.ui, - com.google.gwt.user.client.ui.impl, - com.google.gwt.user.datepicker.client, - com.google.gwt.user.linker.rpc, - com.google.gwt.user.rebind, - com.google.gwt.user.rebind.rpc, - com.google.gwt.user.rebind.ui, - com.google.gwt.user.server, - com.google.gwt.user.server.rpc, - com.google.gwt.user.server.rpc.core.java.lang, - com.google.gwt.user.server.rpc.core.java.util, - com.google.gwt.user.server.rpc.impl, - com.google.gwt.user.tools, - com.google.gwt.user.tools.util, - com.google.gwt.useragent.client, - com.google.gwt.useragent.rebind, - com.google.gwt.util.regexfilter, - com.google.gwt.validation.client, - com.google.gwt.validation.client.constraints, - com.google.gwt.validation.client.impl, - com.google.gwt.validation.client.impl.metadata, - com.google.gwt.validation.client.spi, - com.google.gwt.validation.rebind, - com.google.gwt.view.client, - com.google.gwt.widget.client, - com.google.gwt.xhr.client, - com.google.gwt.xml.client, - com.google.gwt.xml.client.impl, - com.google.web.bindery.autobean.gwt.client.impl, - com.google.web.bindery.autobean.gwt.rebind, - com.google.web.bindery.autobean.gwt.rebind.model, - com.google.web.bindery.autobean.shared, - com.google.web.bindery.autobean.shared.impl, - com.google.web.bindery.autobean.vm, - com.google.web.bindery.autobean.vm.impl, - com.google.web.bindery.event.shared, - com.google.web.bindery.event.shared.testing, - com.google.web.bindery.requestfactory.apt, - com.google.web.bindery.requestfactory.gwt.client, - com.google.web.bindery.requestfactory.gwt.client.impl, - com.google.web.bindery.requestfactory.gwt.client.testing, - com.google.web.bindery.requestfactory.gwt.rebind, - com.google.web.bindery.requestfactory.gwt.rebind.model, - com.google.web.bindery.requestfactory.gwt.ui.client, - com.google.web.bindery.requestfactory.server, - com.google.web.bindery.requestfactory.server.impl, - com.google.web.bindery.requestfactory.server.testing, - com.google.web.bindery.requestfactory.shared, - com.google.web.bindery.requestfactory.shared.impl, - com.google.web.bindery.requestfactory.shared.impl.posers, - com.google.web.bindery.requestfactory.shared.messages, - com.google.web.bindery.requestfactory.shared.testing, - com.google.web.bindery.requestfactory.vm, - com.google.web.bindery.requestfactory.vm.impl, - com.google.web.bindery.requestfactory.vm.testing, - org.hibernate.validator, - org.hibernate.validator.engine -Require-Bundle: javax.validation;bundle-version="1.0.0" -Import-Package: javax.servlet;version="2.6.0", - javax.servlet.http;version="2.6.0" +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: Osgi +Bundle-SymbolicName: com.google.gwt.osgi +Bundle-Version: 2.6.1.qualifier +Bundle-Vendor: GOOGLE +Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Bundle-ClassPath: lib/gwt-user.jar, + . +Export-Package: com.google.gwt.activity.shared, + com.google.gwt.animation.client, + com.google.gwt.animation.client.testing, + com.google.gwt.aria.client, + com.google.gwt.canvas.client, + com.google.gwt.canvas.dom.client, + com.google.gwt.cell.client, + com.google.gwt.codegen.rebind, + com.google.gwt.codegen.server, + com.google.gwt.core.client, + com.google.gwt.core.client.debug, + com.google.gwt.core.client.impl, + com.google.gwt.core.client.prefetch, + com.google.gwt.core.client.testing, + com.google.gwt.core.server, + com.google.gwt.core.shared, + com.google.gwt.debug.client, + com.google.gwt.dom.builder.client, + com.google.gwt.dom.builder.shared, + com.google.gwt.dom.client, + com.google.gwt.editor.client, + com.google.gwt.editor.client.adapters, + com.google.gwt.editor.client.impl, + com.google.gwt.editor.client.testing, + com.google.gwt.editor.rebind, + com.google.gwt.editor.rebind.model, + com.google.gwt.editor.ui.client, + com.google.gwt.editor.ui.client.adapters, + com.google.gwt.event.dom.client, + com.google.gwt.event.logical.shared, + com.google.gwt.event.shared, + com.google.gwt.event.shared.testing, + com.google.gwt.geolocation.client, + com.google.gwt.http.client, + com.google.gwt.i18n.client, + com.google.gwt.i18n.client.constants, + com.google.gwt.i18n.client.impl, + com.google.gwt.i18n.client.impl.cldr, + com.google.gwt.i18n.client.impl.plurals, + com.google.gwt.i18n.linker, + com.google.gwt.i18n.rebind, + com.google.gwt.i18n.rebind.format, + com.google.gwt.i18n.rebind.keygen, + com.google.gwt.i18n.server, + com.google.gwt.i18n.server.impl, + com.google.gwt.i18n.server.keygen, + com.google.gwt.i18n.server.testing, + com.google.gwt.i18n.shared, + com.google.gwt.i18n.shared.impl, + com.google.gwt.i18n.shared.impl.cldr, + com.google.gwt.i18n.tools, + com.google.gwt.json.client, + com.google.gwt.jsonp.client, + com.google.gwt.junit, + com.google.gwt.junit.client, + com.google.gwt.junit.client.impl, + com.google.gwt.junit.linker, + com.google.gwt.junit.rebind, + com.google.gwt.junit.remote, + com.google.gwt.junit.server, + com.google.gwt.junit.tools, + com.google.gwt.layout.client, + com.google.gwt.logging.client, + com.google.gwt.logging.impl, + com.google.gwt.logging.server, + com.google.gwt.logging.shared, + com.google.gwt.media.client, + com.google.gwt.media.dom.client, + com.google.gwt.place.impl, + com.google.gwt.place.rebind, + com.google.gwt.place.shared, + com.google.gwt.precompress.linker, + com.google.gwt.regexp.shared, + com.google.gwt.resources.client, + com.google.gwt.resources.client.impl, + com.google.gwt.resources.css, + com.google.gwt.resources.css.ast, + com.google.gwt.resources.ext, + com.google.gwt.resources.rebind.context, + com.google.gwt.resources.rg, + com.google.gwt.rpc.client, + com.google.gwt.rpc.client.ast, + com.google.gwt.rpc.client.impl, + com.google.gwt.rpc.linker, + com.google.gwt.rpc.rebind, + com.google.gwt.rpc.server, + com.google.gwt.safecss.shared, + com.google.gwt.safehtml.client, + com.google.gwt.safehtml.rebind, + com.google.gwt.safehtml.shared, + com.google.gwt.storage.client, + com.google.gwt.text.client, + com.google.gwt.text.shared, + com.google.gwt.text.shared.testing, + com.google.gwt.thirdparty.streamhtmlparser, + com.google.gwt.thirdparty.streamhtmlparser.impl, + com.google.gwt.thirdparty.streamhtmlparser.util, + com.google.gwt.touch.client, + com.google.gwt.typedarrays.client, + com.google.gwt.typedarrays.server, + com.google.gwt.typedarrays.shared, + com.google.gwt.uibinder.attributeparsers, + com.google.gwt.uibinder.client, + com.google.gwt.uibinder.client.impl, + com.google.gwt.uibinder.elementparsers, + com.google.gwt.uibinder.rebind, + com.google.gwt.uibinder.rebind.messages, + com.google.gwt.uibinder.rebind.model, + com.google.gwt.user.cellview.client, + com.google.gwt.user.client, + com.google.gwt.user.client.impl, + com.google.gwt.user.client.rpc, + com.google.gwt.user.client.rpc.core.java.lang, + com.google.gwt.user.client.rpc.core.java.math, + com.google.gwt.user.client.rpc.core.java.sql, + com.google.gwt.user.client.rpc.core.java.util, + com.google.gwt.user.client.rpc.core.java.util.logging, + com.google.gwt.user.client.rpc.impl, + com.google.gwt.user.client.ui, + com.google.gwt.user.client.ui.impl, + com.google.gwt.user.datepicker.client, + com.google.gwt.user.linker.rpc, + com.google.gwt.user.rebind, + com.google.gwt.user.rebind.rpc, + com.google.gwt.user.rebind.ui, + com.google.gwt.user.server, + com.google.gwt.user.server.rpc, + com.google.gwt.user.server.rpc.core.java.lang, + com.google.gwt.user.server.rpc.core.java.util, + com.google.gwt.user.server.rpc.impl, + com.google.gwt.user.tools, + com.google.gwt.user.tools.util, + com.google.gwt.useragent.client, + com.google.gwt.useragent.rebind, + com.google.gwt.util.regexfilter, + com.google.gwt.validation.client, + com.google.gwt.validation.client.constraints, + com.google.gwt.validation.client.impl, + com.google.gwt.validation.client.impl.metadata, + com.google.gwt.validation.client.spi, + com.google.gwt.validation.rebind, + com.google.gwt.view.client, + com.google.gwt.widget.client, + com.google.gwt.xhr.client, + com.google.gwt.xml.client, + com.google.gwt.xml.client.impl, + com.google.web.bindery.autobean.gwt.client.impl, + com.google.web.bindery.autobean.gwt.rebind, + com.google.web.bindery.autobean.gwt.rebind.model, + com.google.web.bindery.autobean.shared, + com.google.web.bindery.autobean.shared.impl, + com.google.web.bindery.autobean.vm, + com.google.web.bindery.autobean.vm.impl, + com.google.web.bindery.event.shared, + com.google.web.bindery.event.shared.testing, + com.google.web.bindery.requestfactory.apt, + com.google.web.bindery.requestfactory.gwt.client, + com.google.web.bindery.requestfactory.gwt.client.impl, + com.google.web.bindery.requestfactory.gwt.client.testing, + com.google.web.bindery.requestfactory.gwt.rebind, + com.google.web.bindery.requestfactory.gwt.rebind.model, + com.google.web.bindery.requestfactory.gwt.ui.client, + com.google.web.bindery.requestfactory.server, + com.google.web.bindery.requestfactory.server.impl, + com.google.web.bindery.requestfactory.server.testing, + com.google.web.bindery.requestfactory.shared, + com.google.web.bindery.requestfactory.shared.impl, + com.google.web.bindery.requestfactory.shared.impl.posers, + com.google.web.bindery.requestfactory.shared.messages, + com.google.web.bindery.requestfactory.shared.testing, + com.google.web.bindery.requestfactory.vm, + com.google.web.bindery.requestfactory.vm.impl, + com.google.web.bindery.requestfactory.vm.testing, + org.hibernate.validator, + org.hibernate.validator.engine +Require-Bundle: javax.validation;bundle-version="1.0.0" +Import-Package: javax.servlet;version="2.6.0", + javax.servlet.http;version="2.6.0" diff --git a/java/com.googlecode.java-diff-utils.test/.classpath b/java/com.googlecode.java-diff-utils.test/.classpath old mode 100755 new mode 100644 index 4c36116f07b..4e5f1b72574 --- a/java/com.googlecode.java-diff-utils.test/.classpath +++ b/java/com.googlecode.java-diff-utils.test/.classpath @@ -1,8 +1,8 @@ - - - - - - - - + + + + + + + + diff --git a/java/com.googlecode.java-diff-utils.test/.settings/org.eclipse.jdt.core.prefs b/java/com.googlecode.java-diff-utils.test/.settings/org.eclipse.jdt.core.prefs old mode 100755 new mode 100644 index 270e38fe738..a698e59674f --- a/java/com.googlecode.java-diff-utils.test/.settings/org.eclipse.jdt.core.prefs +++ b/java/com.googlecode.java-diff-utils.test/.settings/org.eclipse.jdt.core.prefs @@ -1,8 +1,12 @@ -#Thu Jan 19 09:47:34 CET 2012 -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 -org.eclipse.jdt.core.compiler.compliance=1.7 -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.7 +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/java/com.googlecode.java-diff-utils.test/META-INF/MANIFEST.MF b/java/com.googlecode.java-diff-utils.test/META-INF/MANIFEST.MF old mode 100755 new mode 100644 index 2670c3c0f62..7e006190554 --- a/java/com.googlecode.java-diff-utils.test/META-INF/MANIFEST.MF +++ b/java/com.googlecode.java-diff-utils.test/META-INF/MANIFEST.MF @@ -1,11 +1,11 @@ -Manifest-Version: 1.0 -Bundle-ManifestVersion: 2 -Bundle-Name: Test -Bundle-SymbolicName: com.googlecode.java-diff-utils.test -Bundle-Version: 1.0.0.qualifier -Bundle-Vendor: GOOGLECODE -Bundle-RequiredExecutionEnvironment: JavaSE-1.7 -Fragment-Host: com.googlecode.java-diff-utils -Bundle-ClassPath: test/, - . -Import-Package: junit.framework;version="4.8.1" +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: Test +Bundle-SymbolicName: com.googlecode.java-diff-utils.test +Bundle-Version: 1.0.0.qualifier +Bundle-Vendor: GOOGLECODE +Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Fragment-Host: com.googlecode.java-diff-utils +Bundle-ClassPath: test/, + . +Import-Package: junit.framework;version="4.8.1" diff --git a/java/com.googlecode.java-diff-utils/.classpath b/java/com.googlecode.java-diff-utils/.classpath old mode 100755 new mode 100644 index c8351b0a6bd..4f83b2397ec --- a/java/com.googlecode.java-diff-utils/.classpath +++ b/java/com.googlecode.java-diff-utils/.classpath @@ -1,7 +1,7 @@ - - - - - - - + + + + + + + diff --git a/java/com.googlecode.java-diff-utils/.settings/org.eclipse.jdt.core.prefs b/java/com.googlecode.java-diff-utils/.settings/org.eclipse.jdt.core.prefs index 44751b18006..ace45ceefb4 100755 --- a/java/com.googlecode.java-diff-utils/.settings/org.eclipse.jdt.core.prefs +++ b/java/com.googlecode.java-diff-utils/.settings/org.eclipse.jdt.core.prefs @@ -1,12 +1,12 @@ -#Thu Jan 19 09:47:14 CET 2012 eclipse.preferences.version=1 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 +org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.7 +org.eclipse.jdt.core.compiler.compliance=1.8 org.eclipse.jdt.core.compiler.debug.lineNumber=generate org.eclipse.jdt.core.compiler.debug.localVariable=generate org.eclipse.jdt.core.compiler.debug.sourceFile=generate org.eclipse.jdt.core.compiler.problem.assertIdentifier=error org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.7 +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/java/com.googlecode.java-diff-utils/META-INF/MANIFEST.MF b/java/com.googlecode.java-diff-utils/META-INF/MANIFEST.MF old mode 100755 new mode 100644 index f4c0c47a15b..e5b7fa47f50 --- a/java/com.googlecode.java-diff-utils/META-INF/MANIFEST.MF +++ b/java/com.googlecode.java-diff-utils/META-INF/MANIFEST.MF @@ -1,10 +1,10 @@ -Manifest-Version: 1.0 -Bundle-ManifestVersion: 2 -Bundle-Name: Java Diff Utils -Bundle-SymbolicName: com.googlecode.java-diff-utils -Bundle-Version: 1.3.0.qualifier -Bundle-Vendor: SAP AG -Bundle-RequiredExecutionEnvironment: JavaSE-1.7 -Bundle-ActivationPolicy: lazy -Export-Package: difflib, - difflib.myers +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: Java Diff Utils +Bundle-SymbolicName: com.googlecode.java-diff-utils +Bundle-Version: 1.3.0.qualifier +Bundle-Vendor: SAP AG +Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Bundle-ActivationPolicy: lazy +Export-Package: difflib, + difflib.myers diff --git a/java/com.mongodb.driver/.classpath b/java/com.mongodb.driver/.classpath old mode 100755 new mode 100644 index 4510e880549..2813f7273c1 --- a/java/com.mongodb.driver/.classpath +++ b/java/com.mongodb.driver/.classpath @@ -1,11 +1,11 @@ - - - - - - - - - - - + + + + + + + + + + + diff --git a/java/com.mongodb.driver/.settings/org.eclipse.jdt.core.prefs b/java/com.mongodb.driver/.settings/org.eclipse.jdt.core.prefs old mode 100755 new mode 100644 index c3d8b78abdc..a698e59674f --- a/java/com.mongodb.driver/.settings/org.eclipse.jdt.core.prefs +++ b/java/com.mongodb.driver/.settings/org.eclipse.jdt.core.prefs @@ -1,8 +1,12 @@ -#Thu Jan 19 09:47:57 CET 2012 -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 -org.eclipse.jdt.core.compiler.compliance=1.7 -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.7 +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/java/com.mongodb.driver/META-INF/MANIFEST.MF b/java/com.mongodb.driver/META-INF/MANIFEST.MF old mode 100755 new mode 100644 index b78a0368afe..b7992ad8bd7 --- a/java/com.mongodb.driver/META-INF/MANIFEST.MF +++ b/java/com.mongodb.driver/META-INF/MANIFEST.MF @@ -1,18 +1,18 @@ -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.7 -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 +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 diff --git a/java/com.sap.sailing.autoload/.classpath b/java/com.sap.sailing.autoload/.classpath old mode 100755 new mode 100644 index c8351b0a6bd..4f83b2397ec --- a/java/com.sap.sailing.autoload/.classpath +++ b/java/com.sap.sailing.autoload/.classpath @@ -1,7 +1,7 @@ - - - - - - - + + + + + + + diff --git a/java/com.sap.sailing.autoload/.settings/org.eclipse.jdt.core.prefs b/java/com.sap.sailing.autoload/.settings/org.eclipse.jdt.core.prefs old mode 100755 new mode 100644 index 17614df4327..a698e59674f --- a/java/com.sap.sailing.autoload/.settings/org.eclipse.jdt.core.prefs +++ b/java/com.sap.sailing.autoload/.settings/org.eclipse.jdt.core.prefs @@ -1,8 +1,12 @@ -#Thu Jan 19 09:58:47 CET 2012 -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 -org.eclipse.jdt.core.compiler.compliance=1.7 -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.7 +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/java/com.sap.sailing.autoload/META-INF/MANIFEST.MF b/java/com.sap.sailing.autoload/META-INF/MANIFEST.MF old mode 100755 new mode 100644 index ef7f3437217..000db87d0de --- a/java/com.sap.sailing.autoload/META-INF/MANIFEST.MF +++ b/java/com.sap.sailing.autoload/META-INF/MANIFEST.MF @@ -1,22 +1,22 @@ -Manifest-Version: 1.0 -Bundle-ManifestVersion: 2 -Bundle-Name: AutoLoad Races -Bundle-SymbolicName: com.sap.sailing.autoload -Bundle-Version: 1.0.0.qualifier -Bundle-Vendor: SAP -Bundle-RequiredExecutionEnvironment: JavaSE-1.7 -Bundle-ActivationPolicy: lazy -Export-Package: com.sap.sailing.autoload -Import-Package: org.json.simple, - org.json.simple.parser, - org.osgi.framework;version="1.7.0" -Require-Bundle: com.sap.sailing.gwt.ui;bundle-version="1.0.0", - com.sap.sse.common;bundle-version="1.0.0", - com.sap.sailing.domain.shared.android;bundle-version="1.0.0", - com.sap.sailing.domain.tractracadapter, - org.eclipse.osgi, - com.sap.sailing.server, - com.sap.sailing.domain;bundle-version="1.0.0", - com.sap.sailing.domain.common, - com.sap.sailing.domain.persistence -Bundle-Activator: com.sap.sailing.autoload.Activator +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: AutoLoad Races +Bundle-SymbolicName: com.sap.sailing.autoload +Bundle-Version: 1.0.0.qualifier +Bundle-Vendor: SAP +Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Bundle-ActivationPolicy: lazy +Export-Package: com.sap.sailing.autoload +Import-Package: org.json.simple, + org.json.simple.parser, + org.osgi.framework;version="1.7.0", + org.osgi.util.tracker;version="1.5.1" +Require-Bundle: com.sap.sailing.gwt.ui;bundle-version="1.0.0", + com.sap.sse.common;bundle-version="1.0.0", + com.sap.sailing.domain.shared.android;bundle-version="1.0.0", + com.sap.sailing.domain.tractracadapter, + com.sap.sailing.server, + com.sap.sailing.domain;bundle-version="1.0.0", + com.sap.sailing.domain.common, + com.sap.sailing.domain.persistence +Bundle-Activator: com.sap.sailing.autoload.Activator diff --git a/java/com.sap.sailing.barbados.resultimport.test/.classpath b/java/com.sap.sailing.barbados.resultimport.test/.classpath index a14ade4efd3..110168ffa19 100644 --- a/java/com.sap.sailing.barbados.resultimport.test/.classpath +++ b/java/com.sap.sailing.barbados.resultimport.test/.classpath @@ -1,6 +1,6 @@ - + diff --git a/java/com.sap.sailing.barbados.resultimport.test/.settings/org.eclipse.jdt.core.prefs b/java/com.sap.sailing.barbados.resultimport.test/.settings/org.eclipse.jdt.core.prefs index f42de363afa..a698e59674f 100644 --- a/java/com.sap.sailing.barbados.resultimport.test/.settings/org.eclipse.jdt.core.prefs +++ b/java/com.sap.sailing.barbados.resultimport.test/.settings/org.eclipse.jdt.core.prefs @@ -1,7 +1,12 @@ eclipse.preferences.version=1 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 -org.eclipse.jdt.core.compiler.compliance=1.7 +org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate org.eclipse.jdt.core.compiler.problem.assertIdentifier=error org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.7 +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/java/com.sap.sailing.barbados.resultimport.test/META-INF/MANIFEST.MF b/java/com.sap.sailing.barbados.resultimport.test/META-INF/MANIFEST.MF index 7ed218598ed..9829a6d3b4c 100644 --- a/java/com.sap.sailing.barbados.resultimport.test/META-INF/MANIFEST.MF +++ b/java/com.sap.sailing.barbados.resultimport.test/META-INF/MANIFEST.MF @@ -4,7 +4,7 @@ Bundle-Name: WinRegatta result import tests Bundle-SymbolicName: com.sap.sailing.barbados.resultimport.test Bundle-Version: 1.0.0.qualifier Bundle-Vendor: SAP -Bundle-RequiredExecutionEnvironment: JavaSE-1.7 +Bundle-RequiredExecutionEnvironment: JavaSE-1.8 Import-Package: org.osgi.framework;version="1.3.0" Bundle-ActivationPolicy: lazy Require-Bundle: org.junit4;bundle-version="4.8.2", diff --git a/java/com.sap.sailing.barbados.resultimport/.classpath b/java/com.sap.sailing.barbados.resultimport/.classpath index c85a43d58f7..15234a611bc 100644 --- a/java/com.sap.sailing.barbados.resultimport/.classpath +++ b/java/com.sap.sailing.barbados.resultimport/.classpath @@ -10,7 +10,7 @@ - + diff --git a/java/com.sap.sailing.barbados.resultimport/.settings/org.eclipse.jdt.core.prefs b/java/com.sap.sailing.barbados.resultimport/.settings/org.eclipse.jdt.core.prefs index f42de363afa..a698e59674f 100644 --- a/java/com.sap.sailing.barbados.resultimport/.settings/org.eclipse.jdt.core.prefs +++ b/java/com.sap.sailing.barbados.resultimport/.settings/org.eclipse.jdt.core.prefs @@ -1,7 +1,12 @@ eclipse.preferences.version=1 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 -org.eclipse.jdt.core.compiler.compliance=1.7 +org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate org.eclipse.jdt.core.compiler.problem.assertIdentifier=error org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.7 +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/java/com.sap.sailing.barbados.resultimport/META-INF/MANIFEST.MF b/java/com.sap.sailing.barbados.resultimport/META-INF/MANIFEST.MF index 391054f4a26..579de4dfa09 100644 --- a/java/com.sap.sailing.barbados.resultimport/META-INF/MANIFEST.MF +++ b/java/com.sap.sailing.barbados.resultimport/META-INF/MANIFEST.MF @@ -5,7 +5,7 @@ Bundle-SymbolicName: com.sap.sailing.barbados.resultimport Bundle-Version: 1.0.0.qualifier Bundle-Activator: com.sap.sailing.barbados.resultimport.impl.Activator Bundle-Vendor: SAP -Bundle-RequiredExecutionEnvironment: JavaSE-1.7 +Bundle-RequiredExecutionEnvironment: JavaSE-1.8 Import-Package: javax.xml.parsers, org.osgi.framework, org.xml.sax diff --git a/java/com.sap.sailing.datamining.shared/.classpath b/java/com.sap.sailing.datamining.shared/.classpath index 8a71ae27e72..c5578deadd1 100644 --- a/java/com.sap.sailing.datamining.shared/.classpath +++ b/java/com.sap.sailing.datamining.shared/.classpath @@ -1,7 +1,7 @@ - + diff --git a/java/com.sap.sailing.datamining.shared/.gitignore b/java/com.sap.sailing.datamining.shared/.gitignore index 7447f89a597..b76a9310907 100644 --- a/java/com.sap.sailing.datamining.shared/.gitignore +++ b/java/com.sap.sailing.datamining.shared/.gitignore @@ -1 +1,3 @@ -/bin \ No newline at end of file +/bin +/bin/ +/bin/ diff --git a/java/com.sap.sailing.datamining.shared/.settings/org.eclipse.jdt.core.prefs b/java/com.sap.sailing.datamining.shared/.settings/org.eclipse.jdt.core.prefs index 7341ab1683c..a698e59674f 100644 --- a/java/com.sap.sailing.datamining.shared/.settings/org.eclipse.jdt.core.prefs +++ b/java/com.sap.sailing.datamining.shared/.settings/org.eclipse.jdt.core.prefs @@ -1,11 +1,12 @@ eclipse.preferences.version=1 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 +org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.7 +org.eclipse.jdt.core.compiler.compliance=1.8 org.eclipse.jdt.core.compiler.debug.lineNumber=generate org.eclipse.jdt.core.compiler.debug.localVariable=generate org.eclipse.jdt.core.compiler.debug.sourceFile=generate org.eclipse.jdt.core.compiler.problem.assertIdentifier=error org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.7 +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/java/com.sap.sailing.datamining.shared/META-INF/MANIFEST.MF b/java/com.sap.sailing.datamining.shared/META-INF/MANIFEST.MF index ed08f19c375..16897c09e05 100644 --- a/java/com.sap.sailing.datamining.shared/META-INF/MANIFEST.MF +++ b/java/com.sap.sailing.datamining.shared/META-INF/MANIFEST.MF @@ -4,7 +4,7 @@ Bundle-Name: Datamining-Shared Bundle-SymbolicName: com.sap.sailing.datamining.shared Bundle-Version: 1.0.0.qualifier Bundle-Vendor: SAP -Bundle-RequiredExecutionEnvironment: JavaSE-1.7 +Bundle-RequiredExecutionEnvironment: JavaSE-1.8 Bundle-ActivationPolicy: lazy Bundle-ClassPath: . Require-Bundle: com.sap.sse.datamining.shared;bundle-version="1.0.0", diff --git a/java/com.sap.sailing.datamining.test/.classpath b/java/com.sap.sailing.datamining.test/.classpath index ba4e0d198fd..50121e6e586 100644 --- a/java/com.sap.sailing.datamining.test/.classpath +++ b/java/com.sap.sailing.datamining.test/.classpath @@ -2,7 +2,7 @@ - + diff --git a/java/com.sap.sailing.datamining.test/.gitignore b/java/com.sap.sailing.datamining.test/.gitignore index 7447f89a597..f8d886b5f51 100644 --- a/java/com.sap.sailing.datamining.test/.gitignore +++ b/java/com.sap.sailing.datamining.test/.gitignore @@ -1 +1,2 @@ -/bin \ No newline at end of file +/bin +/bin/ diff --git a/java/com.sap.sailing.datamining.test/.settings/org.eclipse.jdt.core.prefs b/java/com.sap.sailing.datamining.test/.settings/org.eclipse.jdt.core.prefs index f42de363afa..a698e59674f 100644 --- a/java/com.sap.sailing.datamining.test/.settings/org.eclipse.jdt.core.prefs +++ b/java/com.sap.sailing.datamining.test/.settings/org.eclipse.jdt.core.prefs @@ -1,7 +1,12 @@ eclipse.preferences.version=1 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 -org.eclipse.jdt.core.compiler.compliance=1.7 +org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate org.eclipse.jdt.core.compiler.problem.assertIdentifier=error org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.7 +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/java/com.sap.sailing.datamining.test/META-INF/MANIFEST.MF b/java/com.sap.sailing.datamining.test/META-INF/MANIFEST.MF index 493169806e6..48ccd66e279 100644 --- a/java/com.sap.sailing.datamining.test/META-INF/MANIFEST.MF +++ b/java/com.sap.sailing.datamining.test/META-INF/MANIFEST.MF @@ -4,7 +4,7 @@ Bundle-Name: Test Bundle-SymbolicName: com.sap.sailing.datamining.test Bundle-Version: 1.0.0.qualifier Bundle-Vendor: SAP -Bundle-RequiredExecutionEnvironment: JavaSE-1.7 +Bundle-RequiredExecutionEnvironment: JavaSE-1.8 Fragment-Host: com.sap.sailing.datamining Import-Package: junit.framework;version="4.8.2", org.junit;version="4.8.2", diff --git a/java/com.sap.sailing.datamining.test/src/com/sap/sailing/datamining/impl/components/TestLeaderboardGroupRetrievalProcessor.java b/java/com.sap.sailing.datamining.test/src/com/sap/sailing/datamining/impl/components/TestLeaderboardGroupRetrievalProcessor.java index c30e5543ff4..9e0cdd8eb73 100644 --- a/java/com.sap.sailing.datamining.test/src/com/sap/sailing/datamining/impl/components/TestLeaderboardGroupRetrievalProcessor.java +++ b/java/com.sap.sailing.datamining.test/src/com/sap/sailing/datamining/impl/components/TestLeaderboardGroupRetrievalProcessor.java @@ -6,7 +6,6 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.stub; import java.util.ArrayList; -import java.util.Arrays; import java.util.Collection; import java.util.HashMap; import java.util.HashSet; @@ -17,17 +16,17 @@ import org.junit.Ignore; import org.junit.Test; import com.sap.sailing.datamining.test.util.ConcurrencyTestsUtil; +import com.sap.sailing.datamining.test.util.NullProcessor; import com.sap.sailing.domain.leaderboard.Leaderboard; import com.sap.sailing.domain.leaderboard.LeaderboardGroup; import com.sap.sailing.domain.leaderboard.impl.LeaderboardGroupImpl; import com.sap.sailing.server.RacingEventService; -import com.sap.sse.datamining.AdditionalResultDataBuilder; import com.sap.sse.datamining.components.Processor; public class TestLeaderboardGroupRetrievalProcessor { private RacingEventService service; - private Processor retriever; + private Processor retriever; private Collection retrievedGroups; @@ -37,27 +36,16 @@ public class TestLeaderboardGroupRetrievalProcessor { stub(service.getLeaderboardGroups()).toReturn(getGroupsInService()); retrievedGroups = new HashSet<>(); - Processor receiver = new Processor() { + Processor receiver = new NullProcessor(LeaderboardGroup.class, Void.class) { @Override public void processElement(LeaderboardGroup element) { retrievedGroups.add(element); } - @Override - public void onFailure(Throwable failure) { - } - @Override - public void finish() throws InterruptedException { - } - @Override - public void abort() { - } - @Override - public AdditionalResultDataBuilder getAdditionalResultData(AdditionalResultDataBuilder additionalDataBuilder) { - return null; - } }; - retriever = new LeaderboardGroupRetrievalProcessor(ConcurrencyTestsUtil.getExecutor(), Arrays.asList(receiver)); + Collection> resultReceivers = new ArrayList<>(); + resultReceivers.add(receiver); + retriever = new LeaderboardGroupRetrievalProcessor(ConcurrencyTestsUtil.getExecutor(), resultReceivers); } private Map getGroupsInService() { diff --git a/java/com.sap.sailing.datamining.test/src/com/sap/sailing/datamining/impl/functions/TestSailingFunctionsRegistration.java b/java/com.sap.sailing.datamining.test/src/com/sap/sailing/datamining/impl/functions/TestSailingFunctionsRegistration.java index 761ecbc6a6a..7c47e34d3dc 100644 --- a/java/com.sap.sailing.datamining.test/src/com/sap/sailing/datamining/impl/functions/TestSailingFunctionsRegistration.java +++ b/java/com.sap.sailing.datamining.test/src/com/sap/sailing/datamining/impl/functions/TestSailingFunctionsRegistration.java @@ -8,13 +8,13 @@ import java.util.Arrays; import java.util.Collection; import java.util.HashSet; -import org.junit.BeforeClass; +import org.junit.Before; import org.junit.Test; +import com.sap.sailing.datamining.Activator; import com.sap.sailing.datamining.data.HasGPSFixContext; import com.sap.sailing.datamining.data.HasTrackedLegOfCompetitorContext; import com.sap.sailing.datamining.data.HasTrackedRaceContext; -import com.sap.sailing.datamining.impl.data.SailingDataMiningClassesWithFunctionsService; import com.sap.sailing.domain.base.Competitor; import com.sap.sailing.domain.base.Moving; import com.sap.sailing.domain.base.Nationality; @@ -27,15 +27,15 @@ import com.sap.sse.datamining.functions.FunctionRegistry; import com.sap.sse.datamining.impl.functions.SimpleFunctionRegistry; public class TestSailingFunctionsRegistration { + + private static FunctionFactory functionFactory = new FunctionFactory(); - private static FunctionRegistry functionRegistry; + private FunctionRegistry functionRegistry; - @BeforeClass - public static void setUpFunctionRegistryAndProvider() { - SailingDataMiningClassesWithFunctionsService classesWithFunctionsService = new SailingDataMiningClassesWithFunctionsService(); - + @Before + public void setUpFunctionRegistryAndProvider() { functionRegistry = new SimpleFunctionRegistry(); - functionRegistry.registerAllWithInternalFunctionPolicy(classesWithFunctionsService.getInternalClassesWithMarkedMethods()); + functionRegistry.registerAllWithInternalFunctionPolicy(Activator.getInternalClassesWithMarkedMethods()); } @Test @@ -52,23 +52,23 @@ public class TestSailingFunctionsRegistration { Collection> expectedDimensions = new HashSet<>(); Method getRegattaMethod = HasTrackedRaceContext.class.getMethod("getRegatta", new Class[0]); - Function getRegatta = FunctionFactory.createMethodWrappingFunction(getRegattaMethod); + Function getRegatta = functionFactory.createMethodWrappingFunction(getRegattaMethod); Method getNameMethod = Named.class.getMethod("getName", new Class[0]); - Function getName = FunctionFactory.createMethodWrappingFunction(getNameMethod); - expectedDimensions.add(FunctionFactory.createCompoundFunction(Arrays.asList(getRegatta, getName))); + Function getName = functionFactory.createMethodWrappingFunction(getNameMethod); + expectedDimensions.add(functionFactory.createCompoundFunction(Arrays.asList(getRegatta, getName))); Method getYearMethod = HasTrackedRaceContext.class.getMethod("getYear", new Class[0]); - expectedDimensions.add(FunctionFactory.createMethodWrappingFunction(getYearMethod)); + expectedDimensions.add(functionFactory.createMethodWrappingFunction(getYearMethod)); Method getCompetitorMethod = HasTrackedLegOfCompetitorContext.class.getMethod("getCompetitor", new Class[0]); - Function getCompetitor = FunctionFactory.createMethodWrappingFunction(getCompetitorMethod); + Function getCompetitor = functionFactory.createMethodWrappingFunction(getCompetitorMethod); Method getTeamMethod = Competitor.class.getMethod("getTeam", new Class[0]); - Function getTeam = FunctionFactory.createMethodWrappingFunction(getTeamMethod); + Function getTeam = functionFactory.createMethodWrappingFunction(getTeamMethod); Method getNationalityMethod = Team.class.getMethod("getNationality", new Class[0]); - Function getNationality = FunctionFactory.createMethodWrappingFunction(getNationalityMethod); + Function getNationality = functionFactory.createMethodWrappingFunction(getNationalityMethod); Method getAcronymMethod = Nationality.class.getMethod("getThreeLetterIOCAcronym", new Class[0]); - Function getAcronym = FunctionFactory.createMethodWrappingFunction(getAcronymMethod); - expectedDimensions.add(FunctionFactory.createCompoundFunction(Arrays.asList(getCompetitor, getTeam, getNationality, getAcronym))); + Function getAcronym = functionFactory.createMethodWrappingFunction(getAcronymMethod); + expectedDimensions.add(functionFactory.createCompoundFunction(Arrays.asList(getCompetitor, getTeam, getNationality, getAcronym))); return expectedDimensions; } @@ -87,15 +87,15 @@ public class TestSailingFunctionsRegistration { Collection> expectedStatistics = new HashSet<>(); Method getDistanceTraveledMethod = HasTrackedLegOfCompetitorContext.class.getMethod("getDistanceTraveled", new Class[0]); - expectedStatistics.add(FunctionFactory.createMethodWrappingFunction(getDistanceTraveledMethod)); + expectedStatistics.add(functionFactory.createMethodWrappingFunction(getDistanceTraveledMethod)); Method getGPSFixMethod = HasGPSFixContext.class.getMethod("getGPSFix", new Class[0]); - Function getGPSFix = FunctionFactory.createMethodWrappingFunction(getGPSFixMethod); + Function getGPSFix = functionFactory.createMethodWrappingFunction(getGPSFixMethod); Method getSpeedMethod = Moving.class.getMethod("getSpeed", new Class[0]); - Function getSpeed = FunctionFactory.createMethodWrappingFunction(getSpeedMethod); + Function getSpeed = functionFactory.createMethodWrappingFunction(getSpeedMethod); Method getKnotsMethod = Speed.class.getMethod("getKnots", new Class[0]); - Function getKnots = FunctionFactory.createMethodWrappingFunction(getKnotsMethod); - expectedStatistics.add(FunctionFactory.createCompoundFunction(Arrays.asList(getGPSFix, getSpeed, getKnots))); + Function getKnots = functionFactory.createMethodWrappingFunction(getKnotsMethod); + expectedStatistics.add(functionFactory.createCompoundFunction(Arrays.asList(getGPSFix, getSpeed, getKnots))); return expectedStatistics; } diff --git a/java/com.sap.sailing.datamining.test/src/com/sap/sailing/datamining/test/util/ConcurrencyTestsUtil.java b/java/com.sap.sailing.datamining.test/src/com/sap/sailing/datamining/test/util/ConcurrencyTestsUtil.java index 5f01b468e74..f680ea409c7 100644 --- a/java/com.sap.sailing.datamining.test/src/com/sap/sailing/datamining/test/util/ConcurrencyTestsUtil.java +++ b/java/com.sap.sailing.datamining.test/src/com/sap/sailing/datamining/test/util/ConcurrencyTestsUtil.java @@ -32,7 +32,7 @@ public class ConcurrencyTestsUtil { } } - public static void tryToFinishTheProcessorInAnotherThread(final Processor processor) { + public static void tryToFinishTheProcessorInAnotherThread(final Processor processor) { Runnable finishingRunnable = new Runnable() { @Override public void run() { diff --git a/java/com.sap.sailing.datamining.test/src/com/sap/sailing/datamining/test/util/NullProcessor.java b/java/com.sap.sailing.datamining.test/src/com/sap/sailing/datamining/test/util/NullProcessor.java new file mode 100644 index 00000000000..1f62ea64847 --- /dev/null +++ b/java/com.sap.sailing.datamining.test/src/com/sap/sailing/datamining/test/util/NullProcessor.java @@ -0,0 +1,37 @@ +package com.sap.sailing.datamining.test.util; + +import com.sap.sse.datamining.AdditionalResultDataBuilder; +import com.sap.sse.datamining.impl.components.AbstractProcessor; + +public class NullProcessor extends AbstractProcessor { + + public NullProcessor(Class inputType, Class resultType) { + super(inputType, resultType); + } + + @Override + public void processElement(InputType element) { + + } + + @Override + public void onFailure(Throwable failure) { + + } + + @Override + public void finish() throws InterruptedException { + + } + + @Override + public void abort() { + + } + + @Override + public AdditionalResultDataBuilder getAdditionalResultData(AdditionalResultDataBuilder additionalDataBuilder) { + return additionalDataBuilder; + } + +} diff --git a/java/com.sap.sailing.datamining/.classpath b/java/com.sap.sailing.datamining/.classpath index e15e4b3e412..4d63a64256c 100644 --- a/java/com.sap.sailing.datamining/.classpath +++ b/java/com.sap.sailing.datamining/.classpath @@ -2,7 +2,7 @@ - + diff --git a/java/com.sap.sailing.datamining/.gitignore b/java/com.sap.sailing.datamining/.gitignore index 7447f89a597..b76a9310907 100644 --- a/java/com.sap.sailing.datamining/.gitignore +++ b/java/com.sap.sailing.datamining/.gitignore @@ -1 +1,3 @@ -/bin \ No newline at end of file +/bin +/bin/ +/bin/ diff --git a/java/com.sap.sailing.datamining/.settings/org.eclipse.jdt.core.prefs b/java/com.sap.sailing.datamining/.settings/org.eclipse.jdt.core.prefs index 7341ab1683c..a698e59674f 100644 --- a/java/com.sap.sailing.datamining/.settings/org.eclipse.jdt.core.prefs +++ b/java/com.sap.sailing.datamining/.settings/org.eclipse.jdt.core.prefs @@ -1,11 +1,12 @@ eclipse.preferences.version=1 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 +org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.7 +org.eclipse.jdt.core.compiler.compliance=1.8 org.eclipse.jdt.core.compiler.debug.lineNumber=generate org.eclipse.jdt.core.compiler.debug.localVariable=generate org.eclipse.jdt.core.compiler.debug.sourceFile=generate org.eclipse.jdt.core.compiler.problem.assertIdentifier=error org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.7 +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/java/com.sap.sailing.datamining/META-INF/MANIFEST.MF b/java/com.sap.sailing.datamining/META-INF/MANIFEST.MF index 71bd7ce57b5..8d4134b8912 100644 --- a/java/com.sap.sailing.datamining/META-INF/MANIFEST.MF +++ b/java/com.sap.sailing.datamining/META-INF/MANIFEST.MF @@ -4,7 +4,7 @@ Bundle-Name: Datamining Bundle-SymbolicName: com.sap.sailing.datamining Bundle-Version: 1.0.0.qualifier Bundle-Vendor: SAP -Bundle-RequiredExecutionEnvironment: JavaSE-1.7 +Bundle-RequiredExecutionEnvironment: JavaSE-1.8 Import-Package: com.sap.sailing.server, org.osgi.framework;version="1.7.0" Export-Package: com.sap.sailing.datamining, diff --git a/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/Activator.java b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/Activator.java index 1b03fd245e6..3727481be44 100644 --- a/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/Activator.java +++ b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/Activator.java @@ -1,38 +1,82 @@ package com.sap.sailing.datamining; +import java.util.HashSet; +import java.util.Set; +import java.util.logging.Level; +import java.util.logging.Logger; + import org.osgi.framework.BundleActivator; import org.osgi.framework.BundleContext; -import org.osgi.framework.ServiceRegistration; +import org.osgi.framework.ServiceReference; -import com.sap.sailing.datamining.impl.data.SailingDataMiningClassesWithFunctionsService; -import com.sap.sse.datamining.ClassesWithFunctionsService; +import com.sap.sailing.datamining.data.HasGPSFixContext; +import com.sap.sailing.datamining.data.HasTrackedLegContext; +import com.sap.sailing.datamining.data.HasTrackedLegOfCompetitorContext; +import com.sap.sailing.datamining.data.HasTrackedRaceContext; +import com.sap.sse.datamining.ClassesWithFunctionsRegistrationService; +import com.sap.sse.datamining.DataRetrieverChainDefinition; +import com.sap.sse.datamining.DataRetrieverChainDefinitionRegistrationService; public class Activator implements BundleActivator { public static final String dataRetrieverGroupName = "Sailing"; + private static final Logger LOGGER = Logger.getLogger(Activator.class.getSimpleName()); private static BundleContext context; - - private ServiceRegistration classesWithFunctionsServiceRegistration; + private static ServiceReference classesWithFunctionsRegistrationServiceReference; + private static ServiceReference dataRetrieverChainDefinitionRegistrationServiceServiceReference; @Override public void start(BundleContext context) throws Exception { Activator.context = context; - registerClassesWithFunctionsService(); + + classesWithFunctionsRegistrationServiceReference = Activator.context.getServiceReference(ClassesWithFunctionsRegistrationService.class); + if (classesWithFunctionsRegistrationServiceReference != null) { + Activator.context.getService(classesWithFunctionsRegistrationServiceReference) + .registerInternalClassesWithMarkedMethods(getInternalClassesWithMarkedMethods()); + Activator.context.getService(classesWithFunctionsRegistrationServiceReference) + .registerExternalLibraryClasses(getExternalLibraryClasses()); + } else { + LOGGER.log(Level.WARNING, "Couldn't register the sailing classes with functions. No registration service was available."); + } + + dataRetrieverChainDefinitionRegistrationServiceServiceReference = Activator.context.getServiceReference(DataRetrieverChainDefinitionRegistrationService.class); + if (dataRetrieverChainDefinitionRegistrationServiceServiceReference != null) { + for (DataRetrieverChainDefinition dataRetrieverChainDefinition : SailingDataRetrieverChainDefinitions.getDataRetrieverChainDefinitions()) { + Activator.context.getService(dataRetrieverChainDefinitionRegistrationServiceServiceReference).addDataRetrieverChainDefinition(dataRetrieverChainDefinition); + } + } else { + LOGGER.log(Level.WARNING, "Couldn't register the sailing data retriever chain definitions. No registration service was available."); + } } @Override public void stop(BundleContext context) throws Exception { - unregisterClassesWithFunctionsService(); + if (classesWithFunctionsRegistrationServiceReference != null) { + Activator.context.getService(classesWithFunctionsRegistrationServiceReference).unregisterAllFunctionsOf( + getInternalClassesWithMarkedMethods()); + Activator.context.getService(classesWithFunctionsRegistrationServiceReference).unregisterAllFunctionsOf( + getExternalLibraryClasses()); + } + + if (dataRetrieverChainDefinitionRegistrationServiceServiceReference != null) { + for (DataRetrieverChainDefinition dataRetrieverChainDefinition : SailingDataRetrieverChainDefinitions.getDataRetrieverChainDefinitions()) { + Activator.context.getService(dataRetrieverChainDefinitionRegistrationServiceServiceReference).removeDataRetrieverChainDefinition(dataRetrieverChainDefinition); + } + } } - private void unregisterClassesWithFunctionsService() { - context.ungetService(classesWithFunctionsServiceRegistration.getReference()); + public static Set> getInternalClassesWithMarkedMethods() { + Set> internalClasses = new HashSet<>(); + internalClasses.add(HasTrackedRaceContext.class); + internalClasses.add(HasTrackedLegContext.class); + internalClasses.add(HasTrackedLegOfCompetitorContext.class); + internalClasses.add(HasGPSFixContext.class); + return internalClasses; } - private void registerClassesWithFunctionsService() { - classesWithFunctionsServiceRegistration = context.registerService(ClassesWithFunctionsService.class, - new SailingDataMiningClassesWithFunctionsService(), null); + public static Set> getExternalLibraryClasses() { + return new HashSet<>(); } } diff --git a/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/SailingDataRetrieverChainDefinitions.java b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/SailingDataRetrieverChainDefinitions.java new file mode 100644 index 00000000000..5fbeb4dbf78 --- /dev/null +++ b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/SailingDataRetrieverChainDefinitions.java @@ -0,0 +1,62 @@ +package com.sap.sailing.datamining; + +import java.util.ArrayList; +import java.util.Collection; + +import com.sap.sailing.datamining.data.HasGPSFixContext; +import com.sap.sailing.datamining.data.HasTrackedLegContext; +import com.sap.sailing.datamining.data.HasTrackedLegOfCompetitorContext; +import com.sap.sailing.datamining.data.HasTrackedRaceContext; +import com.sap.sailing.datamining.impl.components.GPSFixRetrievalProcessor; +import com.sap.sailing.datamining.impl.components.LeaderboardGroupRetrievalProcessor; +import com.sap.sailing.datamining.impl.components.RegattaLeaderboardFilteringRetrievalProcessor; +import com.sap.sailing.datamining.impl.components.TrackedLegFilteringRetrievalProcessor; +import com.sap.sailing.datamining.impl.components.TrackedLegOfCompetitorFilteringRetrievalProcessor; +import com.sap.sailing.datamining.impl.components.TrackedRaceFilteringRetrievalProcessor; +import com.sap.sailing.domain.leaderboard.LeaderboardGroup; +import com.sap.sailing.domain.leaderboard.RegattaLeaderboard; +import com.sap.sailing.server.RacingEventService; +import com.sap.sse.datamining.DataRetrieverChainDefinition; +import com.sap.sse.datamining.components.Processor; +import com.sap.sse.datamining.impl.SimpleDataRetrieverChainDefinition; + +public class SailingDataRetrieverChainDefinitions { + + private static Collection> dataRetrieverChainDefinitions; + + public static Collection> getDataRetrieverChainDefinitions() { + if (dataRetrieverChainDefinitions == null) { + initializeDataRetrieverChainDefinitions(); + } + return dataRetrieverChainDefinitions; + } + + private static void initializeDataRetrieverChainDefinitions() { + dataRetrieverChainDefinitions = new ArrayList<>(); + + DataRetrieverChainDefinition legRetrieverChainDefinition = new SimpleDataRetrieverChainDefinition<>(RacingEventService.class, "SailingDomainRetrieverChain"); + @SuppressWarnings("unchecked") + Class> leaderboardGroupRetrieverType = (Class>)(Class) LeaderboardGroupRetrievalProcessor.class; + legRetrieverChainDefinition.startWith(leaderboardGroupRetrieverType, LeaderboardGroup.class); + @SuppressWarnings("unchecked") + Class> regattaLeaderboardRetrieverType = (Class>)(Class) RegattaLeaderboardFilteringRetrievalProcessor.class; + legRetrieverChainDefinition.addAsLast(leaderboardGroupRetrieverType, regattaLeaderboardRetrieverType, RegattaLeaderboard.class); + @SuppressWarnings("unchecked") + Class> raceRetrieverType = (Class>)(Class) TrackedRaceFilteringRetrievalProcessor.class; + legRetrieverChainDefinition.addAsLast(regattaLeaderboardRetrieverType, raceRetrieverType, HasTrackedRaceContext.class); + @SuppressWarnings("unchecked") + Class> legRetrieverType = (Class>)(Class) TrackedLegFilteringRetrievalProcessor.class; + legRetrieverChainDefinition.addAsLast(raceRetrieverType, legRetrieverType, HasTrackedLegContext.class); + @SuppressWarnings("unchecked") + Class> legOfCompetitorRetrieverType = (Class>)(Class) TrackedLegOfCompetitorFilteringRetrievalProcessor.class; + legRetrieverChainDefinition.addAsLast(legRetrieverType, legOfCompetitorRetrieverType, HasTrackedLegOfCompetitorContext.class); + dataRetrieverChainDefinitions.add(legRetrieverChainDefinition); + + DataRetrieverChainDefinition gpsFixRetrieverChainDefinition = new SimpleDataRetrieverChainDefinition<>(legRetrieverChainDefinition, "SailingDomainRetrieverChain"); + @SuppressWarnings("unchecked") + Class> gpsFixRetrieverType = (Class>)(Class) GPSFixRetrievalProcessor.class; + gpsFixRetrieverChainDefinition.addAsLast(legOfCompetitorRetrieverType, gpsFixRetrieverType, HasGPSFixContext.class); + dataRetrieverChainDefinitions.add(gpsFixRetrieverChainDefinition); + } + +} diff --git a/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/data/HasGPSFixContext.java b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/data/HasGPSFixContext.java index ec26746969d..8fa34c12637 100644 --- a/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/data/HasGPSFixContext.java +++ b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/data/HasGPSFixContext.java @@ -3,7 +3,10 @@ package com.sap.sailing.datamining.data; import com.sap.sailing.domain.tracking.GPSFixMoving; import com.sap.sse.datamining.shared.annotations.Connector; -public interface HasGPSFixContext extends HasTrackedLegOfCompetitorContext { +public interface HasGPSFixContext { + + @Connector + public HasTrackedLegOfCompetitorContext getTrackedLegOfCompetitorContext(); @Connector public GPSFixMoving getGPSFix(); diff --git a/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/data/HasTrackedLegContext.java b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/data/HasTrackedLegContext.java index 0faf8011de4..6a01d4092d7 100644 --- a/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/data/HasTrackedLegContext.java +++ b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/data/HasTrackedLegContext.java @@ -2,15 +2,19 @@ package com.sap.sailing.datamining.data; import com.sap.sailing.domain.common.LegType; import com.sap.sailing.domain.tracking.TrackedLeg; +import com.sap.sse.datamining.shared.annotations.Connector; import com.sap.sse.datamining.shared.annotations.Dimension; -public interface HasTrackedLegContext extends HasTrackedRaceContext { +public interface HasTrackedLegContext { + + @Connector + public HasTrackedRaceContext getTrackedRaceContext(); public TrackedLeg getTrackedLeg(); - @Dimension(messageKey="LegType", ordinal=5) + @Dimension(messageKey="LegType", ordinal=6) public LegType getLegType(); - @Dimension(messageKey="LegNumber", ordinal=6) + @Dimension(messageKey="LegNumber", ordinal=7) public int getLegNumber(); } \ No newline at end of file diff --git a/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/data/HasTrackedLegOfCompetitorContext.java b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/data/HasTrackedLegOfCompetitorContext.java index c7fca9e4bf8..065120f062e 100644 --- a/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/data/HasTrackedLegOfCompetitorContext.java +++ b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/data/HasTrackedLegOfCompetitorContext.java @@ -6,7 +6,10 @@ import com.sap.sse.datamining.shared.Unit; import com.sap.sse.datamining.shared.annotations.Connector; import com.sap.sse.datamining.shared.annotations.Statistic; -public interface HasTrackedLegOfCompetitorContext extends HasTrackedLegContext { +public interface HasTrackedLegOfCompetitorContext { + + @Connector + public HasTrackedLegContext getTrackedLegContext(); public TrackedLegOfCompetitor getTrackedLegOfCompetitor(); diff --git a/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/data/HasTrackedRaceContext.java b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/data/HasTrackedRaceContext.java index eb2226089ff..2f579f18c91 100644 --- a/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/data/HasTrackedRaceContext.java +++ b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/data/HasTrackedRaceContext.java @@ -16,19 +16,19 @@ public interface HasTrackedRaceContext { @Connector(messageKey="Regatta", ordinal=0) public Regatta getRegatta(); - @Connector(messageKey="CourseArea", ordinal=2) + @Connector(messageKey="CourseArea", ordinal=3) public CourseArea getCourseArea(); @Connector(messageKey="BoatClass", ordinal=1) public BoatClass getBoatClass(); - @Connector(messageKey="Fleet", ordinal=3) + @Connector(messageKey="Fleet", ordinal=4) public Fleet getFleet(); - @Connector(messageKey="Race", ordinal=4) + @Connector(messageKey="Race", ordinal=5) public RaceDefinition getRace(); - @Dimension(messageKey="Year", ordinal=10) + @Dimension(messageKey="Year", ordinal=2) public Integer getYear(); } \ No newline at end of file diff --git a/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/factories/SailingDataMiningFactory.java b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/factories/SailingDataMiningFactory.java index 6d70e5220b0..197055bf5af 100644 --- a/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/factories/SailingDataMiningFactory.java +++ b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/factories/SailingDataMiningFactory.java @@ -1,90 +1,90 @@ package com.sap.sailing.datamining.factories; +import java.io.Serializable; import java.util.ArrayList; import java.util.Collection; -import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.List; +import java.util.Locale; import java.util.Map; +import java.util.Map.Entry; import java.util.Set; -import com.sap.sailing.datamining.data.HasGPSFixContext; -import com.sap.sailing.datamining.data.HasTrackedLegContext; -import com.sap.sailing.datamining.data.HasTrackedLegOfCompetitorContext; -import com.sap.sailing.datamining.data.HasTrackedRaceContext; import com.sap.sailing.server.RacingEventService; +import com.sap.sse.datamining.DataRetrieverChainBuilder; +import com.sap.sse.datamining.DataRetrieverChainDefinition; import com.sap.sse.datamining.Query; +import com.sap.sse.datamining.components.FilterCriterion; import com.sap.sse.datamining.components.Processor; import com.sap.sse.datamining.factories.ProcessorFactory; import com.sap.sse.datamining.functions.Function; import com.sap.sse.datamining.functions.FunctionProvider; import com.sap.sse.datamining.i18n.DataMiningStringMessages; import com.sap.sse.datamining.impl.DataMiningActivator; +import com.sap.sse.datamining.impl.DataRetrieverChainDefinitionRegistry; import com.sap.sse.datamining.impl.ProcessorQuery; import com.sap.sse.datamining.impl.components.GroupedDataEntry; +import com.sap.sse.datamining.impl.criterias.AndCompoundFilterCriterion; +import com.sap.sse.datamining.impl.criterias.CompoundFilterCriterion; +import com.sap.sse.datamining.impl.criterias.NullaryFunctionValuesFilterCriterion; +import com.sap.sse.datamining.shared.GroupKey; import com.sap.sse.datamining.shared.QueryDefinition; import com.sap.sse.datamining.shared.dto.FunctionDTO; +import com.sap.sse.datamining.shared.impl.dto.DataRetrieverChainDefinitionDTO; -public final class SailingDataMiningFactory { +public class SailingDataMiningFactory { + + private final ProcessorFactory processorFactory; - private SailingDataMiningFactory() { + private final FunctionProvider functionProvider; + private final DataRetrieverChainDefinitionRegistry dataRetrieverChainDefinitionRegistry; + + public SailingDataMiningFactory(FunctionProvider functionProvider, DataRetrieverChainDefinitionRegistry dataRetrieverChainDefinitionRegistry) { + processorFactory = new ProcessorFactory(DataMiningActivator.getExecutor()); + + this.functionProvider = functionProvider; + this.dataRetrieverChainDefinitionRegistry = dataRetrieverChainDefinitionRegistry; } - public static Query createQuery(RacingEventService dataSource, final QueryDefinition queryDefinition, final FunctionProvider functionProvider) { + public Query createQuery(RacingEventService dataSource, final QueryDefinition queryDefinition) { return new ProcessorQuery(DataMiningActivator.getExecutor(), dataSource, DataMiningActivator.getStringMessages(), DataMiningStringMessages.Util.getLocaleFor(queryDefinition.getLocaleInfoName())) { - @Override - protected Processor createFirstProcessor() { - Processor> aggregationProcessor = ProcessorFactory.createAggregationProcessor(/*query*/ this, queryDefinition.getAggregatorType()); - + protected Processor createFirstProcessor() { @SuppressWarnings("unchecked") // TODO Clean, after the deprecated components have been removed Function extractionFunction = (Function) functionProvider.getFunctionForDTO(queryDefinition.getStatisticToCalculate()); - Processor> extractionProcessor = ProcessorFactory.createExtractionProcessor(aggregationProcessor, extractionFunction); + @SuppressWarnings("unchecked") + Class dataTypeToRetrieve = (Class) extractionFunction.getDeclaringType(); - List> dimensionsToGroupBy = convertDTOsToFunctions(queryDefinition.getDimensionsToGroupBy(), functionProvider); - Processor groupingProcessor = ProcessorFactory.createGroupingProcessor(extractionProcessor, dimensionsToGroupBy); + Processor, Map> aggregationProcessor = processorFactory.createAggregationProcessor(/*query*/ this, queryDefinition.getAggregatorType()); + Processor, GroupedDataEntry> extractionProcessor = processorFactory.createExtractionProcessor(aggregationProcessor, extractionFunction); - SailingDataRetrievalLevels dataRetrievalLevel = calculateDataRetrievalLevel(extractionFunction); - Processor firstRetrievalProcessor = SailingDataRetrieverFactory.createRetrievalProcessorChain(dataRetrievalLevel, groupingProcessor, queryDefinition.getFilterSelection(), functionProvider); - return firstRetrievalProcessor; + List> dimensionsToGroupBy = convertDTOsToFunctions(queryDefinition.getDimensionsToGroupBy()); + Processor> groupingProcessor = processorFactory.createGroupingProcessor(dataTypeToRetrieve, extractionProcessor, dimensionsToGroupBy); + + DataRetrieverChainDefinition dataRetrieverChainDefinition = dataRetrieverChainDefinitionRegistry.getDataRetrieverChainDefinition(RacingEventService.class, queryDefinition.getDataRetrieverChainDefinition().getId()); + DataRetrieverChainBuilder chainBuilder = dataRetrieverChainDefinition.startBuilding(DataMiningActivator.getExecutor()); + Map, FilterCriterion> criteriaMappedByDataType = createFilterCriteria(queryDefinition.getFilterSelection()); + do { + if (criteriaMappedByDataType.containsKey(chainBuilder.getCurrentRetrievedDataType())) { + chainBuilder.setFilter(criteriaMappedByDataType.get(chainBuilder.getCurrentRetrievedDataType())); + } + + chainBuilder.stepDeeper(); + } while (!dataTypeToRetrieve.equals(chainBuilder.getCurrentRetrievedDataType())); + if (criteriaMappedByDataType.containsKey(chainBuilder.getCurrentRetrievedDataType())) { + chainBuilder.setFilter(criteriaMappedByDataType.get(chainBuilder.getCurrentRetrievedDataType())); + } + chainBuilder.addResultReceiver(groupingProcessor); + + return chainBuilder.build(); } }; } - @SuppressWarnings("unchecked") - public static Query> createDimensionValuesQuery(RacingEventService dataSource, final Collection dimensionDTOs, final FunctionProvider functionProvider) { - return new ProcessorQuery, RacingEventService>(DataMiningActivator.getExecutor(), dataSource) { - @Override - protected Processor createFirstProcessor() { - Processor> valueCollector = ProcessorFactory.createGroupedDataCollectingAsSetProcessor(/*query*/ this); - - Collection> dimensions = convertDTOsToFunctions(dimensionDTOs, functionProvider); - Map>> dimensionsMappedByRetrievalLevel = mapFunctionsByRetrievalLevel(dimensions); - SailingDataRetrievalLevels deepestRetrievalLevel = getDeepestRetrievalLevel(dimensionsMappedByRetrievalLevel.keySet()); - - Processor retrievalProcessor = null; - for (int i = deepestRetrievalLevel.ordinal(); i >= 0; i--) { - SailingDataRetrievalLevels retrievalLevel = SailingDataRetrievalLevels.values()[i]; - - Collection> dimensionsForRetrievalLevel = dimensionsMappedByRetrievalLevel.containsKey(retrievalLevel) ? dimensionsMappedByRetrievalLevel.get(retrievalLevel) : new ArrayList>(); - Collection> retrievalResultReceivers = ProcessorFactory.createGroupingExtractorsForDimensions(valueCollector, dimensionsForRetrievalLevel); - if (retrievalProcessor != null) { - retrievalResultReceivers.add(retrievalProcessor); - } - - retrievalProcessor = SailingDataRetrieverFactory.createRetrievalProcessorWithoutFilter(retrievalLevel, retrievalResultReceivers); - } - - // A retrieval processor created this way results always in a Processor - return (Processor) retrievalProcessor; - } - }; - } - - private static List> convertDTOsToFunctions(Collection functionDTOs, FunctionProvider functionProvider) { + private List> convertDTOsToFunctions(Collection functionDTOs) { List> dimensionsToGroupBy = new ArrayList<>(); for (FunctionDTO functionDTO : functionDTOs) { dimensionsToGroupBy.add(functionProvider.getFunctionForDTO(functionDTO)); @@ -92,36 +92,70 @@ public final class SailingDataMiningFactory { return dimensionsToGroupBy; } - private static Map>> mapFunctionsByRetrievalLevel(Collection> functions) { - Map>> mappedFunctions = new HashMap<>(); - for (Function function : functions) { - SailingDataRetrievalLevels retrievalLevel = calculateDataRetrievalLevel(function); - if (!mappedFunctions.containsKey(retrievalLevel)) { - mappedFunctions.put(retrievalLevel, new HashSet>()); + @SuppressWarnings("unchecked") + private Map, FilterCriterion> createFilterCriteria(Map> filterSelection) { + Map, CompoundFilterCriterion> criteriaMappedByDataType = new HashMap<>(); + for (Entry> filterSelectionEntry : filterSelection.entrySet()) { + Function function = functionProvider.getFunctionForDTO(filterSelectionEntry.getKey()); + Class dataType = (Class) function.getDeclaringType(); + + if (!criteriaMappedByDataType.containsKey(dataType)) { + criteriaMappedByDataType.put(dataType, new AndCompoundFilterCriterion<>(dataType)); } - mappedFunctions.get(retrievalLevel).add(function); + + Collection filterValues = new ArrayList<>(); + for (Object filterValue : filterSelectionEntry.getValue()) { + filterValues.add(filterValue); + } + ((CompoundFilterCriterion) criteriaMappedByDataType.get(dataType)).addCriteria(new NullaryFunctionValuesFilterCriterion<>(dataType, function, filterValues)); + } + return (Map, FilterCriterion>)(Map, ?>) criteriaMappedByDataType; + } + + public Query> createDimensionValuesQuery(RacingEventService dataSource, final DataRetrieverChainDefinitionDTO dataRetrieverChainDefinitionDTO, final String localeInfoName) { + final DataMiningStringMessages stringMessages = DataMiningActivator.getStringMessages(); + final Locale locale = DataMiningStringMessages.Util.getLocaleFor(localeInfoName); + return new ProcessorQuery, RacingEventService>(DataMiningActivator.getExecutor(), dataSource, stringMessages, locale) { + @Override + protected Processor createFirstProcessor() { + Processor, Map>> valueCollector = processorFactory.createGroupedDataCollectingAsSetProcessor(/*query*/ this); + + DataRetrieverChainDefinition dataRetrieverChainDefinition = dataRetrieverChainDefinitionRegistry.getDataRetrieverChainDefinition(RacingEventService.class, dataRetrieverChainDefinitionDTO.getId()); + DataRetrieverChainBuilder chainBuilder = dataRetrieverChainDefinition.startBuilding(DataMiningActivator.getExecutor()); + Collection> dimensions = functionProvider.getMinimizedDimensionsFor(dataRetrieverChainDefinition); + Map, Collection>> dimensionsMappedByDeclaringType = mapFunctionsByDeclaringType(dimensions); + while (!dimensionsMappedByDeclaringType.isEmpty()) { + Class dataType = chainBuilder.getCurrentRetrievedDataType(); + + if (dimensionsMappedByDeclaringType.containsKey(dataType)) { + for (Processor resultReceiver : processorFactory.createGroupingExtractorsForDimensions( + dataType, valueCollector, dimensionsMappedByDeclaringType.get(dataType), + stringMessages, locale)) { + chainBuilder.addResultReceiver(resultReceiver); + } + dimensionsMappedByDeclaringType.remove(dataType); + } + + if (!dimensionsMappedByDeclaringType.isEmpty()) { + chainBuilder.stepDeeper(); + } + } + + return chainBuilder.build(); + } + }; + } + + private Map, Collection>> mapFunctionsByDeclaringType(Collection> functions) { + Map, Collection>> mappedFunctions = new HashMap<>(); + for (Function function : functions) { + Class declaringType = function.getDeclaringType(); + if (!mappedFunctions.containsKey(declaringType)) { + mappedFunctions.put(declaringType, new HashSet>()); + } + mappedFunctions.get(declaringType).add(function); } return mappedFunctions; } - - private static SailingDataRetrievalLevels calculateDataRetrievalLevel(Function function) { - if (function.getDeclaringType().equals(HasTrackedRaceContext.class)) { - return SailingDataRetrievalLevels.TrackedRace; - } - if (function.getDeclaringType().equals(HasTrackedLegContext.class)) { - return SailingDataRetrievalLevels.TrackedLeg; - } - if (function.getDeclaringType().equals(HasTrackedLegOfCompetitorContext.class)) { - return SailingDataRetrievalLevels.TrackedLegOfCompetitor; - } - if (function.getDeclaringType().equals(HasGPSFixContext.class)) { - return SailingDataRetrievalLevels.GPSFix; - } - return SailingDataRetrievalLevels.GPSFix; - } - - private static SailingDataRetrievalLevels getDeepestRetrievalLevel(Collection retrievalLevels) { - return Collections.max(retrievalLevels); - } } diff --git a/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/factories/SailingDataRetrievalLevels.java b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/factories/SailingDataRetrievalLevels.java deleted file mode 100644 index 22a1aa66106..00000000000 --- a/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/factories/SailingDataRetrievalLevels.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.sap.sailing.datamining.factories; - -public enum SailingDataRetrievalLevels { - - LeaderboardGroup, RegattaLeaderboard, TrackedRace, TrackedLeg, TrackedLegOfCompetitor, GPSFix - -} diff --git a/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/factories/SailingDataRetrieverFactory.java b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/factories/SailingDataRetrieverFactory.java deleted file mode 100644 index 1a43a403b44..00000000000 --- a/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/factories/SailingDataRetrieverFactory.java +++ /dev/null @@ -1,141 +0,0 @@ -package com.sap.sailing.datamining.factories; - -import java.io.Serializable; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.Map; -import java.util.Map.Entry; -import java.util.concurrent.ThreadPoolExecutor; - -import com.sap.sailing.datamining.data.HasGPSFixContext; -import com.sap.sailing.datamining.data.HasTrackedLegContext; -import com.sap.sailing.datamining.data.HasTrackedLegOfCompetitorContext; -import com.sap.sailing.datamining.data.HasTrackedRaceContext; -import com.sap.sailing.datamining.impl.components.GPSFixRetrievalProcessor; -import com.sap.sailing.datamining.impl.components.LeaderboardGroupRetrievalProcessor; -import com.sap.sailing.datamining.impl.components.RegattaLeaderboardFilteringRetrievalProcessor; -import com.sap.sailing.datamining.impl.components.TrackedLegFilteringRetrievalProcessor; -import com.sap.sailing.datamining.impl.components.TrackedLegOfCompetitorFilteringRetrievalProcessor; -import com.sap.sailing.datamining.impl.components.TrackedRaceFilteringRetrievalProcessor; -import com.sap.sailing.domain.leaderboard.LeaderboardGroup; -import com.sap.sailing.domain.leaderboard.RegattaLeaderboard; -import com.sap.sailing.server.RacingEventService; -import com.sap.sse.datamining.components.FilterCriterion; -import com.sap.sse.datamining.components.Processor; -import com.sap.sse.datamining.functions.Function; -import com.sap.sse.datamining.functions.FunctionProvider; -import com.sap.sse.datamining.impl.DataMiningActivator; -import com.sap.sse.datamining.impl.criterias.AndCompoundFilterCriterion; -import com.sap.sse.datamining.impl.criterias.CompoundFilterCriterion; -import com.sap.sse.datamining.impl.criterias.NonFilteringFilterCriterion; -import com.sap.sse.datamining.impl.criterias.NullaryFunctionValuesFilterCriterion; -import com.sap.sse.datamining.shared.dto.FunctionDTO; - -public final class SailingDataRetrieverFactory { - - private SailingDataRetrieverFactory() { - } - - /** - * Creates the processor chain for the data retrieval and returns the first processor of the chain. - * @param groupingProcessor The result receiver after the retrieval - * @param filterSelection The filter functions and values for the filtration - * @param functionProvider - * @return The first processor of the retrieval chain. - */ - @SuppressWarnings("unchecked") - public static Processor createRetrievalProcessorChain(SailingDataRetrievalLevels dataRetrievalLevel, Processor groupingProcessor, Map> filterSelection, FunctionProvider functionProvider) { - Processor resultReceiver = groupingProcessor; - for (int i = dataRetrievalLevel.ordinal(); i >= 0; i--) { - resultReceiver = createDataRetrieverFor(SailingDataRetrievalLevels.values()[i], resultReceiver, filterSelection, functionProvider); - } - return (Processor) resultReceiver; - } - - @SuppressWarnings("unchecked") - /* The way this method is used should guarantee, that the result receiver matches the new processor - */ - private static Processor createDataRetrieverFor(SailingDataRetrievalLevels dataRetrievalLevel, - Processor resultReceiver, Map> filterSelection, FunctionProvider functionProvider) { - ThreadPoolExecutor executor = DataMiningActivator.getExecutor(); - - switch (dataRetrievalLevel) { - case GPSFix: - Processor gpsFixSpecificResultReceiver = (Processor) resultReceiver; - return new GPSFixRetrievalProcessor(executor, Arrays.asList(gpsFixSpecificResultReceiver)); - case LeaderboardGroup: - Processor leaderboardGroupSpecificResultReceiver = (Processor) resultReceiver; - return new LeaderboardGroupRetrievalProcessor(executor, Arrays.asList(leaderboardGroupSpecificResultReceiver)); - case RegattaLeaderboard: - Processor regattaLeaderboardSpecificResultReceiver = (Processor) resultReceiver; - return new RegattaLeaderboardFilteringRetrievalProcessor(executor, Arrays.asList(regattaLeaderboardSpecificResultReceiver), getFilterCriteriaForBaseDataType(RegattaLeaderboard.class, filterSelection, functionProvider)); - case TrackedLeg: - Processor trackedLegSpecificResultReceiver = (Processor) resultReceiver; - return new TrackedLegFilteringRetrievalProcessor(executor, Arrays.asList(trackedLegSpecificResultReceiver), getFilterCriteriaForBaseDataType(HasTrackedLegContext.class, filterSelection, functionProvider)); - case TrackedLegOfCompetitor: - Processor trackedLegOfCompetitorSpecificResultReceiver = (Processor) resultReceiver; - return new TrackedLegOfCompetitorFilteringRetrievalProcessor(executor, Arrays.asList(trackedLegOfCompetitorSpecificResultReceiver), getFilterCriteriaForBaseDataType(HasTrackedLegOfCompetitorContext.class, filterSelection, functionProvider)); - case TrackedRace: - Processor trackedRaceSpecificResultReceiver = (Processor) resultReceiver; - return new TrackedRaceFilteringRetrievalProcessor(executor, Arrays.asList(trackedRaceSpecificResultReceiver), getFilterCriteriaForBaseDataType(HasTrackedRaceContext.class, filterSelection, functionProvider)); - } - throw new IllegalArgumentException("No data retriever implemented for the given data retrieval level '" - + dataRetrievalLevel + "'"); - } - - private static FilterCriterion getFilterCriteriaForBaseDataType(Class baseDataType, - Map> filterSelection, FunctionProvider functionProvider) { - CompoundFilterCriterion criteria = null; - for (Entry> filterSelectionEntry : filterSelection.entrySet()) { - Function function = functionProvider.getFunctionForDTO(filterSelectionEntry.getKey()); - if (baseDataType.equals(function.getDeclaringType())) { - if (criteria == null) { - criteria = new AndCompoundFilterCriterion<>(); - } - - Collection filterValues = new ArrayList<>(); - for (Object filterValue : filterSelectionEntry.getValue()) { - filterValues.add(filterValue); - } - criteria.addCriteria(new NullaryFunctionValuesFilterCriterion(function, filterValues)); - } - } - return criteria != null ? criteria : new NonFilteringFilterCriterion(); - } - - /** - * Creates a retrieval processor without filter for the given retrieval level and result receivers.
- * The input type of the result receivers has to match the result type of the created retrieval processor for the given retrievel level or a {@link ClassCastException} can be thrown. - * For example, if the retrieval Level is {@link SailingDataRetrievalLevels#TrackedRace} the input must be {@link HasTrackedRaceContext}. - */ - @SuppressWarnings("unchecked") - public static Processor createRetrievalProcessorWithoutFilter(SailingDataRetrievalLevels retrievalLevel, - Collection> retrievalResultReceivers) throws ClassCastException { - ThreadPoolExecutor executor = DataMiningActivator.getExecutor(); - - switch (retrievalLevel) { - case GPSFix: - Collection> gpsFixSpecificResultReceivers = (Collection>)(Collection) retrievalResultReceivers; - return new GPSFixRetrievalProcessor(executor, gpsFixSpecificResultReceivers); - case LeaderboardGroup: - Collection> leaderboardGroupSpecificResultReceivers = (Collection>)(Collection) retrievalResultReceivers; - return new LeaderboardGroupRetrievalProcessor(executor, leaderboardGroupSpecificResultReceivers); - case RegattaLeaderboard: - Collection> regattaLeaderboardSpecificResultReceivers = (Collection>)(Collection) retrievalResultReceivers; - return new RegattaLeaderboardFilteringRetrievalProcessor(executor, regattaLeaderboardSpecificResultReceivers, new NonFilteringFilterCriterion()); - case TrackedLeg: - Collection> trackedLegSpecificResultReceivers = (Collection>)(Collection) retrievalResultReceivers; - return new TrackedLegFilteringRetrievalProcessor(executor, trackedLegSpecificResultReceivers, new NonFilteringFilterCriterion()); - case TrackedLegOfCompetitor: - Collection> trackedLegOfCompetitorSpecificResultReceivers = (Collection>)(Collection) retrievalResultReceivers; - return new TrackedLegOfCompetitorFilteringRetrievalProcessor(executor, trackedLegOfCompetitorSpecificResultReceivers, new NonFilteringFilterCriterion()); - case TrackedRace: - Collection> trackedRaceSpecificResultReceivers = (Collection>)(Collection) retrievalResultReceivers; - return new TrackedRaceFilteringRetrievalProcessor(executor, trackedRaceSpecificResultReceivers, new NonFilteringFilterCriterion()); - } - throw new IllegalArgumentException("No data retriever implemented for the given data retrieval level '" - + retrievalLevel + "'"); - } - -} diff --git a/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/impl/components/GPSFixRetrievalProcessor.java b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/impl/components/GPSFixRetrievalProcessor.java index 7eb964a2b69..380a2c95ad2 100644 --- a/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/impl/components/GPSFixRetrievalProcessor.java +++ b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/impl/components/GPSFixRetrievalProcessor.java @@ -21,14 +21,14 @@ import com.sap.sse.datamining.shared.annotations.DataRetriever; level=5) public class GPSFixRetrievalProcessor extends AbstractSimpleRetrievalProcessor { - public GPSFixRetrievalProcessor(ExecutorService executor, Collection> resultReceivers) { - super(executor, resultReceivers); + public GPSFixRetrievalProcessor(ExecutorService executor, Collection> resultReceivers) { + super(HasTrackedLegOfCompetitorContext.class, HasGPSFixContext.class, executor, resultReceivers); } @Override protected Iterable retrieveData(HasTrackedLegOfCompetitorContext element) { Collection gpsFixesWithContext = new ArrayList<>(); - GPSFixTrack competitorTrack = element.getTrackedRace().getTrack(element.getCompetitor()); + GPSFixTrack competitorTrack = element.getTrackedLegContext().getTrackedRaceContext().getTrackedRace().getTrack(element.getCompetitor()); competitorTrack.lockForRead(); try { TrackedLegOfCompetitor trackedLegOfCompetitor = element.getTrackedLegOfCompetitor(); diff --git a/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/impl/components/LeaderboardGroupRetrievalProcessor.java b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/impl/components/LeaderboardGroupRetrievalProcessor.java index 986b50f5ed6..9c8b496fa0c 100644 --- a/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/impl/components/LeaderboardGroupRetrievalProcessor.java +++ b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/impl/components/LeaderboardGroupRetrievalProcessor.java @@ -17,8 +17,8 @@ public class LeaderboardGroupRetrievalProcessor extends AbstractSimpleRetrievalProcessor { public LeaderboardGroupRetrievalProcessor(ExecutorService executor, - Collection> resultReceivers) { - super(executor, resultReceivers); + Collection> resultReceivers) { + super(RacingEventService.class, LeaderboardGroup.class, executor, resultReceivers); } @Override diff --git a/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/impl/components/RegattaLeaderboardFilteringRetrievalProcessor.java b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/impl/components/RegattaLeaderboardFilteringRetrievalProcessor.java index dc1366e1794..d018870bdf5 100644 --- a/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/impl/components/RegattaLeaderboardFilteringRetrievalProcessor.java +++ b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/impl/components/RegattaLeaderboardFilteringRetrievalProcessor.java @@ -8,20 +8,19 @@ import com.sap.sailing.datamining.Activator; import com.sap.sailing.domain.leaderboard.Leaderboard; import com.sap.sailing.domain.leaderboard.LeaderboardGroup; import com.sap.sailing.domain.leaderboard.RegattaLeaderboard; -import com.sap.sse.datamining.components.FilterCriterion; import com.sap.sse.datamining.components.Processor; -import com.sap.sse.datamining.impl.components.AbstractSimpleFilteringRetrievalProcessor; +import com.sap.sse.datamining.impl.components.AbstractSimpleRetrievalProcessor; import com.sap.sse.datamining.shared.annotations.DataRetriever; @DataRetriever(dataType=RegattaLeaderboard.class, groupName=Activator.dataRetrieverGroupName, level=1) public class RegattaLeaderboardFilteringRetrievalProcessor extends - AbstractSimpleFilteringRetrievalProcessor { + AbstractSimpleRetrievalProcessor { public RegattaLeaderboardFilteringRetrievalProcessor(ExecutorService executor, - Collection> resultReceivers, FilterCriterion criteria) { - super(executor, resultReceivers, criteria); + Collection> resultReceivers) { + super(LeaderboardGroup.class, RegattaLeaderboard.class, executor, resultReceivers); } @Override diff --git a/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/impl/components/TrackedLegFilteringRetrievalProcessor.java b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/impl/components/TrackedLegFilteringRetrievalProcessor.java index 36bd0bb500c..91ee757a9c0 100644 --- a/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/impl/components/TrackedLegFilteringRetrievalProcessor.java +++ b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/impl/components/TrackedLegFilteringRetrievalProcessor.java @@ -9,20 +9,19 @@ import com.sap.sailing.datamining.data.HasTrackedLegContext; import com.sap.sailing.datamining.data.HasTrackedRaceContext; import com.sap.sailing.datamining.impl.data.TrackedLegWithContext; import com.sap.sailing.domain.tracking.TrackedLeg; -import com.sap.sse.datamining.components.FilterCriterion; import com.sap.sse.datamining.components.Processor; -import com.sap.sse.datamining.impl.components.AbstractSimpleFilteringRetrievalProcessor; +import com.sap.sse.datamining.impl.components.AbstractSimpleRetrievalProcessor; import com.sap.sse.datamining.shared.annotations.DataRetriever; @DataRetriever(dataType=HasTrackedLegContext.class, groupName=Activator.dataRetrieverGroupName, level=3) public class TrackedLegFilteringRetrievalProcessor extends - AbstractSimpleFilteringRetrievalProcessor { + AbstractSimpleRetrievalProcessor { public TrackedLegFilteringRetrievalProcessor(ExecutorService executor, - Collection> resultReceivers, FilterCriterion criteria) { - super(executor, resultReceivers, criteria); + Collection> resultReceivers) { + super(HasTrackedRaceContext.class, HasTrackedLegContext.class, executor, resultReceivers); } @Override diff --git a/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/impl/components/TrackedLegOfCompetitorFilteringRetrievalProcessor.java b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/impl/components/TrackedLegOfCompetitorFilteringRetrievalProcessor.java index 3f9cfa6ba47..1a55a4fcd3b 100644 --- a/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/impl/components/TrackedLegOfCompetitorFilteringRetrievalProcessor.java +++ b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/impl/components/TrackedLegOfCompetitorFilteringRetrievalProcessor.java @@ -9,27 +9,25 @@ import com.sap.sailing.datamining.data.HasTrackedLegContext; import com.sap.sailing.datamining.data.HasTrackedLegOfCompetitorContext; import com.sap.sailing.datamining.impl.data.TrackedLegOfCompetitorWithContext; import com.sap.sailing.domain.base.Competitor; -import com.sap.sse.datamining.components.FilterCriterion; import com.sap.sse.datamining.components.Processor; -import com.sap.sse.datamining.impl.components.AbstractSimpleFilteringRetrievalProcessor; +import com.sap.sse.datamining.impl.components.AbstractSimpleRetrievalProcessor; import com.sap.sse.datamining.shared.annotations.DataRetriever; @DataRetriever(dataType=HasTrackedLegOfCompetitorContext.class, groupName=Activator.dataRetrieverGroupName, level=4) public class TrackedLegOfCompetitorFilteringRetrievalProcessor extends - AbstractSimpleFilteringRetrievalProcessor { + AbstractSimpleRetrievalProcessor { public TrackedLegOfCompetitorFilteringRetrievalProcessor(ExecutorService executor, - Collection> resultReceivers, - FilterCriterion criteria) { - super(executor, resultReceivers, criteria); + Collection> resultReceivers) { + super(HasTrackedLegContext.class, HasTrackedLegOfCompetitorContext.class, executor, resultReceivers); } @Override protected Iterable retrieveData(HasTrackedLegContext element) { Collection trackedLegOfCompetitorsWithContext = new ArrayList<>(); - for (Competitor competitor : element.getRace().getCompetitors()) { + for (Competitor competitor : element.getTrackedRaceContext().getTrackedRace().getRace().getCompetitors()) { HasTrackedLegOfCompetitorContext trackedLegOfCompetitorWithContext = new TrackedLegOfCompetitorWithContext(element, element.getTrackedLeg().getTrackedLeg(competitor)); trackedLegOfCompetitorsWithContext.add(trackedLegOfCompetitorWithContext); } diff --git a/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/impl/components/TrackedRaceFilteringRetrievalProcessor.java b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/impl/components/TrackedRaceFilteringRetrievalProcessor.java index b5ebf752fba..e2881eaf1e5 100644 --- a/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/impl/components/TrackedRaceFilteringRetrievalProcessor.java +++ b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/impl/components/TrackedRaceFilteringRetrievalProcessor.java @@ -11,20 +11,19 @@ import com.sap.sailing.domain.base.RaceColumn; import com.sap.sailing.domain.base.Regatta; import com.sap.sailing.domain.leaderboard.Leaderboard; import com.sap.sailing.domain.tracking.TrackedRace; -import com.sap.sse.datamining.components.FilterCriterion; import com.sap.sse.datamining.components.Processor; -import com.sap.sse.datamining.impl.components.AbstractSimpleFilteringRetrievalProcessor; +import com.sap.sse.datamining.impl.components.AbstractSimpleRetrievalProcessor; import com.sap.sse.datamining.shared.annotations.DataRetriever; @DataRetriever(dataType=HasTrackedRaceContext.class, groupName="Sailing", level=2) public class TrackedRaceFilteringRetrievalProcessor extends - AbstractSimpleFilteringRetrievalProcessor { + AbstractSimpleRetrievalProcessor { public TrackedRaceFilteringRetrievalProcessor(ExecutorService executor, - Collection> resultReceivers, FilterCriterion criteria) { - super(executor, resultReceivers, criteria); + Collection> resultReceivers) { + super(Leaderboard.class, HasTrackedRaceContext.class, executor, resultReceivers); } @Override diff --git a/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/impl/data/GPSFixWithContext.java b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/impl/data/GPSFixWithContext.java index 44be900af1a..d4cf92642ca 100644 --- a/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/impl/data/GPSFixWithContext.java +++ b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/impl/data/GPSFixWithContext.java @@ -2,27 +2,23 @@ package com.sap.sailing.datamining.impl.data; import com.sap.sailing.datamining.data.HasGPSFixContext; import com.sap.sailing.datamining.data.HasTrackedLegOfCompetitorContext; -import com.sap.sailing.domain.base.Fleet; -import com.sap.sailing.domain.base.Regatta; import com.sap.sailing.domain.tracking.GPSFixMoving; -import com.sap.sailing.domain.tracking.TrackedLeg; -import com.sap.sailing.domain.tracking.TrackedLegOfCompetitor; -import com.sap.sailing.domain.tracking.TrackedRace; -public class GPSFixWithContext extends TrackedLegOfCompetitorWithContext implements HasGPSFixContext { +public class GPSFixWithContext implements HasGPSFixContext { + + private final HasTrackedLegOfCompetitorContext trackedLegOfCompetitorContext; private final GPSFixMoving gpsFix; - public GPSFixWithContext(HasTrackedLegOfCompetitorContext legContext, GPSFixMoving gpsFix) { - this(legContext.getRegatta(), legContext.getFleet(), legContext.getTrackedRace(), - legContext.getTrackedLeg(), legContext.getLegNumber(), legContext.getTrackedLegOfCompetitor(), gpsFix); - } - - public GPSFixWithContext(Regatta regatta, Fleet fleet, TrackedRace trackedRace, - TrackedLeg trackedLeg, int legNumber, TrackedLegOfCompetitor trackedLegOfCompetitor, GPSFixMoving gpsFix) { - super(regatta, fleet, trackedRace, trackedLeg, legNumber, trackedLegOfCompetitor); + public GPSFixWithContext(HasTrackedLegOfCompetitorContext trackedLegOfCompetitorContext, GPSFixMoving gpsFix) { + this.trackedLegOfCompetitorContext = trackedLegOfCompetitorContext; this.gpsFix = gpsFix; } + + @Override + public HasTrackedLegOfCompetitorContext getTrackedLegOfCompetitorContext() { + return trackedLegOfCompetitorContext; + } @Override public GPSFixMoving getGPSFix() { diff --git a/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/impl/data/SailingDataMiningClassesWithFunctionsService.java b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/impl/data/SailingDataMiningClassesWithFunctionsService.java deleted file mode 100644 index 167ebf9e3fb..00000000000 --- a/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/impl/data/SailingDataMiningClassesWithFunctionsService.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.sap.sailing.datamining.impl.data; - -import java.util.HashSet; -import java.util.Set; - -import com.sap.sailing.datamining.data.HasGPSFixContext; -import com.sap.sse.datamining.ClassesWithFunctionsService; - -public class SailingDataMiningClassesWithFunctionsService implements ClassesWithFunctionsService { - - @Override - public Set> getInternalClassesWithMarkedMethods() { - Set> internalClasses = new HashSet<>(); - /* - * This also contains the marked methods of - * HasTrackedRaceContext, - * HasTrackedLegContext and - * HasTrackedLegOfCompetitorContext, - * because these are the super types of HasGPSFixContext. - */ - internalClasses.add(HasGPSFixContext.class); - return internalClasses; - } - - @Override - public Set> getExternalLibraryClasses() { - return new HashSet<>(); - } - -} diff --git a/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/impl/data/TrackedLegOfCompetitorWithContext.java b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/impl/data/TrackedLegOfCompetitorWithContext.java index 9bd1da34c20..3c846bf6c44 100644 --- a/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/impl/data/TrackedLegOfCompetitorWithContext.java +++ b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/impl/data/TrackedLegOfCompetitorWithContext.java @@ -3,31 +3,27 @@ package com.sap.sailing.datamining.impl.data; import com.sap.sailing.datamining.data.HasTrackedLegContext; import com.sap.sailing.datamining.data.HasTrackedLegOfCompetitorContext; import com.sap.sailing.domain.base.Competitor; -import com.sap.sailing.domain.base.Fleet; -import com.sap.sailing.domain.base.Regatta; import com.sap.sailing.domain.common.TimePoint; -import com.sap.sailing.domain.tracking.TrackedLeg; import com.sap.sailing.domain.tracking.TrackedLegOfCompetitor; -import com.sap.sailing.domain.tracking.TrackedRace; -public class TrackedLegOfCompetitorWithContext extends TrackedLegWithContext implements HasTrackedLegOfCompetitorContext { +public class TrackedLegOfCompetitorWithContext implements HasTrackedLegOfCompetitorContext { + private final HasTrackedLegContext trackedLegContext; + private final TrackedLegOfCompetitor trackedLegOfCompetitor; private final Competitor competitor; public TrackedLegOfCompetitorWithContext(HasTrackedLegContext trackedLegContext, TrackedLegOfCompetitor trackedLegOfCompetitor) { - this(trackedLegContext.getRegatta(), trackedLegContext.getFleet(), - trackedLegContext.getTrackedRace(), trackedLegContext.getTrackedLeg(), - trackedLegContext.getLegNumber(), trackedLegOfCompetitor); - } - - public TrackedLegOfCompetitorWithContext(Regatta regatta, Fleet fleet, TrackedRace trackedRace, - TrackedLeg trackedLeg, int legNumber, TrackedLegOfCompetitor trackedLegOfCompetitor) { - super(regatta, fleet, trackedRace, trackedLeg, legNumber); + this.trackedLegContext = trackedLegContext; this.trackedLegOfCompetitor = trackedLegOfCompetitor; this.competitor = trackedLegOfCompetitor.getCompetitor(); } + @Override + public HasTrackedLegContext getTrackedLegContext() { + return trackedLegContext; + } + @Override public TrackedLegOfCompetitor getTrackedLegOfCompetitor() { return trackedLegOfCompetitor; @@ -40,7 +36,7 @@ public class TrackedLegOfCompetitorWithContext extends TrackedLegWithContext imp @Override public Double getDistanceTraveled() { - TimePoint timePoint = getTrackedRace().getEndOfTracking(); + TimePoint timePoint = getTrackedLegContext().getTrackedRaceContext().getTrackedRace().getEndOfTracking(); return getTrackedLegOfCompetitor().getDistanceTraveled(timePoint).getMeters(); } diff --git a/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/impl/data/TrackedLegWithContext.java b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/impl/data/TrackedLegWithContext.java index 660c31d5972..01809721e6f 100644 --- a/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/impl/data/TrackedLegWithContext.java +++ b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/impl/data/TrackedLegWithContext.java @@ -2,17 +2,16 @@ package com.sap.sailing.datamining.impl.data; import com.sap.sailing.datamining.data.HasTrackedLegContext; import com.sap.sailing.datamining.data.HasTrackedRaceContext; -import com.sap.sailing.domain.base.Fleet; -import com.sap.sailing.domain.base.Regatta; import com.sap.sailing.domain.common.LegType; import com.sap.sailing.domain.common.NoWindException; import com.sap.sailing.domain.common.TimePoint; import com.sap.sailing.domain.common.impl.MillisecondsTimePoint; import com.sap.sailing.domain.tracking.TrackedLeg; import com.sap.sailing.domain.tracking.TrackedLegOfCompetitor; -import com.sap.sailing.domain.tracking.TrackedRace; -public class TrackedLegWithContext extends TrackedRaceWithContext implements HasTrackedLegContext { +public class TrackedLegWithContext implements HasTrackedLegContext { + + private final HasTrackedRaceContext trackedRaceContext; private final TrackedLeg trackedLeg; private final int legNumber; @@ -20,15 +19,15 @@ public class TrackedLegWithContext extends TrackedRaceWithContext implements Has private boolean legTypeHasBeenInitialized; public TrackedLegWithContext(HasTrackedRaceContext trackedRaceContext, TrackedLeg trackedLeg, int legNumber) { - this(trackedRaceContext.getRegatta(), trackedRaceContext.getFleet(), - trackedRaceContext.getTrackedRace(), trackedLeg, legNumber); - } - - public TrackedLegWithContext(Regatta regatta, Fleet fleet, TrackedRace trackedRace, TrackedLeg trackedLeg, int legNumber) { - super(regatta, fleet, trackedRace); + this.trackedRaceContext = trackedRaceContext; this.trackedLeg = trackedLeg; this.legNumber = legNumber; } + + @Override + public HasTrackedRaceContext getTrackedRaceContext() { + return trackedRaceContext; + } @Override public TrackedLeg getTrackedLeg() { diff --git a/java/com.sap.sailing.declination.test/.classpath b/java/com.sap.sailing.declination.test/.classpath old mode 100755 new mode 100644 index c8351b0a6bd..4f83b2397ec --- a/java/com.sap.sailing.declination.test/.classpath +++ b/java/com.sap.sailing.declination.test/.classpath @@ -1,7 +1,7 @@ - - - - - - - + + + + + + + diff --git a/java/com.sap.sailing.declination.test/.settings/org.eclipse.jdt.core.prefs b/java/com.sap.sailing.declination.test/.settings/org.eclipse.jdt.core.prefs old mode 100755 new mode 100644 index f602fe67ba9..a698e59674f --- a/java/com.sap.sailing.declination.test/.settings/org.eclipse.jdt.core.prefs +++ b/java/com.sap.sailing.declination.test/.settings/org.eclipse.jdt.core.prefs @@ -1,8 +1,12 @@ -#Thu Jan 19 09:48:53 CET 2012 -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 -org.eclipse.jdt.core.compiler.compliance=1.7 -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.7 +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/java/com.sap.sailing.declination.test/META-INF/MANIFEST.MF b/java/com.sap.sailing.declination.test/META-INF/MANIFEST.MF old mode 100755 new mode 100644 index 7084100389d..4274aede4e5 --- a/java/com.sap.sailing.declination.test/META-INF/MANIFEST.MF +++ b/java/com.sap.sailing.declination.test/META-INF/MANIFEST.MF @@ -1,12 +1,12 @@ -Manifest-Version: 1.0 -Bundle-ManifestVersion: 2 -Bundle-Name: Test -Bundle-SymbolicName: com.sap.sailing.declination.test -Bundle-Version: 1.0.0.qualifier -Bundle-Vendor: SAP -Bundle-RequiredExecutionEnvironment: JavaSE-1.7 -Fragment-Host: com.sap.sailing.declination -Require-Bundle: org.junit4;bundle-version="4.8.2" -Import-Package: com.sap.sailing.domain.common, - com.sap.sailing.domain.common.impl, - com.sap.sailing.domain.common.quadtree +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: Test +Bundle-SymbolicName: com.sap.sailing.declination.test +Bundle-Version: 1.0.0.qualifier +Bundle-Vendor: SAP +Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Fragment-Host: com.sap.sailing.declination +Require-Bundle: org.junit4;bundle-version="4.8.2" +Import-Package: com.sap.sailing.domain.common, + com.sap.sailing.domain.common.impl, + com.sap.sailing.domain.common.quadtree diff --git a/java/com.sap.sailing.declination/.classpath b/java/com.sap.sailing.declination/.classpath old mode 100755 new mode 100644 index 947620eea47..03c4ce9fdd8 --- a/java/com.sap.sailing.declination/.classpath +++ b/java/com.sap.sailing.declination/.classpath @@ -1,8 +1,8 @@ - - - - - - - - + + + + + + + + diff --git a/java/com.sap.sailing.declination/.settings/org.eclipse.jdt.core.prefs b/java/com.sap.sailing.declination/.settings/org.eclipse.jdt.core.prefs old mode 100755 new mode 100644 index 19f76ea5b58..a698e59674f --- a/java/com.sap.sailing.declination/.settings/org.eclipse.jdt.core.prefs +++ b/java/com.sap.sailing.declination/.settings/org.eclipse.jdt.core.prefs @@ -1,8 +1,12 @@ -#Thu Jan 19 09:48:28 CET 2012 -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 -org.eclipse.jdt.core.compiler.compliance=1.7 -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.7 +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/java/com.sap.sailing.declination/META-INF/MANIFEST.MF b/java/com.sap.sailing.declination/META-INF/MANIFEST.MF old mode 100755 new mode 100644 index cad00f0b167..61d334496f0 --- a/java/com.sap.sailing.declination/META-INF/MANIFEST.MF +++ b/java/com.sap.sailing.declination/META-INF/MANIFEST.MF @@ -1,14 +1,14 @@ -Manifest-Version: 1.0 -Bundle-ManifestVersion: 2 -Bundle-Name: Magnetic Declination Data Provider -Bundle-SymbolicName: com.sap.sailing.declination -Bundle-Version: 1.0.0.qualifier -Bundle-Vendor: SAP -Bundle-RequiredExecutionEnvironment: JavaSE-1.7 -Bundle-ActivationPolicy: lazy -Require-Bundle: com.sap.sailing.domain, - com.sap.sailing.domain.common -Export-Package: com.sap.sailing.declination -Import-Package: com.sap.sailing.domain.common, - com.sap.sailing.domain.common.impl, - com.sap.sailing.domain.common.quadtree +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: Magnetic Declination Data Provider +Bundle-SymbolicName: com.sap.sailing.declination +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.domain.common +Export-Package: com.sap.sailing.declination +Import-Package: com.sap.sailing.domain.common, + com.sap.sailing.domain.common.impl, + com.sap.sailing.domain.common.quadtree diff --git a/java/com.sap.sailing.declination/NOAAImporter (No Proxy).launch b/java/com.sap.sailing.declination/NOAAImporter (No Proxy).launch old mode 100755 new mode 100644 index f811125d069..1ec884cf04a --- a/java/com.sap.sailing.declination/NOAAImporter (No Proxy).launch +++ b/java/com.sap.sailing.declination/NOAAImporter (No Proxy).launch @@ -1,12 +1,12 @@ - - - - - - - - - - - - + + + + + + + + + + + + diff --git a/java/com.sap.sailing.declination/NOAAImporter (Proxy).launch b/java/com.sap.sailing.declination/NOAAImporter (Proxy).launch old mode 100755 new mode 100644 index c9e89bb5e07..d14208265e7 --- a/java/com.sap.sailing.declination/NOAAImporter (Proxy).launch +++ b/java/com.sap.sailing.declination/NOAAImporter (Proxy).launch @@ -1,13 +1,13 @@ - - - - - - - - - - - - - + + + + + + + + + + + + + diff --git a/java/com.sap.sailing.domain.common/pom.xml b/java/com.sap.sailing.domain.common/pom.xml index b6c3ba40a0e..9ecd5a09d80 100755 --- a/java/com.sap.sailing.domain.common/pom.xml +++ b/java/com.sap.sailing.domain.common/pom.xml @@ -12,6 +12,15 @@ + + org.eclipse.tycho + tycho-compiler-plugin + ${tycho-version} + + 1.6 + 1.6 + + org.eclipse.tycho tycho-source-plugin diff --git a/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/ScoringSchemeType.java b/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/ScoringSchemeType.java index cfd4e07a62d..dc066d2a301 100755 --- a/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/ScoringSchemeType.java +++ b/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/ScoringSchemeType.java @@ -2,6 +2,6 @@ package com.sap.sailing.domain.common; public enum ScoringSchemeType { LOW_POINT, HIGH_POINT, HIGH_POINT_ESS_OVERALL, HIGH_POINT_LAST_BREAKS_TIE, HIGH_POINT_FIRST_GETS_TEN, - HIGH_POINT_FIRST_GETS_ONE, LOW_POINT_WINNER_GETS_ZERO, HIGH_POINT_WINNER_GETS_SIX, HIGH_POINT_WINNER_GETS_FIVE, - HIGH_POINT_FIRST_GETS_TEN_OR_EIGHT + HIGH_POINT_FIRST_GETS_ONE, LOW_POINT_WINNER_GETS_ZERO, HIGH_POINT_WINNER_GETS_SIX, HIGH_POINT_WINNER_GETS_FIVE, HIGH_POINT_WINNER_GETS_EIGHT, + HIGH_POINT_WINNER_GETS_EIGHT_AND_INTERPOLATION, HIGH_POINT_FIRST_GETS_TEN_OR_EIGHT } diff --git a/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/impl/QRCodeUtils.java b/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/impl/DeviceConfigurationQRCodeUtils.java similarity index 97% rename from java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/impl/QRCodeUtils.java rename to java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/impl/DeviceConfigurationQRCodeUtils.java index 2c48304a04b..2ab10e792a2 100644 --- a/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/impl/QRCodeUtils.java +++ b/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/impl/DeviceConfigurationQRCodeUtils.java @@ -8,7 +8,7 @@ import com.sap.sse.common.Util; * This class is used by our backend, in GWT-client code and by the Android app. Therefore we cannot use classes like * {@link URLEncoder} to help us with the encoding. */ -public class QRCodeUtils { +public class DeviceConfigurationQRCodeUtils { private static final String fragmentKey = "identifier"; diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/RaceLogServletConstants.java b/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/racelog/RaceLogServletConstants.java similarity index 76% rename from java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/RaceLogServletConstants.java rename to java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/racelog/RaceLogServletConstants.java index 4ed78fe2025..52dd7fc3f6b 100755 --- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/RaceLogServletConstants.java +++ b/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/racelog/RaceLogServletConstants.java @@ -1,7 +1,7 @@ -package com.sap.sailing.domain.racelog; +package com.sap.sailing.domain.common.racelog; /** - * Constants shared across race committee app and servlet implementation + * Constants shared across race committee app, servlet implementation and GWT. * * @author Axel Uhl (d043530) * diff --git a/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/racelog/tracking/DeviceMappingConstants.java b/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/racelog/tracking/DeviceMappingConstants.java new file mode 100644 index 00000000000..4eb346aedf9 --- /dev/null +++ b/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/racelog/tracking/DeviceMappingConstants.java @@ -0,0 +1,32 @@ +package com.sap.sailing.domain.common.racelog.tracking; + +import com.sap.sailing.domain.common.racelog.RaceLogServletConstants; + +/** + * 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. + * This includes the leaderboard name, race-column name and fleet name to identify + * which RaceLog to add the {@code DeviceMappingEvent} to. Also, either a competitor + * or mark ID is added, to which the device should be mapped. Timestamps for the + * beginning and the end of the mapping are also included. + *

+ * The URL points to the apk-file of the app deployed to the {@code www} directory + * of the server, with additional {@code GET}-parameters: + *

    + *
  • {@link RaceLogServletConstants#PARAMS_LEADERBOARD_NAME}
  • + *
  • {@link RaceLogServletConstants#PARAMS_RACE_COLUMN_NAME}
  • + *
  • {@link RaceLogServletConstants#PARAMS_RACE_FLEET_NAME}
  • + *
  • either {@link #COMPETITOR_ID_AS_STRING} or {@link #MARK_ID_AS_STRING}
  • + *
  • {@link #FROM_MILLIS}
  • + *
  • {@link #TO_MILLIS}
  • + *
+ * + * @author Fredrik Teschke + */ +public interface DeviceMappingConstants { + static final String COMPETITOR_ID_AS_STRING = "competitor"; + static final String MARK_ID_AS_STRING = "mark"; + static final String FROM_MILLIS = "from"; + static final String TO_MILLIS = "to"; +} diff --git a/java/com.sap.sailing.domain.deckmanadapter.test/.classpath b/java/com.sap.sailing.domain.deckmanadapter.test/.classpath old mode 100755 new mode 100644 index a14ade4efd3..110168ffa19 --- a/java/com.sap.sailing.domain.deckmanadapter.test/.classpath +++ b/java/com.sap.sailing.domain.deckmanadapter.test/.classpath @@ -1,6 +1,6 @@ - + diff --git a/java/com.sap.sailing.domain.deckmanadapter.test/.gitignore b/java/com.sap.sailing.domain.deckmanadapter.test/.gitignore new file mode 100644 index 00000000000..ae3c1726048 --- /dev/null +++ b/java/com.sap.sailing.domain.deckmanadapter.test/.gitignore @@ -0,0 +1 @@ +/bin/ diff --git a/java/com.sap.sailing.domain.deckmanadapter.test/.settings/org.eclipse.jdt.core.prefs b/java/com.sap.sailing.domain.deckmanadapter.test/.settings/org.eclipse.jdt.core.prefs old mode 100755 new mode 100644 index f42de363afa..a698e59674f --- a/java/com.sap.sailing.domain.deckmanadapter.test/.settings/org.eclipse.jdt.core.prefs +++ b/java/com.sap.sailing.domain.deckmanadapter.test/.settings/org.eclipse.jdt.core.prefs @@ -1,7 +1,12 @@ eclipse.preferences.version=1 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 -org.eclipse.jdt.core.compiler.compliance=1.7 +org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate org.eclipse.jdt.core.compiler.problem.assertIdentifier=error org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.7 +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/java/com.sap.sailing.domain.deckmanadapter.test/META-INF/MANIFEST.MF b/java/com.sap.sailing.domain.deckmanadapter.test/META-INF/MANIFEST.MF old mode 100755 new mode 100644 index 58ddcc43fd4..b67aed88b96 --- a/java/com.sap.sailing.domain.deckmanadapter.test/META-INF/MANIFEST.MF +++ b/java/com.sap.sailing.domain.deckmanadapter.test/META-INF/MANIFEST.MF @@ -5,5 +5,5 @@ Bundle-SymbolicName: com.sap.sailing.domain.deckmanadapter.test Bundle-Version: 1.0.0.qualifier Bundle-Vendor: SAP Fragment-Host: com.sap.sailing.domain.deckmanadapter -Bundle-RequiredExecutionEnvironment: JavaSE-1.7 +Bundle-RequiredExecutionEnvironment: JavaSE-1.8 Require-Bundle: org.junit4 diff --git a/java/com.sap.sailing.domain.deckmanadapter/.classpath b/java/com.sap.sailing.domain.deckmanadapter/.classpath old mode 100755 new mode 100644 index 098194ca4b7..eca7bdba8f0 --- a/java/com.sap.sailing.domain.deckmanadapter/.classpath +++ b/java/com.sap.sailing.domain.deckmanadapter/.classpath @@ -1,6 +1,6 @@ - + diff --git a/java/com.sap.sailing.domain.deckmanadapter/.gitignore b/java/com.sap.sailing.domain.deckmanadapter/.gitignore new file mode 100644 index 00000000000..ae3c1726048 --- /dev/null +++ b/java/com.sap.sailing.domain.deckmanadapter/.gitignore @@ -0,0 +1 @@ +/bin/ diff --git a/java/com.sap.sailing.domain.deckmanadapter/.settings/org.eclipse.jdt.core.prefs b/java/com.sap.sailing.domain.deckmanadapter/.settings/org.eclipse.jdt.core.prefs old mode 100755 new mode 100644 index f42de363afa..a698e59674f --- a/java/com.sap.sailing.domain.deckmanadapter/.settings/org.eclipse.jdt.core.prefs +++ b/java/com.sap.sailing.domain.deckmanadapter/.settings/org.eclipse.jdt.core.prefs @@ -1,7 +1,12 @@ eclipse.preferences.version=1 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 -org.eclipse.jdt.core.compiler.compliance=1.7 +org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate org.eclipse.jdt.core.compiler.problem.assertIdentifier=error org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.7 +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/java/com.sap.sailing.domain.deckmanadapter/META-INF/MANIFEST.MF b/java/com.sap.sailing.domain.deckmanadapter/META-INF/MANIFEST.MF old mode 100755 new mode 100644 index 4429c780a59..eb76c95dbfc --- a/java/com.sap.sailing.domain.deckmanadapter/META-INF/MANIFEST.MF +++ b/java/com.sap.sailing.domain.deckmanadapter/META-INF/MANIFEST.MF @@ -4,7 +4,7 @@ Bundle-Name: Deckmanadapter Bundle-SymbolicName: com.sap.sailing.domain.deckmanadapter Bundle-Version: 1.0.0.qualifier Bundle-Vendor: SAP -Bundle-RequiredExecutionEnvironment: JavaSE-1.7 +Bundle-RequiredExecutionEnvironment: JavaSE-1.8 Require-Bundle: com.sap.sailing.domain, com.sap.sailing.domain.common, com.sap.sailing.domain.shared.android, diff --git a/java/com.sap.sailing.domain.igtimiadapter.persistence/.classpath b/java/com.sap.sailing.domain.igtimiadapter.persistence/.classpath old mode 100755 new mode 100644 index 098194ca4b7..eca7bdba8f0 --- a/java/com.sap.sailing.domain.igtimiadapter.persistence/.classpath +++ b/java/com.sap.sailing.domain.igtimiadapter.persistence/.classpath @@ -1,6 +1,6 @@ - + diff --git a/java/com.sap.sailing.domain.igtimiadapter.persistence/.settings/org.eclipse.jdt.core.prefs b/java/com.sap.sailing.domain.igtimiadapter.persistence/.settings/org.eclipse.jdt.core.prefs old mode 100755 new mode 100644 index f42de363afa..a698e59674f --- a/java/com.sap.sailing.domain.igtimiadapter.persistence/.settings/org.eclipse.jdt.core.prefs +++ b/java/com.sap.sailing.domain.igtimiadapter.persistence/.settings/org.eclipse.jdt.core.prefs @@ -1,7 +1,12 @@ eclipse.preferences.version=1 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 -org.eclipse.jdt.core.compiler.compliance=1.7 +org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate org.eclipse.jdt.core.compiler.problem.assertIdentifier=error org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.7 +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/java/com.sap.sailing.domain.igtimiadapter.persistence/META-INF/MANIFEST.MF b/java/com.sap.sailing.domain.igtimiadapter.persistence/META-INF/MANIFEST.MF old mode 100755 new mode 100644 index d25ccac6d85..6af9114da33 --- a/java/com.sap.sailing.domain.igtimiadapter.persistence/META-INF/MANIFEST.MF +++ b/java/com.sap.sailing.domain.igtimiadapter.persistence/META-INF/MANIFEST.MF @@ -4,7 +4,9 @@ Bundle-Name: Persistence Bundle-SymbolicName: com.sap.sailing.domain.igtimiadapter.persistence Bundle-Version: 1.0.0.qualifier Bundle-Vendor: SAP -Bundle-RequiredExecutionEnvironment: JavaSE-1.7 +Bundle-RequiredExecutionEnvironment: JavaSE-1.8 Require-Bundle: com.sap.sailing.mongodb, com.mongodb.driver;bundle-version="2.6.2" Export-Package: com.sap.sailing.domain.igtimiadapter.persistence +Import-Package: org.osgi.framework +Bundle-Activator: com.sap.sailing.domain.igtimiadapter.persistence.impl.Activator diff --git a/java/com.sap.sailing.domain.igtimiadapter.persistence/src/com/sap/sailing/domain/igtimiadapter/persistence/impl/Activator.java b/java/com.sap.sailing.domain.igtimiadapter.persistence/src/com/sap/sailing/domain/igtimiadapter/persistence/impl/Activator.java new file mode 100755 index 00000000000..256b1c5aaa7 --- /dev/null +++ b/java/com.sap.sailing.domain.igtimiadapter.persistence/src/com/sap/sailing/domain/igtimiadapter/persistence/impl/Activator.java @@ -0,0 +1,19 @@ +package com.sap.sailing.domain.igtimiadapter.persistence.impl; + +import org.osgi.framework.BundleActivator; +import org.osgi.framework.BundleContext; + +import com.sap.sailing.mongodb.MongoDBService; + +public class Activator implements BundleActivator { + @Override + public void start(BundleContext context) throws Exception { + for (CollectionNames name : CollectionNames.values()) { + MongoDBService.INSTANCE.registerExclusively(CollectionNames.class, name.name()); + } + } + + @Override + public void stop(BundleContext context) throws Exception { + } +} diff --git a/java/com.sap.sailing.domain.igtimiadapter.test/.classpath b/java/com.sap.sailing.domain.igtimiadapter.test/.classpath old mode 100755 new mode 100644 index 098194ca4b7..eca7bdba8f0 --- a/java/com.sap.sailing.domain.igtimiadapter.test/.classpath +++ b/java/com.sap.sailing.domain.igtimiadapter.test/.classpath @@ -1,6 +1,6 @@ - + diff --git a/java/com.sap.sailing.domain.igtimiadapter.test/.settings/org.eclipse.jdt.core.prefs b/java/com.sap.sailing.domain.igtimiadapter.test/.settings/org.eclipse.jdt.core.prefs old mode 100755 new mode 100644 index f42de363afa..a698e59674f --- a/java/com.sap.sailing.domain.igtimiadapter.test/.settings/org.eclipse.jdt.core.prefs +++ b/java/com.sap.sailing.domain.igtimiadapter.test/.settings/org.eclipse.jdt.core.prefs @@ -1,7 +1,12 @@ eclipse.preferences.version=1 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 -org.eclipse.jdt.core.compiler.compliance=1.7 +org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate org.eclipse.jdt.core.compiler.problem.assertIdentifier=error org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.7 +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/java/com.sap.sailing.domain.igtimiadapter.test/META-INF/MANIFEST.MF b/java/com.sap.sailing.domain.igtimiadapter.test/META-INF/MANIFEST.MF old mode 100755 new mode 100644 index b2234b849b6..d99de787500 --- a/java/com.sap.sailing.domain.igtimiadapter.test/META-INF/MANIFEST.MF +++ b/java/com.sap.sailing.domain.igtimiadapter.test/META-INF/MANIFEST.MF @@ -5,7 +5,7 @@ Bundle-Name: Test Bundle-SymbolicName: com.sap.sailing.domain.igtimiadapter.test Bundle-Version: 1.0.0.qualifier Bundle-Vendor: SAP -Bundle-RequiredExecutionEnvironment: JavaSE-1.7 +Bundle-RequiredExecutionEnvironment: JavaSE-1.8 Require-Bundle: org.junit4;bundle-version="4.8.2", com.sap.sailing.domain.common, com.sap.sailing.mongodb, diff --git a/java/com.sap.sailing.domain.igtimiadapter.test/src/com/sap/sailing/domain/igtimiadapter/test/AbstractTestWithIgtimiConnection.java b/java/com.sap.sailing.domain.igtimiadapter.test/src/com/sap/sailing/domain/igtimiadapter/test/AbstractTestWithIgtimiConnection.java index 5cd99036484..9194f7078b7 100755 --- a/java/com.sap.sailing.domain.igtimiadapter.test/src/com/sap/sailing/domain/igtimiadapter/test/AbstractTestWithIgtimiConnection.java +++ b/java/com.sap.sailing.domain.igtimiadapter.test/src/com/sap/sailing/domain/igtimiadapter/test/AbstractTestWithIgtimiConnection.java @@ -15,6 +15,8 @@ import com.sap.sailing.domain.igtimiadapter.impl.Activator; public class AbstractTestWithIgtimiConnection { protected IgtimiConnection connection; + @Rule public Timeout AbstractTestWithIgtimiConnectionTimeout = new Timeout(2 * 60 * 1000); + @Rule public Timeout AbstractTracTracLiveTestTimeout = new Timeout(2 * 60 * 1000); @Before diff --git a/java/com.sap.sailing.domain.igtimiadapter/.classpath b/java/com.sap.sailing.domain.igtimiadapter/.classpath old mode 100755 new mode 100644 index 098194ca4b7..eca7bdba8f0 --- a/java/com.sap.sailing.domain.igtimiadapter/.classpath +++ b/java/com.sap.sailing.domain.igtimiadapter/.classpath @@ -1,6 +1,6 @@ - + diff --git a/java/com.sap.sailing.domain.igtimiadapter/.settings/org.eclipse.jdt.core.prefs b/java/com.sap.sailing.domain.igtimiadapter/.settings/org.eclipse.jdt.core.prefs old mode 100755 new mode 100644 index f42de363afa..a698e59674f --- a/java/com.sap.sailing.domain.igtimiadapter/.settings/org.eclipse.jdt.core.prefs +++ b/java/com.sap.sailing.domain.igtimiadapter/.settings/org.eclipse.jdt.core.prefs @@ -1,7 +1,12 @@ eclipse.preferences.version=1 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 -org.eclipse.jdt.core.compiler.compliance=1.7 +org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate org.eclipse.jdt.core.compiler.problem.assertIdentifier=error org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.7 +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/java/com.sap.sailing.domain.igtimiadapter/META-INF/MANIFEST.MF b/java/com.sap.sailing.domain.igtimiadapter/META-INF/MANIFEST.MF old mode 100755 new mode 100644 index 9ac2f5a7cac..bfc38039265 --- a/java/com.sap.sailing.domain.igtimiadapter/META-INF/MANIFEST.MF +++ b/java/com.sap.sailing.domain.igtimiadapter/META-INF/MANIFEST.MF @@ -4,13 +4,12 @@ Bundle-Name: Igtimiadapter Bundle-SymbolicName: com.sap.sailing.domain.igtimiadapter Bundle-Version: 1.0.0.qualifier Bundle-Vendor: SAP -Bundle-RequiredExecutionEnvironment: JavaSE-1.7 +Bundle-RequiredExecutionEnvironment: JavaSE-1.8 Require-Bundle: org.json.simple;bundle-version="1.1.0", com.sun.jersey;bundle-version="1.17.0", org.objectweb.asm;bundle-version="3.3.1", org.apache.httpcomponents.httpclient;bundle-version="4.2.5", org.apache.httpcomponents.httpcore;bundle-version="4.0.0", - org.apache.commons.logging;bundle-version="1.1.1", com.sap.sailing.domain.common, com.sap.sailing.domain.igtimiadapter.persistence, com.sap.sailing.domain.shared.android, diff --git a/java/com.sap.sailing.domain.persistence/.classpath b/java/com.sap.sailing.domain.persistence/.classpath old mode 100755 new mode 100644 index c8351b0a6bd..4f83b2397ec --- a/java/com.sap.sailing.domain.persistence/.classpath +++ b/java/com.sap.sailing.domain.persistence/.classpath @@ -1,7 +1,7 @@ - - - - - - - + + + + + + + diff --git a/java/com.sap.sailing.domain.persistence/.settings/org.eclipse.jdt.core.prefs b/java/com.sap.sailing.domain.persistence/.settings/org.eclipse.jdt.core.prefs old mode 100755 new mode 100644 index 1d773f37440..a698e59674f --- a/java/com.sap.sailing.domain.persistence/.settings/org.eclipse.jdt.core.prefs +++ b/java/com.sap.sailing.domain.persistence/.settings/org.eclipse.jdt.core.prefs @@ -1,8 +1,12 @@ -#Thu Jan 19 09:51:18 CET 2012 -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 -org.eclipse.jdt.core.compiler.compliance=1.7 -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.7 +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/java/com.sap.sailing.domain.persistence/META-INF/MANIFEST.MF b/java/com.sap.sailing.domain.persistence/META-INF/MANIFEST.MF old mode 100755 new mode 100644 index f5877dcf5ff..d00ba29d158 --- a/java/com.sap.sailing.domain.persistence/META-INF/MANIFEST.MF +++ b/java/com.sap.sailing.domain.persistence/META-INF/MANIFEST.MF @@ -1,34 +1,34 @@ -Manifest-Version: 1.0 -Bundle-ManifestVersion: 2 -Bundle-Name: Persistence -Bundle-SymbolicName: com.sap.sailing.domain.persistence -Bundle-Version: 1.0.0.qualifier -Bundle-Vendor: SAP -Bundle-RequiredExecutionEnvironment: JavaSE-1.7 -Bundle-Activator: com.sap.sailing.domain.persistence.impl.Activator -Require-Bundle: com.sap.sailing.mongodb, - com.sap.sailing.domain, - com.mongodb.driver;bundle-version="2.6.2", - com.sap.sailing.domain.common, - com.sap.sailing.domain.shared.android, - com.sap.sailing.server.gateway.serialization;bundle-version="1.0.0", - com.sap.sse.common -Export-Package: com.sap.sailing.domain.persistence, - com.sap.sailing.domain.persistence.impl; - x-friends:="com.sap.sailing.domain.persistence.test, - com.sap.sailing.domain.swisstimingadapter.test, - com.sap.sailing.mongodb.test, - com.sap.sailing.server.gateway.test, - com.sap.sailing.domain.racelogtrackingadapter.testsupport, - com.sap.sailing.domain.racelogtrackingadapter.test", - com.sap.sailing.domain.persistence.media, - com.sap.sailing.domain.persistence.racelog.tracking, - com.sap.sailing.domain.persistence.racelog.tracking.impl; - x-friends:="com.sap.sailing.domain.racelogtrackingadapter.testsupport, - com.sap.sailing.mongodb.test, - com.sap.sailing.domain.racelogtrackingadapter.test, - com.sap.sailing.server" -Bundle-ActivationPolicy: lazy -Import-Package: org.json.simple, - org.json.simple.parser, - org.osgi.framework;version="1.6.0" +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: Persistence +Bundle-SymbolicName: com.sap.sailing.domain.persistence +Bundle-Version: 1.0.0.qualifier +Bundle-Vendor: SAP +Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Bundle-Activator: com.sap.sailing.domain.persistence.impl.Activator +Require-Bundle: com.sap.sailing.mongodb, + com.sap.sailing.domain, + com.mongodb.driver;bundle-version="2.6.2", + com.sap.sailing.domain.common, + com.sap.sailing.domain.shared.android, + com.sap.sailing.server.gateway.serialization;bundle-version="1.0.0", + com.sap.sse.common +Export-Package: com.sap.sailing.domain.persistence, + com.sap.sailing.domain.persistence.impl; + x-friends:="com.sap.sailing.domain.persistence.test, + com.sap.sailing.domain.swisstimingadapter.test, + com.sap.sailing.mongodb.test, + com.sap.sailing.server.gateway.test, + com.sap.sailing.domain.racelogtrackingadapter.testsupport, + com.sap.sailing.domain.racelogtrackingadapter.test", + com.sap.sailing.domain.persistence.media, + com.sap.sailing.domain.persistence.racelog.tracking, + com.sap.sailing.domain.persistence.racelog.tracking.impl; + x-friends:="com.sap.sailing.domain.racelogtrackingadapter.testsupport, + com.sap.sailing.mongodb.test, + com.sap.sailing.domain.racelogtrackingadapter.test, + com.sap.sailing.server" +Bundle-ActivationPolicy: lazy +Import-Package: org.json.simple, + org.json.simple.parser, + org.osgi.framework;version="1.6.0" diff --git a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/Activator.java b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/Activator.java index 14452399bfa..2a95015d718 100644 --- a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/Activator.java +++ b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/Activator.java @@ -8,8 +8,9 @@ import com.sap.sailing.mongodb.MongoDBService; public class Activator implements BundleActivator { @Override public void start(BundleContext context) throws Exception { - for (CollectionNames name : CollectionNames.values()) + for (CollectionNames name : CollectionNames.values()) { MongoDBService.INSTANCE.registerExclusively(CollectionNames.class, name.name()); + } } @Override diff --git a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/DomainObjectFactoryImpl.java b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/DomainObjectFactoryImpl.java index 7b4213d408c..f7d3bc890db 100755 --- a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/DomainObjectFactoryImpl.java +++ b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/DomainObjectFactoryImpl.java @@ -1414,7 +1414,11 @@ public class DomainObjectFactoryImpl implements DomainObjectFactory { Serializable id, Integer passId, List competitors, DBObject dbObject) { Serializable revokedEventId = Helpers.tryUuidConversion( (Serializable) dbObject.get(FieldNames.RACE_LOG_REVOKED_EVENT_ID.name())); - return raceLogEventFactory.createRevokeEvent(createdAt, author, logicalTimePoint, id, passId, revokedEventId); + String revokedEventType = (String) dbObject.get(FieldNames.RACE_LOG_REVOKED_EVENT_TYPE.name()); + String revokedEventShortInfo = (String) dbObject.get(FieldNames.RACE_LOG_REVOKED_EVENT_SHORT_INFO.name()); + String reason = (String) dbObject.get(FieldNames.RACE_LOG_REVOKED_REASON.name()); + return raceLogEventFactory.createRevokeEvent(createdAt, author, logicalTimePoint, id, passId, + revokedEventId, revokedEventType, revokedEventShortInfo, reason); } private RaceLogEvent loadRaceLogRegisterCompetitorEvent(TimePoint createdAt, RaceLogEventAuthor author, TimePoint logicalTimePoint, diff --git a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/FieldNames.java b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/FieldNames.java index c5b9865bd59..dba3544f2a0 100755 --- a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/FieldNames.java +++ b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/FieldNames.java @@ -85,7 +85,8 @@ public enum FieldNames { WAYPOINT_PASSINGINSTRUCTIONS, CONTROLPOINT, CONTROLPOINT_CLASS, MARK_ID, MARK_COLOR, MARK_NAME, MARK_PATTERN, MARK_SHAPE, MARK_TYPE, CONTROLPOINT_VALUE, CONTROLPOINTWITHTWOMARKS_ID, CONTROLPOINTWITHTWOMARKS_NAME, CONTROLPOINTWITHTWOMARKS_LEFT, CONTROLPOINTWITHTWOMARKS_RIGHT, RACE_LOG_POSITIONED_COMPETITORS, RACE_LOG_PATHFINDER_ID, RACE_LOG_GATE_LINE_OPENING_TIME, RACE_LOG_GOLF_DOWN_TIME, RACE_LOG_START_PROCEDURE_TYPE, - RACE_LOG_PROTEST_START_TIME, RACE_LOG_COURSE_DESIGN_NAME, RACE_LOG_REVOKED_EVENT_ID, RACE_LOG_FROM, RACE_LOG_TO, RACE_LOG_MARK, RACE_LOG_DEVICE_MAPPING_EVENT_ID, + RACE_LOG_PROTEST_START_TIME, RACE_LOG_COURSE_DESIGN_NAME, RACE_LOG_REVOKED_EVENT_ID, RACE_LOG_REVOKED_EVENT_TYPE, RACE_LOG_REVOKED_EVENT_SHORT_INFO, + RACE_LOG_REVOKED_REASON, RACE_LOG_FROM, RACE_LOG_TO, RACE_LOG_MARK, RACE_LOG_DEVICE_MAPPING_EVENT_ID, RACE_LOG_CLOSING_TIMEPOINT, TIMEPOINT_OF_FIXED_MARKPASSING, INDEX_OF_PASSED_WAYPOINT,INDEX_OF_FIRST_SUPPRESSED_WAYPOINT, MARK, /** @deprecated Replaced by WAYPOINT_PASSINGINSTRUCTIONS, still used to migrate old races*/ @Deprecated WAYPOINT_PASSINGSIDE, /** @deprecated Replaced by CONTROLPOINTWITHTWOMARKS_ID, still used to migrate old races*/ @Deprecated GATE_ID, diff --git a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/MongoObjectFactoryImpl.java b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/MongoObjectFactoryImpl.java index 80a116a2ff4..31a219af91d 100755 --- a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/MongoObjectFactoryImpl.java +++ b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/MongoObjectFactoryImpl.java @@ -964,6 +964,9 @@ public class MongoObjectFactoryImpl implements MongoObjectFactory { storeRaceLogEventProperties(event, result); result.put(FieldNames.RACE_LOG_EVENT_CLASS.name(), RevokeEvent.class.getSimpleName()); result.put(FieldNames.RACE_LOG_REVOKED_EVENT_ID.name(), event.getRevokedEventId()); + result.put(FieldNames.RACE_LOG_REVOKED_EVENT_TYPE.name(), event.getRevokedEventType()); + result.put(FieldNames.RACE_LOG_REVOKED_EVENT_SHORT_INFO.name(), event.getRevokedEventShortInfo()); + result.put(FieldNames.RACE_LOG_REVOKED_REASON.name(), event.getReason()); return result; } diff --git a/java/com.sap.sailing.domain.racelogtrackingadapter.test/.classpath b/java/com.sap.sailing.domain.racelogtrackingadapter.test/.classpath index e8ea977a694..4f83b2397ec 100644 --- a/java/com.sap.sailing.domain.racelogtrackingadapter.test/.classpath +++ b/java/com.sap.sailing.domain.racelogtrackingadapter.test/.classpath @@ -2,6 +2,6 @@ - + diff --git a/java/com.sap.sailing.domain.racelogtrackingadapter.test/.gitignore b/java/com.sap.sailing.domain.racelogtrackingadapter.test/.gitignore index ba077a4031a..743bbf5b315 100644 --- a/java/com.sap.sailing.domain.racelogtrackingadapter.test/.gitignore +++ b/java/com.sap.sailing.domain.racelogtrackingadapter.test/.gitignore @@ -1 +1,2 @@ bin +/bin/ diff --git a/java/com.sap.sailing.domain.racelogtrackingadapter.test/.settings/org.eclipse.jdt.core.prefs b/java/com.sap.sailing.domain.racelogtrackingadapter.test/.settings/org.eclipse.jdt.core.prefs index eb01f948334..a698e59674f 100644 --- a/java/com.sap.sailing.domain.racelogtrackingadapter.test/.settings/org.eclipse.jdt.core.prefs +++ b/java/com.sap.sailing.domain.racelogtrackingadapter.test/.settings/org.eclipse.jdt.core.prefs @@ -1,8 +1,12 @@ -#Thu Jan 19 09:52:18 CET 2012 eclipse.preferences.version=1 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 -org.eclipse.jdt.core.compiler.compliance=1.7 +org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate org.eclipse.jdt.core.compiler.problem.assertIdentifier=error org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.7 +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/java/com.sap.sailing.domain.racelogtrackingadapter.test/META-INF/MANIFEST.MF b/java/com.sap.sailing.domain.racelogtrackingadapter.test/META-INF/MANIFEST.MF index 72fab3f84ae..a5099d27d3b 100644 --- a/java/com.sap.sailing.domain.racelogtrackingadapter.test/META-INF/MANIFEST.MF +++ b/java/com.sap.sailing.domain.racelogtrackingadapter.test/META-INF/MANIFEST.MF @@ -4,7 +4,7 @@ Bundle-Name: Smartphone Adapter Test Bundle-SymbolicName: com.sap.sailing.domain.racelogtrackingadapter.test Bundle-Version: 1.0.0.qualifier Bundle-Vendor: SAP -Bundle-RequiredExecutionEnvironment: JavaSE-1.7 +Bundle-RequiredExecutionEnvironment: JavaSE-1.8 Fragment-Host: com.sap.sailing.domain.racelogtrackingadapter Require-Bundle: org.junit4;bundle-version="4.8.2", com.sap.sailing.domain.racelogtrackingadapter.testsupport, diff --git a/java/com.sap.sailing.domain.racelogtrackingadapter.testsupport/.gitignore b/java/com.sap.sailing.domain.racelogtrackingadapter.testsupport/.gitignore new file mode 100644 index 00000000000..ff3e2543b1d --- /dev/null +++ b/java/com.sap.sailing.domain.racelogtrackingadapter.testsupport/.gitignore @@ -0,0 +1,2 @@ +/bin/ +/bin/ diff --git a/java/com.sap.sailing.domain.racelogtrackingadapter/.classpath b/java/com.sap.sailing.domain.racelogtrackingadapter/.classpath index e8ea977a694..4f83b2397ec 100644 --- a/java/com.sap.sailing.domain.racelogtrackingadapter/.classpath +++ b/java/com.sap.sailing.domain.racelogtrackingadapter/.classpath @@ -2,6 +2,6 @@ - + diff --git a/java/com.sap.sailing.domain.racelogtrackingadapter/.gitignore b/java/com.sap.sailing.domain.racelogtrackingadapter/.gitignore index ba077a4031a..4f638171ac2 100644 --- a/java/com.sap.sailing.domain.racelogtrackingadapter/.gitignore +++ b/java/com.sap.sailing.domain.racelogtrackingadapter/.gitignore @@ -1 +1,4 @@ bin +/bin/ +/bin/ +/bin/ diff --git a/java/com.sap.sailing.domain.racelogtrackingadapter/.settings/org.eclipse.jdt.core.prefs b/java/com.sap.sailing.domain.racelogtrackingadapter/.settings/org.eclipse.jdt.core.prefs index 9e859eb5b06..a698e59674f 100644 --- a/java/com.sap.sailing.domain.racelogtrackingadapter/.settings/org.eclipse.jdt.core.prefs +++ b/java/com.sap.sailing.domain.racelogtrackingadapter/.settings/org.eclipse.jdt.core.prefs @@ -1,8 +1,12 @@ -#Thu Jan 19 09:51:40 CET 2012 eclipse.preferences.version=1 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 -org.eclipse.jdt.core.compiler.compliance=1.7 +org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate org.eclipse.jdt.core.compiler.problem.assertIdentifier=error org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.7 +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/java/com.sap.sailing.domain.racelogtrackingadapter/META-INF/MANIFEST.MF b/java/com.sap.sailing.domain.racelogtrackingadapter/META-INF/MANIFEST.MF index e45e64c6877..8f4cf27d35e 100644 --- a/java/com.sap.sailing.domain.racelogtrackingadapter/META-INF/MANIFEST.MF +++ b/java/com.sap.sailing.domain.racelogtrackingadapter/META-INF/MANIFEST.MF @@ -1,28 +1,28 @@ -Manifest-Version: 1.0 -Bundle-ManifestVersion: 2 -Bundle-Name: RaceLog Tracking Adapter -Bundle-SymbolicName: com.sap.sailing.domain.racelogtrackingadapter -Bundle-Version: 1.0.0.qualifier -Bundle-Vendor: SAP -Bundle-RequiredExecutionEnvironment: JavaSE-1.7 -Bundle-ActivationPolicy: lazy -Require-Bundle: com.sap.sailing.domain, - com.sap.sailing.domain.common, - com.sap.sailing.domain.shared.android, - com.sap.sailing.server.gateway.serialization;bundle-version="1.0.0", - com.sap.sailing.domain.persistence;bundle-version="1.0.0", - com.sap.sailing.server.gateway;bundle-version="1.0.0", - com.sap.sailing.server;bundle-version="1.0.0", - com.googlecode.java-diff-utils;bundle-version="1.3.0", - com.mongodb.driver, - com.sap.sse.common -Import-Package: com.mongodb, - javax.servlet;version="2.6.0", - org.json.simple, - org.json.simple.parser, - org.osgi.framework;version="1.6.0" -Export-Package: com.sap.sailing.domain.racelogtracking, - com.sap.sailing.domain.racelogtracking.impl;x-friends:="com.sap.sailing.domain.racelogtrackingadapter.testsupport,com.sap.sailing.gwt.ui.test", - com.sap.sailing.domain.racelogtracking.servlet;x-friends:="com.sap.sailing.domain.racelogtrackingadapter.test" -Web-ContextPath: /tracking -Bundle-Activator: com.sap.sailing.domain.racelogtracking.impl.Activator +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: RaceLog Tracking Adapter +Bundle-SymbolicName: com.sap.sailing.domain.racelogtrackingadapter +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.domain.common, + com.sap.sailing.domain.shared.android, + com.sap.sailing.server.gateway.serialization;bundle-version="1.0.0", + com.sap.sailing.domain.persistence;bundle-version="1.0.0", + com.sap.sailing.server.gateway;bundle-version="1.0.0", + com.sap.sailing.server;bundle-version="1.0.0", + com.googlecode.java-diff-utils;bundle-version="1.3.0", + com.mongodb.driver, + com.sap.sse.common +Import-Package: com.mongodb, + javax.servlet;version="2.6.0", + org.json.simple, + org.json.simple.parser, + org.osgi.framework;version="1.6.0" +Export-Package: com.sap.sailing.domain.racelogtracking, + com.sap.sailing.domain.racelogtracking.impl;x-friends:="com.sap.sailing.domain.racelogtrackingadapter.testsupport,com.sap.sailing.gwt.ui.test", + com.sap.sailing.domain.racelogtracking.servlet;x-friends:="com.sap.sailing.domain.racelogtrackingadapter.test" +Web-ContextPath: /tracking +Bundle-Activator: com.sap.sailing.domain.racelogtracking.impl.Activator diff --git a/java/com.sap.sailing.domain.racelogtrackingadapter/WEB-INF/web.xml b/java/com.sap.sailing.domain.racelogtrackingadapter/WEB-INF/web.xml index c309ea109ab..d592b424ad2 100644 --- a/java/com.sap.sailing.domain.racelogtrackingadapter/WEB-INF/web.xml +++ b/java/com.sap.sailing.domain.racelogtrackingadapter/WEB-INF/web.xml @@ -23,6 +23,15 @@ RecordFixesPostServlet /recordFixes + + + + RecordFixesFlatJsonPostServlet + com.sap.sailing.domain.racelogtracking.servlet.RecordFixesFlatJsonPostServlet + + + RecordFixesFlatJsonPostServlet + /recordFixesFlatJson diff --git a/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/impl/RaceLogRaceTracker.java b/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/impl/RaceLogRaceTracker.java index a4ee6d9219b..d72fbe24e70 100755 --- a/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/impl/RaceLogRaceTracker.java +++ b/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/impl/RaceLogRaceTracker.java @@ -209,7 +209,8 @@ public class RaceLogRaceTracker extends BaseRaceLogEventVisitor implements RaceT } } - trackedRace.setStartOfTrackingReceived(latestMappingEnd); + trackedRace.setStartOfTrackingReceived(earliestMappingStart); + trackedRace.setEndOfTrackingReceived(latestMappingEnd); } private boolean hasMappingAlreadyBeenLoaded( diff --git a/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/servlet/RecordFixesFlatJsonPostServlet.java b/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/servlet/RecordFixesFlatJsonPostServlet.java new file mode 100644 index 00000000000..acfebbfe227 --- /dev/null +++ b/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/servlet/RecordFixesFlatJsonPostServlet.java @@ -0,0 +1,51 @@ +package com.sap.sailing.domain.racelogtracking.servlet; + +import java.util.Map; +import java.util.UUID; +import java.util.logging.Level; + +import com.sap.sailing.domain.common.racelog.tracking.NoCorrespondingServiceRegisteredException; +import com.sap.sailing.domain.common.racelog.tracking.TransformationException; +import com.sap.sailing.domain.racelog.tracking.DeviceIdentifier; +import com.sap.sailing.domain.racelog.tracking.impl.SmartphoneUUIDIdentifierImpl; +import com.sap.sailing.domain.tracking.GPSFixMoving; +import com.sap.sailing.server.gateway.AbstractJsonPostServlet; +import com.sap.sailing.server.gateway.HttpExceptionWithMessage; +import com.sap.sailing.server.gateway.deserialization.JsonDeserializer; +import com.sap.sailing.server.gateway.deserialization.impl.FlatSmartphoneUuidAndGPSFixMovingJsonDeserializer; +import com.sap.sailing.server.gateway.serialization.JsonSerializer; +import com.sap.sse.common.Util.Pair; + +public class RecordFixesFlatJsonPostServlet extends AbstractJsonPostServlet, Void> { + private static final long serialVersionUID = -4618399862031700634L; + + private final JsonDeserializer> deserializer = + new FlatSmartphoneUuidAndGPSFixMovingJsonDeserializer(); + + @Override + public JsonDeserializer> getRequestDeserializer() { + return deserializer; + } + + @Override + public JsonSerializer getResponseSerializer() { + return null; + } + + @Override + public Void process(Map parameterValues, Pair domainObject) + throws HttpExceptionWithMessage { + DeviceIdentifier device = new SmartphoneUUIDIdentifierImpl(domainObject.getA()); + GPSFixMoving fix = domainObject.getB(); + + try { + getService().getGPSFixStore().storeFix(device, fix); + logger.log(Level.INFO, "Added fix for device " + device.toString() + " to store"); + } catch (TransformationException | NoCorrespondingServiceRegisteredException e) { + logger.log(Level.WARNING, "Could not load store fix from device " + device); + } + + return null; + } + +} diff --git a/java/com.sap.sailing.domain.shared.android.test/.classpath b/java/com.sap.sailing.domain.shared.android.test/.classpath index 8a8f1668cdc..4f83b2397ec 100644 --- a/java/com.sap.sailing.domain.shared.android.test/.classpath +++ b/java/com.sap.sailing.domain.shared.android.test/.classpath @@ -1,7 +1,7 @@ - - - - - - - + + + + + + + diff --git a/java/com.sap.sailing.domain.shared.android.test/.settings/org.eclipse.jdt.core.prefs b/java/com.sap.sailing.domain.shared.android.test/.settings/org.eclipse.jdt.core.prefs index f287d53cf45..ace45ceefb4 100644 --- a/java/com.sap.sailing.domain.shared.android.test/.settings/org.eclipse.jdt.core.prefs +++ b/java/com.sap.sailing.domain.shared.android.test/.settings/org.eclipse.jdt.core.prefs @@ -1,7 +1,12 @@ eclipse.preferences.version=1 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6 -org.eclipse.jdt.core.compiler.compliance=1.6 +org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate org.eclipse.jdt.core.compiler.problem.assertIdentifier=error org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.6 +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/java/com.sap.sailing.domain.shared.android.test/META-INF/MANIFEST.MF b/java/com.sap.sailing.domain.shared.android.test/META-INF/MANIFEST.MF index dd8cf445e1e..f5ee39088af 100644 --- a/java/com.sap.sailing.domain.shared.android.test/META-INF/MANIFEST.MF +++ b/java/com.sap.sailing.domain.shared.android.test/META-INF/MANIFEST.MF @@ -4,7 +4,7 @@ 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.6 +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.junit4;bundle-version="4.8.2", diff --git a/java/com.sap.sailing.domain.shared.android.test/src/com/sap/sailing/domain/racelog/tracking/analyzing/test/RevokeEventTest.java b/java/com.sap.sailing.domain.shared.android.test/src/com/sap/sailing/domain/racelog/tracking/analyzing/test/RevokeEventTest.java index edf72f64188..5661ee4f4ef 100644 --- a/java/com.sap.sailing.domain.shared.android.test/src/com/sap/sailing/domain/racelog/tracking/analyzing/test/RevokeEventTest.java +++ b/java/com.sap.sailing.domain.shared.android.test/src/com/sap/sailing/domain/racelog/tracking/analyzing/test/RevokeEventTest.java @@ -14,7 +14,8 @@ public class RevokeEventTest extends AbstractRaceLogTrackingTest { @Test public void revokedEventIsExcluded() { RaceLogEvent event = factory.createDeviceCompetitorMappingEvent(now, author, now, UUID.randomUUID(), null, null, 0, null, null); - RevokeEvent revokeEvent = factory.createRevokeEvent(now.plus(1), author, now.plus(1), UUID.randomUUID(), 0, event.getId()); + RevokeEvent revokeEvent = factory.createRevokeEvent(now.plus(1), author, now.plus(1), UUID.randomUUID(), 0, event.getId(), + null, null, null); log.add(event); log.add(revokeEvent); @@ -27,7 +28,8 @@ public class RevokeEventTest extends AbstractRaceLogTrackingTest { @Test public void eventRevokedByAuthorWithLowerPrioIsNotExcluded() { RaceLogEvent event = factory.createDeviceCompetitorMappingEvent(now, author, now, UUID.randomUUID(), null, null, 0, null, null); - RevokeEvent revokeEvent = factory.createRevokeEvent(now.plus(1), author1, now.plus(1), UUID.randomUUID(), 0, event.getId()); + RevokeEvent revokeEvent = factory.createRevokeEvent(now.plus(1), author1, now.plus(1), UUID.randomUUID(), 0, event.getId(), + null, null, null); log.add(event); log.add(revokeEvent); @@ -40,8 +42,10 @@ public class RevokeEventTest extends AbstractRaceLogTrackingTest { @Test public void revokingRevokeEventIsNotHarmful() { RaceLogEvent event = factory.createDeviceCompetitorMappingEvent(now, author, now, UUID.randomUUID(), null, null, 0, null, null); - RevokeEvent revokeEvent = factory.createRevokeEvent(now.plus(1), author, now.plus(1), UUID.randomUUID(), 0, event.getId()); - RevokeEvent revokeEvent2 = factory.createRevokeEvent(now.plus(2), author, now.plus(2), UUID.randomUUID(), 2, revokeEvent.getId()); + RevokeEvent revokeEvent = factory.createRevokeEvent(now.plus(1), author, now.plus(1), UUID.randomUUID(), 0, event.getId(), + null, null, null); + RevokeEvent revokeEvent2 = factory.createRevokeEvent(now.plus(2), author, now.plus(2), UUID.randomUUID(), 2, revokeEvent.getId(), + null, null, null); log.add(event); log.add(revokeEvent); diff --git a/java/com.sap.sailing.domain.shared.android/pom.xml b/java/com.sap.sailing.domain.shared.android/pom.xml index 9db7d71f886..782dee1c2bf 100644 --- a/java/com.sap.sailing.domain.shared.android/pom.xml +++ b/java/com.sap.sailing.domain.shared.android/pom.xml @@ -9,4 +9,31 @@ com.sap.sailing.domain.shared.android eclipse-plugin + + + + org.eclipse.tycho + tycho-compiler-plugin + ${tycho-version} + + 1.6 + 1.6 + + + + org.eclipse.tycho + tycho-source-plugin + ${tycho-version} + + + plugin-source + generate-sources + + plugin-source + + + + + + diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/Competitor.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/Competitor.java index bab5f9f8a7d..5d3b4d1d2e7 100644 --- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/Competitor.java +++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/Competitor.java @@ -6,10 +6,10 @@ import com.sap.sse.datamining.shared.annotations.Connector; import com.sap.sse.common.Named; public interface Competitor extends Named, WithID, IsManagedBySharedDomainFactory { - @Connector(messageKey="Team", ordinal=8) + @Connector(messageKey="Team", ordinal=9) Team getTeam(); - @Connector(messageKey="Boat", ordinal=9) + @Connector(messageKey="Boat", ordinal=10) Boat getBoat(); Color getColor(); diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/impl/SharedDomainFactoryImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/impl/SharedDomainFactoryImpl.java index e548557cf08..a6298dbba50 100644 --- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/impl/SharedDomainFactoryImpl.java +++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/impl/SharedDomainFactoryImpl.java @@ -12,6 +12,8 @@ import java.util.Map; import java.util.Set; import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; +import java.util.logging.Level; +import java.util.logging.Logger; import com.sap.sailing.domain.base.BoatClass; import com.sap.sailing.domain.base.Competitor; @@ -34,6 +36,7 @@ import com.sap.sailing.domain.common.WithID; import com.sap.sailing.domain.common.configuration.DeviceConfigurationMatcherType; public class SharedDomainFactoryImpl implements SharedDomainFactory { + private static final Logger logger = Logger.getLogger(SharedDomainFactoryImpl.class.getName()); /** * Ensure that the same string is used as key that is also used to set the {@link Nationality} @@ -321,6 +324,9 @@ public class SharedDomainFactoryImpl implements SharedDomainFactory { @Override public Competitor getOrCreateCompetitor(Serializable competitorId, String name, Color displayColor, 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); } diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/impl/TransientCompetitorStoreImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/impl/TransientCompetitorStoreImpl.java index f1b221ab707..696f2cc526b 100755 --- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/impl/TransientCompetitorStoreImpl.java +++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/impl/TransientCompetitorStoreImpl.java @@ -10,6 +10,8 @@ import java.util.HashSet; import java.util.Map; import java.util.Set; import java.util.WeakHashMap; +import java.util.logging.Level; +import java.util.logging.Logger; import com.sap.sailing.domain.base.Competitor; import com.sap.sailing.domain.base.CompetitorStore; @@ -23,6 +25,7 @@ import com.sap.sailing.util.impl.LockUtil; import com.sap.sailing.util.impl.NamedReentrantReadWriteLock; public class TransientCompetitorStoreImpl implements CompetitorStore, Serializable { + private static final Logger logger = Logger.getLogger(TransientCompetitorStoreImpl.class.getName()); private static final long serialVersionUID = -4198298775476586931L; private final Map competitorCache; private final Map competitorsByIdAsString; @@ -67,6 +70,9 @@ public class TransientCompetitorStoreImpl implements CompetitorStore, Serializab private Competitor createCompetitor(Serializable id, String name, Color displayColor, DynamicTeam team, DynamicBoat boat) { Competitor result = new CompetitorImpl(id, name, displayColor, 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")); + } return result; } @@ -151,6 +157,9 @@ public class TransientCompetitorStoreImpl implements CompetitorStore, Serializab competitorCache.clear(); competitorsByIdAsString.clear(); competitorsToUpdateDuringGetOrCreate.clear(); + if (logger.isLoggable(Level.FINEST)) { + logger.log(Level.FINEST, "Clearing competitor store "+this, new Exception("here is where it happened")); + } } finally { LockUtil.unlockAfterWrite(lock); } @@ -170,6 +179,7 @@ public class TransientCompetitorStoreImpl implements CompetitorStore, Serializab public void removeCompetitor(Competitor competitor) { LockUtil.lockForWrite(lock); try { + logger.fine("removing competitor "+competitor+" from competitor store "+this); competitorCache.remove(competitor.getId()); competitorsByIdAsString.remove(competitor.getId().toString()); weakCompetitorDTOCache.remove(competitor); diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/RaceLog.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/RaceLog.java index 060ee5685d5..0d9f632c793 100644 --- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/RaceLog.java +++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/RaceLog.java @@ -128,6 +128,7 @@ public interface RaceLog extends Track, WithID { * * @param author The author for the {@code RevokeEvent}. */ + RevokeEvent revokeEvent(RaceLogEventAuthor author, RaceLogEvent toRevoke, String reason) throws NotRevokableException; RevokeEvent revokeEvent(RaceLogEventAuthor author, RaceLogEvent toRevoke) throws NotRevokableException; /** diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/RaceLogEventFactory.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/RaceLogEventFactory.java index 07f4596b2df..3dd62cee4ea 100644 --- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/RaceLogEventFactory.java +++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/RaceLogEventFactory.java @@ -111,7 +111,8 @@ public interface RaceLogEventFactory { StartTrackingEvent createStartTrackingEvent(TimePoint logicalTimePoint, RaceLogEventAuthor author, int passId); - RevokeEvent createRevokeEvent(TimePoint logicalTimePoint, RaceLogEventAuthor author, int passId, Serializable revokedEventId); + RevokeEvent createRevokeEvent(TimePoint logicalTimePoint, RaceLogEventAuthor author, int passId, Serializable revokedEventId, + String revokedEventType, String revokedEventShortInfo, String reason); RegisterCompetitorEvent createRegisterCompetitorEvent(TimePoint logicalTimePoint, RaceLogEventAuthor author, int passId, Competitor competitor); diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/RaceLogEventRestoreFactory.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/RaceLogEventRestoreFactory.java index d3896c46577..cb0c62d78ae 100644 --- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/RaceLogEventRestoreFactory.java +++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/RaceLogEventRestoreFactory.java @@ -82,7 +82,8 @@ public interface RaceLogEventRestoreFactory extends RaceLogEventFactory { TimePoint logicalTimePoint, Serializable pId, int passId); RevokeEvent createRevokeEvent(TimePoint createdAt, RaceLogEventAuthor author, - TimePoint logicalTimePoint, Serializable pId, int passId, Serializable revokedEventId); + TimePoint logicalTimePoint, Serializable pId, int passId, Serializable revokedEventId, + String revokedEventType, String revokedEventShortInfo, String reason); RegisterCompetitorEvent createRegisterCompetitorEvent(TimePoint createdAt, RaceLogEventAuthor author, TimePoint logicalTimePoint, Serializable pId, int passId, Competitor competitor); diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/RevokeEvent.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/RevokeEvent.java index 23a87ff845a..b15624063fb 100644 --- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/RevokeEvent.java +++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/RevokeEvent.java @@ -11,4 +11,19 @@ import java.io.Serializable; */ public interface RevokeEvent extends RaceLogEvent { Serializable getRevokedEventId(); + + /** + * Short info of the revoked event, automatically added by {@link RaceLog#revokeEvent}. + */ + String getRevokedEventShortInfo(); + + /** + * Optional reason for revocation of event. + */ + String getReason(); + + /** + * {@link Class#getSimpleName() Simple class name} of the revoked event. + */ + String getRevokedEventType(); } diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/impl/NoAddingRaceLogWrapper.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/impl/NoAddingRaceLogWrapper.java index e4c8d47e797..bc6eaac844f 100755 --- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/impl/NoAddingRaceLogWrapper.java +++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/impl/NoAddingRaceLogWrapper.java @@ -238,4 +238,10 @@ public class NoAddingRaceLogWrapper implements RaceLog { public RevokeEvent revokeEvent(RaceLogEventAuthor author, RaceLogEvent toRevoke) throws NotRevokableException { return innerRaceLog.revokeEvent(author, toRevoke); } + + @Override + public RevokeEvent revokeEvent(RaceLogEventAuthor author, RaceLogEvent toRevoke, String reason) + throws NotRevokableException { + return innerRaceLog.revokeEvent(author, toRevoke, reason); + } } diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/impl/RaceLogEventFactoryImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/impl/RaceLogEventFactoryImpl.java index 6df183388f8..6b1c370b7fb 100644 --- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/impl/RaceLogEventFactoryImpl.java +++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/impl/RaceLogEventFactoryImpl.java @@ -253,8 +253,10 @@ public class RaceLogEventFactoryImpl implements RaceLogEventFactory { } @Override - public RevokeEvent createRevokeEvent(TimePoint logicalTimePoint, RaceLogEventAuthor author, int passId, Serializable revokedEventId) { - return new RevokeEventImpl(MillisecondsTimePoint.now(), author, logicalTimePoint, UUID.randomUUID(), passId, revokedEventId); + public RevokeEvent createRevokeEvent(TimePoint logicalTimePoint, RaceLogEventAuthor author, int passId, Serializable revokedEventId, + String revokedEventType, String revokedEventShortInfo, String reason) { + return new RevokeEventImpl(MillisecondsTimePoint.now(), author, logicalTimePoint, UUID.randomUUID(), + passId, revokedEventId, revokedEventType, revokedEventShortInfo, reason); } @Override diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/impl/RaceLogEventRestoreFactoryImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/impl/RaceLogEventRestoreFactoryImpl.java index 70e1241ce1d..528005b7637 100644 --- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/impl/RaceLogEventRestoreFactoryImpl.java +++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/impl/RaceLogEventRestoreFactoryImpl.java @@ -158,8 +158,8 @@ public class RaceLogEventRestoreFactoryImpl extends RaceLogEventFactoryImpl impl @Override public RevokeEvent createRevokeEvent(TimePoint createdAt, RaceLogEventAuthor author, TimePoint logicalTimePoint, - Serializable pId, int passId, Serializable revokedEventId) { - return new RevokeEventImpl(createdAt, author, logicalTimePoint, pId, passId, revokedEventId); + Serializable pId, int passId, Serializable revokedEventId, String revokedEventType, String revokedEventShortInfo, String reason) { + return new RevokeEventImpl(createdAt, author, logicalTimePoint, pId, passId, revokedEventId, revokedEventType, revokedEventShortInfo, reason); } @Override diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/impl/RaceLogImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/impl/RaceLogImpl.java index 2e7397f6e3e..27ca9f571d2 100644 --- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/impl/RaceLogImpl.java +++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/impl/RaceLogImpl.java @@ -179,7 +179,7 @@ public class RaceLogImpl extends TrackImpl implements RaceLog { // make sure to compare only author priorities - assuming that revoke events are // independent of passes and times - if (revokeEvent.getAuthor().compareTo(revokedEvent.getAuthor()) < 0) { + if (revokeEvent.getAuthor().getPriority() > revokedEvent.getAuthor().getPriority()) { throw new NotRevokableException("RevokeEvent does not have sufficient priority"); } } @@ -187,23 +187,7 @@ public class RaceLogImpl extends TrackImpl implements RaceLog { @Override public Iterable add(RaceLogEvent event, UUID clientId) { - boolean isAdded = false; - lockForWrite(); - try { - isAdded = getInternalRawFixes().add(event); - } finally { - unlockAfterWrite(); - } - if (isAdded) { - logger.finer(String.format("%s (%s) was added to log.", event, event.getClass().getName())); - // FIXME with out-of-order delivery would destroy currentPassId; need to check at least the createdAt time - // point - setCurrentPassId(Math.max(event.getPassId(), this.currentPassId)); - revokeIfNecessary(event); - notifyListenersAboutReceive(event); - } else { - logger.fine(String.format("%s (%s) was not added to log because it already eists there.", event, event.getClass().getName())); - } + add(event); return getEventsToDeliver(clientId, event); } @@ -430,11 +414,17 @@ public class RaceLogImpl extends TrackImpl implements RaceLog { @Override public RevokeEvent revokeEvent(RaceLogEventAuthor author, RaceLogEvent toRevoke) throws NotRevokableException { + return revokeEvent(author, toRevoke, null); + } + + @Override + public RevokeEvent revokeEvent(RaceLogEventAuthor author, RaceLogEvent toRevoke, String reason) throws NotRevokableException { if (toRevoke == null) { throw new NotRevokableException("Received null as event to revoke"); } - RevokeEvent revokeEvent = RaceLogEventFactory.INSTANCE.createRevokeEvent(MillisecondsTimePoint.now(), author, - getCurrentPassId(), toRevoke.getId()); + RevokeEvent revokeEvent = RaceLogEventFactory.INSTANCE.createRevokeEvent( + MillisecondsTimePoint.now(), author, getCurrentPassId(), toRevoke.getId(), + toRevoke.getClass().getSimpleName(), toRevoke.getShortInfo(), reason); checkIfSuccessfullyRevokes(revokeEvent); add(revokeEvent); return revokeEvent; diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/tracking/SmartphoneUUIDSerializationHandler.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/tracking/SmartphoneUUIDSerializationHandler.java index f96ef1e702c..536baad73bb 100644 --- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/tracking/SmartphoneUUIDSerializationHandler.java +++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/tracking/SmartphoneUUIDSerializationHandler.java @@ -14,12 +14,12 @@ public class SmartphoneUUIDSerializationHandler { } public Util.Pair serialize(DeviceIdentifier deviceIdentifier) throws TransformationException { - return new Util.Pair(castIdentifier(deviceIdentifier).getUUID().toString(), SmartphoneUUIDIdentifier.TYPE); + return new Util.Pair(SmartphoneUUIDIdentifier.TYPE, castIdentifier(deviceIdentifier).getUUID().toString()); } public DeviceIdentifier deserialize(String input, String type, String stringRep) throws TransformationException { try { - return new SmartphoneUUIDIdentifierImpl(UUID.fromString(stringRep)); + return new SmartphoneUUIDIdentifierImpl(UUID.fromString(input)); } catch (IllegalArgumentException e) { throw new TransformationException("Invalid string representation of smartphone UUID", e); } diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/tracking/events/RegisterCompetitorEventImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/tracking/events/RegisterCompetitorEventImpl.java index 3db0e10a290..c141b92bfcb 100644 --- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/tracking/events/RegisterCompetitorEventImpl.java +++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/tracking/events/RegisterCompetitorEventImpl.java @@ -27,4 +27,9 @@ public class RegisterCompetitorEventImpl extends RaceLogEventImpl implements Reg public Competitor getCompetitor() { return getInvolvedBoats().get(0); } + + @Override + public String getShortInfo() { + return "competitor: " + getCompetitor().toString(); + } } diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/tracking/events/RevokeEventImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/tracking/events/RevokeEventImpl.java index d38756f9afd..640bbcbb126 100644 --- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/tracking/events/RevokeEventImpl.java +++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/tracking/events/RevokeEventImpl.java @@ -14,11 +14,18 @@ public class RevokeEventImpl extends RaceLogEventImpl implements RevokeEvent { private static final long serialVersionUID = -30864810737555657L; private final Serializable revokedEventId; + private final String reason; + private final String revokedEventType; + private final String revokedEventShortInfo; public RevokeEventImpl(TimePoint createdAt, RaceLogEventAuthor author, TimePoint logicalTimePoint, - Serializable pId, int pPassId, Serializable revokedEventId) { + Serializable pId, int pPassId, Serializable revokedEventId, String revokedEventType, + String revokedEventShortInfo, String reason) { super(createdAt, author, logicalTimePoint, pId, Collections.emptyList(), pPassId); this.revokedEventId = revokedEventId; + this.reason = reason; + this.revokedEventType = revokedEventType; + this.revokedEventShortInfo = revokedEventShortInfo; } @Override @@ -33,6 +40,26 @@ public class RevokeEventImpl extends RaceLogEventImpl implements RevokeEvent { @Override public String getShortInfo() { - return super.getShortInfo() + "Revoked: " + revokedEventId; + if (revokedEventShortInfo == null) { + return "No event revoked"; + } else { + return "Revoked " + revokedEventType + "(" + revokedEventShortInfo + ")" + + reason == null ? "" : (" due to " + reason); + } + } + + @Override + public String getRevokedEventType() { + return revokedEventType; + } + + @Override + public String getRevokedEventShortInfo() { + return revokedEventShortInfo; + } + + @Override + public String getReason() { + return reason; } } diff --git a/java/com.sap.sailing.domain.swisstimingadapter.persistence/.classpath b/java/com.sap.sailing.domain.swisstimingadapter.persistence/.classpath old mode 100755 new mode 100644 index c8351b0a6bd..4f83b2397ec --- a/java/com.sap.sailing.domain.swisstimingadapter.persistence/.classpath +++ b/java/com.sap.sailing.domain.swisstimingadapter.persistence/.classpath @@ -1,7 +1,7 @@ - - - - - - - + + + + + + + diff --git a/java/com.sap.sailing.domain.swisstimingadapter.persistence/.settings/org.eclipse.jdt.core.prefs b/java/com.sap.sailing.domain.swisstimingadapter.persistence/.settings/org.eclipse.jdt.core.prefs old mode 100755 new mode 100644 index 2cd525934d2..a698e59674f --- a/java/com.sap.sailing.domain.swisstimingadapter.persistence/.settings/org.eclipse.jdt.core.prefs +++ b/java/com.sap.sailing.domain.swisstimingadapter.persistence/.settings/org.eclipse.jdt.core.prefs @@ -1,8 +1,12 @@ -#Thu Jan 19 09:52:00 CET 2012 -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 -org.eclipse.jdt.core.compiler.compliance=1.7 -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.7 +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/java/com.sap.sailing.domain.swisstimingadapter.persistence/META-INF/MANIFEST.MF b/java/com.sap.sailing.domain.swisstimingadapter.persistence/META-INF/MANIFEST.MF old mode 100755 new mode 100644 index da4cf447e51..9db73538e56 --- a/java/com.sap.sailing.domain.swisstimingadapter.persistence/META-INF/MANIFEST.MF +++ b/java/com.sap.sailing.domain.swisstimingadapter.persistence/META-INF/MANIFEST.MF @@ -1,15 +1,17 @@ -Manifest-Version: 1.0 -Bundle-ManifestVersion: 2 -Bundle-Name: Swisstiming Adapter Persistence -Bundle-SymbolicName: com.sap.sailing.domain.swisstimingadapter.persistence -Bundle-Version: 1.0.0.qualifier -Bundle-Vendor: SAP -Bundle-RequiredExecutionEnvironment: JavaSE-1.7 -Bundle-ActivationPolicy: lazy -Require-Bundle: com.sap.sailing.domain.swisstimingadapter, - com.mongodb.driver;bundle-version="2.6.2", - com.sap.sailing.mongodb, - com.sap.sailing.domain, - com.sap.sailing.domain.common -Export-Package: com.sap.sailing.domain.swisstimingadapter.persistence, - com.sap.sailing.domain.swisstimingadapter.persistence.impl; x-friends:="com.sap.sailing.domain.swisstimingadapter.test" +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: Swisstiming Adapter Persistence +Bundle-SymbolicName: com.sap.sailing.domain.swisstimingadapter.persistence +Bundle-Version: 1.0.0.qualifier +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", + com.sap.sailing.mongodb, + com.sap.sailing.domain, + com.sap.sailing.domain.common +Export-Package: com.sap.sailing.domain.swisstimingadapter.persistence, + com.sap.sailing.domain.swisstimingadapter.persistence.impl; x-friends:="com.sap.sailing.domain.swisstimingadapter.test" +Import-Package: org.osgi.framework +Bundle-Activator: com.sap.sailing.domain.swisstimingadapter.persistence.impl.Activator diff --git a/java/com.sap.sailing.domain.swisstimingadapter.persistence/src/com/sap/sailing/domain/swisstimingadapter/persistence/impl/Activator.java b/java/com.sap.sailing.domain.swisstimingadapter.persistence/src/com/sap/sailing/domain/swisstimingadapter/persistence/impl/Activator.java new file mode 100755 index 00000000000..69ad2b57b0d --- /dev/null +++ b/java/com.sap.sailing.domain.swisstimingadapter.persistence/src/com/sap/sailing/domain/swisstimingadapter/persistence/impl/Activator.java @@ -0,0 +1,19 @@ +package com.sap.sailing.domain.swisstimingadapter.persistence.impl; + +import org.osgi.framework.BundleActivator; +import org.osgi.framework.BundleContext; + +import com.sap.sailing.mongodb.MongoDBService; + +public class Activator implements BundleActivator { + @Override + public void start(BundleContext context) throws Exception { + for (CollectionNames name : CollectionNames.values()) { + MongoDBService.INSTANCE.registerExclusively(CollectionNames.class, name.name()); + } + } + + @Override + public void stop(BundleContext context) throws Exception { + } +} diff --git a/java/com.sap.sailing.domain.swisstimingadapter.test/.classpath b/java/com.sap.sailing.domain.swisstimingadapter.test/.classpath old mode 100755 new mode 100644 index 947620eea47..03c4ce9fdd8 --- a/java/com.sap.sailing.domain.swisstimingadapter.test/.classpath +++ b/java/com.sap.sailing.domain.swisstimingadapter.test/.classpath @@ -1,8 +1,8 @@ - - - - - - - - + + + + + + + + diff --git a/java/com.sap.sailing.domain.swisstimingadapter.test/.settings/org.eclipse.jdt.core.prefs b/java/com.sap.sailing.domain.swisstimingadapter.test/.settings/org.eclipse.jdt.core.prefs old mode 100755 new mode 100644 index 43d0abddd02..a698e59674f --- a/java/com.sap.sailing.domain.swisstimingadapter.test/.settings/org.eclipse.jdt.core.prefs +++ b/java/com.sap.sailing.domain.swisstimingadapter.test/.settings/org.eclipse.jdt.core.prefs @@ -1,8 +1,12 @@ -#Thu Jan 19 09:52:18 CET 2012 -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 -org.eclipse.jdt.core.compiler.compliance=1.7 -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.7 +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/java/com.sap.sailing.domain.swisstimingadapter.test/META-INF/MANIFEST.MF b/java/com.sap.sailing.domain.swisstimingadapter.test/META-INF/MANIFEST.MF old mode 100755 new mode 100644 index 90d0a49ef40..b82b78cccb7 --- a/java/com.sap.sailing.domain.swisstimingadapter.test/META-INF/MANIFEST.MF +++ b/java/com.sap.sailing.domain.swisstimingadapter.test/META-INF/MANIFEST.MF @@ -1,24 +1,24 @@ -Manifest-Version: 1.0 -Bundle-ManifestVersion: 2 -Bundle-Name: Test -Bundle-SymbolicName: com.sap.sailing.domain.swisstimingadapter.test -Bundle-Version: 1.0.0.qualifier -Bundle-Vendor: SAP -Bundle-RequiredExecutionEnvironment: JavaSE-1.7 -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", - com.sap.sailing.mongodb, - com.googlecode.java-diff-utils;bundle-version="1.3.0", - com.sap.sailing.server, - com.sap.sailing.domain.common, - com.sap.sailing.domain.persistence, - com.sap.sailing.domain.tractracadapter, - com.sap.sailing.domain.swisstimingadapter.persistence;bundle-version="1.0.0", - org.junit4;bundle-version="4.8.2", - org.hamcrest.core;bundle-version="1.1.0", - com.sap.sse.common -Bundle-ClassPath: resources/, - . -Import-Package: com.sap.sailing.server +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: Test +Bundle-SymbolicName: com.sap.sailing.domain.swisstimingadapter.test +Bundle-Version: 1.0.0.qualifier +Bundle-Vendor: SAP +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", + com.sap.sailing.mongodb, + com.googlecode.java-diff-utils;bundle-version="1.3.0", + com.sap.sailing.server, + com.sap.sailing.domain.common, + com.sap.sailing.domain.persistence, + com.sap.sailing.domain.tractracadapter, + com.sap.sailing.domain.swisstimingadapter.persistence;bundle-version="1.0.0", + org.junit4;bundle-version="4.8.2", + org.hamcrest.core;bundle-version="1.1.0", + com.sap.sse.common +Bundle-ClassPath: resources/, + . +Import-Package: com.sap.sailing.server diff --git a/java/com.sap.sailing.domain.swisstimingadapter/.classpath b/java/com.sap.sailing.domain.swisstimingadapter/.classpath old mode 100755 new mode 100644 index c8351b0a6bd..4f83b2397ec --- a/java/com.sap.sailing.domain.swisstimingadapter/.classpath +++ b/java/com.sap.sailing.domain.swisstimingadapter/.classpath @@ -1,7 +1,7 @@ - - - - - - - + + + + + + + diff --git a/java/com.sap.sailing.domain.swisstimingadapter/.settings/org.eclipse.jdt.core.prefs b/java/com.sap.sailing.domain.swisstimingadapter/.settings/org.eclipse.jdt.core.prefs old mode 100755 new mode 100644 index bd4ed7fa952..a698e59674f --- a/java/com.sap.sailing.domain.swisstimingadapter/.settings/org.eclipse.jdt.core.prefs +++ b/java/com.sap.sailing.domain.swisstimingadapter/.settings/org.eclipse.jdt.core.prefs @@ -1,8 +1,12 @@ -#Thu Jan 19 09:51:40 CET 2012 -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 -org.eclipse.jdt.core.compiler.compliance=1.7 -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.7 +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/java/com.sap.sailing.domain.swisstimingadapter/META-INF/MANIFEST.MF b/java/com.sap.sailing.domain.swisstimingadapter/META-INF/MANIFEST.MF old mode 100755 new mode 100644 index 577a544907c..b88b8bb219d --- a/java/com.sap.sailing.domain.swisstimingadapter/META-INF/MANIFEST.MF +++ b/java/com.sap.sailing.domain.swisstimingadapter/META-INF/MANIFEST.MF @@ -1,18 +1,18 @@ -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.7 -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 -Export-Package: com.sap.sailing.domain.swisstimingadapter, - com.sap.sailing.domain.swisstimingadapter.impl;x-friends:="com.sap.sailing.server.test" -Import-Package: org.osgi.framework;version="1.7.0" -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 +Export-Package: com.sap.sailing.domain.swisstimingadapter, + com.sap.sailing.domain.swisstimingadapter.impl;x-friends:="com.sap.sailing.server.test" +Import-Package: org.osgi.framework;version="1.7.0" +Bundle-Activator: com.sap.sailing.domain.swisstimingadapter.impl.Activator diff --git a/java/com.sap.sailing.domain.swisstimingreplayadapter.test/.classpath b/java/com.sap.sailing.domain.swisstimingreplayadapter.test/.classpath index 1228533181d..110168ffa19 100644 --- a/java/com.sap.sailing.domain.swisstimingreplayadapter.test/.classpath +++ b/java/com.sap.sailing.domain.swisstimingreplayadapter.test/.classpath @@ -1,8 +1,8 @@ - - - - - - - - + + + + + + + + diff --git a/java/com.sap.sailing.domain.swisstimingreplayadapter.test/.settings/org.eclipse.jdt.core.prefs b/java/com.sap.sailing.domain.swisstimingreplayadapter.test/.settings/org.eclipse.jdt.core.prefs index 11f6e462df7..a698e59674f 100644 --- a/java/com.sap.sailing.domain.swisstimingreplayadapter.test/.settings/org.eclipse.jdt.core.prefs +++ b/java/com.sap.sailing.domain.swisstimingreplayadapter.test/.settings/org.eclipse.jdt.core.prefs @@ -1,7 +1,12 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 -org.eclipse.jdt.core.compiler.compliance=1.7 -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.7 +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/java/com.sap.sailing.domain.swisstimingreplayadapter.test/META-INF/MANIFEST.MF b/java/com.sap.sailing.domain.swisstimingreplayadapter.test/META-INF/MANIFEST.MF index 2586a20a1c9..b006bd01e0b 100644 --- a/java/com.sap.sailing.domain.swisstimingreplayadapter.test/META-INF/MANIFEST.MF +++ b/java/com.sap.sailing.domain.swisstimingreplayadapter.test/META-INF/MANIFEST.MF @@ -1,13 +1,13 @@ -Manifest-Version: 1.0 -Bundle-ManifestVersion: 2 -Bundle-Name: SwissTimingReplayAdapterTest -Bundle-SymbolicName: com.sap.sailing.domain.swisstimingreplayadapter.test -Bundle-Version: 1.0.0.qualifier -Bundle-Vendor: SAP -Bundle-RequiredExecutionEnvironment: JavaSE-1.7 -Fragment-Host: com.sap.sailing.domain.swisstimingreplayadapter -Import-Package: org.json.simple, - org.json.simple.parser -Require-Bundle: com.sap.sailing.domain.test, - org.junit4;bundle-version="4.8.2", - com.sap.sse.common +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: SwissTimingReplayAdapterTest +Bundle-SymbolicName: com.sap.sailing.domain.swisstimingreplayadapter.test +Bundle-Version: 1.0.0.qualifier +Bundle-Vendor: SAP +Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Fragment-Host: com.sap.sailing.domain.swisstimingreplayadapter +Import-Package: org.json.simple, + org.json.simple.parser +Require-Bundle: com.sap.sailing.domain.test, + org.junit4;bundle-version="4.8.2", + com.sap.sse.common diff --git a/java/com.sap.sailing.domain.swisstimingreplayadapter/.classpath b/java/com.sap.sailing.domain.swisstimingreplayadapter/.classpath index b1dabee3829..eca7bdba8f0 100644 --- a/java/com.sap.sailing.domain.swisstimingreplayadapter/.classpath +++ b/java/com.sap.sailing.domain.swisstimingreplayadapter/.classpath @@ -1,7 +1,7 @@ - - - - - - - + + + + + + + diff --git a/java/com.sap.sailing.domain.swisstimingreplayadapter/.settings/org.eclipse.jdt.core.prefs b/java/com.sap.sailing.domain.swisstimingreplayadapter/.settings/org.eclipse.jdt.core.prefs index 11f6e462df7..a698e59674f 100644 --- a/java/com.sap.sailing.domain.swisstimingreplayadapter/.settings/org.eclipse.jdt.core.prefs +++ b/java/com.sap.sailing.domain.swisstimingreplayadapter/.settings/org.eclipse.jdt.core.prefs @@ -1,7 +1,12 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 -org.eclipse.jdt.core.compiler.compliance=1.7 -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.7 +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/java/com.sap.sailing.domain.swisstimingreplayadapter/META-INF/MANIFEST.MF b/java/com.sap.sailing.domain.swisstimingreplayadapter/META-INF/MANIFEST.MF index 39c07f68edd..f3c11e2d3a5 100644 --- a/java/com.sap.sailing.domain.swisstimingreplayadapter/META-INF/MANIFEST.MF +++ b/java/com.sap.sailing.domain.swisstimingreplayadapter/META-INF/MANIFEST.MF @@ -1,17 +1,17 @@ -Manifest-Version: 1.0 -Bundle-ManifestVersion: 2 -Bundle-Name: SwissTimingReplayAdapter -Bundle-SymbolicName: com.sap.sailing.domain.swisstimingreplayadapter -Bundle-Version: 1.0.0.qualifier -Bundle-Vendor: SAP -Bundle-RequiredExecutionEnvironment: JavaSE-1.7 -Bundle-ActivationPolicy: lazy -Require-Bundle: com.sap.sailing.domain.common, - com.sap.sailing.domain, - org.json.simple;bundle-version="1.1.0", - com.sap.sailing.domain.swisstimingadapter, - com.googlecode.java-diff-utils;bundle-version="1.3.0", - com.sap.sse.common -Export-Package: com.sap.sailing.domain.swisstimingreplayadapter -Import-Package: org.osgi.framework;version="1.7.0" -Bundle-Activator: com.sap.sailing.domain.swisstimingreplayadapter.impl.Activator +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: SwissTimingReplayAdapter +Bundle-SymbolicName: com.sap.sailing.domain.swisstimingreplayadapter +Bundle-Version: 1.0.0.qualifier +Bundle-Vendor: SAP +Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Bundle-ActivationPolicy: lazy +Require-Bundle: com.sap.sailing.domain.common, + com.sap.sailing.domain, + org.json.simple;bundle-version="1.1.0", + com.sap.sailing.domain.swisstimingadapter, + com.googlecode.java-diff-utils;bundle-version="1.3.0", + com.sap.sse.common +Export-Package: com.sap.sailing.domain.swisstimingreplayadapter +Import-Package: org.osgi.framework;version="1.7.0" +Bundle-Activator: com.sap.sailing.domain.swisstimingreplayadapter.impl.Activator diff --git a/java/com.sap.sailing.domain.test/.classpath b/java/com.sap.sailing.domain.test/.classpath old mode 100755 new mode 100644 index 31b4ae5cf85..03c4ce9fdd8 --- a/java/com.sap.sailing.domain.test/.classpath +++ b/java/com.sap.sailing.domain.test/.classpath @@ -3,6 +3,6 @@ - + diff --git a/java/com.sap.sailing.domain.test/.settings/org.eclipse.jdt.core.prefs b/java/com.sap.sailing.domain.test/.settings/org.eclipse.jdt.core.prefs old mode 100755 new mode 100644 index dbc585d61fa..a698e59674f --- a/java/com.sap.sailing.domain.test/.settings/org.eclipse.jdt.core.prefs +++ b/java/com.sap.sailing.domain.test/.settings/org.eclipse.jdt.core.prefs @@ -1,8 +1,12 @@ -#Thu Jan 19 09:52:44 CET 2012 -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 -org.eclipse.jdt.core.compiler.compliance=1.7 -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.7 +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/java/com.sap.sailing.domain.test/FetchAndStoreHamburgTracks (proxy).launch b/java/com.sap.sailing.domain.test/FetchAndStoreHamburgTracks (proxy).launch old mode 100755 new mode 100644 index 3e1dd0fa9e7..b9c75aa9753 --- a/java/com.sap.sailing.domain.test/FetchAndStoreHamburgTracks (proxy).launch +++ b/java/com.sap.sailing.domain.test/FetchAndStoreHamburgTracks (proxy).launch @@ -1,13 +1,13 @@ - - - - - - - - - - - - - + + + + + + + + + + + + + diff --git a/java/com.sap.sailing.domain.test/META-INF/MANIFEST.MF b/java/com.sap.sailing.domain.test/META-INF/MANIFEST.MF old mode 100755 new mode 100644 index 7fddd901b49..11ff5b2ec1a --- a/java/com.sap.sailing.domain.test/META-INF/MANIFEST.MF +++ b/java/com.sap.sailing.domain.test/META-INF/MANIFEST.MF @@ -1,22 +1,22 @@ -Manifest-Version: 1.0 -Bundle-ManifestVersion: 2 -Bundle-Name: Test -Bundle-SymbolicName: com.sap.sailing.domain.test -Bundle-Version: 1.0.0.qualifier -Bundle-Vendor: SAP -Bundle-RequiredExecutionEnvironment: JavaSE-1.7 -Require-Bundle: com.sap.sailing.domain, - com.tractrac.clientmodule;bundle-version="2.0.0", - com.sap.sailing.domain.tractracadapter, - com.googlecode.java-diff-utils;bundle-version="1.3.0", - com.sap.sailing.domain.common, - com.sap.sailing.domain.shared.android, - org.mockito.mockito-core;bundle-version="1.9.5", - com.sap.sailing.domain.test, - org.hamcrest;bundle-version="1.1.0", - org.objenesis;bundle-version="1.3.0", - org.junit4;bundle-version="4.8.2", - org.json.simple;bundle-version="1.1.0", - com.sap.sse.common -Export-Package: com.sap.sailing.domain.test, - com.sap.sailing.domain.test.mock +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: Test +Bundle-SymbolicName: com.sap.sailing.domain.test +Bundle-Version: 1.0.0.qualifier +Bundle-Vendor: SAP +Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Require-Bundle: com.sap.sailing.domain, + com.tractrac.clientmodule;bundle-version="2.0.0", + com.sap.sailing.domain.tractracadapter, + com.googlecode.java-diff-utils;bundle-version="1.3.0", + com.sap.sailing.domain.common, + com.sap.sailing.domain.shared.android, + org.mockito.mockito-core;bundle-version="1.9.5", + com.sap.sailing.domain.test, + org.hamcrest;bundle-version="1.1.0", + org.objenesis;bundle-version="1.3.0", + org.junit4;bundle-version="4.8.2", + org.json.simple;bundle-version="1.1.0", + com.sap.sse.common +Export-Package: com.sap.sailing.domain.test, + com.sap.sailing.domain.test.mock diff --git a/java/com.sap.sailing.domain.test/SailingDomainTest (No Proxy).launch b/java/com.sap.sailing.domain.test/SailingDomainTest (No Proxy).launch old mode 100755 new mode 100644 diff --git a/java/com.sap.sailing.domain.test/SailingDomainTest (No Proxy, Remote Profiling).launch b/java/com.sap.sailing.domain.test/SailingDomainTest (No Proxy, Remote Profiling).launch old mode 100755 new mode 100644 index 6a51be0fadd..5e62f80e61b --- a/java/com.sap.sailing.domain.test/SailingDomainTest (No Proxy, Remote Profiling).launch +++ b/java/com.sap.sailing.domain.test/SailingDomainTest (No Proxy, Remote Profiling).launch @@ -1,21 +1,21 @@ - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + diff --git a/java/com.sap.sailing.domain.test/SailingDomainTest (No Proxy, Tunnel).launch b/java/com.sap.sailing.domain.test/SailingDomainTest (No Proxy, Tunnel).launch old mode 100755 new mode 100644 index 664cfb1488b..ef870966cce --- a/java/com.sap.sailing.domain.test/SailingDomainTest (No Proxy, Tunnel).launch +++ b/java/com.sap.sailing.domain.test/SailingDomainTest (No Proxy, Tunnel).launch @@ -1,20 +1,20 @@ - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + diff --git a/java/com.sap.sailing.domain.test/SailingDomainTest (Proxy).launch b/java/com.sap.sailing.domain.test/SailingDomainTest (Proxy).launch old mode 100755 new mode 100644 index 28564897c59..0af5786014b --- a/java/com.sap.sailing.domain.test/SailingDomainTest (Proxy).launch +++ b/java/com.sap.sailing.domain.test/SailingDomainTest (Proxy).launch @@ -1,20 +1,20 @@ - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + diff --git a/java/com.sap.sailing.domain.test/SailingDomainTest (Proxy, No Tunnel).launch b/java/com.sap.sailing.domain.test/SailingDomainTest (Proxy, No Tunnel).launch old mode 100755 new mode 100644 index 2e0e4a17a88..9860c5f4d43 --- a/java/com.sap.sailing.domain.test/SailingDomainTest (Proxy, No Tunnel).launch +++ b/java/com.sap.sailing.domain.test/SailingDomainTest (Proxy, No Tunnel).launch @@ -1,20 +1,20 @@ - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + diff --git a/java/com.sap.sailing.domain.test/SailingDomainTest (Proxy, Remote Profiling).launch b/java/com.sap.sailing.domain.test/SailingDomainTest (Proxy, Remote Profiling).launch old mode 100755 new mode 100644 index 4ddcb6f05bf..11fec4bc9a7 --- a/java/com.sap.sailing.domain.test/SailingDomainTest (Proxy, Remote Profiling).launch +++ b/java/com.sap.sailing.domain.test/SailingDomainTest (Proxy, Remote Profiling).launch @@ -1,21 +1,21 @@ - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + diff --git a/java/com.sap.sailing.domain.test/TestTTCM tunneled through localhost.launch b/java/com.sap.sailing.domain.test/TestTTCM tunneled through localhost.launch old mode 100755 new mode 100644 index 512f9da0202..0c9ed8dc4ae --- a/java/com.sap.sailing.domain.test/TestTTCM tunneled through localhost.launch +++ b/java/com.sap.sailing.domain.test/TestTTCM tunneled through localhost.launch @@ -1,17 +1,17 @@ - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + diff --git a/java/com.sap.sailing.domain.test/TestTTCM without Proxy.launch b/java/com.sap.sailing.domain.test/TestTTCM without Proxy.launch index 7f1890a1a09..27b4a89210c 100644 --- a/java/com.sap.sailing.domain.test/TestTTCM without Proxy.launch +++ b/java/com.sap.sailing.domain.test/TestTTCM without Proxy.launch @@ -1,16 +1,16 @@ - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + diff --git a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/LeaderboardScoringAndRankingTest.java b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/LeaderboardScoringAndRankingTest.java index 5e1b14a9df8..2db457a4f46 100644 --- a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/LeaderboardScoringAndRankingTest.java +++ b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/LeaderboardScoringAndRankingTest.java @@ -979,6 +979,74 @@ public class LeaderboardScoringAndRankingTest extends AbstractLeaderboardTest { assertEquals(28 /* one win, two second */, leaderboardGroup.getOverallLeaderboard().getTotalPoints(c[0], later), 0.000000001); assertEquals(29 /* two wins, one second */, leaderboardGroup.getOverallLeaderboard().getTotalPoints(c[3], later), 0.000000001); } + + @Test + public void testHighPointScoringEightWithInterpolationWhenFleetNotComplete() throws NoWindException { + int competitorsCount = 21; + List competitors = createCompetitors(competitorsCount); + Regatta regatta = createRegatta(/* qualifying */ 1, new String[] { "Fleet1", "Fleet2", "Fleet3" }, /* final */0, + new String[] { "Default" }, + /* medal */false, "testHighPointScoringEightWithInterpolationWhenFleetNotComplete", + DomainFactory.INSTANCE.getOrCreateBoatClass("49er", /* typicallyStartsUpwind */true), + DomainFactory.INSTANCE.createScoringScheme(ScoringSchemeType.HIGH_POINT_WINNER_GETS_EIGHT_AND_INTERPOLATION)); + Leaderboard leaderboard = createLeaderboard(regatta, /* discarding thresholds */ new int[0]); + + Series firstSeries = regatta.getSeries().iterator().next(); + TimePoint now = MillisecondsTimePoint.now(); + TimePoint later = new MillisecondsTimePoint(now.asMillis()+1000); + // fleet 1 has 8 competitors + TrackedRace r1Fleet1 = new MockedTrackedRaceWithStartTimeAndRanks(now, competitors.subList(0, 8)); + // fleet 2 has 7 competitors + TrackedRace r1Fleet2 = new MockedTrackedRaceWithStartTimeAndRanks(now, competitors.subList(8, 15)); + // fleet 1 has 6 competitors + TrackedRace r1Fleet3 = new MockedTrackedRaceWithStartTimeAndRanks(now, competitors.subList(15, 21)); + RaceColumn r1Column = firstSeries.getRaceColumnByName("Q1"); + r1Column.setTrackedRace(r1Column.getFleetByName("Fleet1"), r1Fleet1); + r1Column.setTrackedRace(r1Column.getFleetByName("Fleet2"), r1Fleet2); + r1Column.setTrackedRace(r1Column.getFleetByName("Fleet3"), r1Fleet3); + + // first fleet is complete + double[] expectedResultsFleet1 = { 8, 7, 6, 5, 4, 3, 2, 1 }; + // second fleet has 1 missing boat + double diffX1 = 7.0 / 6.0; + double[] expectedResultsFleet2 = { 8, 8 - diffX1 * 1, 8 - diffX1 * 2, 8 - diffX1 * 3, 8 - diffX1 * 4, 8 - diffX1 * 5, 1 }; + // third fleet has 2 missing boats + double diffX2 = 7.0 / 5.0; + double[] expectedResultsFleet3 = { 8, 8 - diffX2 * 1, 8 - diffX2 * 2, 8 - diffX2 * 3, 8 - diffX2 * 4, 1 }; + + List rankedCompetitorsFleet1 = r1Fleet1.getCompetitorsFromBestToWorst(later); + assertEquals(8, rankedCompetitorsFleet1.size()); + for (int i = 0; i < expectedResultsFleet1.length; i++) { + assertTrue(rankedCompetitorsFleet1.get(i) == competitors.get(i)); + assertEquals(expectedResultsFleet1[i], leaderboard.getTotalPoints(rankedCompetitorsFleet1.get(i), later), 0.000000001); + } + + List rankedCompetitorsFleet2 = r1Fleet2.getCompetitorsFromBestToWorst(later); + assertEquals(7, rankedCompetitorsFleet2.size()); + for (int i = 0; i < expectedResultsFleet2.length; i++) { + assertTrue(rankedCompetitorsFleet2.get(i) == competitors.get(8+i)); + assertEquals(expectedResultsFleet2[i], leaderboard.getTotalPoints(rankedCompetitorsFleet2.get(i), later), 0.000000001); + } + + List rankedCompetitorsFleet3 = r1Fleet3.getCompetitorsFromBestToWorst(later); + assertEquals(6, rankedCompetitorsFleet3.size()); + for (int i = 0; i < expectedResultsFleet3.length; i++) { + assertTrue(rankedCompetitorsFleet3.get(i) == competitors.get(15+i)); + assertEquals(expectedResultsFleet3[i], leaderboard.getTotalPoints(rankedCompetitorsFleet3.get(i), later), 0.000000001); + } + + List allCompetitorsFromBestToWorst = leaderboard.getCompetitorsFromBestToWorst(later); + assertEquals(competitorsCount, allCompetitorsFromBestToWorst.size()); + // check that the fleet winners have all 8 points + assertEquals(8.0, leaderboard.getTotalPoints(allCompetitorsFromBestToWorst.get(0), later), 0.000000001); + assertEquals(8.0, leaderboard.getTotalPoints(allCompetitorsFromBestToWorst.get(1), later), 0.000000001); + assertEquals(8.0, leaderboard.getTotalPoints(allCompetitorsFromBestToWorst.get(2), later), 0.000000001); + // check that the fleet looser have all 1 point + + assertEquals(1.0, leaderboard.getTotalPoints(allCompetitorsFromBestToWorst.get(competitorsCount-1), later), 0.000000001); + assertEquals(1.0, leaderboard.getTotalPoints(allCompetitorsFromBestToWorst.get(competitorsCount-2), later), 0.000000001); + assertEquals(1.0, leaderboard.getTotalPoints(allCompetitorsFromBestToWorst.get(competitorsCount-3), later), 0.000000001); + } @Test public void testOverallLeaderboardWithESSHighPointScoringAndTieBreakInLastRegattaOfLeaderboardGroup() throws NoWindException { diff --git a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/PolarSheetGenerationTest.java b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/PolarSheetGenerationTest.java index 17d8541af65..8674732e8cc 100644 --- a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/PolarSheetGenerationTest.java +++ b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/PolarSheetGenerationTest.java @@ -6,6 +6,7 @@ import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.NavigableSet; +import java.util.Set; import java.util.UUID; import java.util.concurrent.ConcurrentSkipListSet; import java.util.concurrent.Executor; @@ -216,7 +217,7 @@ public class PolarSheetGenerationTest { } @Override - public Wind getWind(Position p, TimePoint at, Iterable windSourcesToExclude) { + public Wind getWind(Position p, TimePoint at, Set windSourcesToExclude) { return getWind(p, at); } @@ -229,7 +230,7 @@ public class PolarSheetGenerationTest { @Override public WindWithConfidence> getWindWithConfidence(Position p, TimePoint at, - Iterable windSourcesToExclude) { + Set windSourcesToExclude) { return getWindWithConfidence(p, at); } @@ -263,8 +264,8 @@ public class PolarSheetGenerationTest { } @Override - public Iterable getWindSources(WindSourceType type) { - List sources = new ArrayList(); + public Set getWindSources(WindSourceType type) { + Set sources = new HashSet<>(); sources.add(new WindSourceImpl(type)); return sources; } diff --git a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/UnmodifiableCollectionsEqualsHashCodeTest.java b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/UnmodifiableCollectionsEqualsHashCodeTest.java new file mode 100755 index 00000000000..cd80507dd29 --- /dev/null +++ b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/UnmodifiableCollectionsEqualsHashCodeTest.java @@ -0,0 +1,58 @@ +package com.sap.sailing.domain.test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; + +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 org.junit.Test; + +/** + * Demonstrates how unmodifiable collections' hashCode and equals is useless because it's based on identity and not on + * content. + * + * @author Axel Uhl (D043530) + * + */ +public class UnmodifiableCollectionsEqualsHashCodeTest { + @Test + public void testInequalityOfUnmodifiableCollection() { + List l1 = Arrays.asList(new String[] { "abc", "def" }); + List l2 = new ArrayList<>(l1); + Iterable u1_1 = Collections.unmodifiableCollection(l1); + Iterable u1_2 = Collections.unmodifiableCollection(l1); + Iterable u2_1 = Collections.unmodifiableCollection(l2); + assertEquals(l1, l2); + assertFalse(u1_1.equals(u1_2)); + assertFalse(u1_1.equals(u2_1)); + } + + @Test + public void testInequalityOfUnmodifiableList() { + List l1 = Arrays.asList(new String[] { "abc", "def" }); + List l2 = new ArrayList<>(l1); + Iterable u1_1 = Collections.unmodifiableList(l1); + Iterable u1_2 = Collections.unmodifiableList(l1); + Iterable u2_1 = Collections.unmodifiableList(l2); + assertEquals(l1, l2); + assertEquals(u1_1, u1_2); + assertEquals(u1_1, u2_1); + } + + @Test + public void testInequalityOfUnmodifiableSet() { + Set s1 = new HashSet<>(Arrays.asList(new String[] { "abc", "def" })); + Set s2 = new HashSet<>(s1); + Iterable u1_1 = Collections.unmodifiableSet(s1); + Iterable u1_2 = Collections.unmodifiableSet(s1); + Iterable u2_1 = Collections.unmodifiableSet(s2); + assertEquals(s1, s2); + assertEquals(u1_1, u1_2); + assertEquals(u1_1, u2_1); + } +} diff --git a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/WindEstimationLockingUnderLoadTest.java b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/WindEstimationLockingUnderLoadTest.java index ca20e1c9b7e..9cfd7aa2d50 100755 --- a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/WindEstimationLockingUnderLoadTest.java +++ b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/WindEstimationLockingUnderLoadTest.java @@ -136,7 +136,7 @@ public class WindEstimationLockingUnderLoadTest { @Override public void run() { TimePoint now = MillisecondsTimePoint.now(); - for (int i = 0; i < 100000; i++) { + for (int i = 0; i < 10000; i++) { final WindImpl wind = new WindImpl(new DegreePosition(49, 8), now, new KnotSpeedWithBearingImpl( /* speedInKnots */12., new DegreeBearingImpl(47))); addMeasuredWindFix(wind); @@ -149,7 +149,7 @@ public class WindEstimationLockingUnderLoadTest { @Override public void run() { TimePoint now = MillisecondsTimePoint.now(); - for (int i=0; i<100000; i++) { + for (int i=0; i<10000; i++) { estimationTrack.getAveragedWind(/* position */ null, now); now = now.plus(10); // the cache quantizes to a full second; so not all time points will automatically fetch uncached values } diff --git a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/WindEstimationOnStoredTracksTest.java b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/WindEstimationOnStoredTracksTest.java index 5adacc2dcd7..69aa7130da5 100755 --- a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/WindEstimationOnStoredTracksTest.java +++ b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/WindEstimationOnStoredTracksTest.java @@ -7,6 +7,7 @@ import java.io.FileNotFoundException; import java.io.IOException; import java.util.HashMap; import java.util.Map; +import java.util.Set; import org.junit.Test; @@ -15,6 +16,7 @@ import com.sap.sailing.domain.base.Mark; import com.sap.sailing.domain.common.NoWindException; import com.sap.sailing.domain.common.Position; import com.sap.sailing.domain.common.TimePoint; +import com.sap.sailing.domain.common.WindSource; import com.sap.sailing.domain.common.WindSourceType; import com.sap.sailing.domain.common.impl.DegreeBearingImpl; import com.sap.sailing.domain.common.impl.DegreePosition; @@ -65,4 +67,17 @@ public class WindEstimationOnStoredTracksTest extends StoredTrackBasedTestWithTr assertNotNull(estimatedWindDirection); } + @Test + public void testWindSourcesAreEqualAcrossCalls() { + Set ws1 = getTrackedRace().getWindSources(); + Set ws2 = getTrackedRace().getWindSources(); + assertEquals(ws1, ws2); + } + + @Test + public void testExcludedWindSourcesAreEqualAcrossCalls() { + Set ews1 = getTrackedRace().getWindSourcesToExclude(); + Set ews2 = getTrackedRace().getWindSourcesToExclude(); + assertEquals(ews1, ews2); + } } diff --git a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/mock/MockedTrackedRace.java b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/mock/MockedTrackedRace.java index 3b2f4ff13c8..8ae057dd296 100755 --- a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/mock/MockedTrackedRace.java +++ b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/mock/MockedTrackedRace.java @@ -4,6 +4,7 @@ import java.io.Serializable; import java.util.Collections; import java.util.List; import java.util.NavigableSet; +import java.util.Set; import java.util.TreeSet; import com.sap.sailing.domain.base.BoatClass; @@ -611,24 +612,24 @@ public class MockedTrackedRace implements DynamicTrackedRace { } @Override - public Wind getWind(Position p, TimePoint at, Iterable windSourcesToExclude) { + public Wind getWind(Position p, TimePoint at, Set windSourcesToExclude) { // TODO Auto-generated method stub return null; } @Override - public Iterable getWindSources(WindSourceType type) { - return Collections.emptyList(); + public Set getWindSources(WindSourceType type) { + return Collections.emptySet(); } @Override - public Iterable getWindSources() { - return Collections.emptyList(); + public Set getWindSources() { + return Collections.emptySet(); } @Override public WindWithConfidence> getWindWithConfidence(Position p, TimePoint at, - Iterable windSourcesToExclude) { + Set windSourcesToExclude) { // TODO Auto-generated method stub return null; } @@ -646,7 +647,7 @@ public class MockedTrackedRace implements DynamicTrackedRace { } @Override - public Iterable getWindSourcesToExclude() { + public Set getWindSourcesToExclude() { // TODO Auto-generated method stub return null; } diff --git a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/mock/MockedTrackedRaceWithStartTimeAndRanks.java b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/mock/MockedTrackedRaceWithStartTimeAndRanks.java index 754a405f488..1d7db492958 100755 --- a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/mock/MockedTrackedRaceWithStartTimeAndRanks.java +++ b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/mock/MockedTrackedRaceWithStartTimeAndRanks.java @@ -5,6 +5,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.NavigableSet; +import java.util.Set; import com.sap.sailing.domain.base.Competitor; import com.sap.sailing.domain.base.Leg; @@ -226,19 +227,19 @@ public class MockedTrackedRaceWithStartTimeAndRanks implements TrackedRace { } @Override - public Wind getWind(Position p, TimePoint at, Iterable windSourcesToExclude) { + public Wind getWind(Position p, TimePoint at, Set windSourcesToExclude) { // TODO Auto-generated method stub return null; } @Override - public Iterable getWindSources(WindSourceType type) { - return Collections.emptyList(); + public Set getWindSources(WindSourceType type) { + return Collections.emptySet(); } @Override - public Iterable getWindSources() { - return Collections.emptyList(); + public Set getWindSources() { + return Collections.emptySet(); } @Override @@ -399,14 +400,14 @@ public class MockedTrackedRaceWithStartTimeAndRanks implements TrackedRace { } @Override - public Iterable getWindSourcesToExclude() { + public Set getWindSourcesToExclude() { // TODO Auto-generated method stub return null; } @Override public WindWithConfidence> getWindWithConfidence(Position p, TimePoint at, - Iterable windSourcesToExclude) { + Set windSourcesToExclude) { // TODO Auto-generated method stub return null; } diff --git a/java/com.sap.sailing.domain.tractracadapter.persistence/.classpath b/java/com.sap.sailing.domain.tractracadapter.persistence/.classpath old mode 100755 new mode 100644 index c8351b0a6bd..4f83b2397ec --- a/java/com.sap.sailing.domain.tractracadapter.persistence/.classpath +++ b/java/com.sap.sailing.domain.tractracadapter.persistence/.classpath @@ -1,7 +1,7 @@ - - - - - - - + + + + + + + diff --git a/java/com.sap.sailing.domain.tractracadapter.persistence/.settings/org.eclipse.jdt.core.prefs b/java/com.sap.sailing.domain.tractracadapter.persistence/.settings/org.eclipse.jdt.core.prefs old mode 100755 new mode 100644 index abc2cd0cde2..a698e59674f --- a/java/com.sap.sailing.domain.tractracadapter.persistence/.settings/org.eclipse.jdt.core.prefs +++ b/java/com.sap.sailing.domain.tractracadapter.persistence/.settings/org.eclipse.jdt.core.prefs @@ -1,8 +1,12 @@ -#Thu Jan 19 09:53:30 CET 2012 -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 -org.eclipse.jdt.core.compiler.compliance=1.7 -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.7 +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/java/com.sap.sailing.domain.tractracadapter.persistence/META-INF/MANIFEST.MF b/java/com.sap.sailing.domain.tractracadapter.persistence/META-INF/MANIFEST.MF old mode 100755 new mode 100644 index 05a553a24c9..74e18866e03 --- a/java/com.sap.sailing.domain.tractracadapter.persistence/META-INF/MANIFEST.MF +++ b/java/com.sap.sailing.domain.tractracadapter.persistence/META-INF/MANIFEST.MF @@ -1,15 +1,17 @@ -Manifest-Version: 1.0 -Bundle-ManifestVersion: 2 -Bundle-Name: Trac Trac Adapter Persistence -Bundle-SymbolicName: com.sap.sailing.domain.tractracadapter.persistence -Bundle-Version: 1.0.0.qualifier -Bundle-Vendor: SAP -Bundle-RequiredExecutionEnvironment: JavaSE-1.7 -Bundle-ActivationPolicy: lazy -Require-Bundle: com.mongodb.driver;bundle-version="2.6.2", - com.sap.sailing.mongodb, - com.sap.sailing.domain.tractracadapter, - com.sap.sailing.domain, - com.sap.sailing.domain.common, - com.sap.sse.common -Export-Package: com.sap.sailing.domain.tractracadapter.persistence +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: Trac Trac Adapter Persistence +Bundle-SymbolicName: com.sap.sailing.domain.tractracadapter.persistence +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", + com.sap.sailing.mongodb, + com.sap.sailing.domain.tractracadapter, + com.sap.sailing.domain, + com.sap.sailing.domain.common, + com.sap.sse.common +Export-Package: com.sap.sailing.domain.tractracadapter.persistence +Import-Package: org.osgi.framework +Bundle-Activator: com.sap.sailing.domain.tractracadapter.persistence.impl.Activator diff --git a/java/com.sap.sailing.domain.tractracadapter.persistence/src/com/sap/sailing/domain/tractracadapter/persistence/impl/Activator.java b/java/com.sap.sailing.domain.tractracadapter.persistence/src/com/sap/sailing/domain/tractracadapter/persistence/impl/Activator.java new file mode 100755 index 00000000000..60f6a86ce1e --- /dev/null +++ b/java/com.sap.sailing.domain.tractracadapter.persistence/src/com/sap/sailing/domain/tractracadapter/persistence/impl/Activator.java @@ -0,0 +1,19 @@ +package com.sap.sailing.domain.tractracadapter.persistence.impl; + +import org.osgi.framework.BundleActivator; +import org.osgi.framework.BundleContext; + +import com.sap.sailing.mongodb.MongoDBService; + +public class Activator implements BundleActivator { + @Override + public void start(BundleContext context) throws Exception { + for (CollectionNames name : CollectionNames.values()) { + MongoDBService.INSTANCE.registerExclusively(CollectionNames.class, name.name()); + } + } + + @Override + public void stop(BundleContext context) throws Exception { + } +} diff --git a/java/com.sap.sailing.domain.tractracadapter/.classpath b/java/com.sap.sailing.domain.tractracadapter/.classpath old mode 100755 new mode 100644 index c8351b0a6bd..4f83b2397ec --- a/java/com.sap.sailing.domain.tractracadapter/.classpath +++ b/java/com.sap.sailing.domain.tractracadapter/.classpath @@ -1,7 +1,7 @@ - - - - - - - + + + + + + + diff --git a/java/com.sap.sailing.domain.tractracadapter/.settings/org.eclipse.jdt.core.prefs b/java/com.sap.sailing.domain.tractracadapter/.settings/org.eclipse.jdt.core.prefs old mode 100755 new mode 100644 index daaeb52ce4b..a698e59674f --- a/java/com.sap.sailing.domain.tractracadapter/.settings/org.eclipse.jdt.core.prefs +++ b/java/com.sap.sailing.domain.tractracadapter/.settings/org.eclipse.jdt.core.prefs @@ -1,8 +1,12 @@ -#Thu Jan 19 09:53:12 CET 2012 -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 -org.eclipse.jdt.core.compiler.compliance=1.7 -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.7 +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/java/com.sap.sailing.domain.tractracadapter/META-INF/MANIFEST.MF b/java/com.sap.sailing.domain.tractracadapter/META-INF/MANIFEST.MF old mode 100755 new mode 100644 index 381c31cf068..6b0c01dc070 --- a/java/com.sap.sailing.domain.tractracadapter/META-INF/MANIFEST.MF +++ b/java/com.sap.sailing.domain.tractracadapter/META-INF/MANIFEST.MF @@ -1,24 +1,24 @@ -Manifest-Version: 1.0 -Bundle-ManifestVersion: 2 -Bundle-Name: Tractracadapter -Bundle-SymbolicName: com.sap.sailing.domain.tractracadapter -Bundle-Version: 1.0.0.qualifier -Bundle-Vendor: SAP -Bundle-RequiredExecutionEnvironment: JavaSE-1.7 -Require-Bundle: com.sap.sailing.domain, - com.tractrac.clientmodule;bundle-version="2.0.0", - com.googlecode.java-diff-utils;bundle-version="1.3.0", - com.sap.sailing.domain.common, - com.sap.sailing.server.gateway.serialization;bundle-version="1.0.0", - com.sap.sse.common -Export-Package: com.sap.sailing.domain.tractracadapter, - com.sap.sailing.domain.tractracadapter.impl; - x-friends:="com.sap.sailing.domain.test, - com.sap.sailing.domain.swisstimingadapter.test, - com.sap.sailing.server.test, - com.sap.sailing.mongodb.test" -Bundle-ActivationPolicy: lazy -Import-Package: org.json.simple, - org.json.simple.parser, - org.osgi.framework;version="1.7.0" -Bundle-Activator: com.sap.sailing.domain.tractracadapter.impl.Activator +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: Tractracadapter +Bundle-SymbolicName: com.sap.sailing.domain.tractracadapter +Bundle-Version: 1.0.0.qualifier +Bundle-Vendor: SAP +Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Require-Bundle: com.sap.sailing.domain, + com.tractrac.clientmodule;bundle-version="2.0.0", + com.googlecode.java-diff-utils;bundle-version="1.3.0", + com.sap.sailing.domain.common, + com.sap.sailing.server.gateway.serialization;bundle-version="1.0.0", + com.sap.sse.common +Export-Package: com.sap.sailing.domain.tractracadapter, + com.sap.sailing.domain.tractracadapter.impl; + x-friends:="com.sap.sailing.domain.test, + com.sap.sailing.domain.swisstimingadapter.test, + com.sap.sailing.server.test, + com.sap.sailing.mongodb.test" +Bundle-ActivationPolicy: lazy +Import-Package: org.json.simple, + org.json.simple.parser, + org.osgi.framework;version="1.7.0" +Bundle-Activator: com.sap.sailing.domain.tractracadapter.impl.Activator diff --git a/java/com.sap.sailing.domain/.classpath b/java/com.sap.sailing.domain/.classpath old mode 100755 new mode 100644 index b1dabee3829..eca7bdba8f0 --- a/java/com.sap.sailing.domain/.classpath +++ b/java/com.sap.sailing.domain/.classpath @@ -1,7 +1,7 @@ - - - - - - - + + + + + + + diff --git a/java/com.sap.sailing.domain/.settings/org.eclipse.jdt.core.prefs b/java/com.sap.sailing.domain/.settings/org.eclipse.jdt.core.prefs old mode 100755 new mode 100644 index 838bd9d6942..a698e59674f --- a/java/com.sap.sailing.domain/.settings/org.eclipse.jdt.core.prefs +++ b/java/com.sap.sailing.domain/.settings/org.eclipse.jdt.core.prefs @@ -1,11 +1,12 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 -org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.7 -org.eclipse.jdt.core.compiler.debug.lineNumber=generate -org.eclipse.jdt.core.compiler.debug.localVariable=generate -org.eclipse.jdt.core.compiler.debug.sourceFile=generate -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.7 +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/java/com.sap.sailing.domain/META-INF/MANIFEST.MF b/java/com.sap.sailing.domain/META-INF/MANIFEST.MF index 7bfebe3d4cd..f1553f2f3ef 100755 --- a/java/com.sap.sailing.domain/META-INF/MANIFEST.MF +++ b/java/com.sap.sailing.domain/META-INF/MANIFEST.MF @@ -4,7 +4,7 @@ Bundle-Name: Domain Bundle-SymbolicName: com.sap.sailing.domain Bundle-Version: 1.0.0.qualifier Bundle-Vendor: SAP -Bundle-RequiredExecutionEnvironment: JavaSE-1.7 +Bundle-RequiredExecutionEnvironment: JavaSE-1.8 Bundle-ClassPath: . Export-Package: com.sap.sailing.domain.base, com.sap.sailing.domain.base.impl, diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/base/impl/DomainFactoryImpl.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/base/impl/DomainFactoryImpl.java index 79bba38e431..69356fe5bc5 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/base/impl/DomainFactoryImpl.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/base/impl/DomainFactoryImpl.java @@ -44,6 +44,8 @@ import com.sap.sailing.domain.leaderboard.impl.HighPointFirstGets10LastBreaksTie import com.sap.sailing.domain.leaderboard.impl.HighPointFirstGets10Or8AndLastBreaksTie; import com.sap.sailing.domain.leaderboard.impl.HighPointFirstGets1LastBreaksTie; import com.sap.sailing.domain.leaderboard.impl.HighPointLastBreaksTie; +import com.sap.sailing.domain.leaderboard.impl.HighPointWinnerGetsEight; +import com.sap.sailing.domain.leaderboard.impl.HighPointWinnerGetsEightAndInterpolation; import com.sap.sailing.domain.leaderboard.impl.HighPointWinnerGetsFive; import com.sap.sailing.domain.leaderboard.impl.HighPointWinnerGetsSix; import com.sap.sailing.domain.leaderboard.impl.LowPoint; @@ -105,6 +107,10 @@ public class DomainFactoryImpl extends SharedDomainFactoryImpl implements Domain return new HighPointWinnerGetsFive(); case HIGH_POINT_WINNER_GETS_SIX: return new HighPointWinnerGetsSix(); + case HIGH_POINT_WINNER_GETS_EIGHT: + return new HighPointWinnerGetsEight(); + case HIGH_POINT_WINNER_GETS_EIGHT_AND_INTERPOLATION: + return new HighPointWinnerGetsEightAndInterpolation(); case HIGH_POINT_FIRST_GETS_TEN_OR_EIGHT: return new HighPointFirstGets10Or8AndLastBreaksTie(); } diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/HighPointFirstGets10Or8AndLastBreaksTie.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/HighPointFirstGets10Or8AndLastBreaksTie.java index ead72c36415..ea6a65ba6a3 100644 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/HighPointFirstGets10Or8AndLastBreaksTie.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/HighPointFirstGets10Or8AndLastBreaksTie.java @@ -46,9 +46,6 @@ public class HighPointFirstGets10Or8AndLastBreaksTie extends HighPointFirstGetsF int o1Wins = getWins(o1Scores); int o2Wins = getWins(o2Scores); int result = o2Wins - o1Wins; - if (result == 0 && o1Scores.size() >= 1 && o2Scores.size() >= 1) { - result = o1Scores.get(o1Scores.size()-1).getB().compareTo(o2Scores.get(o2Scores.size()-1).getB()); - } return result; } diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/HighPointWinnerGetsEight.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/HighPointWinnerGetsEight.java new file mode 100644 index 00000000000..33a154e7d66 --- /dev/null +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/HighPointWinnerGetsEight.java @@ -0,0 +1,16 @@ +package com.sap.sailing.domain.leaderboard.impl; + +import com.sap.sailing.domain.common.ScoringSchemeType; + +public class HighPointWinnerGetsEight extends HighPointFirstGetsFixedScore { + private static final long serialVersionUID = 330293087596268557L; + + public HighPointWinnerGetsEight() { + super(/* scoreForRaceWinner */ 8); + } + + @Override + public ScoringSchemeType getType() { + return ScoringSchemeType.HIGH_POINT_WINNER_GETS_EIGHT; + } +} diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/HighPointWinnerGetsEightAndInterpolation.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/HighPointWinnerGetsEightAndInterpolation.java new file mode 100644 index 00000000000..d964769e1e1 --- /dev/null +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/HighPointWinnerGetsEightAndInterpolation.java @@ -0,0 +1,56 @@ +package com.sap.sailing.domain.leaderboard.impl; + +import java.util.concurrent.Callable; + +import com.sap.sailing.domain.base.Competitor; +import com.sap.sailing.domain.base.RaceColumn; +import com.sap.sailing.domain.common.ScoringSchemeType; +import com.sap.sailing.domain.leaderboard.NumberOfCompetitorsInLeaderboardFetcher; + +/** + * High point system with a fixed 'highest score' (eight points) and + * an adaptation of the scoring when a fleet has less competitors. + * Normally the winner gets 8 points, second gets 7 points and so on. + * If a fleet has less competitors than 8 the scores are interpolated between the maximum and the minimum score. + * Used by the champions league event 2014 + * @author Frank + * + */ +public class HighPointWinnerGetsEightAndInterpolation extends HighPointFirstGetsFixedScore { + private static final long serialVersionUID = 4845740206581229807L; + + private static int MAX_NUMBER_OF_COMPETITORS_PER_FLEET = 8; + + public HighPointWinnerGetsEightAndInterpolation() { + super(/* scoreForRaceWinner */ MAX_NUMBER_OF_COMPETITORS_PER_FLEET); + } + + @Override + public ScoringSchemeType getType() { + return ScoringSchemeType.HIGH_POINT_WINNER_GETS_EIGHT_AND_INTERPOLATION; + } + + @Override + public Double getScoreForRank(RaceColumn raceColumn, Competitor competitor, int rank, Callable numberOfCompetitorsInRaceFetcher, NumberOfCompetitorsInLeaderboardFetcher numberOfCompetitorsInLeaderboardFetcher) { + final int effectiveRank = getEffectiveRank(raceColumn, competitor, rank); + final Double result; + if (effectiveRank == 0) { + result = null; + } else { + try { + Integer numberOfCompetitorsInRace = numberOfCompetitorsInRaceFetcher.call(); + if(numberOfCompetitorsInRace <= MAX_NUMBER_OF_COMPETITORS_PER_FLEET) { + // Formula = 8- ((Max-Min) / (Max-Min - numberOfMissingBoats) * (fleetRank-1)) + double minMaxRange = getScoreForRaceWinner() - getMinimumScoreFromRank(); + int numberOfMissingBoatsInFleet = MAX_NUMBER_OF_COMPETITORS_PER_FLEET - numberOfCompetitorsInRace; + double score = getScoreForRaceWinner() - (minMaxRange / (minMaxRange - numberOfMissingBoatsInFleet) * (effectiveRank-1)); + result = Math.max(getMinimumScoreFromRank(), score); + } else { + result = null; + } + } catch (Exception e) { + throw new RuntimeException(e); + } + } + return result; + }} diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/LeaderboardGroupImpl.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/LeaderboardGroupImpl.java index 7d4a5736602..6cc07c35d9e 100644 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/LeaderboardGroupImpl.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/LeaderboardGroupImpl.java @@ -104,43 +104,47 @@ public class LeaderboardGroupImpl extends LeaderboardGroupBaseImpl implements Le } @Override - public int getIndexOf(Leaderboard leaderboard) { + public synchronized int getIndexOf(Leaderboard leaderboard) { return leaderboards.indexOf(leaderboard); } @Override - public synchronized void addLeaderboard(Leaderboard leaderboard) { + public void addLeaderboard(Leaderboard leaderboard) { addLeaderboardAt(leaderboard, leaderboards.size()); } @Override - public synchronized void addLeaderboardAt(Leaderboard leaderboard, int index) { - leaderboards.add(index, leaderboard); + public void addLeaderboardAt(Leaderboard leaderboard, int index) { + synchronized (this) { + leaderboards.add(index, leaderboard); + } notifyLeaderboardGroupListenersAboutLeaderboardAdded(leaderboard); } @Override - public synchronized void addAllLeaderboards(Collection leaderboards) { + public void addAllLeaderboards(Collection leaderboards) { for (Leaderboard leaderboard : leaderboards) { addLeaderboard(leaderboard); } } @Override - public synchronized void removeLeaderboard(Leaderboard leaderboard) { - leaderboards.remove(leaderboard); + public void removeLeaderboard(Leaderboard leaderboard) { + synchronized (this) { + leaderboards.remove(leaderboard); + } notifyLeaderboardGroupListenersAboutLeaderboardRemoved(leaderboard); } @Override - public synchronized void removeAllLeaderboards(Collection leaderboards) { + public void removeAllLeaderboards(Collection leaderboards) { for (Leaderboard leaderboard : leaderboards) { removeLeaderboard(leaderboard); } } @Override - public synchronized void clearLeaderboards() { + public void clearLeaderboards() { for (Leaderboard leaderboard : getLeaderboards()) { removeLeaderboard(leaderboard); } diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/polarsheets/PerRaceAndCompetitorPolarSheetGenerationWorker.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/polarsheets/PerRaceAndCompetitorPolarSheetGenerationWorker.java index 2da28a4f311..6c7270f181c 100644 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/polarsheets/PerRaceAndCompetitorPolarSheetGenerationWorker.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/polarsheets/PerRaceAndCompetitorPolarSheetGenerationWorker.java @@ -172,7 +172,7 @@ public class PerRaceAndCompetitorPolarSheetGenerationWorker implements Runnable = new ArrayList>>>(); for (WindSource windGaugeSource : windGaugeSources) { Iterable allSources = race.getWindSources(); - List allSourcesButTheSingleWindGaugeSource = new ArrayList(); + Set allSourcesButTheSingleWindGaugeSource = new HashSet(); for (WindSource windSource : allSources) { if (windSource != windGaugeSource) { allSourcesButTheSingleWindGaugeSource.add(windSource); @@ -202,7 +202,7 @@ public class PerRaceAndCompetitorPolarSheetGenerationWorker implements Runnable return done; } - private Iterable collectWindSourcesToIgnoreForSpeed() { + private Set collectWindSourcesToIgnoreForSpeed() { Set windSourcesToExclude = new HashSet(); Iterable combinedSources = race.getWindSources(WindSourceType.COMBINED); for (WindSource combinedSource : combinedSources) { diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/TrackedLegOfCompetitor.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/TrackedLegOfCompetitor.java index 80ffe59e83a..ae3d5add2bd 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/TrackedLegOfCompetitor.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/TrackedLegOfCompetitor.java @@ -101,19 +101,22 @@ public interface TrackedLegOfCompetitor extends Serializable { List getManeuvers(TimePoint timePoint, boolean waitForLatest) throws NoWindException; /** + * @param waitForLatest TODO * @return null if the competitor hasn't started this leg yet */ - Integer getNumberOfTacks(TimePoint timePoint) throws NoWindException; + Integer getNumberOfTacks(TimePoint timePoint, boolean waitForLatest) throws NoWindException; /** + * @param waitForLatest TODO * @return null if the competitor hasn't started this leg yet */ - Integer getNumberOfJibes(TimePoint timePoint) throws NoWindException; + Integer getNumberOfJibes(TimePoint timePoint, boolean waitForLatest) throws NoWindException; /** + * @param waitForLatest TODO * @return null if the competitor hasn't started this leg yet */ - Integer getNumberOfPenaltyCircles(TimePoint timePoint) throws NoWindException; + Integer getNumberOfPenaltyCircles(TimePoint timePoint, boolean waitForLatest) throws NoWindException; /** * Computes the competitor's rank within this leg. If the competitor has already finished this leg at diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/TrackedRace.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/TrackedRace.java index 254d7ac2d4b..e2a305b52b4 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/TrackedRace.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/TrackedRace.java @@ -3,6 +3,7 @@ package com.sap.sailing.domain.tracking; import java.io.Serializable; import java.util.List; import java.util.NavigableSet; +import java.util.Set; import java.util.SortedSet; import com.sap.sailing.domain.base.Competitor; @@ -238,7 +239,7 @@ public interface TrackedRace extends Serializable { Position getApproximatePosition(Waypoint waypoint, TimePoint timePoint); /** - * Same as {@link #getWind(Position, TimePoint, Iterable) getWind(p, at, Collections.emptyList())} + * Same as {@link #getWind(Position, TimePoint, Set) getWind(p, at, Collections.emptyList())} */ Wind getWind(Position p, TimePoint at); @@ -247,7 +248,7 @@ public interface TrackedRace extends Serializable { * from all wind sources available except for those listed in windSourcesToExclude, using the * confidences of the wind values provided by the various sources during averaging. */ - Wind getWind(Position p, TimePoint at, Iterable windSourcesToExclude); + Wind getWind(Position p, TimePoint at, Set windSourcesToExclude); /** * Retrieves the wind sources used so far by this race that have the specified type as their @@ -255,13 +256,13 @@ public interface TrackedRace extends Serializable { * race does not use any wind source of the specified type (yet). Additional sources may be returned after * */ - Iterable getWindSources(WindSourceType type); + Set getWindSources(WindSourceType type); /** * Retrieves all wind sources known to this race, including those {@link #getWindSourcesToExclude() to exclude}. * Callers can freely iterate because a copied collection is returned. */ - Iterable getWindSources(); + Set getWindSources(); /** * Same as {@link #getOrCreateWindTrack(WindSource, long) getOrCreateWindTrack(windSource, @@ -484,7 +485,7 @@ public interface TrackedRace extends Serializable { * Lists those wind sources which by default are not considered in {@link #getWind(Position, TimePoint)} and * {@link #getWindWithConfidence(Position, TimePoint)}. */ - Iterable getWindSourcesToExclude(); + Set getWindSourcesToExclude(); /** * Loops over this tracked race's wind sources and from each asks its averaged wind for the position p @@ -493,7 +494,7 @@ public interface TrackedRace extends Serializable { * averaged confidence attached. */ WindWithConfidence> getWindWithConfidence(Position p, TimePoint at, - Iterable windSourcesToExclude); + Set windSourcesToExclude); /** * Same as {@link #getEstimatedWindDirection(TimePoint)}, but propagates the confidence of the wind diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/TrackedRaceWithWindEssentials.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/TrackedRaceWithWindEssentials.java index 1fb856e5d0c..30d6144ef71 100644 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/TrackedRaceWithWindEssentials.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/TrackedRaceWithWindEssentials.java @@ -122,7 +122,7 @@ public abstract class TrackedRaceWithWindEssentials implements TrackedRace { } @Override - public Iterable getWindSources(WindSourceType type) { + public Set getWindSources(WindSourceType type) { Set result = new HashSet(); for (WindSource windSource : getWindSources()) { if (windSource.getType() == type) { @@ -133,7 +133,7 @@ public abstract class TrackedRaceWithWindEssentials implements TrackedRace { } @Override - public Iterable getWindSources() { + public Set getWindSources() { while (true) { try { return new HashSet(windTracks.keySet()); diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/GPSFixImpl.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/GPSFixImpl.java index e270ba4a36f..b1c10bee3cc 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/GPSFixImpl.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/GPSFixImpl.java @@ -2,6 +2,8 @@ package com.sap.sailing.domain.tracking.impl; import com.sap.sailing.domain.common.Position; import com.sap.sailing.domain.common.TimePoint; +import com.sap.sailing.domain.common.impl.DegreePosition; +import com.sap.sailing.domain.common.impl.MillisecondsTimePoint; import com.sap.sailing.domain.tracking.GPSFix; /** @@ -36,4 +38,8 @@ public class GPSFixImpl extends AbstractGPSFixImpl implements GPSFix { return getTimePoint()+": "+getPosition(); } + + public static GPSFixImpl create(double lonDeg, double latDeg, long timeMillis) { + return new GPSFixImpl(new DegreePosition(latDeg, lonDeg), new MillisecondsTimePoint(timeMillis)); + } } diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/GPSFixMovingImpl.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/GPSFixMovingImpl.java index e2626304c9a..c756f75a48f 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/GPSFixMovingImpl.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/GPSFixMovingImpl.java @@ -3,6 +3,10 @@ package com.sap.sailing.domain.tracking.impl; import com.sap.sailing.domain.common.Position; import com.sap.sailing.domain.common.SpeedWithBearing; import com.sap.sailing.domain.common.TimePoint; +import com.sap.sailing.domain.common.impl.DegreeBearingImpl; +import com.sap.sailing.domain.common.impl.DegreePosition; +import com.sap.sailing.domain.common.impl.KnotSpeedWithBearingImpl; +import com.sap.sailing.domain.common.impl.MillisecondsTimePoint; import com.sap.sailing.domain.tracking.GPSFixMoving; public class GPSFixMovingImpl extends GPSFixImpl implements GPSFixMoving { @@ -33,5 +37,11 @@ public class GPSFixMovingImpl extends GPSFixImpl implements GPSFixMoving { public boolean equals(Object other) { return super.equals(other) && other instanceof GPSFixMoving && getSpeed().equals(((GPSFixMoving) other).getSpeed()); } - + + public static GPSFixMovingImpl create(double lonDeg, double latDeg, long timeMillis, + double speedInKnots, double bearingDeg) { + return new GPSFixMovingImpl(new DegreePosition(latDeg, lonDeg), + new MillisecondsTimePoint(timeMillis), new KnotSpeedWithBearingImpl( + speedInKnots, new DegreeBearingImpl(bearingDeg))); + } } diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/ShortTimeWindCache.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/ShortTimeWindCache.java index 564213dc045..b628d7bb4a7 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/ShortTimeWindCache.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/ShortTimeWindCache.java @@ -1,5 +1,6 @@ package com.sap.sailing.domain.tracking.impl; +import java.util.Set; import java.util.Timer; import java.util.TimerTask; import java.util.concurrent.ConcurrentHashMap; @@ -24,13 +25,13 @@ import com.sap.sse.common.Util.Triple; */ public class ShortTimeWindCache { private static final Logger logger = Logger.getLogger(ShortTimeWindCache.class.getName()); - private final ConcurrentHashMap>, + private final ConcurrentHashMap>, WindWithConfidence>> cache; /** * The keys of {@link #cache} in the order in which to invalidate them, keyed by the time they were entered into the cache. */ - private final ConcurrentLinkedDeque>>> order; + private final ConcurrentLinkedDeque>>> order; /** * Creation and removal / cancellation of the timer is synchronized using {@link #order}. @@ -47,7 +48,7 @@ public class ShortTimeWindCache { @Override public void run() { long oldestToKeep = System.currentTimeMillis() - preserveHowManyMilliseconds; - Pair>> next; + Pair>> next; while ((next = order.pollFirst()) != null && next.getA() < oldestToKeep) { cache.remove(next.getB()); } @@ -68,11 +69,11 @@ public class ShortTimeWindCache { order = new ConcurrentLinkedDeque<>(); } - public void add(Triple> key, WindWithConfidence> wind) { + public void add(Triple> key, WindWithConfidence> wind) { cache.put(key, wind); boolean orderEmpty = order.isEmpty(); synchronized (order) { - order.add(new Pair>>(System.currentTimeMillis(), key)); + order.add(new Pair>>(System.currentTimeMillis(), key)); if (orderEmpty) { ensureTimerIsRunning(); } @@ -80,15 +81,12 @@ public class ShortTimeWindCache { } WindWithConfidence> getWindWithConfidence(Position p, - TimePoint at, Iterable windSourcesToExclude) { + TimePoint at, Set windSourcesToExclude) { WindWithConfidence> wind; - final Triple> key = new Triple<>(p, at, windSourcesToExclude); + final Triple> key = new Triple>(p, at, windSourcesToExclude); wind = cache.get(key); if (wind == null) { misses++; - if (misses % 100000l == 0 && logger.isLoggable(Level.FINE)) { - logger.fine("hits: " + hits + ", misses: " + misses); - } wind = trackedRace.getWindWithConfidenceUncached(p, at, windSourcesToExclude); if (wind != null) { add(key, wind); @@ -96,6 +94,9 @@ public class ShortTimeWindCache { } else { hits++; } + if ((hits+misses) % 100000l == 0 && logger.isLoggable(Level.FINE)) { + logger.fine("hits: " + hits + ", misses: " + misses); + } return wind; } diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackedLegImpl.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackedLegImpl.java index f01da52e594..48dfa7b8521 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackedLegImpl.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackedLegImpl.java @@ -8,6 +8,7 @@ import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.concurrent.Callable; import java.util.logging.Logger; @@ -245,7 +246,7 @@ public class TrackedLegImpl implements TrackedLeg, RaceChangeListener { return effectivePosition; } - private Wind getWind(Position p, TimePoint at, Iterable windSourcesToExclude) { + private Wind getWind(Position p, TimePoint at, Set windSourcesToExclude) { return getTrackedRace().getWind(p, at, windSourcesToExclude); } diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackedLegOfCompetitorImpl.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackedLegOfCompetitorImpl.java index 7c18d11f0bf..4bd454355fa 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackedLegOfCompetitorImpl.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackedLegOfCompetitorImpl.java @@ -5,6 +5,7 @@ import java.util.Iterator; import java.util.List; import java.util.ListIterator; import java.util.NavigableSet; +import java.util.Set; import java.util.concurrent.Callable; import com.sap.sailing.domain.base.Competitor; @@ -227,7 +228,7 @@ public class TrackedLegOfCompetitorImpl implements TrackedLegOfCompetitor { * Projects speed onto the wind direction for upwind/downwind legs to see how fast a boat travels * "along the wind's direction." For reaching legs (neither upwind nor downwind), the speed is projected onto * the leg's direction. - * @param windPositionMode see {@link #getWind(Position, TimePoint, WindPositionMode)} + * @param windPositionMode see {@link #getWind(Position, TimePoint, Set)} * * @throws NoWindException in case the wind direction is not known */ @@ -321,10 +322,10 @@ public class TrackedLegOfCompetitorImpl implements TrackedLegOfCompetitor { @Override - public Integer getNumberOfTacks(TimePoint timePoint) throws NoWindException { + public Integer getNumberOfTacks(TimePoint timePoint, boolean waitForLatest) throws NoWindException { Integer result = null; if (hasStartedLeg(timePoint)) { - List maneuvers = getManeuvers(timePoint, /* waitForLatest */ true); + List maneuvers = getManeuvers(timePoint, waitForLatest); result = 0; for (Maneuver maneuver : maneuvers) { if (maneuver.getType() == ManeuverType.TACK) { @@ -349,10 +350,10 @@ public class TrackedLegOfCompetitorImpl implements TrackedLegOfCompetitor { } @Override - public Integer getNumberOfJibes(TimePoint timePoint) throws NoWindException { + public Integer getNumberOfJibes(TimePoint timePoint, boolean waitForLatest) throws NoWindException { Integer result = null; if (hasStartedLeg(timePoint)) { - List maneuvers = getManeuvers(timePoint, /* waitForLatest */ true); + List maneuvers = getManeuvers(timePoint, waitForLatest); result = 0; for (Maneuver maneuver : maneuvers) { if (maneuver.getType() == ManeuverType.JIBE) { @@ -364,10 +365,10 @@ public class TrackedLegOfCompetitorImpl implements TrackedLegOfCompetitor { } @Override - public Integer getNumberOfPenaltyCircles(TimePoint timePoint) throws NoWindException { + public Integer getNumberOfPenaltyCircles(TimePoint timePoint, boolean waitForLatest) throws NoWindException { Integer result = null; if (hasStartedLeg(timePoint)) { - List maneuvers = getManeuvers(timePoint, /* waitForLatest */ true); + List maneuvers = getManeuvers(timePoint, waitForLatest); result = 0; for (Maneuver maneuver : maneuvers) { if (maneuver.getType() == ManeuverType.PENALTY_CIRCLE) { diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackedRaceImpl.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackedRaceImpl.java index c07955a95f9..475e86b35fb 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackedRaceImpl.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackedRaceImpl.java @@ -1333,7 +1333,7 @@ public abstract class TrackedRaceImpl extends TrackedRaceWithWindEssentials impl } @Override - public Wind getWind(Position p, TimePoint at, Iterable windSourcesToExclude) { + public Wind getWind(Position p, TimePoint at, Set windSourcesToExclude) { final WindWithConfidence> windWithConfidence = getWindWithConfidence(p, at, windSourcesToExclude); return windWithConfidence == null ? null : windWithConfidence.getObject(); @@ -1345,9 +1345,9 @@ public abstract class TrackedRaceImpl extends TrackedRaceWithWindEssentials impl } @Override - public Iterable getWindSourcesToExclude() { + public Set getWindSourcesToExclude() { synchronized (windSourcesToExclude) { - return Collections.unmodifiableCollection(windSourcesToExclude); + return Collections.unmodifiableSet(windSourcesToExclude); } } @@ -1373,7 +1373,7 @@ public abstract class TrackedRaceImpl extends TrackedRaceWithWindEssentials impl @Override public WindWithConfidence> getWindWithConfidence(Position p, TimePoint at, - Iterable windSourcesToExclude) { + Set windSourcesToExclude) { return shortTimeWindCache.getWindWithConfidence(p, at, windSourcesToExclude); } diff --git a/java/com.sap.sailing.ess40.resultimport.test/.classpath b/java/com.sap.sailing.ess40.resultimport.test/.classpath old mode 100755 new mode 100644 index b1dabee3829..eca7bdba8f0 --- a/java/com.sap.sailing.ess40.resultimport.test/.classpath +++ b/java/com.sap.sailing.ess40.resultimport.test/.classpath @@ -1,7 +1,7 @@ - - - - - - - + + + + + + + diff --git a/java/com.sap.sailing.ess40.resultimport.test/.settings/org.eclipse.jdt.core.prefs b/java/com.sap.sailing.ess40.resultimport.test/.settings/org.eclipse.jdt.core.prefs old mode 100755 new mode 100644 index 11f6e462df7..a698e59674f --- a/java/com.sap.sailing.ess40.resultimport.test/.settings/org.eclipse.jdt.core.prefs +++ b/java/com.sap.sailing.ess40.resultimport.test/.settings/org.eclipse.jdt.core.prefs @@ -1,7 +1,12 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 -org.eclipse.jdt.core.compiler.compliance=1.7 -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.7 +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/java/com.sap.sailing.ess40.resultimport.test/META-INF/MANIFEST.MF b/java/com.sap.sailing.ess40.resultimport.test/META-INF/MANIFEST.MF old mode 100755 new mode 100644 index 90e8497974d..68e845ecf70 --- a/java/com.sap.sailing.ess40.resultimport.test/META-INF/MANIFEST.MF +++ b/java/com.sap.sailing.ess40.resultimport.test/META-INF/MANIFEST.MF @@ -1,12 +1,12 @@ -Manifest-Version: 1.0 -Bundle-ManifestVersion: 2 -Bundle-Name: Test -Bundle-SymbolicName: com.sap.sailing.ess40.resultimport.test -Bundle-Version: 1.0.0.qualifier -Bundle-Vendor: SAP -Bundle-RequiredExecutionEnvironment: JavaSE-1.7 -Fragment-Host: com.sap.sailing.ess40.resultimport -Import-Package: org.osgi.framework;version="1.3.0" -Bundle-ActivationPolicy: lazy -Require-Bundle: org.junit4;bundle-version="4.8.2", - com.sap.sse.common +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: Test +Bundle-SymbolicName: com.sap.sailing.ess40.resultimport.test +Bundle-Version: 1.0.0.qualifier +Bundle-Vendor: SAP +Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Fragment-Host: com.sap.sailing.ess40.resultimport +Import-Package: org.osgi.framework;version="1.3.0" +Bundle-ActivationPolicy: lazy +Require-Bundle: org.junit4;bundle-version="4.8.2", + com.sap.sse.common diff --git a/java/com.sap.sailing.ess40.resultimport/.classpath b/java/com.sap.sailing.ess40.resultimport/.classpath old mode 100755 new mode 100644 index b1dabee3829..eca7bdba8f0 --- a/java/com.sap.sailing.ess40.resultimport/.classpath +++ b/java/com.sap.sailing.ess40.resultimport/.classpath @@ -1,7 +1,7 @@ - - - - - - - + + + + + + + diff --git a/java/com.sap.sailing.ess40.resultimport/.settings/org.eclipse.jdt.core.prefs b/java/com.sap.sailing.ess40.resultimport/.settings/org.eclipse.jdt.core.prefs old mode 100755 new mode 100644 index 11f6e462df7..a698e59674f --- a/java/com.sap.sailing.ess40.resultimport/.settings/org.eclipse.jdt.core.prefs +++ b/java/com.sap.sailing.ess40.resultimport/.settings/org.eclipse.jdt.core.prefs @@ -1,7 +1,12 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 -org.eclipse.jdt.core.compiler.compliance=1.7 -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.7 +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/java/com.sap.sailing.ess40.resultimport/META-INF/MANIFEST.MF b/java/com.sap.sailing.ess40.resultimport/META-INF/MANIFEST.MF old mode 100755 new mode 100644 index e2e38baeab3..83bd4085a96 --- a/java/com.sap.sailing.ess40.resultimport/META-INF/MANIFEST.MF +++ b/java/com.sap.sailing.ess40.resultimport/META-INF/MANIFEST.MF @@ -1,14 +1,14 @@ -Manifest-Version: 1.0 -Bundle-ManifestVersion: 2 -Bundle-Name: Resultimport -Bundle-SymbolicName: com.sap.sailing.ess40.resultimport -Bundle-Version: 1.0.0.qualifier -Bundle-Activator: com.sap.sailing.ess40.resultimport.Activator -Bundle-Vendor: SAP -Bundle-RequiredExecutionEnvironment: JavaSE-1.7 -Import-Package: org.osgi.framework;version="1.3.0" -Bundle-ActivationPolicy: lazy -Require-Bundle: com.sap.sailing.domain, - com.sap.sailing.domain.common, - com.sap.sse.common -Export-Package: com.sap.sailing.ess40.resultimport +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: Resultimport +Bundle-SymbolicName: com.sap.sailing.ess40.resultimport +Bundle-Version: 1.0.0.qualifier +Bundle-Activator: com.sap.sailing.ess40.resultimport.Activator +Bundle-Vendor: SAP +Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Import-Package: org.osgi.framework;version="1.3.0" +Bundle-ActivationPolicy: lazy +Require-Bundle: com.sap.sailing.domain, + com.sap.sailing.domain.common, + com.sap.sse.common +Export-Package: com.sap.sailing.ess40.resultimport diff --git a/java/com.sap.sailing.expeditionconnector.test/.classpath b/java/com.sap.sailing.expeditionconnector.test/.classpath old mode 100755 new mode 100644 index c8351b0a6bd..4f83b2397ec --- a/java/com.sap.sailing.expeditionconnector.test/.classpath +++ b/java/com.sap.sailing.expeditionconnector.test/.classpath @@ -1,7 +1,7 @@ - - - - - - - + + + + + + + diff --git a/java/com.sap.sailing.expeditionconnector.test/.settings/org.eclipse.jdt.core.prefs b/java/com.sap.sailing.expeditionconnector.test/.settings/org.eclipse.jdt.core.prefs old mode 100755 new mode 100644 index 980ebf0e048..a698e59674f --- a/java/com.sap.sailing.expeditionconnector.test/.settings/org.eclipse.jdt.core.prefs +++ b/java/com.sap.sailing.expeditionconnector.test/.settings/org.eclipse.jdt.core.prefs @@ -1,8 +1,12 @@ -#Thu Jan 19 09:54:08 CET 2012 -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 -org.eclipse.jdt.core.compiler.compliance=1.7 -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.7 +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/java/com.sap.sailing.expeditionconnector.test/META-INF/MANIFEST.MF b/java/com.sap.sailing.expeditionconnector.test/META-INF/MANIFEST.MF old mode 100755 new mode 100644 index 76109425bd0..0d26160e819 --- a/java/com.sap.sailing.expeditionconnector.test/META-INF/MANIFEST.MF +++ b/java/com.sap.sailing.expeditionconnector.test/META-INF/MANIFEST.MF @@ -1,13 +1,13 @@ -Manifest-Version: 1.0 -Bundle-ManifestVersion: 2 -Bundle-Name: Expedition Connector Test Bundle -Bundle-SymbolicName: com.sap.sailing.expeditionconnector.test -Bundle-Version: 1.0.0.qualifier -Bundle-Vendor: SAP -Bundle-RequiredExecutionEnvironment: JavaSE-1.7 -Fragment-Host: com.sap.sailing.expeditionconnector -Require-Bundle: com.sap.sailing.server, - com.sap.sailing.domain.test, - com.sap.sailing.udpconnector, - org.junit4;bundle-version="4.8.2", - com.sap.sse.common +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: Expedition Connector Test Bundle +Bundle-SymbolicName: com.sap.sailing.expeditionconnector.test +Bundle-Version: 1.0.0.qualifier +Bundle-Vendor: SAP +Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Fragment-Host: com.sap.sailing.expeditionconnector +Require-Bundle: com.sap.sailing.server, + com.sap.sailing.domain.test, + com.sap.sailing.udpconnector, + org.junit4;bundle-version="4.8.2", + com.sap.sse.common diff --git a/java/com.sap.sailing.expeditionconnector/.classpath b/java/com.sap.sailing.expeditionconnector/.classpath old mode 100755 new mode 100644 index c8351b0a6bd..4f83b2397ec --- a/java/com.sap.sailing.expeditionconnector/.classpath +++ b/java/com.sap.sailing.expeditionconnector/.classpath @@ -1,7 +1,7 @@ - - - - - - - + + + + + + + diff --git a/java/com.sap.sailing.expeditionconnector/.settings/org.eclipse.jdt.core.prefs b/java/com.sap.sailing.expeditionconnector/.settings/org.eclipse.jdt.core.prefs old mode 100755 new mode 100644 index 4f9c31b475e..a698e59674f --- a/java/com.sap.sailing.expeditionconnector/.settings/org.eclipse.jdt.core.prefs +++ b/java/com.sap.sailing.expeditionconnector/.settings/org.eclipse.jdt.core.prefs @@ -1,8 +1,12 @@ -#Thu Jan 19 09:53:49 CET 2012 -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 -org.eclipse.jdt.core.compiler.compliance=1.7 -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.7 +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/java/com.sap.sailing.expeditionconnector/FromHttpToUdpMirror from test to 2010.launch b/java/com.sap.sailing.expeditionconnector/FromHttpToUdpMirror from test to 2010.launch old mode 100755 new mode 100644 index 8d2b12d90a1..812b9e75c1a --- a/java/com.sap.sailing.expeditionconnector/FromHttpToUdpMirror from test to 2010.launch +++ b/java/com.sap.sailing.expeditionconnector/FromHttpToUdpMirror from test to 2010.launch @@ -1,12 +1,12 @@ - - - - - - - - - - - - + + + + + + + + + + + + diff --git a/java/com.sap.sailing.expeditionconnector/META-INF/MANIFEST.MF b/java/com.sap.sailing.expeditionconnector/META-INF/MANIFEST.MF old mode 100755 new mode 100644 index c7b71d71f64..4f8116cfbe8 --- a/java/com.sap.sailing.expeditionconnector/META-INF/MANIFEST.MF +++ b/java/com.sap.sailing.expeditionconnector/META-INF/MANIFEST.MF @@ -1,17 +1,17 @@ -Manifest-Version: 1.0 -Bundle-ManifestVersion: 2 -Bundle-Name: Expedition Connector -Bundle-SymbolicName: com.sap.sailing.expeditionconnector -Bundle-Version: 1.0.0.qualifier -Bundle-Vendor: SAP -Bundle-RequiredExecutionEnvironment: JavaSE-1.7 -Export-Package: com.sap.sailing.expeditionconnector, - com.sap.sailing.expeditionconnector.impl;x-friends:="com.sap.sailing.server.test" -Require-Bundle: com.sap.sailing.domain, - com.sap.sailing.declination, - com.sap.sailing.udpconnector, - com.sap.sailing.domain.common, - com.sap.sse.common -Bundle-ActivationPolicy: lazy -Import-Package: org.osgi.framework -Bundle-Activator: com.sap.sailing.expeditionconnector.impl.Activator +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: Expedition Connector +Bundle-SymbolicName: com.sap.sailing.expeditionconnector +Bundle-Version: 1.0.0.qualifier +Bundle-Vendor: SAP +Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Export-Package: com.sap.sailing.expeditionconnector, + com.sap.sailing.expeditionconnector.impl;x-friends:="com.sap.sailing.server.test" +Require-Bundle: com.sap.sailing.domain, + com.sap.sailing.declination, + com.sap.sailing.udpconnector, + com.sap.sailing.domain.common, + com.sap.sse.common +Bundle-ActivationPolicy: lazy +Import-Package: org.osgi.framework +Bundle-Activator: com.sap.sailing.expeditionconnector.impl.Activator diff --git a/java/com.sap.sailing.feature.p2build/raceanalysis.product b/java/com.sap.sailing.feature.p2build/raceanalysis.product index 11d6bab166c..d8b0f103de1 100755 --- a/java/com.sap.sailing.feature.p2build/raceanalysis.product +++ b/java/com.sap.sailing.feature.p2build/raceanalysis.product @@ -7,7 +7,8 @@ - -os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl} -consoleLog -console -clean + -os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl} -consoleLog -console -clean + @@ -56,6 +57,8 @@ + + diff --git a/java/com.sap.sailing.feature.runtime/feature.xml b/java/com.sap.sailing.feature.runtime/feature.xml index cb90eb951a6..0981bcfdb5f 100644 --- a/java/com.sap.sailing.feature.runtime/feature.xml +++ b/java/com.sap.sailing.feature.runtime/feature.xml @@ -18,12 +18,12 @@ - - - - - - + + + + + + @@ -43,7 +43,7 @@ id="org.eclipse.jetty.osgi.boot" download-size="0" install-size="0" - version="9.0.4.v20130625" + version="9.2.2.v20140723" unpack="false"/> - - + + - + @@ -159,6 +159,27 @@ Computes leaderboard information for sailing races and offers RESTful APIs to al version="0.0.0" unpack="false"/> + + + + + + - - - - - - - + + + + + + + + diff --git a/java/com.sap.sailing.freg.resultimport.test/.settings/org.eclipse.jdt.core.prefs b/java/com.sap.sailing.freg.resultimport.test/.settings/org.eclipse.jdt.core.prefs old mode 100755 new mode 100644 index 11f6e462df7..a698e59674f --- a/java/com.sap.sailing.freg.resultimport.test/.settings/org.eclipse.jdt.core.prefs +++ b/java/com.sap.sailing.freg.resultimport.test/.settings/org.eclipse.jdt.core.prefs @@ -1,7 +1,12 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 -org.eclipse.jdt.core.compiler.compliance=1.7 -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.7 +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/java/com.sap.sailing.freg.resultimport.test/META-INF/MANIFEST.MF b/java/com.sap.sailing.freg.resultimport.test/META-INF/MANIFEST.MF old mode 100755 new mode 100644 index d1d4c28a786..8a815e6186d --- a/java/com.sap.sailing.freg.resultimport.test/META-INF/MANIFEST.MF +++ b/java/com.sap.sailing.freg.resultimport.test/META-INF/MANIFEST.MF @@ -1,12 +1,12 @@ -Manifest-Version: 1.0 -Bundle-ManifestVersion: 2 -Bundle-Name: Test -Bundle-SymbolicName: com.sap.sailing.freg.resultimport.test -Bundle-Version: 1.0.0.qualifier -Bundle-Vendor: SAP -Bundle-RequiredExecutionEnvironment: JavaSE-1.7 -Fragment-Host: com.sap.sailing.freg.resultimport -Import-Package: org.osgi.framework;version="1.3.0" -Bundle-ActivationPolicy: lazy -Require-Bundle: org.junit4;bundle-version="4.8.2", - com.sap.sse.common +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: Test +Bundle-SymbolicName: com.sap.sailing.freg.resultimport.test +Bundle-Version: 1.0.0.qualifier +Bundle-Vendor: SAP +Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Fragment-Host: com.sap.sailing.freg.resultimport +Import-Package: org.osgi.framework;version="1.3.0" +Bundle-ActivationPolicy: lazy +Require-Bundle: org.junit4;bundle-version="4.8.2", + com.sap.sse.common diff --git a/java/com.sap.sailing.freg.resultimport/.classpath b/java/com.sap.sailing.freg.resultimport/.classpath old mode 100755 new mode 100644 index b1dabee3829..eca7bdba8f0 --- a/java/com.sap.sailing.freg.resultimport/.classpath +++ b/java/com.sap.sailing.freg.resultimport/.classpath @@ -1,7 +1,7 @@ - - - - - - - + + + + + + + diff --git a/java/com.sap.sailing.freg.resultimport/.settings/org.eclipse.jdt.core.prefs b/java/com.sap.sailing.freg.resultimport/.settings/org.eclipse.jdt.core.prefs old mode 100755 new mode 100644 index 11f6e462df7..a698e59674f --- a/java/com.sap.sailing.freg.resultimport/.settings/org.eclipse.jdt.core.prefs +++ b/java/com.sap.sailing.freg.resultimport/.settings/org.eclipse.jdt.core.prefs @@ -1,7 +1,12 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 -org.eclipse.jdt.core.compiler.compliance=1.7 -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.7 +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/java/com.sap.sailing.freg.resultimport/META-INF/MANIFEST.MF b/java/com.sap.sailing.freg.resultimport/META-INF/MANIFEST.MF old mode 100755 new mode 100644 index d4c04cfe69d..dda5c3a9d75 --- a/java/com.sap.sailing.freg.resultimport/META-INF/MANIFEST.MF +++ b/java/com.sap.sailing.freg.resultimport/META-INF/MANIFEST.MF @@ -5,7 +5,7 @@ Bundle-SymbolicName: com.sap.sailing.freg.resultimport Bundle-Version: 1.0.0.qualifier Bundle-Activator: com.sap.sailing.freg.resultimport.impl.Activator Bundle-Vendor: SAP -Bundle-RequiredExecutionEnvironment: JavaSE-1.7 +Bundle-RequiredExecutionEnvironment: JavaSE-1.8 Import-Package: com.sap.sailing.resultimport, com.sap.sailing.resultimport.impl, org.osgi.framework;version="1.3.0", diff --git a/java/com.sap.sailing.geocoding.test/.classpath b/java/com.sap.sailing.geocoding.test/.classpath index c8351b0a6bd..4f83b2397ec 100644 --- a/java/com.sap.sailing.geocoding.test/.classpath +++ b/java/com.sap.sailing.geocoding.test/.classpath @@ -1,7 +1,7 @@ - - - - - - - + + + + + + + diff --git a/java/com.sap.sailing.geocoding.test/.settings/org.eclipse.jdt.core.prefs b/java/com.sap.sailing.geocoding.test/.settings/org.eclipse.jdt.core.prefs index ab51cfc6624..a698e59674f 100644 --- a/java/com.sap.sailing.geocoding.test/.settings/org.eclipse.jdt.core.prefs +++ b/java/com.sap.sailing.geocoding.test/.settings/org.eclipse.jdt.core.prefs @@ -1,8 +1,12 @@ -#Thu Jan 19 09:55:00 CET 2012 -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 -org.eclipse.jdt.core.compiler.compliance=1.7 -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.7 +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/java/com.sap.sailing.geocoding.test/META-INF/MANIFEST.MF b/java/com.sap.sailing.geocoding.test/META-INF/MANIFEST.MF index 338368e20bd..8821740276b 100644 --- a/java/com.sap.sailing.geocoding.test/META-INF/MANIFEST.MF +++ b/java/com.sap.sailing.geocoding.test/META-INF/MANIFEST.MF @@ -1,10 +1,10 @@ -Manifest-Version: 1.0 -Bundle-ManifestVersion: 2 -Bundle-Name: Test -Bundle-SymbolicName: com.sap.sailing.geocoding.test -Bundle-Version: 1.0.0.qualifier -Bundle-Vendor: SAP -Bundle-RequiredExecutionEnvironment: JavaSE-1.7 -Fragment-Host: com.sap.sailing.geocoding -Require-Bundle: org.junit4;bundle-version="4.8.2" -Import-Package: org.json.simple.parser +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: Test +Bundle-SymbolicName: com.sap.sailing.geocoding.test +Bundle-Version: 1.0.0.qualifier +Bundle-Vendor: SAP +Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Fragment-Host: com.sap.sailing.geocoding +Require-Bundle: org.junit4;bundle-version="4.8.2" +Import-Package: org.json.simple.parser diff --git a/java/com.sap.sailing.geocoding/.classpath b/java/com.sap.sailing.geocoding/.classpath index c8351b0a6bd..4f83b2397ec 100644 --- a/java/com.sap.sailing.geocoding/.classpath +++ b/java/com.sap.sailing.geocoding/.classpath @@ -1,7 +1,7 @@ - - - - - - - + + + + + + + diff --git a/java/com.sap.sailing.geocoding/.settings/org.eclipse.jdt.core.prefs b/java/com.sap.sailing.geocoding/.settings/org.eclipse.jdt.core.prefs index a609b8b0eae..a698e59674f 100644 --- a/java/com.sap.sailing.geocoding/.settings/org.eclipse.jdt.core.prefs +++ b/java/com.sap.sailing.geocoding/.settings/org.eclipse.jdt.core.prefs @@ -1,8 +1,12 @@ -#Thu Jan 19 09:54:42 CET 2012 -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 -org.eclipse.jdt.core.compiler.compliance=1.7 -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.7 +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/java/com.sap.sailing.geocoding/META-INF/MANIFEST.MF b/java/com.sap.sailing.geocoding/META-INF/MANIFEST.MF index 99298bdc409..2db2b6387f2 100644 --- a/java/com.sap.sailing.geocoding/META-INF/MANIFEST.MF +++ b/java/com.sap.sailing.geocoding/META-INF/MANIFEST.MF @@ -1,12 +1,12 @@ -Manifest-Version: 1.0 -Bundle-ManifestVersion: 2 -Bundle-Name: Geocoding -Bundle-SymbolicName: com.sap.sailing.geocoding -Bundle-Version: 1.0.0.qualifier -Bundle-Vendor: SAP -Bundle-RequiredExecutionEnvironment: JavaSE-1.7 -Bundle-ActivationPolicy: lazy -Export-Package: com.sap.sailing.geocoding -Require-Bundle: org.json.simple;bundle-version="1.1.0", - com.sap.sailing.domain.common, - com.sap.sse.common +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: Geocoding +Bundle-SymbolicName: com.sap.sailing.geocoding +Bundle-Version: 1.0.0.qualifier +Bundle-Vendor: SAP +Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Bundle-ActivationPolicy: lazy +Export-Package: com.sap.sailing.geocoding +Require-Bundle: org.json.simple;bundle-version="1.1.0", + com.sap.sailing.domain.common, + com.sap.sse.common diff --git a/java/com.sap.sailing.gwt.ui.test/.classpath b/java/com.sap.sailing.gwt.ui.test/.classpath old mode 100755 new mode 100644 diff --git a/java/com.sap.sailing.gwt.ui.test/GwtTestCases (no proxy).launch b/java/com.sap.sailing.gwt.ui.test/GwtTestCases (no proxy).launch old mode 100755 new mode 100644 index 1f22228f648..0b40ba801c7 --- a/java/com.sap.sailing.gwt.ui.test/GwtTestCases (no proxy).launch +++ b/java/com.sap.sailing.gwt.ui.test/GwtTestCases (no proxy).launch @@ -17,7 +17,7 @@ - + diff --git a/java/com.sap.sailing.gwt.ui.test/GwtTestCases (proxy).launch b/java/com.sap.sailing.gwt.ui.test/GwtTestCases (proxy).launch old mode 100755 new mode 100644 index f277ad15558..89f049af085 --- a/java/com.sap.sailing.gwt.ui.test/GwtTestCases (proxy).launch +++ b/java/com.sap.sailing.gwt.ui.test/GwtTestCases (proxy).launch @@ -17,7 +17,7 @@ - + diff --git a/java/com.sap.sailing.gwt.ui.test/META-INF/MANIFEST.MF b/java/com.sap.sailing.gwt.ui.test/META-INF/MANIFEST.MF old mode 100755 new mode 100644 index 55ec275d144..00264721f31 --- a/java/com.sap.sailing.gwt.ui.test/META-INF/MANIFEST.MF +++ b/java/com.sap.sailing.gwt.ui.test/META-INF/MANIFEST.MF @@ -1,27 +1,27 @@ -Manifest-Version: 1.0 -Bundle-ManifestVersion: 2 -Bundle-Name: Test -Bundle-SymbolicName: com.sap.sailing.gwt.ui.test -Bundle-Version: 1.0.0.qualifier -Bundle-Vendor: SAP -Bundle-RequiredExecutionEnvironment: JavaSE-1.7 -Fragment-Host: com.sap.sailing.gwt.ui -Require-Bundle: com.sap.sailing.server, - com.sap.sailing.expeditionconnector, - org.mockito.mockito-core;bundle-version="1.9.5", - org.objenesis;bundle-version="1.3.0", - org.hamcrest;bundle-version="1.1.0", - com.sap.sailing.domain.igtimiadapter.persistence;bundle-version="1.0.0", - com.sap.sailing.domain.racelogtrackingadapter.testsupport;bundle-version="1.0.0", - com.rabbitmq.client;bundle-version="2.8.4" -Bundle-ClassPath: . -Import-Package: com.sap.sailing.domain.racelogtracking.impl, - javax.jms;version="1.1.0", - javax.servlet;version="2.6.0", - javax.servlet.http;version="2.6.0", - junit.framework;version="4.8.1", - org.json.simple, - org.json.simple.parser, - org.junit;version="4.8.1", - org.osgi.framework, - org.osgi.util.tracker;version="1.5.0" +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: Test +Bundle-SymbolicName: com.sap.sailing.gwt.ui.test +Bundle-Version: 1.0.0.qualifier +Bundle-Vendor: SAP +Bundle-RequiredExecutionEnvironment: JavaSE-1.7 +Fragment-Host: com.sap.sailing.gwt.ui +Require-Bundle: com.sap.sailing.server, + com.sap.sailing.expeditionconnector, + org.mockito.mockito-core;bundle-version="1.9.5", + org.objenesis;bundle-version="1.3.0", + org.hamcrest;bundle-version="1.1.0", + com.sap.sailing.domain.igtimiadapter.persistence;bundle-version="1.0.0", + com.sap.sailing.domain.racelogtrackingadapter.testsupport;bundle-version="1.0.0", + com.rabbitmq.client;bundle-version="2.8.4" +Bundle-ClassPath: . +Import-Package: com.sap.sailing.domain.racelogtracking.impl, + javax.jms;version="1.1.0", + javax.servlet;version="2.6.0", + javax.servlet.http;version="2.6.0", + junit.framework;version="4.8.1", + org.json.simple, + org.json.simple.parser, + org.junit;version="4.8.1", + org.osgi.framework, + org.osgi.util.tracker;version="1.5.0" diff --git a/java/com.sap.sailing.gwt.ui.test/src/com/sap/sailing/gwt/ui/test/MockedTrackedRace.java b/java/com.sap.sailing.gwt.ui.test/src/com/sap/sailing/gwt/ui/test/MockedTrackedRace.java index b3ea250d275..480db2cd066 100755 --- a/java/com.sap.sailing.gwt.ui.test/src/com/sap/sailing/gwt/ui/test/MockedTrackedRace.java +++ b/java/com.sap.sailing.gwt.ui.test/src/com/sap/sailing/gwt/ui/test/MockedTrackedRace.java @@ -3,6 +3,7 @@ package com.sap.sailing.gwt.ui.test; import java.io.Serializable; import java.util.List; import java.util.NavigableSet; +import java.util.Set; import com.sap.sailing.domain.base.BoatClass; import com.sap.sailing.domain.base.Competitor; @@ -611,26 +612,26 @@ public class MockedTrackedRace implements DynamicTrackedRace { } @Override - public Wind getWind(Position p, TimePoint at, Iterable windSourcesToExclude) { + public Wind getWind(Position p, TimePoint at, Set windSourcesToExclude) { // TODO Auto-generated method stub return null; } @Override - public Iterable getWindSources(WindSourceType type) { + public Set getWindSources(WindSourceType type) { // TODO Auto-generated method stub return null; } @Override - public Iterable getWindSources() { + public Set getWindSources() { // TODO Auto-generated method stub return null; } @Override public WindWithConfidence> getWindWithConfidence(Position p, TimePoint at, - Iterable windSourcesToExclude) { + Set windSourcesToExclude) { // TODO Auto-generated method stub return null; } @@ -648,7 +649,7 @@ public class MockedTrackedRace implements DynamicTrackedRace { } @Override - public Iterable getWindSourcesToExclude() { + public Set getWindSourcesToExclude() { // TODO Auto-generated method stub return null; } diff --git a/java/com.sap.sailing.gwt.ui.test/src/com/sap/sailing/gwt/ui/test/PolarSheetGenerationServiceTest.java b/java/com.sap.sailing.gwt.ui.test/src/com/sap/sailing/gwt/ui/test/PolarSheetGenerationServiceTest.java index ba99ba90492..90385ae0fe9 100755 --- a/java/com.sap.sailing.gwt.ui.test/src/com/sap/sailing/gwt/ui/test/PolarSheetGenerationServiceTest.java +++ b/java/com.sap.sailing.gwt.ui.test/src/com/sap/sailing/gwt/ui/test/PolarSheetGenerationServiceTest.java @@ -1,8 +1,10 @@ package com.sap.sailing.gwt.ui.test; import java.util.ArrayList; +import java.util.HashSet; import java.util.List; import java.util.NavigableSet; +import java.util.Set; import java.util.UUID; import java.util.concurrent.ConcurrentSkipListSet; @@ -133,7 +135,7 @@ public class PolarSheetGenerationServiceTest { } @Override - public Wind getWind(Position p, TimePoint at, Iterable windSourcesToExclude) { + public Wind getWind(Position p, TimePoint at, Set windSourcesToExclude) { return getWind(p, at); } @@ -146,7 +148,7 @@ public class PolarSheetGenerationServiceTest { @Override public WindWithConfidence> getWindWithConfidence(Position p, TimePoint at, - Iterable windSourcesToExclude) { + Set windSourcesToExclude) { return getWindWithConfidence(p, at); } @@ -184,8 +186,8 @@ public class PolarSheetGenerationServiceTest { } @Override - public Iterable getWindSources(WindSourceType type) { - List sources = new ArrayList(); + public Set getWindSources(WindSourceType type) { + Set sources = new HashSet(); sources.add(new WindSourceImpl(type)); return sources; } diff --git a/java/com.sap.sailing.gwt.ui/.classpath b/java/com.sap.sailing.gwt.ui/.classpath old mode 100755 new mode 100644 index e09700fd3f7..ce4536dd5e1 --- a/java/com.sap.sailing.gwt.ui/.classpath +++ b/java/com.sap.sailing.gwt.ui/.classpath @@ -1,13 +1,13 @@ - - - - - - - - - - - - - + + + + + + + + + + + + + diff --git a/java/com.sap.sailing.gwt.ui/.gitignore b/java/com.sap.sailing.gwt.ui/.gitignore index fc79b77cf85..3190cb405a4 100755 --- a/java/com.sap.sailing.gwt.ui/.gitignore +++ b/java/com.sap.sailing.gwt.ui/.gitignore @@ -4,3 +4,4 @@ /gwt-unitCache /extras /com.sap.sailing.gwt.* +/com.sap.sse.security.ui.* diff --git a/java/com.sap.sailing.gwt.ui/.settings/com.google.gwt.eclipse.core.prefs b/java/com.sap.sailing.gwt.ui/.settings/com.google.gwt.eclipse.core.prefs index d09ee2cf780..9b309b0ce6b 100755 --- a/java/com.sap.sailing.gwt.ui/.settings/com.google.gwt.eclipse.core.prefs +++ b/java/com.sap.sailing.gwt.ui/.settings/com.google.gwt.eclipse.core.prefs @@ -1,4 +1,4 @@ eclipse.preferences.version=1 entryPointModules= filesCopiedToWebInfLib=gwt-servlet.jar -gwtCompileSettings=PGd3dC1jb21waWxlLXNldHRpbmdzPjxsb2ctbGV2ZWw+SU5GTzwvbG9nLWxldmVsPjxvdXRwdXQtc3R5bGU+T0JGVVNDQVRFRDwvb3V0cHV0LXN0eWxlPjxleHRyYS1hcmdzPjwhW0NEQVRBWy13YXIgLiAtbG9jYWxXb3JrZXJzIDMgLXN0cmljdCAtbG9nTGV2ZWwgVFJBQ0VdXT48L2V4dHJhLWFyZ3M+PHZtLWFyZ3M+PCFbQ0RBVEFbLVhteDIwMjRtIC1EZ3d0LnVzZWFyY2hpdmVzPWZhbHNlXV0+PC92bS1hcmdzPjxlbnRyeS1wb2ludC1tb2R1bGU+Y29tLnNhcC5zYWlsaW5nLmd3dC51aS5TaW11bGF0b3I8L2VudHJ5LXBvaW50LW1vZHVsZT48ZW50cnktcG9pbnQtbW9kdWxlPmNvbS5zYXAuc2FpbGluZy5nd3QudWkuTGVhZGVyYm9hcmQ8L2VudHJ5LXBvaW50LW1vZHVsZT48ZW50cnktcG9pbnQtbW9kdWxlPmNvbS5zYXAuc2FpbGluZy5nd3QudWkuUG9sYXJTaGVldHM8L2VudHJ5LXBvaW50LW1vZHVsZT48ZW50cnktcG9pbnQtbW9kdWxlPmNvbS5zYXAuc2FpbGluZy5nd3QudWkuVmlkZW9Qb3B1cDwvZW50cnktcG9pbnQtbW9kdWxlPjxlbnRyeS1wb2ludC1tb2R1bGU+Y29tLnNhcC5zYWlsaW5nLmd3dC51aS5SZWdhdHRhT3ZlcnZpZXc8L2VudHJ5LXBvaW50LW1vZHVsZT48ZW50cnktcG9pbnQtbW9kdWxlPmNvbS5zYXAuc2FpbGluZy5nd3QudWkuU3BlY3RhdG9yPC9lbnRyeS1wb2ludC1tb2R1bGU+PGVudHJ5LXBvaW50LW1vZHVsZT5jb20uc2FwLnNhaWxpbmcuZ3d0LnVpLlR2VmlldzwvZW50cnktcG9pbnQtbW9kdWxlPjxlbnRyeS1wb2ludC1tb2R1bGU+Y29tLnNhcC5zYWlsaW5nLmd3dC51aS5Vc2VyTWFuYWdlbWVudDwvZW50cnktcG9pbnQtbW9kdWxlPjxlbnRyeS1wb2ludC1tb2R1bGU+Y29tLnNhcC5zYWlsaW5nLmd3dC51aS5TZWFyY2g8L2VudHJ5LXBvaW50LW1vZHVsZT48ZW50cnktcG9pbnQtbW9kdWxlPmNvbS5zYXAuc2FpbGluZy5nd3QudWkuQWRtaW5Db25zb2xlPC9lbnRyeS1wb2ludC1tb2R1bGU+PGVudHJ5LXBvaW50LW1vZHVsZT5jb20uc2FwLnNhaWxpbmcuZ3d0LnVpLkxlYWRlcmJvYXJkRWRpdGluZzwvZW50cnktcG9pbnQtbW9kdWxlPjxlbnRyeS1wb2ludC1tb2R1bGU+Y29tLnNhcC5zYWlsaW5nLmd3dC51aS5Zb3V0dWJlUG9wdXA8L2VudHJ5LXBvaW50LW1vZHVsZT48ZW50cnktcG9pbnQtbW9kdWxlPmNvbS5zYXAuc2FpbGluZy5nd3QudWkuRGF0YU1pbmluZzwvZW50cnktcG9pbnQtbW9kdWxlPjxlbnRyeS1wb2ludC1tb2R1bGU+Y29tLnNhcC5zYWlsaW5nLmd3dC5Ib21lPC9lbnRyeS1wb2ludC1tb2R1bGU+PGVudHJ5LXBvaW50LW1vZHVsZT5jb20uc2FwLnNhaWxpbmcuZ3d0LnVpLlJhY2VCb2FyZDwvZW50cnktcG9pbnQtbW9kdWxlPjwvZ3d0LWNvbXBpbGUtc2V0dGluZ3M+ +gwtCompileSettings=PGd3dC1jb21waWxlLXNldHRpbmdzPjxsb2ctbGV2ZWw+SU5GTzwvbG9nLWxldmVsPjxvdXRwdXQtc3R5bGU+T0JGVVNDQVRFRDwvb3V0cHV0LXN0eWxlPjxleHRyYS1hcmdzPjwhW0NEQVRBWy13YXIgLiAtbG9jYWxXb3JrZXJzIDMgLXN0cmljdCAtbG9nTGV2ZWwgVFJBQ0VdXT48L2V4dHJhLWFyZ3M+PHZtLWFyZ3M+PCFbQ0RBVEFbLVhteDIwMjRtIC1EZ3d0LnVzZWFyY2hpdmVzPWZhbHNlXV0+PC92bS1hcmdzPjxlbnRyeS1wb2ludC1tb2R1bGU+Y29tLnNhcC5zYWlsaW5nLmd3dC51aS5TaW11bGF0b3I8L2VudHJ5LXBvaW50LW1vZHVsZT48ZW50cnktcG9pbnQtbW9kdWxlPmNvbS5zYXAuc2FpbGluZy5nd3QudWkuTGVhZGVyYm9hcmQ8L2VudHJ5LXBvaW50LW1vZHVsZT48ZW50cnktcG9pbnQtbW9kdWxlPmNvbS5zYXAuc2FpbGluZy5nd3QudWkuUG9sYXJTaGVldHM8L2VudHJ5LXBvaW50LW1vZHVsZT48ZW50cnktcG9pbnQtbW9kdWxlPmNvbS5zYXAuc2FpbGluZy5nd3QudWkuVmlkZW9Qb3B1cDwvZW50cnktcG9pbnQtbW9kdWxlPjxlbnRyeS1wb2ludC1tb2R1bGU+Y29tLnNhcC5zYWlsaW5nLmd3dC51aS5SZWdhdHRhT3ZlcnZpZXc8L2VudHJ5LXBvaW50LW1vZHVsZT48ZW50cnktcG9pbnQtbW9kdWxlPmNvbS5zYXAuc2FpbGluZy5nd3QudWkuU3BlY3RhdG9yPC9lbnRyeS1wb2ludC1tb2R1bGU+PGVudHJ5LXBvaW50LW1vZHVsZT5jb20uc2FwLnNhaWxpbmcuZ3d0LnVpLlR2VmlldzwvZW50cnktcG9pbnQtbW9kdWxlPjxlbnRyeS1wb2ludC1tb2R1bGU+Y29tLnNhcC5zYWlsaW5nLmd3dC51aS5Vc2VyTWFuYWdlbWVudDwvZW50cnktcG9pbnQtbW9kdWxlPjxlbnRyeS1wb2ludC1tb2R1bGU+Y29tLnNhcC5zYWlsaW5nLmd3dC51aS5TZWFyY2g8L2VudHJ5LXBvaW50LW1vZHVsZT48ZW50cnktcG9pbnQtbW9kdWxlPmNvbS5zYXAuc2FpbGluZy5nd3QudWkuQWRtaW5Db25zb2xlPC9lbnRyeS1wb2ludC1tb2R1bGU+PGVudHJ5LXBvaW50LW1vZHVsZT5jb20uc2FwLnNhaWxpbmcuZ3d0LnVpLkxlYWRlcmJvYXJkRWRpdGluZzwvZW50cnktcG9pbnQtbW9kdWxlPjxlbnRyeS1wb2ludC1tb2R1bGU+Y29tLnNhcC5zYWlsaW5nLmd3dC51aS5Zb3V0dWJlUG9wdXA8L2VudHJ5LXBvaW50LW1vZHVsZT48ZW50cnktcG9pbnQtbW9kdWxlPmNvbS5zYXAuc2FpbGluZy5nd3QudWkuRGF0YU1pbmluZzwvZW50cnktcG9pbnQtbW9kdWxlPjxlbnRyeS1wb2ludC1tb2R1bGU+Y29tLnNhcC5zYWlsaW5nLmd3dC5Ib21lPC9lbnRyeS1wb2ludC1tb2R1bGU+PGVudHJ5LXBvaW50LW1vZHVsZT5jb20uc2FwLnNhaWxpbmcuZ3d0LnVpLlJhY2VCb2FyZDwvZW50cnktcG9pbnQtbW9kdWxlPjxlbnRyeS1wb2ludC1tb2R1bGU+Y29tLnNhcC5zYWlsaW5nLmd3dC5BdXRvUGxheTwvZW50cnktcG9pbnQtbW9kdWxlPjwvZ3d0LWNvbXBpbGUtc2V0dGluZ3M+ diff --git a/java/com.sap.sailing.gwt.ui/.settings/org.eclipse.core.resources.prefs b/java/com.sap.sailing.gwt.ui/.settings/org.eclipse.core.resources.prefs index 8aa4ae5d789..548f1163d5a 100755 --- a/java/com.sap.sailing.gwt.ui/.settings/org.eclipse.core.resources.prefs +++ b/java/com.sap.sailing.gwt.ui/.settings/org.eclipse.core.resources.prefs @@ -1,4 +1,3 @@ eclipse.preferences.version=1 -encoding//src/main/java/com/sap/sailing/gwt/home/client/i18n/TextMessages_de.properties=UTF-8 encoding//src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_de.properties=UTF-8 encoding//src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_ru.properties=UTF-8 diff --git a/java/com.sap.sailing.gwt.ui/.settings/org.eclipse.jdt.core.prefs b/java/com.sap.sailing.gwt.ui/.settings/org.eclipse.jdt.core.prefs old mode 100755 new mode 100644 index 11f6e462df7..d17b6724d17 --- a/java/com.sap.sailing.gwt.ui/.settings/org.eclipse.jdt.core.prefs +++ b/java/com.sap.sailing.gwt.ui/.settings/org.eclipse.jdt.core.prefs @@ -1,7 +1,12 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 -org.eclipse.jdt.core.compiler.compliance=1.7 -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.7 +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.7 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.7 diff --git a/java/com.sap.sailing.gwt.ui/AutoPlay.css b/java/com.sap.sailing.gwt.ui/AutoPlay.css new file mode 100644 index 00000000000..713dc1aef54 --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/AutoPlay.css @@ -0,0 +1,207 @@ +@import url(fontface.css); + +/** Add css rules here for your application. */ + +* { + font-family: Arial; + font-size: 12px; +} + +/** Example rules used by the template application (remove for your app) */ +h1 { + font-size: 2em; + font-weight: bold; + color: #777777; + margin: 40px 0px 70px; + text-align: center; +} + +fieldset { + padding: 6px 6px; + margin: 8px 3px 10px 2px; + border: 1px solid black; +} + +fieldset legend { + padding: 0px 4px; + font-weight: bold; +} + +.chartLegend { + float: left; + margin-right: 4px; +} + +.chartTitle { + font: 20px bold; +} + +.sendButton { + display: block; + font-size: 16pt; +} + +/** Most GWT widgets already have a style name defined */ + +.dialogVPanel { + margin: 5px; +} + +.serverResponseLabelError { + color: red; +} + +/** Set ids using widget.getElement().setId("idOfElement") */ +#closeButton { + margin: 15px 6px 6px; +} + +.gwt-TabPanelBottom { + height: 100%; +} + +.global-alert-message { + font-weight: bold; + color: red; + font-size: 120%; + text-align: right; + padding: 0px 50px 0px 0px; + clear: both; +} + +.errorLabel { + color: #FF0000; +} + +.linkNoBorder { + border: none; +} + +.refreshLink { + border: none; + position: relative; + vertical-align: middle; +} + +.valignMiddle { + position: relative; + vertical-align: middle; +} + +.boldLabel { + font-size: 14px; + font-weight: bold; +} + +.boldAnchor { + font-weight: bold; + vertical-align: middle; +} + +.gwt-ListBox { + font-size: 12px; +} + +.legColumnHeader { + background-color: #FFFFFF; + padding: 0 0 0 0; +} + +.dialogMessageLabel { + font-weight: bold; +} + +.gwt-DialogBox { + z-index: 20; +} + +.gwt-DialogBox .Caption { + background: none repeat scroll 0 0 #e5e5e5; +} + +.gwt-DialogBox .dialogTopLeft { + background: none repeat scroll 0 0 #e5e5e5; +} + +.gwt-DialogBox .dialogTopRight { + background: none repeat scroll 0 0 #e5e5e5; +} + +.gwt-DialogBox .dialogMiddleLeft { + background: none repeat scroll 0 0 #e5e5e5; +} + +.gwt-DialogBox .dialogMiddleRight { + background: none repeat scroll 0 0 #e5e5e5; +} + +.gwt-DialogBox .dialogBottomCenter { + background: none repeat scroll 0 0 #e5e5e5; +} + +.gwt-DialogBox .dialogBottomLeft { + background: none repeat scroll 0 0 #e5e5e5; +} + +.gwt-DialogBox .dialogBottomRight { + background: none repeat scroll 0 0 #e5e5e5; +} + +.gwt-Button { + margin: 3px 2px 3px 5px; +} + +.gwt-Button:hover { + color: #fff; +} + +.gwt-Button[disabled] { + color: #888888; + cursor: default; + background: #f1f1f1 !important; + border: 1px solid #A3A3A3 !important; +} + +.gwt-Button[disabled]:hover { + color: #888888; + cursor: default; + background: #f1f1f1 !important; + border: 1px solid #A3A3A3 !important; +} + +.gwt-TextBox { + font-family: Arial !important; + font-size: 12px !important; +} + +select { + font-family: Arial !important; + font-size: 12px !important; +} + +.leftPaddedPanel { + padding-left: 50px; + padding-right: 50px; +} + +.paddedPanel { + padding: 10px; +} + +.gwt-SuggestBoxPopup { + text-align: left; + cursor: pointer; + cursor: hand; + border: 1px solid #666; + border-top: 0; + background-color: #fff; + z-index: 999; +} + +.gwt-SuggestBoxPopup .item { + border: 1px dotted #aaa; +} + +.gwt-SuggestBoxPopup .item-selected { + background-color: #ffc; +} diff --git a/java/com.sap.sailing.gwt.ui/AutoPlay.html b/java/com.sap.sailing.gwt.ui/AutoPlay.html new file mode 100644 index 00000000000..aa08c7facd4 --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/AutoPlay.html @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + SAP Sailing Analytics AutoPlay + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/java/com.sap.sailing.gwt.ui/META-INF/MANIFEST.MF b/java/com.sap.sailing.gwt.ui/META-INF/MANIFEST.MF old mode 100755 new mode 100644 index 8d8009877b0..b8d649c1bab --- a/java/com.sap.sailing.gwt.ui/META-INF/MANIFEST.MF +++ b/java/com.sap.sailing.gwt.ui/META-INF/MANIFEST.MF @@ -34,13 +34,15 @@ Require-Bundle: com.sap.sailing.domain, com.sap.sailing.manage2sail;bundle-version="1.0.0", com.sap.sse.common;bundle-version="1.0.0", com.sap.sse.datamining.shared;bundle-version="1.0.0", - com.sap.sse.datamining;bundle-version="1.0.0" + com.sap.sse.datamining;bundle-version="1.0.0", + com.sap.sse.security;bundle-version="1.0.0", + com.sap.sse.security.ui;bundle-version="1.0.0" Bundle-Activator: com.sap.sailing.gwt.ui.server.Activator Bundle-ActivationPolicy: lazy Import-Package: javax.jms;version="1.1.0", - javax.servlet;version="2.6.0", - javax.servlet.descriptor;version="2.6.0", - javax.servlet.http;version="2.6.0", + javax.servlet;version="3.1.0", + javax.servlet.descriptor;version="3.1.0", + javax.servlet.http;version="3.1.0", org.apache.http.client;version="4.2.5", org.json.simple, org.json.simple.parser, diff --git a/java/com.sap.sailing.gwt.ui/Profile SailingGWT.launch b/java/com.sap.sailing.gwt.ui/Profile SailingGWT.launch old mode 100755 new mode 100644 diff --git a/java/com.sap.sailing.gwt.ui/Profile SailingServer.launch b/java/com.sap.sailing.gwt.ui/Profile SailingServer.launch new file mode 100644 index 00000000000..1e5528ab27b --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/Profile SailingServer.launch @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/java/com.sap.sailing.gwt.ui/RaceBoard.css b/java/com.sap.sailing.gwt.ui/RaceBoard.css index 3f833a2cd1c..15d8919b897 100644 --- a/java/com.sap.sailing.gwt.ui/RaceBoard.css +++ b/java/com.sap.sailing.gwt.ui/RaceBoard.css @@ -14,156 +14,165 @@ iframe {display: block; width: 100%; height: 100%; border: none; overflow-y: auto; overflow-x: hidden;} .clear { - clear: both; - font-size: 1px; - height: 0px; - line-height: 0px; - margin: -1px 0 0; - width: 100%; + clear: both; + font-size: 1px; + height: 0px; + line-height: 0px; + margin: -1px 0 0; + width: 100%; } .cover { - left: -1000px; - overflow: hidden; - position: absolute; - top: -1000px; + left: -1000px; + overflow: hidden; + position: absolute; + top: -1000px; } body { - background: white; - font-family: 'OpenSansRegular', Arial, Verdana, sans-serif; - line-height: 1; - font-size: 14px; - font-weight: 400; - padding: 80px 0 160px 0; - margin: 0; - color: #3b3b3b; + background: white; + font-family: 'OpenSansRegular', Arial, Verdana, sans-serif; + line-height: 1; + font-size: 14px; + font-weight: 400; + margin: 0; + color: #3b3b3b; } table td,select,button { - font-family: 'OpenSansLight', Arial, Verdana, sans-serif; - line-height: 1; - font-size: 14px; + font-family: 'OpenSansLight', Arial, Verdana, sans-serif; + line-height: 1; + font-size: 14px; } .contentOuterPanel { - background: #dddcdc; - margin: 0 12px 0 12px; - padding: 12px; + background: #dddcdc; + margin: 0 12px 0 12px; + padding: 12px; } /** Example rules used by the template application (remove for your app) */ h1 { - font-size: 2em; - font-family: 'OpenSansSemiBold', Arial, Verdana, sans-serif; - color: #777777; - margin: 40px 0px 70px; - text-align: center; + font-size: 2em; + font-family: 'OpenSansSemiBold', Arial, Verdana, sans-serif; + color: #777777; + margin: 40px 0px 70px; + text-align: center; } table { - border-collapse: separate; + border-collapse: separate; } .CombinedWindPanel { - -moz-border-radius: 4px; - -webkit-border-radius: 4px; - -o-border-radius: 4px; - -ms-border-radius: 4px; - border-radius: 4px; - background-color: rgba(255, 255, 255, 0.75); - border: 1px solid #C9CACA; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + -o-border-radius: 4px; + -ms-border-radius: 4px; + border-radius: 4px; + background-color: rgba(255, 255, 255, 0.75); + border: 1px solid #C9CACA; +} + +.CombinedWindPanelParentDiv { + padding-top: 34px; + padding-left: 10px; +} + +.MapSimulationLegendParentDiv { + padding-top: 10px; + padding-left: 10px; } .RaceMap-HeaderPanel { - height: 60px; - width: 100%; - background-color: #333; - opacity: .5; + height: 60px; + width: 100%; + background-color: #333; + opacity: .5; } .leaderboardLabel { - border-bottom: 2px solid #007dc0; - padding: 0 0 6px 0; - font-family: 'OpenSansSemiBold', Arial, Verdana, sans-serif; + border-bottom: 2px solid #007dc0; + padding: 0 0 6px 0; + font-family: 'OpenSansSemiBold', Arial, Verdana, sans-serif; } .refreshAndSettings { - background: #f2f2f2; - border-bottom: 2px solid #fff; - border-top: 2px solid #fff; - height: 30px; + background: #f2f2f2; + border-bottom: 2px solid #fff; + border-top: 2px solid #fff; + height: 30px; } .refreshAndSettings table td { - padding: 0 10px 0 0; + padding: 0 10px 0 0; } .refreshAndSettings table table td { - padding: 0 0 0 0; + padding: 0 0 0 0; } .race-name { - line-height: 1.0; + line-height: 1.0; } .openColumn { - position: relative; + position: relative; vertical-align: middle; } img.openColumn { - display: block; - margin: 3px auto 3px auto !important; + display: block; + margin: 3px auto 3px auto !important; } .breadcrumbPanel { - height: 30px; - margin: 0 12px 13px 12px; + height: 30px; + margin: 0 12px 13px 12px; } .mainPanel { - width: 100%; + width: 100%; } .raceBoardNavigation { - float: left; - margin: 9px 0 0 12px; - font-family: 'OpenSansLight', Arial, Verdana, sans-serif; + float: left; + margin: 9px 0 0 12px; + font-family: 'OpenSansLight', Arial, Verdana, sans-serif; } .raceBoardControls { - float: right; - margin: 9px 0 0 12px; - font-family: 'OpenSansLight', Arial, Verdana, sans-serif; + float: right; + margin: 9px 0 0 12px; + font-family: 'OpenSansLight', Arial, Verdana, sans-serif; } .raceBoardNavigation-navigationitem { - color: #dddcdc; - text-transform: uppercase; - font-weight: 500; - margin: 0 12px 0 0; - padding: 0 0 5px 0; + color: #dddcdc; + text-transform: uppercase; + font-weight: 500; + margin: 0 12px 0 0; + padding: 0 0 5px 0; } .raceBoardNavigation-navigationitem:hover { - border-bottom: 4px solid #f0ab00; - color: #dddcdc; - text-decoration: none; + border-bottom: 4px solid #f0ab00; + color: #dddcdc; + text-decoration: none; } .raceBoardNavigation-navigationitem:active { - border-bottom: 4px solid #f0ab00; - color: #dddcdc; - text-decoration: none; + border-bottom: 4px solid #f0ab00; + color: #dddcdc; + text-decoration: none; } .competitorInfo-Canvas { - pointer-events: none; + pointer-events: none; } .gwt-DialogBox { - z-index: 20; + z-index: 20; } .abstractChartPanel-importantMessageOfChart { @@ -174,55 +183,55 @@ img.openColumn { padding: 49px 0 0 80px; width: 300px; color: #7c7c7c; - background: url(images/important-message.png) left center no-repeat; + background: url(images/important-message.png) left center no-repeat; } .breadcrumbPanel-NextArrow { - display: none; + display: none; } .errorLabel { - color: #FF0000; + color: #FF0000; } .raceBoardNavigation-settingsButtonPanel { - float: right; - margin: 9px 12px 0 0; + float: right; + margin: 9px 12px 0 0; } .raceBoardNavigation-settingsButton { - background: url(images/settings_white.png), url(images/btn-cta-orangeleft.png); - background-position: center, center 0; - background-repeat: no-repeat, repeat-x; - width: 27px; - height: 23px; + background: url(images/settings_white.png), url(images/btn-cta-orangeleft.png); + background-position: center, center 0; + background-repeat: no-repeat, repeat-x; + width: 27px; + height: 23px; margin: 0 12px 0 1px; - -webkit-border-radius: 0px 3px 3px 0px; - -moz-border-radius: 0px 3px 3px 0px; - -o-border-radius: 0px 3px 3px 0px; - -ms-border-radius: 0px 3px 3px 0px; - border-radius: 0px 3px 3px 0px; + -webkit-border-radius: 0px 3px 3px 0px; + -moz-border-radius: 0px 3px 3px 0px; + -o-border-radius: 0px 3px 3px 0px; + -ms-border-radius: 0px 3px 3px 0px; + border-radius: 0px 3px 3px 0px; } .raceBoardNavigation-settingsButton:hover { - background-image: url(images/settings_white.png), url(images/btn-cta-orangeleft.png); - background-position: center, center -30px; - background-repeat: no-repeat, repeat-x; + background-image: url(images/settings_white.png), url(images/btn-cta-orangeleft.png); + background-position: center, center -30px; + background-repeat: no-repeat, repeat-x; cursor: pointer; } .raceBoardNavigation-filterButton:hover { - background-image: url(images/filter_white.png), url(images/btn-cta-orangeleft.png); - background-position: center, center -30px; - background-repeat: no-repeat, repeat-x; + background-image: url(images/filter_white.png), url(images/btn-cta-orangeleft.png); + background-position: center, center -30px; + background-repeat: no-repeat, repeat-x; cursor: pointer; } .raceBoardNavigation-innerElement { background: url("images/btn-cta-orangeleft.png") repeat-x scroll center 0 transparent; - border-bottom-left-radius: 3px; - border-top-left-radius: 3px; - color: #FFFFFF; + border-bottom-left-radius: 3px; + border-top-left-radius: 3px; + color: #FFFFFF; cursor: pointer; font-family: OpenSansSemiBold,Verdana,Arial,sans-serif; font-size: 14px; @@ -246,8 +255,8 @@ img.openColumn { } .raceBoardNavigation-innerElement:active { - top: 1px; - position: relative; + top: 1px; + position: relative; } .raceBoardNavigation-innerElement:hover { @@ -256,12 +265,12 @@ img.openColumn { } .raceBoardNavigation-innerElement label { - cursor: pointer; + cursor: pointer; } .raceBoardNavigation-standaloneElement { background: url("images/btn-cta-orangeleft.png") repeat-x scroll center 0 transparent; - color: #FFFFFF; + color: #FFFFFF; cursor: pointer; font-family: OpenSansSemiBold,Verdana,Arial,sans-serif; font-size: 14px; @@ -277,7 +286,7 @@ img.openColumn { box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3); text-shadow: 0 -1px 1px rgba(0, 0, 0, 0.25); border-bottom: 1px solid rgba(0, 0, 0, 0.25); - border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; -moz-border-radius: 5px 0 0 5px; -webkit-border-radius: 5px 5px 5px 5px; -o-border-radius: 5px 5px 5px 5px; @@ -285,8 +294,8 @@ img.openColumn { } .raceBoardNavigation-standaloneElement:active { - top: 1px; - position: relative; + top: 1px; + position: relative; } .raceBoardNavigation-standaloneElement:hover { @@ -295,28 +304,28 @@ img.openColumn { } .raceBoardNavigation-standaloneElement label { - cursor: pointer; + cursor: pointer; } .timePanelButton { - float: left; - margin: 0 0 0 5px; + float: left; + margin: 0 0 0 5px; } .timePanelButton-SlowDown { - background-color: red !important; + background-color: red !important; } .timePanelButton-SpeedUp { - background-color: green !important; + background-color: green !important; } .playPauseButton { - padding: 0; - float: left; - width: 32px; - height: 28px; - background: url(images/viewicons/@1x/img/SAP_RV_Play_INACTIVE.png) center no-repeat; + padding: 0; + float: left; + width: 32px; + height: 28px; + background: url(images/viewicons/@1x/img/SAP_RV_Play_INACTIVE.png) center no-repeat; cursor: pointer; border: 1px solid #cecece; border-radius: 4px; @@ -329,9 +338,9 @@ img.openColumn { } .playPauseButtonPause { - background: url(images/viewicons/@2x/img/SAP_RV_Pause_INACTIVE.png) 2px 0 no-repeat; - outline: 0; - background-size: contain; + background: url(images/viewicons/@2x/img/SAP_RV_Pause_INACTIVE.png) 2px 0 no-repeat; + outline: 0; + background-size: contain; } .playPauseButtonPause:hover { @@ -344,8 +353,8 @@ img.openColumn { top: 8px; width: 42px; height: 38px; - font-size: 8px; - white-space: normal; + font-size: 8px; + white-space: normal; -moz-border-radius: 5px; -webkit-border-radius: 5px; -o-border-radius: 5px; @@ -356,31 +365,31 @@ img.openColumn { } .backToLivePlayButton-Inactive { - color: #6dc021; - background-color: white; - font-weight: bold; + color: #6dc021; + background-color: white; + font-weight: bold; } .backToLivePlayButton-Active { - background-color: #6dc021; - color: white; - font-weight: normal; + background-color: #6dc021; + color: white; + font-weight: normal; } .backToLivePlayButton:hover { - border: 2px solid gray; + border: 2px solid gray; } .backToLivePlayButton:focus { - outline: 0 !important; + outline: 0 !important; } .dockLayoutPanel div[style="position: absolute; overflow: hidden; left: 0px; right: 0px; bottom: 0px; height: 90px;"] { - z-index: 10; + z-index: 10; } .browserOptimizedMessage { - padding: 15px 0px; + padding: 15px 0px; } @@ -423,156 +432,156 @@ img.openColumn { } .busyIndicator-Simple { - position: absolute; - top: 0.7em; - right: 7.4em; + position: absolute; + top: 0.7em; + right: 7.4em; } .busyIndicator-Circle { } .raceBoard-TitlePanel { - position: relative; - top: 10px; - z-index: 10; - color: #fff; - margin-left: auto; - margin-right: auto; + position: relative; + top: 10px; + z-index: 10; + color: #fff; + margin-left: auto; + margin-right: auto; } .raceBoard-TitlePanel-RaceNameLabel { - font-size: 32px; - font-weight: bold; - padding: 7px; + font-size: 32px; + font-weight: bold; + padding: 7px; } .raceBoard-Logo { - position: absolute; - top: 6px; - left: 10px; - z-index: 10; - cursor: pointer; + position: absolute; + top: 6px; + left: 10px; + z-index: 10; + cursor: pointer; } .SideBySideComponentViewer-MainPanel { - top: 12px; + top: 12px; } .TimePanel-ShowExtended-Button { - width: 29px; - height: 28px; - float: left; - cursor: pointer; - border-top-left-radius: 5px; - border-top-right-radius: 5px; - border-bottom-left-radius: 5px; - border-bottom-right-radius: 5px; - border: 1px solid #ececec; + width: 29px; + height: 28px; + float: left; + cursor: pointer; + border-top-left-radius: 5px; + border-top-right-radius: 5px; + border-bottom-left-radius: 5px; + border-bottom-right-radius: 5px; + border: 1px solid #ececec; } .TimePanel-ShowExtended-Button-Open { - background: white url(images/arrows_top_black.png) center no-repeat; + background: white url(images/arrows_top_black.png) center no-repeat; } .TimePanel-ShowExtended-Button-Closed { - background: white url(images/arrows_bottom_black.png) center no-repeat; + background: white url(images/arrows_bottom_black.png) center no-repeat; } .TimePanel-ShowExtended-Button:hover { - background-color: #cecece; + background-color: #cecece; } .TimePanel-ShowExtended-Button:focus { - outline: 0 !important; + outline: 0 !important; } .RaceBoard-globalNavigation-Link { - display: inline; - margin-right: 3px; + display: inline; + margin-right: 3px; } .RaceBoard-globalNavigation-Link a { - color: #fff; - cursor: pointer; + color: #fff; + cursor: pointer; } .RaceBoard-globalNavigation-Link+.RaceBoard-globalNavigation-Link:before { - content: ' \00bb\00a0'; + content: ' \00bb\00a0'; } .TimePanel-settingsButtonStyle { - position: absolute; - right: 0px; - z-index: 1; - border: none; + position: absolute; + right: 0px; + z-index: 1; + border: none; } .TimePanel-settingsButtonStyle:focus { - outline: 0 !important; + outline: 0 !important; } .TimePanel-settingsButtonStyle:hover { - border: 1px solid gray; + border: 1px solid gray; } .gwt-SplitLayoutPanel-NorthSouthToggleButton-Closed-multiCompetitorRaceChart { - background-color: white; - background-image: url(images/viewicons/@1x/img/SAP_RV_CompetitorCharts_INACTIVE.png), url(images/arrows_top_black_small.png); - background-repeat: no-repeat, no-repeat; - background-position: 5% 50%, 95% 50% + background-color: white; + background-image: url(images/viewicons/@1x/img/SAP_RV_CompetitorCharts_INACTIVE.png), url(images/arrows_top_black_small.png); + background-repeat: no-repeat, no-repeat; + background-position: 5% 50%, 95% 50% } .gwt-SplitLayoutPanel-NorthSouthToggleButton-Open-multiCompetitorRaceChart { - background-color: white; - background-image: url(images/viewicons/@1x/img/SAP_RV_CompetitorCharts_GHOSTED.png), url(images/arrows_bottom_black_small.png); - background-repeat: no-repeat, no-repeat; - background-position: 5% 50%, 95% 50% + background-color: white; + background-image: url(images/viewicons/@1x/img/SAP_RV_CompetitorCharts_GHOSTED.png), url(images/arrows_bottom_black_small.png); + background-repeat: no-repeat, no-repeat; + background-position: 5% 50%, 95% 50% } .gwt-SplitLayoutPanel-NorthSouthToggleButton-Closed-windChart { - background-color: white; - background-image: url(images/viewicons/@1x/img/SAP_RV_CompetitorCharts_INACTIVE.png), url(images/arrows_top_black_small.png); - background-repeat: no-repeat, no-repeat; - background-position: 5% 50%, 95% 50% + background-color: white; + background-image: url(images/viewicons/@1x/img/SAP_RV_CompetitorCharts_INACTIVE.png), url(images/arrows_top_black_small.png); + background-repeat: no-repeat, no-repeat; + background-position: 5% 50%, 95% 50% } .gwt-SplitLayoutPanel-NorthSouthToggleButton-Open-windChart { - background-color: white; - background-image: url(images/viewicons/@1x/img/SAP_RV_CompetitorCharts_GHOSTED.png), url(images/arrows_bottom_black_small.png); - background-repeat: no-repeat, no-repeat; - background-position: 5% 50%, 95% 50% + background-color: white; + background-image: url(images/viewicons/@1x/img/SAP_RV_CompetitorCharts_GHOSTED.png), url(images/arrows_bottom_black_small.png); + background-repeat: no-repeat, no-repeat; + background-position: 5% 50%, 95% 50% } .gwt-SplitLayoutPanel-EastToggleButton-Open-leaderboard { - background-color: white; - background-image: url(images/viewicons/@1x/img/SAP_RV_Leaderboard_GHOSTED.png), url(images/arrows_top_black_small.png); - background-repeat: no-repeat, no-repeat; - background-position: 4% 50%, 96% 50% + background-color: white; + background-image: url(images/viewicons/@1x/img/SAP_RV_Leaderboard_GHOSTED.png), url(images/arrows_top_black_small.png); + background-repeat: no-repeat, no-repeat; + background-position: 4% 50%, 96% 50% } .gwt-SplitLayoutPanel-EastToggleButton-Closed-leaderboard { - background-color: white; - background-image: url(images/viewicons/@1x/img/SAP_RV_Leaderboard_INACTIVE.png), url(images/arrows_bottom_black_small.png); - background-repeat: no-repeat, no-repeat; - background-position: 4% 50%, 96% 50% + background-color: white; + background-image: url(images/viewicons/@1x/img/SAP_RV_Leaderboard_INACTIVE.png), url(images/arrows_bottom_black_small.png); + background-repeat: no-repeat, no-repeat; + background-position: 4% 50%, 96% 50% } .gwt-SplitLayoutPanel-NorthSouthToggleButton-Closed-media { - background-color: white; - background-image: url(images/viewicons/@1x/img/SAP_RV_AudioVideo_INACTIVE.png); - background-repeat: no-repeat, no-repeat; - background-position: 4% 50%, 96% 50% + background-color: white; + background-image: url(images/viewicons/@1x/img/SAP_RV_AudioVideo_INACTIVE.png); + background-repeat: no-repeat, no-repeat; + background-position: 4% 50%, 96% 50% } - + .gwt-SplitLayoutPanel-NorthSouthToggleButton-Open-media { - background-color: white; - background-image: url(images/viewicons/@1x/img/SAP_RV_AudioVideo_INACTIVE.png); - background-repeat: no-repeat, no-repeat; - background-position: 4% 50%, 96% 50% + background-color: white; + background-image: url(images/viewicons/@1x/img/SAP_RV_AudioVideo_INACTIVE.png); + background-repeat: no-repeat, no-repeat; + background-position: 4% 50%, 96% 50% } .gwt-SplitLayoutPanel-NorthSouthToggleButton-Small-media { - background-position: 50% 50%, 100% 50% !important; + background-position: 50% 50%, 100% 50% !important; margin-left: 0px !important; padding: 2px 20px !important; } @@ -588,26 +597,26 @@ img.openColumn { } .RegattaRaceInformation-Header { - position: relative; + position: relative; left: 140px; top: 11px; } .RegattaRaceInformation-Header .RaceName-Label { - display: inline; + display: inline; color: white; margin-right: 10px; font-size: 36px; } .RegattaRaceInformation-Header .RaceSeriesAndFleet-Label { - display: inline; + display: inline; color: white; font-size: 15px; } .RegattaAndRaceTime-Header { - position: absolute; + position: absolute; right: 10px; top: 13px; text-align: right; @@ -615,10 +624,10 @@ img.openColumn { } .RegattaAndRaceTime-Header .RegattaName-Anchor { - font-size: 15px; - color: white; - text-decoration: none; - padding-left: 25px; + font-size: 15px; + color: white; + text-decoration: none; + padding-left: 25px; background-image: url(images/home.png); background-repeat: no-repeat; background-size: 17px; @@ -626,33 +635,73 @@ img.openColumn { } .RegattaAndRaceTime-Header .RegattaName-Anchor:hover { - text-decoration: underline; + text-decoration: underline; } - + .RegattaAndRaceTime-Header .RaceTime-Label { - font-size: 15px; - margin-top: 5px; + font-size: 15px; + margin-top: 5px; } .VideoPopup-Close-Button { - border: none; + border: none; } .gwt-Button, .gwt-Button:visited, .test, .test:visited { - background-color: #fcbb22; - background-image: none !important; + background-color: #fcbb22; + background-image: none !important; -moz-box-shadow: none; - -webkit-box-shadow: none; - -o-box-shadow: none; - -ms-box-shadow: none; - box-shadow: none; - text-shadow: none; + -webkit-box-shadow: none; + -o-box-shadow: none; + -ms-box-shadow: none; + box-shadow: none; + text-shadow: none; } .gwt-Button:hover { - background-color: #fcbb22 !important; + background-color: #fcbb22 !important; } -.test:hover { - +.Media-Select-Button { + font-size: 15px; + font-size: 1rem; + display: inline-block; + font-weight: 400; + color: #111; + border: none; + padding: 0.5em 0.3em 0.5em 0.8em; + background-color: #fff; + -webkit-transition: background-color 0.2s; + -moz-transition: background-color 0.2s; + -o-transition: background-color 0.2s; + -ms-transition: background-color 0.2s; + transition: background-color 0.2s; + width: 100%; + max-width: 25em; + text-align: left; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} +.Media-Select-Button:hover, +.Media-Select-Button:focus { + background-color: #f0ab00; +} + +.Media-Select-Button-playing { + color: #999; +} +.Media-Select-Button-playing:hover, +.Media-Select-Button-playing:focus { + color: #fff; + background-color: #ccc; +} + + +.Media-Select-Popup .dialogMiddleCenterInner { + padding: 0; +} + +.Media-Select-Popup .Caption { + padding: 4px 10px; } \ No newline at end of file diff --git a/java/com.sap.sailing.gwt.ui/SailingGWT Remote Profiling (Run-Mode only).launch b/java/com.sap.sailing.gwt.ui/SailingGWT Remote Profiling (Run-Mode only).launch old mode 100755 new mode 100644 index 0b8d83049f1..4f72490703a --- a/java/com.sap.sailing.gwt.ui/SailingGWT Remote Profiling (Run-Mode only).launch +++ b/java/com.sap.sailing.gwt.ui/SailingGWT Remote Profiling (Run-Mode only).launch @@ -1,60 +1,60 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/java/com.sap.sailing.gwt.ui/SailingGWT.launch b/java/com.sap.sailing.gwt.ui/SailingGWT.launch index 5d943eeb607..756e4520475 100755 --- a/java/com.sap.sailing.gwt.ui/SailingGWT.launch +++ b/java/com.sap.sailing.gwt.ui/SailingGWT.launch @@ -1,59 +1,56 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/java/com.sap.sailing.gwt.ui/VideoPopup.html b/java/com.sap.sailing.gwt.ui/VideoPopup.html index 064f398c7be..5476bebe125 100644 --- a/java/com.sap.sailing.gwt.ui/VideoPopup.html +++ b/java/com.sap.sailing.gwt.ui/VideoPopup.html @@ -3,6 +3,7 @@ SAP Sailing Video + - --> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/mobile/com.sap.sailing.racecommittee.app/res/values/themes.xml b/mobile/com.sap.sailing.android.shared/res/values/themes.xml similarity index 100% rename from mobile/com.sap.sailing.racecommittee.app/res/values/themes.xml rename to mobile/com.sap.sailing.android.shared/res/values/themes.xml diff --git a/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/application/LoggableApplication.java b/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/application/LoggableApplication.java new file mode 100644 index 00000000000..714858bbf94 --- /dev/null +++ b/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/application/LoggableApplication.java @@ -0,0 +1,49 @@ +package com.sap.sailing.android.shared.application; + +import java.lang.ref.WeakReference; + +import android.app.Application; +import android.content.Context; +import android.content.Intent; + +import com.sap.sailing.android.shared.R; +import com.sap.sailing.android.shared.logging.ExLog; +import com.sap.sailing.android.shared.logging.LifecycleLogger; +import com.sap.sailing.android.shared.logging.LoggingExceptionHandler; +import com.sap.sailing.android.shared.util.PrefUtils; + +/** + *

Registers an additional exception handler for uncaught exception to have some crash logging.

+ *

Offers a static {@link StringContext} to handle i18n in ugly cases.

+ *

Sets the default preference values (if not set)

+ */ +public class LoggableApplication extends Application { + + private final static String TAG = LoggableApplication.class.getName(); + + private static StringContext stringContext; + + public static StringContext getStringContext() { + return stringContext; + } + + @Override + public void onCreate() { + super.onCreate(); + ExLog.i(this, TAG, "Application is starting."); + + Thread.setDefaultUncaughtExceptionHandler(new LoggingExceptionHandler(Thread + .getDefaultUncaughtExceptionHandler(), this)); + + LifecycleLogger.enableLifecycleLogging(PrefUtils.getBoolean(this, R.string.preference_enableLifecycleLogging_key, + R.bool.preference_enableLifecycleLogging_default)); + stringContext = new StringContext(new WeakReference(getApplicationContext())); + } + + public static void restartApp(Context context) { + Intent i = context.getPackageManager().getLaunchIntentForPackage(context.getPackageName()); + i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + context.startActivity(i); + } + +} diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/StringContext.java b/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/application/StringContext.java similarity index 94% rename from mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/StringContext.java rename to mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/application/StringContext.java index 1295c19ae6b..472d756b923 100644 --- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/StringContext.java +++ b/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/application/StringContext.java @@ -1,4 +1,4 @@ -package com.sap.sailing.racecommittee.app; +package com.sap.sailing.android.shared.application; import java.lang.ref.WeakReference; diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/http/FileBasedHttpGetRequest.java b/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/data/http/FileBasedHttpGetRequest.java similarity index 84% rename from mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/http/FileBasedHttpGetRequest.java rename to mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/data/http/FileBasedHttpGetRequest.java index 0f5535de7d3..6d7264b8e1c 100644 --- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/http/FileBasedHttpGetRequest.java +++ b/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/data/http/FileBasedHttpGetRequest.java @@ -1,4 +1,4 @@ -package com.sap.sailing.racecommittee.app.data.http; +package com.sap.sailing.android.shared.data.http; import java.io.BufferedInputStream; import java.io.File; @@ -9,12 +9,14 @@ import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; +import android.content.Context; + public class FileBasedHttpGetRequest extends HttpGetRequest { private final File outputFile; - public FileBasedHttpGetRequest(URL url, HttpRequestProgressListener listener, File outputFile) { - super(url, listener); + public FileBasedHttpGetRequest(URL url, HttpRequestProgressListener listener, File outputFile, Context context) { + super(url, listener, context); this.outputFile = outputFile; } diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/http/HttpGetRequest.java b/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/data/http/HttpGetRequest.java similarity index 67% rename from mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/http/HttpGetRequest.java rename to mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/data/http/HttpGetRequest.java index 34e9d40ccbe..55320b838ca 100644 --- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/http/HttpGetRequest.java +++ b/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/data/http/HttpGetRequest.java @@ -1,26 +1,28 @@ -package com.sap.sailing.racecommittee.app.data.http; - -import java.io.BufferedInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.net.HttpURLConnection; -import java.net.URL; - -public class HttpGetRequest extends HttpRequest { - - public HttpGetRequest(URL requestUrl) { - super(requestUrl); - } - - public HttpGetRequest(URL url, HttpRequestProgressListener listener) { - super(url, listener); - } - - - - @Override - protected BufferedInputStream doRequest(HttpURLConnection connection) throws IOException { - InputStream stream = connection.getInputStream(); - return new BufferedInputStream(stream); - } -} +package com.sap.sailing.android.shared.data.http; + +import java.io.BufferedInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.net.HttpURLConnection; +import java.net.URL; + +import android.content.Context; + +public class HttpGetRequest extends HttpRequest { + + public HttpGetRequest(URL requestUrl, Context context) { + super(requestUrl, context); + } + + public HttpGetRequest(URL url, HttpRequestProgressListener listener, Context context) { + super(url, listener, context); + } + + + + @Override + protected BufferedInputStream doRequest(HttpURLConnection connection) throws IOException { + InputStream stream = connection.getInputStream(); + return new BufferedInputStream(stream); + } +} diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/http/HttpJsonPostRequest.java b/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/data/http/HttpJsonPostRequest.java similarity index 79% rename from mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/http/HttpJsonPostRequest.java rename to mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/data/http/HttpJsonPostRequest.java index 4836beafdc7..831f4121223 100644 --- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/http/HttpJsonPostRequest.java +++ b/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/data/http/HttpJsonPostRequest.java @@ -1,45 +1,47 @@ -package com.sap.sailing.racecommittee.app.data.http; - -import java.io.BufferedInputStream; -import java.io.BufferedOutputStream; -import java.io.IOException; -import java.io.OutputStream; -import java.net.HttpURLConnection; -import java.net.URL; -import java.nio.charset.Charset; - -public class HttpJsonPostRequest extends HttpRequest { - public final static String ContentType = "application/json;charset=UTF-8"; - - private String requestBody; - - public HttpJsonPostRequest(URL requestUrl) { - this(requestUrl, null); - } - - public HttpJsonPostRequest(URL requestUrl, String body) { - super(requestUrl); - this.requestBody = body; - } - - @Override - protected BufferedInputStream doRequest(HttpURLConnection connection) throws IOException { - connection.setDoOutput(true); - connection.setChunkedStreamingMode(0); - - connection.setRequestProperty("Content-Type", ContentType); - connection.setRequestProperty("Accept", ContentType); - - OutputStream outputStream = new BufferedOutputStream(connection.getOutputStream()); - sendBody(outputStream); - outputStream.close(); - - return new BufferedInputStream(connection.getInputStream()); - } - - private void sendBody(OutputStream outputStream) throws IOException { - if (requestBody != null) { - outputStream.write(requestBody.getBytes(Charset.forName("UTF-8"))); - } - } -} +package com.sap.sailing.android.shared.data.http; + +import java.io.BufferedInputStream; +import java.io.BufferedOutputStream; +import java.io.IOException; +import java.io.OutputStream; +import java.net.HttpURLConnection; +import java.net.URL; +import java.nio.charset.Charset; + +import android.content.Context; + +public class HttpJsonPostRequest extends HttpRequest { + public final static String ContentType = "application/json;charset=UTF-8"; + + private String requestBody; + + public HttpJsonPostRequest(URL requestUrl, Context context) { + this(requestUrl, null, context); + } + + public HttpJsonPostRequest(URL requestUrl, String body, Context context) { + super(requestUrl, context); + this.requestBody = body; + } + + @Override + protected BufferedInputStream doRequest(HttpURLConnection connection) throws IOException { + connection.setDoOutput(true); + connection.setChunkedStreamingMode(0); + + connection.setRequestProperty("Content-Type", ContentType); + connection.setRequestProperty("Accept", ContentType); + + OutputStream outputStream = new BufferedOutputStream(connection.getOutputStream()); + sendBody(outputStream); + outputStream.close(); + + return new BufferedInputStream(connection.getInputStream()); + } + + private void sendBody(OutputStream outputStream) throws IOException { + if (requestBody != null) { + outputStream.write(requestBody.getBytes(Charset.forName("UTF-8"))); + } + } +} diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/http/HttpRequest.java b/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/data/http/HttpRequest.java similarity index 85% rename from mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/http/HttpRequest.java rename to mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/data/http/HttpRequest.java index a6ef9939241..664c0386109 100644 --- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/http/HttpRequest.java +++ b/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/data/http/HttpRequest.java @@ -1,138 +1,142 @@ -package com.sap.sailing.racecommittee.app.data.http; - -import java.io.BufferedInputStream; -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.net.HttpURLConnection; -import java.net.URL; - -import org.apache.http.HttpStatus; - -import com.sap.sailing.racecommittee.app.logging.ExLog; - -public abstract class HttpRequest { - - private final static String TAG = HttpRequest.class.getName(); - - private final static int lowestOkCode = HttpStatus.SC_OK; - private final static int lowestRedirectCode = HttpStatus.SC_MULTIPLE_CHOICES; - - private static void validateHttpResponseCode(HttpURLConnection connection) throws IOException { - int statusCode = connection.getResponseCode(); - if (statusCode != -1) { - if (statusCode >= lowestOkCode && statusCode < lowestRedirectCode) { - return; - } - throw new IOException(String.format("Request response had error code %d.", statusCode)); - } - throw new IOException(String.format("Request response had no valid status.")); - } - - public interface HttpRequestProgressListener { - void onHttpProgress(float progress); - } - - private final HttpRequestProgressListener listener; - private final URL url; - private boolean isCancelled; - - public HttpRequest(URL url) { - this(url, null); - } - - public HttpRequest(URL url, HttpRequestProgressListener listener) { - this.url = url; - this.listener = listener; - this.isCancelled = false; - } - - public boolean isCancelled() { - return isCancelled; - } - - public void cancel() { - this.isCancelled = true; - } - - /** - * Returns a copied {@link InputStream} of the server's response. - * You must close this stream when done. - */ - public InputStream execute() throws IOException { - ExLog.i(TAG, String.format("(Request %d) Executing HTTP request on %s.", this.hashCode(), url)); - - HttpURLConnection connection = (HttpURLConnection) url.openConnection(); - - connection.setConnectTimeout(5000); - connection.setReadTimeout(15000); - connection.setRequestProperty("connection", "close"); - - BufferedInputStream responseInputStream = null; - try { - try { - responseInputStream = doRequest(connection); - } catch (FileNotFoundException fnfe) { - // 404 errors... - throw new FileNotFoundException(String.format( - "(Request %d) %s\nHTTP response code: %d.\nHTTP response body: %s.", this.hashCode(), - fnfe.getMessage(), connection.getResponseCode(), connection.getResponseMessage())); - } - - validateHttpResponseCode(connection); - - InputStream copiedResponseInputStream = readAndCopyResponse(connection, responseInputStream); - - if (copiedResponseInputStream != null) { - ExLog.i(TAG, String.format("(Request %d) HTTP request executed.", this.hashCode())); - } else { - ExLog.i(TAG, String.format("(Request %d) HTTP request aborted.", this.hashCode())); - } - - connection.disconnect(); - return copiedResponseInputStream; - } catch (IOException e) { - ExLog.i(TAG, String.format("(Request %d) HTTP request failed.", this.hashCode())); - throw e; - } finally { - if (responseInputStream != null) { - responseInputStream.close(); - } - } - } - - protected InputStream readAndCopyResponse(HttpURLConnection connection, BufferedInputStream inputStream) - throws IOException { - ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); - if (!readResponse(connection, inputStream, outputStream)) { - return null; - } - return new ByteArrayInputStream(outputStream.toByteArray()); - } - - protected boolean readResponse(HttpURLConnection connection, BufferedInputStream inputStream, - OutputStream outputStream) throws IOException { - int fileLength = connection.getContentLength(); - byte data[] = new byte[4096]; - long total = 0; - int count; - while ((count = inputStream.read(data)) != -1) { - if (isCancelled()) { - return false; - } - total += count; - // publishing the progress.... - if (fileLength > 0 && listener != null) { - listener.onHttpProgress(total / (float) fileLength); - } - outputStream.write(data, 0, count); - } - return true; - } - - protected abstract BufferedInputStream doRequest(HttpURLConnection connection) throws IOException; - -} +package com.sap.sailing.android.shared.data.http; + +import java.io.BufferedInputStream; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.net.HttpURLConnection; +import java.net.URL; + +import org.apache.http.HttpStatus; + +import android.content.Context; + +import com.sap.sailing.android.shared.logging.ExLog; + +public abstract class HttpRequest { + + private final static String TAG = HttpRequest.class.getName(); + + private final static int lowestOkCode = HttpStatus.SC_OK; + private final static int lowestRedirectCode = HttpStatus.SC_MULTIPLE_CHOICES; + + private static void validateHttpResponseCode(HttpURLConnection connection) throws IOException { + int statusCode = connection.getResponseCode(); + if (statusCode != -1) { + if (statusCode >= lowestOkCode && statusCode < lowestRedirectCode) { + return; + } + throw new IOException(String.format("Request response had error code %d.", statusCode)); + } + throw new IOException(String.format("Request response had no valid status.")); + } + + public interface HttpRequestProgressListener { + void onHttpProgress(float progress); + } + + private final HttpRequestProgressListener listener; + private final URL url; + private final Context context; + private boolean isCancelled; + + public HttpRequest(URL url, Context context) { + this(url, null, context); + } + + public HttpRequest(URL url, HttpRequestProgressListener listener, Context context) { + this.url = url; + this.listener = listener; + this.isCancelled = false; + this.context = context; + } + + public boolean isCancelled() { + return isCancelled; + } + + public void cancel() { + this.isCancelled = true; + } + + /** + * Returns a copied {@link InputStream} of the server's response. + * You must close this stream when done. + */ + public InputStream execute() throws IOException { + ExLog.i(context, TAG, String.format("(Request %d) Executing HTTP request on %s.", this.hashCode(), url)); + + HttpURLConnection connection = (HttpURLConnection) url.openConnection(); + + connection.setConnectTimeout(5000); + connection.setReadTimeout(15000); + connection.setRequestProperty("connection", "close"); + + BufferedInputStream responseInputStream = null; + try { + try { + responseInputStream = doRequest(connection); + } catch (FileNotFoundException fnfe) { + // 404 errors... + throw new FileNotFoundException(String.format( + "(Request %d) %s\nHTTP response code: %d.\nHTTP response body: %s.", this.hashCode(), + fnfe.getMessage(), connection.getResponseCode(), connection.getResponseMessage())); + } + + validateHttpResponseCode(connection); + + InputStream copiedResponseInputStream = readAndCopyResponse(connection, responseInputStream); + + if (copiedResponseInputStream != null) { + ExLog.i(context, TAG, String.format("(Request %d) HTTP request executed.", this.hashCode())); + } else { + ExLog.i(context, TAG, String.format("(Request %d) HTTP request aborted.", this.hashCode())); + } + + connection.disconnect(); + return copiedResponseInputStream; + } catch (IOException e) { + ExLog.i(context, TAG, String.format("(Request %d) HTTP request failed.", this.hashCode())); + throw e; + } finally { + if (responseInputStream != null) { + responseInputStream.close(); + } + } + } + + protected InputStream readAndCopyResponse(HttpURLConnection connection, BufferedInputStream inputStream) + throws IOException { + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + if (!readResponse(connection, inputStream, outputStream)) { + return null; + } + return new ByteArrayInputStream(outputStream.toByteArray()); + } + + protected boolean readResponse(HttpURLConnection connection, BufferedInputStream inputStream, + OutputStream outputStream) throws IOException { + int fileLength = connection.getContentLength(); + byte data[] = new byte[4096]; + long total = 0; + int count; + while ((count = inputStream.read(data)) != -1) { + if (isCancelled()) { + return false; + } + total += count; + // publishing the progress.... + if (fileLength > 0 && listener != null) { + listener.onHttpProgress(total / (float) fileLength); + } + outputStream.write(data, 0, count); + } + return true; + } + + protected abstract BufferedInputStream doRequest(HttpURLConnection connection) throws IOException; + +} diff --git a/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/logging/ExLog.java b/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/logging/ExLog.java new file mode 100644 index 00000000000..1023948a046 --- /dev/null +++ b/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/logging/ExLog.java @@ -0,0 +1,168 @@ +package com.sap.sailing.android.shared.logging; + +import java.io.PrintWriter; +import java.io.StringWriter; +import java.util.Date; +import java.util.EnumSet; +import java.util.concurrent.ArrayBlockingQueue; +import java.util.concurrent.BlockingQueue; + +import android.content.Context; +import android.provider.Settings.Secure; +import android.util.Log; + +/** + * Simple wrapper for logging to various targets. + * + * Log by using {@link ExLog#i(String, String)}, {@link ExLog#w(String, String)} and {@link ExLog#e(String, String)}. + * Activate a set of targets by using {@link ExLog#activate(Target)} or {@link ExLog#activate(EnumSet)}. Currently + * available are logging to android.util.Log LogCat and logging to a file on SD-card. + * + * The file logging in very defensive in a way that opening and writing to the file is secured by various exception + * handlers trying to silence all possible errors. + * + */ +public class ExLog { + private final static String TAG = "ExLogInternal"; + private static EnumSet activeLoggingTargets; + + static { + activeLoggingTargets = EnumSet.of(Target.LOGCAT, Target.FILE); + } + + public enum Target { + NONE, LOGCAT, FILE + } + + public synchronized static void activate(EnumSet targetSet) { + activeLoggingTargets = targetSet; + } + + public synchronized static void activate(Target target) { + activate(EnumSet.of(target)); + } + + public synchronized static void i(Context context, int eventID, String msg) { + if (UNIQUE_ID == null) { + UNIQUE_ID = Secure.getString(context.getContentResolver(), Secure.ANDROID_ID); + } + i(context, "ID: " + String.valueOf(eventID), System.currentTimeMillis() + ":" + (UNIQUE_ID == null ? "" : UNIQUE_ID) + + ":" + (msg == null ? "" : msg)); + } + + public static String UNIQUE_ID = null; + + public synchronized static void i(Context context, String tag, String msg) { + getInstance().info(context, tag, msg); + } + + public synchronized static void w(Context context, String tag, String msg) { + getInstance().warning(context, tag, msg); + } + + public synchronized static void e(Context context, String tag, String msg) { + getInstance().error(context, tag, msg); + } + + public synchronized static void ex(Context context, String tag, Exception e) { + getInstance().exception(context, tag, e); + } + + private final static String logMsgTemplate = "%s - %s - %s : %s"; + + private enum LogLevel { + INFORMATION, WARNING, ERROR, DISABLED + } + + private static ExLog instance; + + private static ExLog getInstance() { + if (instance == null) { + instance = new ExLog(); + } + return instance; + } + + private static final int LogBufferCapacity = 20; + private BlockingQueue logBuffer; + + private FileLoggingTask fileTask; + + private boolean logToFile; + private boolean fileLoggingTaskInitialized; + + public ExLog() { + logToFile = false; + fileLoggingTaskInitialized = false; + } + + private void info(Context context, String tag, String msg) { + if (isTargetActive(Target.LOGCAT)) + Log.i(tag, msg); + + if (isTargetActive(Target.FILE)) + logToFile(context, LogLevel.INFORMATION, tag, msg); + } + + private void warning(Context context, String tag, String msg) { + if (isTargetActive(Target.LOGCAT)) + Log.w(tag, msg); + + if (isTargetActive(Target.FILE)) + logToFile(context, LogLevel.WARNING, tag, msg); + } + + private void error(Context context, String tag, String msg) { + if (isTargetActive(Target.LOGCAT)) + Log.e(tag, msg); + + if (isTargetActive(Target.FILE)) + logToFile(context, LogLevel.ERROR, tag, msg); + } + + private void exception(Context context, String tag, Exception e) { + StringWriter stringWriter = new StringWriter(); + PrintWriter stream = new PrintWriter(stringWriter); + e.printStackTrace(stream); + String msg = stringWriter.toString(); + + if (isTargetActive(Target.LOGCAT)) + Log.e(tag, msg); + + if (isTargetActive(Target.FILE)) + logToFile(context, LogLevel.ERROR, tag, msg); + } + + private boolean isTargetActive(Target logcat) { + return activeLoggingTargets.contains(logcat); + } + + private void logToFile(Context context, LogLevel level, String tag, String msg) { + + initializeFileLoggingTask(context); + + if (logToFile) { + try { + logBuffer.put(String.format(logMsgTemplate, new Date().toString(), level.toString(), tag, msg)); + } catch (InterruptedException ie) { + } + } + } + + private void initializeFileLoggingTask(Context context) { + if (fileLoggingTaskInitialized) + return; + + fileLoggingTaskInitialized = true; + logBuffer = new ArrayBlockingQueue(LogBufferCapacity); + fileTask = new FileLoggingTask(logBuffer, context); + logToFile = fileTask.tryStartFileLogging(); + if (logToFile) { + Log.i(TAG, String.format("Logging to file %s.", fileTask.getLogFilePath())); + new Thread(fileTask).start(); + } else { + Log.w(TAG, "Logging to file couldn't be enabled."); + } + } + +} diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/logging/FileLoggingTask.java b/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/logging/FileLoggingTask.java similarity index 87% rename from mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/logging/FileLoggingTask.java rename to mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/logging/FileLoggingTask.java index 8fb0f11a82a..17cf2f38973 100644 --- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/logging/FileLoggingTask.java +++ b/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/logging/FileLoggingTask.java @@ -1,125 +1,129 @@ -package com.sap.sailing.racecommittee.app.logging; - -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileWriter; -import java.io.IOException; -import java.io.PrintWriter; -import java.text.Format; -import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.Locale; -import java.util.concurrent.BlockingQueue; - -import android.util.Log; - -import com.sap.sailing.racecommittee.app.AppConstants; - -public class FileLoggingTask implements Runnable { - - private final static String TAG = FileLoggingTask.class.getName(); - - private final static String logFileTemplate = "sap_rc_log_%s.txt"; - private final static String logFileDateFormat = "yyyyMMdd"; - - private final BlockingQueue queue; - - private String logFileName; - private File logFile; - private BufferedWriter logWriter; - - public FileLoggingTask(BlockingQueue queue) { - this.queue = queue; - } - - public FileLoggingTask() { - this.queue = null; - } - - public boolean tryStartFileLogging() { - return tryStartFileLogging(FileLoggingTask.logFileTemplate); - } - - public boolean tryStartFileLogging(String template) { - try { - Format format = new SimpleDateFormat(logFileDateFormat, Locale.US); - logFileName = String.format(template, format.format(new Date())); - - File loggingDirectory = AppConstants.getExternalApplicationFolder(); - logFile = new File(loggingDirectory, logFileName); - - if (prepareFile(logFile)) { - try { - logWriter = new BufferedWriter(new FileWriter(logFile, true)); - return true; - } catch (IOException e) { - Log.w(TAG, - String.format("Unable to open writer on file %s: %s", logFile.getAbsolutePath(), - e.getMessage())); - return false; - } - } - } catch (Throwable e) { - Log.w(TAG, "Error trying to setup file logging: " + e.getMessage()); - } - return false; - } - - public String getLogFilePath() { - return logFile.getAbsolutePath(); - } - - public void run() { - while (true) { - String logMessage; - try { - logMessage = queue.take(); - log(logMessage); - } catch (InterruptedException e) { - } - } - } - - public void log(String logMessage) { - try { - logWriter.append(logMessage); - logWriter.newLine(); - logWriter.flush(); - } catch (Exception e) { - } - } - - public void logException(Throwable ex) { - PrintWriter writer = new PrintWriter(logWriter); - ex.printStackTrace(writer); - writer.println(); - writer.flush(); - } - - @Override - protected void finalize() throws Throwable { - super.finalize(); - try { - logWriter.close(); - } catch (Throwable e) { - } - } - - private static boolean prepareFile(File file) { - if (file == null) { - Log.i(TAG, "Log file couldn't be opened."); - return false; - } - - // create the file (if not exists) - try { - file.createNewFile(); - } catch (IOException e) { - Log.w(TAG, String.format("Couldn't create file %s : %s", file.getAbsolutePath(), e.getMessage())); - return false; - } - - return file.canWrite(); - } - -} +package com.sap.sailing.android.shared.logging; + +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.io.PrintWriter; +import java.text.Format; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Locale; +import java.util.concurrent.BlockingQueue; + +import android.content.Context; +import android.util.Log; + +import com.sap.sailing.android.shared.util.FileHandlerUtils; + +public class FileLoggingTask implements Runnable { + + private final static String TAG = FileLoggingTask.class.getName(); + + private final static String logFileTemplate = "sap_rc_log_%s.txt"; + private final static String logFileDateFormat = "yyyyMMdd"; + + private final BlockingQueue queue; + + private String logFileName; + private File logFile; + private BufferedWriter logWriter; + + private final Context context; + + public FileLoggingTask(BlockingQueue queue, Context context) { + this.queue = queue; + this.context = context.getApplicationContext(); + } + + public FileLoggingTask(Context context) { + this(null, context); + } + + public boolean tryStartFileLogging() { + return tryStartFileLogging(FileLoggingTask.logFileTemplate); + } + + public boolean tryStartFileLogging(String template) { + try { + Format format = new SimpleDateFormat(logFileDateFormat, Locale.US); + logFileName = String.format(template, format.format(new Date())); + + File loggingDirectory = FileHandlerUtils.getExternalApplicationFolder(context); + logFile = new File(loggingDirectory, logFileName); + + if (prepareFile(logFile)) { + try { + logWriter = new BufferedWriter(new FileWriter(logFile, true)); + return true; + } catch (IOException e) { + Log.w(TAG, + String.format("Unable to open writer on file %s: %s", logFile.getAbsolutePath(), + e.getMessage())); + return false; + } + } + } catch (Throwable e) { + Log.w(TAG, "Error trying to setup file logging: " + e.getMessage()); + } + return false; + } + + public String getLogFilePath() { + return logFile.getAbsolutePath(); + } + + public void run() { + while (true) { + String logMessage; + try { + logMessage = queue.take(); + log(logMessage); + } catch (InterruptedException e) { + } + } + } + + public void log(String logMessage) { + try { + logWriter.append(logMessage); + logWriter.newLine(); + logWriter.flush(); + } catch (Exception e) { + } + } + + public void logException(Throwable ex) { + PrintWriter writer = new PrintWriter(logWriter); + ex.printStackTrace(writer); + writer.println(); + writer.flush(); + } + + @Override + protected void finalize() throws Throwable { + super.finalize(); + try { + logWriter.close(); + } catch (Throwable e) { + } + } + + private static boolean prepareFile(File file) { + if (file == null) { + Log.i(TAG, "Log file couldn't be opened."); + return false; + } + + // create the file (if not exists) + try { + file.createNewFile(); + } catch (IOException e) { + Log.w(TAG, String.format("Couldn't create file %s : %s", file.getAbsolutePath(), e.getMessage())); + return false; + } + + return file.canWrite(); + } + +} diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/logging/LifecycleCallbacks.java b/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/logging/LifecycleCallbacks.java similarity index 89% rename from mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/logging/LifecycleCallbacks.java rename to mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/logging/LifecycleCallbacks.java index 1c32cfdc6d9..71ad21e4e6c 100644 --- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/logging/LifecycleCallbacks.java +++ b/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/logging/LifecycleCallbacks.java @@ -1,4 +1,4 @@ -package com.sap.sailing.racecommittee.app.logging; +package com.sap.sailing.android.shared.logging; /** * Stolen from API Level 14. diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/logging/LifecycleLogger.java b/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/logging/LifecycleLogger.java similarity index 79% rename from mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/logging/LifecycleLogger.java rename to mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/logging/LifecycleLogger.java index c273128b0c2..e95f519f7e5 100644 --- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/logging/LifecycleLogger.java +++ b/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/logging/LifecycleLogger.java @@ -1,4 +1,8 @@ -package com.sap.sailing.racecommittee.app.logging; +package com.sap.sailing.android.shared.logging; + +import android.app.Activity; +import android.app.Fragment; +import android.content.Context; /** * Logger to track all activity and fragment lifecycle events. @@ -13,18 +17,19 @@ public class LifecycleLogger implements LifecycleCallbacks { } private void onEvent(Object activityOrFragment, String action) { + Context context = null; + if (activityOrFragment instanceof Activity) { + context = (Activity) activityOrFragment; + } else { + context = ((Fragment) activityOrFragment).getActivity(); + } if (isLifecycleLoggingEnabled) { - ExLog.i(TAG, + ExLog.i(context, TAG, String.format("%s %s %s", action, activityOrFragment.getClass().getSimpleName(), Integer.toHexString(System.identityHashCode(activityOrFragment)))); } } - @Override - public void onCreate(Object activityOrFragment) { - onEvent(activityOrFragment, "Creating"); - } - @Override public void onStart(Object activityOrFragment) { onEvent(activityOrFragment, "Starting"); @@ -55,4 +60,8 @@ public class LifecycleLogger implements LifecycleCallbacks { onEvent(activityOrFragment, "Destroying"); } + @Override + public void onCreate(Object activityOrFragment) { + onEvent(activityOrFragment, "Creating"); + } } diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/utils/LoggingExceptionHandler.java b/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/logging/LoggingExceptionHandler.java similarity index 78% rename from mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/utils/LoggingExceptionHandler.java rename to mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/logging/LoggingExceptionHandler.java index 446aac12eb6..4f9cd5cbc45 100644 --- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/utils/LoggingExceptionHandler.java +++ b/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/logging/LoggingExceptionHandler.java @@ -1,24 +1,25 @@ -package com.sap.sailing.racecommittee.app.utils; +package com.sap.sailing.android.shared.logging; import java.lang.Thread.UncaughtExceptionHandler; import java.util.Date; +import android.content.Context; import android.util.Log; -import com.sap.sailing.racecommittee.app.logging.FileLoggingTask; - public class LoggingExceptionHandler implements UncaughtExceptionHandler { private static final String TAG = LoggingExceptionHandler.class.getName(); private UncaughtExceptionHandler defaultHandler; + private final Context context; - public LoggingExceptionHandler(UncaughtExceptionHandler defaultHandler) { + public LoggingExceptionHandler(UncaughtExceptionHandler defaultHandler, Context context) { this.defaultHandler = defaultHandler; + this.context = context; } public void uncaughtException(Thread thread, Throwable ex) { - FileLoggingTask task = new FileLoggingTask(); + FileLoggingTask task = new FileLoggingTask(context); if (task.tryStartFileLogging("sap_rc_crash_%s.txt")) { task.log(String.format("%s - Exception occured on thread %s:", new Date(), thread.getId())); task.logException(ex); diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/receiver/ConnectivityChangedReceiver.java b/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/services/sending/ConnectivityChangedReceiver.java similarity index 70% rename from mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/receiver/ConnectivityChangedReceiver.java rename to mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/services/sending/ConnectivityChangedReceiver.java index 9e7ff620b96..9e8b57626d0 100644 --- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/receiver/ConnectivityChangedReceiver.java +++ b/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/services/sending/ConnectivityChangedReceiver.java @@ -1,7 +1,7 @@ /** * */ -package com.sap.sailing.racecommittee.app.receiver; +package com.sap.sailing.android.shared.services.sending; import android.content.BroadcastReceiver; import android.content.ComponentName; @@ -11,9 +11,21 @@ import android.content.pm.PackageManager; import android.net.ConnectivityManager; import android.net.NetworkInfo; -import com.sap.sailing.racecommittee.app.AppConstants; -import com.sap.sailing.racecommittee.app.logging.ExLog; +import com.sap.sailing.android.shared.logging.ExLog; +/** + * Informs {@link MessageSendingService} whenever connectivity is restored, so that it can start sending + * messages again. + * + * Register in manifest: + *
{@code
+ * 
+ *   
+ *     
+ *   
+ * 
+ * }
+ */ public class ConnectivityChangedReceiver extends BroadcastReceiver { private final static String TAG = ConnectivityChangedReceiver.class.getName(); @@ -26,8 +38,7 @@ public class ConnectivityChangedReceiver extends BroadcastReceiver { NetworkInfo networkInfo = (NetworkInfo)intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO); if (!networkInfo.isConnected()) return; - Intent sendSavedIntent = new Intent(AppConstants.INTENT_ACTION_SEND_SAVED_INTENTS); - context.startService(sendSavedIntent); + context.startService(MessageSendingService.createSendDelayedIntent(context)); disable(context); } @@ -40,7 +51,7 @@ public class ConnectivityChangedReceiver extends BroadcastReceiver { ComponentName receiver = new ComponentName(context, ConnectivityChangedReceiver.class); PackageManager packageManager = context.getPackageManager(); packageManager.setComponentEnabledSetting(receiver, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP); - ExLog.w(TAG, "Regained connectivity. ConnectivityChangedReceiver disabled"); + ExLog.w(context, TAG, "Regained connectivity. ConnectivityChangedReceiver disabled"); } /** @@ -51,7 +62,7 @@ public class ConnectivityChangedReceiver extends BroadcastReceiver { ComponentName receiver = new ComponentName(context, ConnectivityChangedReceiver.class); PackageManager packageManager = context.getPackageManager(); packageManager.setComponentEnabledSetting(receiver, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP); - ExLog.w(TAG, "Connectivity lost. ConnectivityChangedReceiver enabled"); + ExLog.w(context, TAG, "Connectivity lost. ConnectivityChangedReceiver enabled"); } } diff --git a/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/services/sending/MessagePersistenceManager.java b/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/services/sending/MessagePersistenceManager.java new file mode 100644 index 00000000000..87043f35400 --- /dev/null +++ b/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/services/sending/MessagePersistenceManager.java @@ -0,0 +1,218 @@ +package com.sap.sailing.android.shared.services.sending; + +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.net.URLDecoder; +import java.net.URLEncoder; +import java.util.ArrayList; +import java.util.List; + +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; + +import com.sap.sailing.android.shared.logging.ExLog; +import com.sap.sailing.android.shared.util.FileHandlerUtils; + +public class MessagePersistenceManager { + + private final static String TAG = MessagePersistenceManager.class.getName(); + + private final static String delayedMessagesFileName = "delayedMessages.txt"; + + protected Context context; + protected List persistedMessages; + + private final MessageRestorer messageRestorer; + + public MessagePersistenceManager(Context context, MessageRestorer messageRestorer) { + this.context = context; + persistedMessages = new ArrayList(); + this.messageRestorer = messageRestorer; + initializeFileAndPersistedMessages(); + } + + public boolean areIntentsDelayed() { + return !persistedMessages.isEmpty(); + } + + public void persistIntent(Intent intent) { + Bundle extras = intent.getExtras(); + String callbackPayload = extras.getString(MessageSendingService.CALLBACK_PAYLOAD); + String url = extras.getString(MessageSendingService.URL); + String payload = extras.getString(MessageSendingService.PAYLOAD); + String callbackClass = extras.getString(MessageSendingService.CALLBACK_CLASS); + persistMessage(url, callbackPayload, payload, callbackClass); + } + + private void persistMessage(String url, String callbackPayload, String payload, String callbackClass) { + String messageLine = getSerializedIntentForPersistence(url, callbackPayload, payload, callbackClass); + ExLog.i(context, TAG, String.format("Persisting message \"%s\".", messageLine)); + if (persistedMessages.contains(messageLine)) { + ExLog.i(context, TAG, "The message already exists. Ignoring."); + return; + } + saveMessage(messageLine); + } + + /** + * @param payload will be URL-encoded to ensure that the resulting string does not contain newlines + */ + private String getSerializedIntentForPersistence(String url, String callbackPayload, + String payload, String callbackClass) { + String messageLine = String.format("%s;%s;%s;%s", callbackPayload, URLEncoder.encode(payload), + url, callbackClass); + return messageLine; + } + + public void removeIntent(Intent intent) { + Bundle extras = intent.getExtras(); + String url = extras.getString(MessageSendingService.URL); + String callbackPayload = extras.getString(MessageSendingService.CALLBACK_PAYLOAD); + String payload = extras.getString(MessageSendingService.PAYLOAD); + String callbackClass = extras.getString(MessageSendingService.CALLBACK_CLASS); + removeMessage(url, callbackPayload, payload, callbackClass); + } + + private void removeMessage(String url, String callbackPayload, String payload, String callbackClass) { + if (!persistedMessages.isEmpty()) { + ExLog.i(context, TAG, String.format("Removing message \"%s\".", payload)); + String messageLine = getSerializedIntentForPersistence(url, callbackPayload, payload, callbackClass); + removePersistedMessage(messageLine); + } + } + + /** + * Removes all pending messages and clears the persistence file. + */ + public synchronized void removeAllMessages() { + persistedMessages.clear(); + writePersistedMessagesToFile(); + } + + private void removePersistedMessage(String messageLine) { + if (persistedMessages.contains(messageLine)) { + persistedMessages.remove(messageLine); + writePersistedMessagesToFile(); + ExLog.i(context, TAG, "Message removed."); + } + } + + public int getMessageCount() { + return persistedMessages.size(); + } + + public List getContent() { + return persistedMessages; + } + + public static interface MessageRestorer { + void restoreMessage(Context context, Intent messageIntent); + } + + public List restoreMessages() { + List delayedIntents = new ArrayList(); + for (String persistedMessage : persistedMessages) { + String[] lineParts = persistedMessage.split(";"); + String url = lineParts[2]; + String callbackPayload = lineParts[0]; + String payload = URLDecoder.decode(lineParts[1]); + String callbackClassString = lineParts[3]; + + Class callbackClass = null; + if (! "null".equals(callbackClassString)) { + try { + @SuppressWarnings("unchecked") + Class tmp = + (Class) Class.forName(callbackClassString); + callbackClass = tmp; + } catch (ClassNotFoundException e) { + ExLog.e(context, TAG, "Could not find class for callback name: " + callbackClassString); + } + } + + // We are passing no message id, because we know it used to suppress message sending and + // we want this message to be sent. + Intent messageIntent = MessageSendingService.createMessageIntent(context, url, callbackPayload, + null, payload, callbackClass); + + if (messageRestorer != null) { + messageRestorer.restoreMessage(context, messageIntent); + } + + if (messageIntent != null) { + delayedIntents.add(messageIntent); + } + } + ExLog.i(context, TAG, "Restored " + delayedIntents.size() + " messages"); + return delayedIntents; + } + + /** + * @return + * @throws FileNotFoundException + */ + private String getFileContent() throws FileNotFoundException { + String fileContent = ""; + FileInputStream inputStream; + try { + inputStream = context.openFileInput(delayedMessagesFileName); + + fileContent = FileHandlerUtils.convertStreamToString(inputStream, context); + inputStream.close(); + } catch (IOException e) { + ExLog.w(context, TAG, "In Method getFileContent(): " + e.getMessage() + " fileContent is empty"); + } + return fileContent; + } + + private void saveMessage(String messageLine) { + persistedMessages.add(messageLine); + writePersistedMessagesToFile(); + ExLog.i(context, TAG, "Wrote message to file: " + messageLine); + } + + private void writePersistedMessagesToFile() { + StringBuilder newFileContent = new StringBuilder(); + for (String persistedMessage : persistedMessages) { + newFileContent.append(persistedMessage); + newFileContent.append('\n'); + } + writeToFile(newFileContent.toString(), Context.MODE_PRIVATE); + ExLog.i(context, TAG, "Wrote file content to file: " + newFileContent); + } + + private void initializeFileAndPersistedMessages() { + try { + String fileContent = getFileContent(); + String[] messageLines = fileContent.split("\n"); + for (String messageLine : messageLines) { + if (!messageLine.isEmpty()) { + persistedMessages.add(messageLine); + } + } + } catch (FileNotFoundException e) { + ExLog.w(context, TAG, "persistence file not found in internal storage. The file will be created."); + clearPersistedMessages(); + } + ExLog.i(context, TAG, "Initialized file"); + } + + private void clearPersistedMessages() { + persistedMessages.clear(); + writePersistedMessagesToFile(); + } + + private void writeToFile(String content, int mode) { + try { + FileOutputStream outputStream = context.openFileOutput(delayedMessagesFileName, mode); + outputStream.write(content.getBytes()); + outputStream.close(); + } catch (IOException e) { + ExLog.e(context, TAG, "In Method writeToFile: " + e.getMessage() + " with content " + content + " and mode " + mode); + } + } + +} diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/services/sending/EventSenderTask.java b/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/services/sending/MessageSenderTask.java old mode 100755 new mode 100644 similarity index 51% rename from mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/services/sending/EventSenderTask.java rename to mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/services/sending/MessageSenderTask.java index 9cbb9c55251..6e2e5b52f6b --- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/services/sending/EventSenderTask.java +++ b/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/services/sending/MessageSenderTask.java @@ -1,70 +1,72 @@ -package com.sap.sailing.racecommittee.app.services.sending; - -import java.io.IOException; -import java.io.InputStream; -import java.net.URL; - -import android.content.Intent; -import android.os.AsyncTask; -import android.os.Bundle; - -import com.sap.sailing.racecommittee.app.AppConstants; -import com.sap.sailing.racecommittee.app.data.http.HttpJsonPostRequest; -import com.sap.sailing.racecommittee.app.data.http.HttpRequest; -import com.sap.sailing.racecommittee.app.logging.ExLog; -import com.sap.sse.common.Util; - -public class EventSenderTask extends AsyncTask> { - - private static String TAG = EventSenderTask.class.getName(); - - public interface EventSendingListener { - public void onEventSent(Intent intent, boolean success, InputStream inputStream); - } - - private EventSendingListener listener; - - public EventSenderTask(EventSendingListener listener) { - this.listener = listener; - } - - @SuppressWarnings("unused") - @Override - protected Util.Triple doInBackground(Intent... params) { - Util.Triple result; - Intent intent = params[0]; - if (intent == null) { - return new Util.Triple(intent, false, null); - } - Bundle extras = intent.getExtras(); - String serializedEventAsJson = extras.getString(AppConstants.EXTRAS_JSON_SERIALIZED_EVENT); - String url = extras.getString(AppConstants.EXTRAS_URL); - if (serializedEventAsJson == null || url == null) { - return new Util.Triple(intent, false, null); - } - InputStream responseStream = null; - try { - ExLog.i(TAG, "Posting event: " + serializedEventAsJson); - HttpRequest post = new HttpJsonPostRequest(new URL(url), serializedEventAsJson); - responseStream = post.execute(); - ExLog.i(TAG, "Post successful for the following event: " + serializedEventAsJson); - result = new Util.Triple(intent, true, responseStream); - } catch (IOException e) { - if (responseStream != null) { - try { - responseStream.close(); - } catch (IOException ie) { } - } - ExLog.e(TAG, String.format("Post not successful, exception occured: %s", e.toString())); - result = new Util.Triple(intent, false, null); - } - return result; - } - - @Override - protected void onPostExecute(Util.Triple resultTriple) { - super.onPostExecute(resultTriple); - listener.onEventSent(resultTriple.getA(), resultTriple.getB(), resultTriple.getC()); - } - -} +package com.sap.sailing.android.shared.services.sending; + +import java.io.IOException; +import java.io.InputStream; +import java.net.URL; + +import android.content.Context; +import android.content.Intent; +import android.os.AsyncTask; +import android.os.Bundle; + +import com.sap.sailing.android.shared.data.http.HttpJsonPostRequest; +import com.sap.sailing.android.shared.data.http.HttpRequest; +import com.sap.sailing.android.shared.logging.ExLog; +import com.sap.sse.common.Util; + +public class MessageSenderTask extends AsyncTask> { + + private static String TAG = MessageSenderTask.class.getName(); + + public interface MessageSendingListener { + public void onMessageSent(Intent intent, boolean success, InputStream inputStream); + } + + private MessageSendingListener listener; + private Context context; + + public MessageSenderTask(MessageSendingListener listener, Context context) { + this.listener = listener; + this.context = context; + } + + @SuppressWarnings("unused") + @Override + protected Util.Triple doInBackground(Intent... params) { + Util.Triple result; + Intent intent = params[0]; + if (intent == null) { + return new Util.Triple(intent, false, null); + } + Bundle extras = intent.getExtras(); + String payload = extras.getString(MessageSendingService.PAYLOAD); + String url = extras.getString(MessageSendingService.URL); + if (payload == null || url == null) { + return new Util.Triple(intent, false, null); + } + InputStream responseStream = null; + try { + ExLog.i(context, TAG, "Posting message: " + payload); + HttpRequest post = new HttpJsonPostRequest(new URL(url), payload, context); + responseStream = post.execute(); + ExLog.i(context, TAG, "Post successful for the following message: " + payload); + result = new Util.Triple(intent, true, responseStream); + } catch (IOException e) { + if (responseStream != null) { + try { + responseStream.close(); + } catch (IOException ie) { } + } + ExLog.e(context, TAG, String.format("Post not successful, exception occured: %s", e.toString())); + result = new Util.Triple(intent, false, null); + } + return result; + } + + @Override + protected void onPostExecute(Util.Triple resultTriple) { + super.onPostExecute(resultTriple); + listener.onMessageSent(resultTriple.getA(), resultTriple.getB(), resultTriple.getC()); + } + +} diff --git a/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/services/sending/MessageSendingService.java b/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/services/sending/MessageSendingService.java new file mode 100644 index 00000000000..4c01d0cb326 --- /dev/null +++ b/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/services/sending/MessageSendingService.java @@ -0,0 +1,332 @@ +package com.sap.sailing.android.shared.services.sending; + +import java.io.InputStream; +import java.io.Serializable; +import java.net.URLEncoder; +import java.util.Calendar; +import java.util.Date; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import java.util.UUID; + +import android.app.Service; +import android.content.ComponentName; +import android.content.Context; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.net.ConnectivityManager; +import android.net.NetworkInfo; +import android.os.Binder; +import android.os.Bundle; +import android.os.Handler; +import android.os.IBinder; + +import com.sap.sailing.android.shared.R; +import com.sap.sailing.android.shared.logging.ExLog; +import com.sap.sailing.android.shared.services.sending.MessagePersistenceManager.MessageRestorer; +import com.sap.sailing.android.shared.services.sending.MessageSenderTask.MessageSendingListener; +import com.sap.sailing.android.shared.util.PrefUtils; +import com.sap.sailing.domain.common.racelog.RaceLogServletConstants; + +/** + * Service that handles sending messages to a webservice. Deals with an offline setting + * by buffering the messages in a file, so that they can be sent when the connection is + * re-established.
+ * + * Use in the following way: Add the service declaration to your {@code AndroidManifest.xml}, + * and also specify your class implementing the {@link MessagePersistenceManager.MessageRestorer} + * as a meta-data tag with the key {@code com.sap.sailing.android.shared.services.sending.messageRestorer}. + * Also refer to {@link ConnectivityChangedReceiver}, which has to be registered as well. + * For example: + *
{@code
+ * 
+ *   
+ * 
+ * }
+ * + * + * Message sending example: + *
{@code
+ * context.startService(MessageSendingService.createMessageIntent(
+ *      context, url, race.getId(), eventId, serializedEventAsJson, callbackClass));
+ * }
+ */ +public class MessageSendingService extends Service implements MessageSendingListener { + public final static String URL = "url"; + public final static String PAYLOAD = "payload"; + public final static String CALLBACK_CLASS = "callback"; + public final static String CALLBACK_PAYLOAD = "callbackPayload"; // passed back to callback + public final static String MESSAGE_ID = "messageId"; + + protected final static String TAG = MessageSendingService.class.getName(); + + private ConnectivityManager connectivityManager; + private Handler handler; + private final IBinder mBinder = new MessageSendingBinder(); + private MessagePersistenceManager persistenceManager; + private boolean isHandlerSet; + + private Set suppressedMessageIds = new HashSet(); + + public void registerMessageForSuppression(Serializable messageId) { + suppressedMessageIds.add(messageId); + } + + private MessageSendingServiceLogger serviceLogger = new MessageSendingServiceLogger() { + @Override + public void onMessageSentSuccessful() { + } + + @Override + public void onMessageSentFailed() { + } + }; + + public interface MessageSendingServiceLogger { + public void onMessageSentSuccessful(); + + public void onMessageSentFailed(); + } + + public void setMessageSendingServiceLogger(MessageSendingServiceLogger logger) { + serviceLogger = logger; + } + + public class MessageSendingBinder extends Binder { + public MessageSendingService getService() { + return MessageSendingService.this; + } + } + + @Override + public IBinder onBind(Intent arg0) { + return mBinder; + } + + private Date lastSuccessfulSend; + + public List getDelayedIntensContent() { + return persistenceManager.getContent(); + } + + public int getDelayedIntentsCount() { + return persistenceManager.getMessageCount(); + } + + public Date getLastSuccessfulSend() { + return lastSuccessfulSend; + } + + public void clearDelayedIntents() { + persistenceManager.removeAllMessages(); + // let's fake a successful send! + serviceLogger.onMessageSentSuccessful(); + } + + public static Intent createMessageIntent(Context context, String url, Serializable callbackPayload, Serializable messageId, String payload, + Class callbackClass) { + Intent messageIntent = new Intent(context, MessageSendingService.class); + messageIntent.setAction(context.getString(R.string.intent_send_message)); + messageIntent.putExtra(CALLBACK_PAYLOAD, callbackPayload); + messageIntent.putExtra(MESSAGE_ID, messageId); + messageIntent.putExtra(PAYLOAD, payload); + messageIntent.putExtra(URL, url); + messageIntent.putExtra(CALLBACK_CLASS, callbackClass == null ? null : callbackClass.getName()); + return messageIntent; + } + + public static Intent createSendDelayedIntent(Context context) { + Intent intent = new Intent(context, MessageSendingService.class); + intent.setAction(context.getString(R.string.intent_send_saved_intents)); + return intent; + } + + private Serializable getMessageId(Intent intent) { + Serializable id = intent.getSerializableExtra(MESSAGE_ID); + if (id != null) { + return id; + } + ExLog.w(this, TAG, "Unable to extract message identifier from message intent."); + return null; + } + + private MessagePersistenceManager getPersistenceManager() { + ComponentName thisService = new ComponentName(this, this.getClass()); + MessageRestorer restorer = null; + try { + Bundle data = getPackageManager().getServiceInfo(thisService, PackageManager.GET_META_DATA).metaData; + String className = data.getString("com.sap.sailing.android.shared.services.sending.messageRestorer"); + Class clazz = Class.forName(className); + if (! MessageRestorer.class.isAssignableFrom(clazz)) { + throw new Exception("Class does not conform to expected type."); + } + @SuppressWarnings("unchecked") //checked above + Class castedClass = (Class) clazz; + restorer = castedClass.getConstructor().newInstance(); + } catch (Exception e) { + ExLog.w(this, TAG, "Could not find MessageRestorer. See documentation of MessageSendingService" + + "on how to register the restorer through the manifest. Error Message: " + e.getMessage()); + } + return new MessagePersistenceManager(this, restorer); + } + + /* + * (non-Javadoc) + * + * @see android.app.Service#onCreate() + */ + @Override + public void onCreate() { + connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); + persistenceManager = getPersistenceManager(); + handler = new Handler(); + isHandlerSet = false; + if (persistenceManager.areIntentsDelayed()) { + handleDelayedMessages(); + } + } + + @Override + public int onStartCommand(Intent intent, int flags, int startId) { + if (intent == null) { + ExLog.i(this, TAG, "Service is restarted."); + return START_STICKY; + } + ExLog.i(this, TAG, "Service is called by following intent: " + intent.getAction()); + handleCommand(intent, startId); + // We want this service to continue running until it is explicitly + // stopped, so return sticky. + return START_STICKY; + } + + private void handleCommand(Intent intent, int startId) { + String action = intent.getAction(); + if (action.equals(getString(R.string.intent_send_saved_intents))) { + handleDelayedMessages(); + } else if (action.equals(getString(R.string.intent_send_message))) { + handleSendMessages(intent); + } + } + + private void handleSendMessages(Intent intent) { + ExLog.i(this, TAG, String.format("Trying to send a message...")); + if (!isConnected()) { + ExLog.i(this, TAG, String.format("Send aborted because there is no connection.")); + persistenceManager.persistIntent(intent); + ConnectivityChangedReceiver.enable(this); + serviceLogger.onMessageSentFailed(); + } else { + sendMessage(intent); + } + } + + private void handleDelayedMessages() { + ExLog.i(this, TAG, String.format("Trying to resend stored messages...")); + isHandlerSet = false; + if (!isConnected()) { + ExLog.i(this, TAG, String.format("Resend aborted because there is no connection.")); + ConnectivityChangedReceiver.enable(this); + serviceLogger.onMessageSentFailed(); + } else { + sendDelayedMessages(); + } + } + + private void sendDelayedMessages() { + List delayedIntents = persistenceManager.restoreMessages(); + ExLog.i(this, TAG, String.format("Resending %d messages...", delayedIntents.size())); + for (Intent intent : delayedIntents) { + sendMessage(intent); + } + } + + private void sendMessage(Intent intent) { + boolean sendingActive = PrefUtils.getBoolean(this, R.string.preference_isSendingActive_key, + R.bool.preference_isSendingActive_default); + if (! sendingActive) { + ExLog.i(this, TAG, "Sending deactivated. Message will not be sent to server."); + } else { + Serializable messageId = getMessageId(intent); + if (messageId != null && suppressedMessageIds.contains(messageId)) { + suppressedMessageIds.remove(messageId); + ExLog.i(this, TAG, String.format("Message %s is suppressed, won't be sent.", messageId)); + } else { + MessageSenderTask task = new MessageSenderTask(this, this); + task.execute(intent); + } + } + } + + @Override + public void onMessageSent(Intent intent, boolean success, InputStream inputStream) { + int resendMillis = PrefUtils.getInt(this, R.string.preference_messageResendIntervalMillis_key, + R.integer.preference_messageResendIntervalMillis_default); + if (!success) { + ExLog.w(this, TAG, "Error while posting intent to server. Will persist intent..."); + persistenceManager.persistIntent(intent); + if (!isHandlerSet) { + SendDelayedMessagesCaller delayedCaller = new SendDelayedMessagesCaller(this); + handler.postDelayed(delayedCaller, resendMillis); // after 30 sec, try the sending again + isHandlerSet = true; + } + serviceLogger.onMessageSentFailed(); + } else { + ExLog.i(this, TAG, "Message successfully sent."); + if (persistenceManager.areIntentsDelayed()) { + persistenceManager.removeIntent(intent); + } + lastSuccessfulSend = Calendar.getInstance().getTime(); + serviceLogger.onMessageSentSuccessful(); + + String callbackClassString = intent.getStringExtra(CALLBACK_CLASS); + ServerReplyCallback callback = null; + if (callbackClassString != null) { + try { + callback = (ServerReplyCallback) Class.forName(callbackClassString).newInstance(); + } catch (Exception e) { + ExLog.e(this, TAG, "Error while passing server response to callback"); + e.printStackTrace(); + } + } + if (callback != null) { + String raceId = intent.getStringExtra(CALLBACK_PAYLOAD); + callback.processResponse(this, inputStream, raceId); + } + } + } + + /** + * checks if there is network connectivity + * + * @return connectivity check value + */ + private boolean isConnected() { + NetworkInfo activeNetwork = connectivityManager.getActiveNetworkInfo(); + if (activeNetwork == null) { + return false; + } + return activeNetwork.isConnected(); + } + + /** + * a UUID that identifies this client session; can be used, e.g., to let the server identify subsequent requests coming from the same client + */ + public final static UUID uuid = UUID.randomUUID(); + + public static String getRaceLogEventSendAndReceiveUrl(Context context, final String raceGroupName, + final String raceName, final String fleetName) { + String url = String.format("%s/sailingserver/rc/racelog?"+ + RaceLogServletConstants.PARAMS_LEADERBOARD_NAME+"=%s&"+ + RaceLogServletConstants.PARAMS_RACE_COLUMN_NAME+"=%s&"+ + RaceLogServletConstants.PARAMS_RACE_FLEET_NAME+"=%s&"+ + RaceLogServletConstants.PARAMS_CLIENT_UUID+"=%s", + PrefUtils.getString(context, R.string.preference_server_url_key, R.string.preference_server_url_default), + URLEncoder.encode(raceGroupName), + URLEncoder.encode(raceName), URLEncoder.encode(fleetName), uuid); + return url; + } +} diff --git a/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/services/sending/SendDelayedMessagesCaller.java b/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/services/sending/SendDelayedMessagesCaller.java new file mode 100644 index 00000000000..43dfa07be31 --- /dev/null +++ b/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/services/sending/SendDelayedMessagesCaller.java @@ -0,0 +1,20 @@ +package com.sap.sailing.android.shared.services.sending; + +import android.content.Context; + +import com.sap.sailing.android.shared.logging.ExLog; + +public class SendDelayedMessagesCaller implements Runnable { + + private final static String TAG = SendDelayedMessagesCaller.class.getName(); + private Context context; + + public SendDelayedMessagesCaller(Context context) { + this.context = context; + } + + public void run() { + ExLog.i(context, TAG, "The Message Sending Service is called to send possibly delayed intents"); + context.startService(MessageSendingService.createSendDelayedIntent(context)); + } +} diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/services/sending/ServerReplyCallback.java b/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/services/sending/ServerReplyCallback.java similarity index 76% rename from mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/services/sending/ServerReplyCallback.java rename to mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/services/sending/ServerReplyCallback.java index 3182b993deb..0702e39bf25 100644 --- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/services/sending/ServerReplyCallback.java +++ b/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/services/sending/ServerReplyCallback.java @@ -1,15 +1,12 @@ -package com.sap.sailing.racecommittee.app.services.sending; +package com.sap.sailing.android.shared.services.sending; import java.io.InputStream; -import java.io.Serializable; import android.content.Context; import android.content.Intent; -import com.sap.sailing.domain.racelog.RaceLogEvent; - /** - * This callback is used to attach an operation to the sending of a {@link RaceLogEvent}, so + * This callback is used to attach an operation to the sending of a message, so * that the server reply to the performed POST request can be evaluated. * * Important: As the callback needs to be passed around in an {@link Intent} and also written @@ -21,5 +18,5 @@ public interface ServerReplyCallback { /** * The inputStream MUST be closed by the implementing class. */ - void processResponse(Context context, InputStream inputStream, Serializable raceId); + void processResponse(Context context, InputStream inputStream, String callbackPayload); } diff --git a/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/ui/activities/LoggableActivity.java b/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/ui/activities/LoggableActivity.java new file mode 100644 index 00000000000..b85cbb1a6a1 --- /dev/null +++ b/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/ui/activities/LoggableActivity.java @@ -0,0 +1,59 @@ +package com.sap.sailing.android.shared.ui.activities; + +import android.os.Bundle; +import android.support.v4.app.FragmentActivity; + +import com.sap.sailing.android.shared.logging.ExLog; +import com.sap.sailing.android.shared.logging.LifecycleLogger; + +public abstract class LoggableActivity extends FragmentActivity { + private static final String TAG = LoggableActivity.class.getName(); + + private LifecycleLogger lifeLogger; + + public LoggableActivity() { + this.lifeLogger = new LifecycleLogger(); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + lifeLogger.onCreate(this); + } + + @Override + protected void onStart() { + super.onStart(); + lifeLogger.onStart(this); + } + + @Override + protected void onResume() { + super.onResume(); + lifeLogger.onResume(this); + } + + @Override + protected void onPause() { + super.onPause(); + lifeLogger.onPause(this); + } + + @Override + protected void onStop() { + super.onStop(); + lifeLogger.onStop(this); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + lifeLogger.onDestroy(this); + } + + @Override + public void onBackPressed() { + super.onBackPressed(); + ExLog.i(this, TAG, String.format("Back pressed on activity %s", this.getClass().getSimpleName())); + } +} diff --git a/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/ui/activities/ResilientActivity.java b/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/ui/activities/ResilientActivity.java new file mode 100644 index 00000000000..86d836964e0 --- /dev/null +++ b/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/ui/activities/ResilientActivity.java @@ -0,0 +1,39 @@ +package com.sap.sailing.android.shared.ui.activities; + +import android.content.Intent; +import android.view.MenuItem; + +import com.sap.sailing.android.shared.logging.ExLog; + +public class ResilientActivity extends LoggableActivity { + private static final String TAG = ResilientActivity.class.getName(); + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case android.R.id.home: + ExLog.i(this, TAG, "Clicked HOME."); + return onHomeClicked(); + default: + return super.onOptionsItemSelected(item); + } + } + + protected boolean onHomeClicked() { + return false; + } + + protected void fadeActivity(Class activity, boolean newTopTask) { + Intent intent = new Intent(getBaseContext(), activity); + if (newTopTask) { + intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + } + fadeActivity(intent); + } + + protected void fadeActivity(Intent intent) { + startActivity(intent); + overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out); + } +} diff --git a/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/ui/activities/SendingServiceAwareActivity.java b/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/ui/activities/SendingServiceAwareActivity.java new file mode 100644 index 00000000000..21b552c66e5 --- /dev/null +++ b/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/ui/activities/SendingServiceAwareActivity.java @@ -0,0 +1,140 @@ +package com.sap.sailing.android.shared.ui.activities; + +import java.util.Date; + +import android.content.ComponentName; +import android.content.Context; +import android.content.Intent; +import android.content.ServiceConnection; +import android.os.IBinder; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; +import android.widget.Toast; + +import com.sap.sailing.android.shared.R; +import com.sap.sailing.android.shared.logging.ExLog; +import com.sap.sailing.android.shared.services.sending.MessageSendingService; +import com.sap.sailing.android.shared.services.sending.MessageSendingService.MessageSendingBinder; +import com.sap.sailing.android.shared.services.sending.MessageSendingService.MessageSendingServiceLogger; +import com.sap.sailing.android.shared.util.PrefUtils; + +public abstract class SendingServiceAwareActivity extends ResilientActivity { + + private class MessageSendingServiceConnection implements ServiceConnection, MessageSendingServiceLogger { + @Override + public void onServiceConnected(ComponentName className, IBinder service) { + MessageSendingBinder binder = (MessageSendingBinder) service; + sendingService = binder.getService(); + boundSendingService = true; + sendingService.setMessageSendingServiceLogger(this); + updateSendingServiceInformation(); + } + + @Override + public void onServiceDisconnected(ComponentName arg) { + boundSendingService = false; + } + + @Override + public void onMessageSentSuccessful() { + updateSendingServiceInformation(); + } + + @Override + public void onMessageSentFailed() { + updateSendingServiceInformation(); + } + } + + private static final String TAG = SendingServiceAwareActivity.class.getName(); + + protected MenuItem menuItemLive; + protected int menuItemLiveId = -1; + + protected boolean boundSendingService = false; + protected MessageSendingService sendingService; + private MessageSendingServiceConnection sendingServiceConnection; + + private String sendingServiceStatus = ""; + + public SendingServiceAwareActivity() { + this.sendingServiceConnection = new MessageSendingServiceConnection(); + } + + @Override + public void onStart() { + super.onStart(); + + Intent intent = new Intent(this, MessageSendingService.class); + bindService(intent, sendingServiceConnection, Context.BIND_AUTO_CREATE); + } + + @Override + public void onStop() { + super.onStop(); + + if (boundSendingService) { + unbindService(sendingServiceConnection); + boundSendingService = false; + } + } + + protected void updateSendingServiceInformation() { + if (menuItemLive == null) + return; + + if (!boundSendingService) + return; + + int errorCount = this.sendingService.getDelayedIntentsCount(); + if (errorCount > 0) { + menuItemLive.setIcon(R.drawable.ic_menu_share_red); + Date lastSuccessfulSend = this.sendingService.getLastSuccessfulSend(); + sendingServiceStatus = String.format("Currently %d events waiting to be sent.\nLast successful sent was at %s", + errorCount, lastSuccessfulSend == null ? "never" : lastSuccessfulSend); + } else { + menuItemLive.setIcon(R.drawable.ic_menu_share); + sendingServiceStatus = String.format("Currently no event waiting to be sent.", errorCount); + } + } + + /** + * @return the resource ID for the options menu, {@code 0} if none. + * The menu item displaying the connection status is added automatically. + */ + protected abstract int getOptionsMenuResId(); + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + MenuInflater inflater = getMenuInflater(); + inflater.inflate(R.menu.options_menu_live_status, menu); + menuItemLive = menu.findItem(R.id.options_menu_live); + if (getOptionsMenuResId() != 0) { + inflater.inflate(getOptionsMenuResId(), menu); + } + return true; + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + if (R.id.options_menu_live == item.getItemId()) { + ExLog.i(this, TAG, "Clicked LIVE."); + Toast.makeText(this, getLiveIconText(), Toast.LENGTH_LONG).show(); + return true; + } else { + return super.onOptionsItemSelected(item); + } + } + + @Override + public boolean onPrepareOptionsMenu(Menu menu) { + updateSendingServiceInformation(); + return super.onPrepareOptionsMenu(menu); + } + + private String getLiveIconText() { + return String.format("Connected to: %s\n%s", PrefUtils.getString(this, R.string.preference_server_url_key, + R.string.preference_server_url_default), sendingServiceStatus); + } +} diff --git a/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/ui/activities/SystemInformationActivityHelper.java b/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/ui/activities/SystemInformationActivityHelper.java new file mode 100644 index 00000000000..ccfa6a9194d --- /dev/null +++ b/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/ui/activities/SystemInformationActivityHelper.java @@ -0,0 +1,88 @@ +package com.sap.sailing.android.shared.ui.activities; + +import java.util.Date; + +import android.content.pm.PackageInfo; +import android.text.format.DateFormat; +import android.view.View; +import android.view.View.OnClickListener; +import android.widget.ArrayAdapter; +import android.widget.Button; +import android.widget.ListView; +import android.widget.TextView; +import android.widget.Toast; + +import com.sap.sailing.android.shared.R; +import com.sap.sailing.android.shared.util.AppUtils; + +public class SystemInformationActivityHelper { + private final SendingServiceAwareActivity activity; + + public SystemInformationActivityHelper(SendingServiceAwareActivity activity, String deviceIdentifier) { + this.activity = activity; + activity.setContentView(R.layout.system_information_view); + setupVersionView(deviceIdentifier); + setupInstalledView(); + setupPersistenceView(); + } + + /** + * Override the SendingServiceInformation with this content, and then call parent. + */ + public void updateSendingServiceInformation() { + TextView statusView = (TextView) activity.findViewById(R.id.system_information_persistence_status); + ListView waitingView = (ListView) activity.findViewById(R.id.system_information_persistence_waiting); + if (activity.boundSendingService) { + Date lastSuccessfulSend = activity.sendingService.getLastSuccessfulSend(); + statusView.setText(String.format("Currently %d events waiting to be sent.\nLast successful sent was at: %s.", + activity.sendingService.getDelayedIntentsCount(), lastSuccessfulSend == null ? "never" : lastSuccessfulSend)); + + waitingView.setAdapter(new ArrayAdapter(activity, + android.R.layout.simple_list_item_1, + activity.sendingService.getDelayedIntensContent())); + } else { + statusView.setText(activity.getString(R.string.generic_error)); + } + } + + private void setupPersistenceView() { + // status and list view is updated by updateSendingServiceInformation + Button clearButton = (Button) activity.findViewById(R.id.system_information_persistence_clear); + clearButton.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View view) { + if (activity.boundSendingService) { + activity.sendingService.clearDelayedIntents(); + } else { + Toast.makeText(activity.getApplicationContext(), "", Toast.LENGTH_SHORT).show(); + } + } + }); + } + + private void setupVersionView(String deviceIdentifier) { + TextView identifierView = (TextView) activity.findViewById(R.id.system_information_application_identifier); + identifierView.setText(deviceIdentifier); + + TextView versionView = (TextView) activity.findViewById(R.id.system_information_application_version); + PackageInfo info = AppUtils.getPackageInfo(activity); + if (info == null) { + versionView.setText(activity.getString(R.string.generic_error)); + } else { + versionView.setText(String.format("%s (Code %s)", info.versionName, info.versionCode)); + } + } + + private void setupInstalledView() { + TextView installView = (TextView) activity.findViewById(R.id.system_information_application_install); + PackageInfo info = AppUtils.getPackageInfo(activity.getApplication()); + if (info == null) { + installView.setText(activity.getString(R.string.generic_error)); + } else { + Date installDate = new Date(info.lastUpdateTime); + installView.setText(String.format("%s - %s", DateFormat.getLongDateFormat(activity).format(installDate), + DateFormat.getTimeFormat(activity).format(installDate))); + } + } + +} diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/adapters/ArrayRemoveAdapter.java b/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/ui/adapters/ArrayRemoveAdapter.java similarity index 95% rename from mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/adapters/ArrayRemoveAdapter.java rename to mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/ui/adapters/ArrayRemoveAdapter.java index b611b0401fd..00b1560a21a 100644 --- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/adapters/ArrayRemoveAdapter.java +++ b/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/ui/adapters/ArrayRemoveAdapter.java @@ -1,4 +1,4 @@ -package com.sap.sailing.racecommittee.app.ui.adapters; +package com.sap.sailing.android.shared.ui.adapters; import java.util.List; @@ -11,7 +11,7 @@ import android.widget.ArrayAdapter; import android.widget.ImageButton; import android.widget.TextView; -import com.sap.sailing.racecommittee.app.R; +import com.sap.sailing.android.shared.R; public class ArrayRemoveAdapter extends ArrayAdapter { diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/preference/BasePreferenceFragment.java b/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/ui/fragments/preference/BasePreferenceFragment.java similarity index 95% rename from mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/preference/BasePreferenceFragment.java rename to mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/ui/fragments/preference/BasePreferenceFragment.java index 52edb27ed7b..d66fbd58fff 100644 --- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/preference/BasePreferenceFragment.java +++ b/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/ui/fragments/preference/BasePreferenceFragment.java @@ -1,4 +1,4 @@ -package com.sap.sailing.racecommittee.app.ui.fragments.preference; +package com.sap.sailing.android.shared.ui.fragments.preference; import java.util.ArrayList; import java.util.Collections; @@ -14,8 +14,8 @@ import android.preference.Preference.OnPreferenceChangeListener; import android.preference.PreferenceFragment; import android.preference.PreferenceManager; -import com.sap.sailing.racecommittee.app.ui.utils.MultiplePreferenceChangeListener; -import com.sap.sailing.racecommittee.app.ui.views.EditSetPreference; +import com.sap.sailing.android.shared.ui.utils.MultiplePreferenceChangeListener; +import com.sap.sailing.android.shared.ui.views.EditSetPreference; /** * Created by I074137 on 18.09.13. diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/utils/MultiplePreferenceChangeListener.java b/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/ui/utils/MultiplePreferenceChangeListener.java similarity index 95% rename from mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/utils/MultiplePreferenceChangeListener.java rename to mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/ui/utils/MultiplePreferenceChangeListener.java index 9bd38ecdb87..3547be32764 100644 --- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/utils/MultiplePreferenceChangeListener.java +++ b/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/ui/utils/MultiplePreferenceChangeListener.java @@ -1,4 +1,4 @@ -package com.sap.sailing.racecommittee.app.ui.utils; +package com.sap.sailing.android.shared.ui.utils; import java.util.HashSet; import java.util.Set; diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/views/EditSetPreference.java b/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/ui/views/EditSetPreference.java similarity index 94% rename from mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/views/EditSetPreference.java rename to mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/ui/views/EditSetPreference.java index cf4517747cc..6e222ac2615 100644 --- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/views/EditSetPreference.java +++ b/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/ui/views/EditSetPreference.java @@ -1,4 +1,4 @@ -package com.sap.sailing.racecommittee.app.ui.views; +package com.sap.sailing.android.shared.ui.views; import java.util.ArrayList; import java.util.Arrays; @@ -20,9 +20,9 @@ import android.widget.AutoCompleteTextView; import android.widget.Button; import android.widget.ListView; -import com.sap.sailing.racecommittee.app.R; -import com.sap.sailing.racecommittee.app.logging.ExLog; -import com.sap.sailing.racecommittee.app.ui.adapters.ArrayRemoveAdapter; +import com.sap.sailing.android.shared.R; +import com.sap.sailing.android.shared.logging.ExLog; +import com.sap.sailing.android.shared.ui.adapters.ArrayRemoveAdapter; public class EditSetPreference extends DialogPreference { @@ -113,7 +113,7 @@ public class EditSetPreference extends DialogPreference { protected void onDialogClosed(boolean positiveResult) { if (positiveResult) { if (callChangeListener(new HashSet(currentValue))) { - ExLog.i(TAG, "Storing result..."); + ExLog.i(getContext(), TAG, "Storing result..."); persistStringSet(currentValue); } } diff --git a/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/util/AppUtils.java b/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/util/AppUtils.java new file mode 100644 index 00000000000..17a4adc5834 --- /dev/null +++ b/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/util/AppUtils.java @@ -0,0 +1,15 @@ +package com.sap.sailing.android.shared.util; + +import android.content.Context; +import android.content.pm.PackageInfo; +import android.content.pm.PackageManager.NameNotFoundException; + +public class AppUtils { + public static PackageInfo getPackageInfo(Context app) { + try { + return app.getPackageManager().getPackageInfo(app.getPackageName(), 0); + } catch (NameNotFoundException e) { + return null; + } + } +} diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/utils/CollectionUtils.java b/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/util/CollectionUtils.java similarity index 89% rename from mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/utils/CollectionUtils.java rename to mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/util/CollectionUtils.java index 5af691025be..afb15732e3e 100644 --- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/utils/CollectionUtils.java +++ b/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/util/CollectionUtils.java @@ -1,25 +1,25 @@ -package com.sap.sailing.racecommittee.app.utils; - -import java.util.ArrayList; -import java.util.Collection; - -import com.sap.sse.common.Util; - -public class CollectionUtils { - - public static ArrayList newArrayList(final Iterable iterable) { - ArrayList list = new ArrayList(); - Util.addAll(iterable, list); - return list; - } - - public static boolean isEqualCollection(final Collection left, final Collection right) { - if (left.size() != right.size()) { - return false; - } - - // There may be better implementations ;-) - return left.containsAll(right) && right.containsAll(left); - } - -} +package com.sap.sailing.android.shared.util; + +import java.util.ArrayList; +import java.util.Collection; + +import com.sap.sse.common.Util; + +public class CollectionUtils { + + public static ArrayList newArrayList(final Iterable iterable) { + ArrayList list = new ArrayList(); + Util.addAll(iterable, list); + return list; + } + + public static boolean isEqualCollection(final Collection left, final Collection right) { + if (left.size() != right.size()) { + return false; + } + + // There may be better implementations ;-) + return left.containsAll(right) && right.containsAll(left); + } + +} diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/utils/FileHandlerUtils.java b/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/util/FileHandlerUtils.java similarity index 58% rename from mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/utils/FileHandlerUtils.java rename to mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/util/FileHandlerUtils.java index 0f144b21bef..57a18b1028c 100644 --- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/utils/FileHandlerUtils.java +++ b/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/util/FileHandlerUtils.java @@ -1,39 +1,51 @@ -package com.sap.sailing.racecommittee.app.utils; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; - -import com.sap.sailing.racecommittee.app.logging.ExLog; - -public class FileHandlerUtils { - - private final static String TAG = FileHandlerUtils.class.getName(); - - public static String convertStreamToString(InputStream inputStream) { - /* - * To convert the InputStream to String we use the BufferedReader.readLine() method. We iterate until the - * BufferedReader return null which means there's no more data to read. Each line will appended to a - * StringBuilder and returned as String. - */ - BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); - StringBuilder stringBuilder = new StringBuilder(); - - String line = null; - try { - while ((line = reader.readLine()) != null) { - stringBuilder.append(line + "\n"); - } - } catch (IOException e) { - ExLog.e(TAG, "In Method convertStreamToString while converting stream to string: " + e.getMessage()); - } finally { - try { - inputStream.close(); - } catch (IOException e) { - ExLog.e(TAG, "In Method convertStreamToString while closing the input stream: " + e.getMessage()); - } - } - return stringBuilder.toString(); - } -} +package com.sap.sailing.android.shared.util; + +import java.io.BufferedReader; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; + +import android.content.Context; +import android.os.Environment; + +import com.sap.sailing.android.shared.R; +import com.sap.sailing.android.shared.logging.ExLog; + +public class FileHandlerUtils { + + private final static String TAG = FileHandlerUtils.class.getName(); + + public static String convertStreamToString(InputStream inputStream, Context context) { + /* + * To convert the InputStream to String we use the BufferedReader.readLine() method. We iterate until the + * BufferedReader return null which means there's no more data to read. Each line will appended to a + * StringBuilder and returned as String. + */ + BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); + StringBuilder stringBuilder = new StringBuilder(); + + String line = null; + try { + while ((line = reader.readLine()) != null) { + stringBuilder.append(line + "\n"); + } + } catch (IOException e) { + ExLog.e(context, TAG, "In Method convertStreamToString while converting stream to string: " + e.getMessage()); + } finally { + try { + inputStream.close(); + } catch (IOException e) { + ExLog.e(context, TAG, "In Method convertStreamToString while closing the input stream: " + e.getMessage()); + } + } + return stringBuilder.toString(); + } + + public static File getExternalApplicationFolder(Context context) { + String appFolder = context.getResources().getString(R.string.app_folder); + File dir = new File(Environment.getExternalStorageDirectory() + File.separator + appFolder); + dir.mkdirs(); + return dir; + } +} diff --git a/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/util/PrefUtils.java b/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/util/PrefUtils.java new file mode 100644 index 00000000000..b8b1846025f --- /dev/null +++ b/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/util/PrefUtils.java @@ -0,0 +1,38 @@ +package com.sap.sailing.android.shared.util; + +import android.content.Context; +import android.content.SharedPreferences; +import android.preference.PreferenceManager; + +public class PrefUtils { + private static String key; + private static SharedPreferences prefs; + private static Context lastContext; + + private static void setup(Context context, int keyResId) { + Context appContext = context.getApplicationContext(); + if (appContext != lastContext) { + lastContext = appContext; + prefs = PreferenceManager.getDefaultSharedPreferences(appContext); + } + key = appContext.getString(keyResId); + } + + public static String getString(Context context, int keyResId, int defaultResId) { + setup(context, keyResId); + String defVal = context.getString(defaultResId); + return prefs.getString(key, defVal); + } + + public static boolean getBoolean(Context context, int keyResId, int defaultResId) { + setup(context, keyResId); + boolean defVal = context.getResources().getBoolean(defaultResId); + return prefs.getBoolean(key, defVal); + } + + public static int getInt(Context context, int keyResId, int defaultResId) { + setup(context, keyResId); + int defVal = context.getResources().getInteger(defaultResId); + return prefs.getInt(key, defVal); + } +} diff --git a/mobile/com.sap.sailing.android.tracking.app/.classpath b/mobile/com.sap.sailing.android.tracking.app/.classpath new file mode 100644 index 00000000000..7bc01d9a9c6 --- /dev/null +++ b/mobile/com.sap.sailing.android.tracking.app/.classpath @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/mobile/com.sap.sailing.android.tracking.app/.gitignore b/mobile/com.sap.sailing.android.tracking.app/.gitignore new file mode 100644 index 00000000000..ff94b24a6bd --- /dev/null +++ b/mobile/com.sap.sailing.android.tracking.app/.gitignore @@ -0,0 +1,3 @@ +/gen +/bin +/target diff --git a/mobile/com.sap.sailing.android.tracking.app/.project b/mobile/com.sap.sailing.android.tracking.app/.project new file mode 100644 index 00000000000..58646ee8dce --- /dev/null +++ b/mobile/com.sap.sailing.android.tracking.app/.project @@ -0,0 +1,44 @@ + + + com.sap.sailing.android.tracking.app + + + + + + com.android.ide.eclipse.adt.ResourceManagerBuilder + + + + + com.android.ide.eclipse.adt.PreCompilerBuilder + + + + + org.eclipse.jdt.core.javabuilder + + + + + com.android.ide.eclipse.adt.ApkBuilder + + + + + + com.android.ide.eclipse.adt.AndroidNature + org.eclipse.jdt.core.javanature + + + + 1359465261368 + src + 30 + + org.eclipse.ui.ide.multiFilter + 1.0-name-matches-false-false-.svn + + + + diff --git a/mobile/com.sap.sailing.android.tracking.app/.settings/org.eclipse.jdt.core.prefs b/mobile/com.sap.sailing.android.tracking.app/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 00000000000..b080d2ddc88 --- /dev/null +++ b/mobile/com.sap.sailing.android.tracking.app/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,4 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6 +org.eclipse.jdt.core.compiler.compliance=1.6 +org.eclipse.jdt.core.compiler.source=1.6 diff --git a/mobile/com.sap.sailing.android.tracking.app/AndroidManifest.xml b/mobile/com.sap.sailing.android.tracking.app/AndroidManifest.xml new file mode 100644 index 00000000000..bf9082551ff --- /dev/null +++ b/mobile/com.sap.sailing.android.tracking.app/AndroidManifest.xml @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/mobile/com.sap.sailing.android.tracking.app/assets/empty b/mobile/com.sap.sailing.android.tracking.app/assets/empty new file mode 100644 index 00000000000..e69de29bb2d diff --git a/mobile/com.sap.sailing.android.tracking.app/lint.xml b/mobile/com.sap.sailing.android.tracking.app/lint.xml new file mode 100644 index 00000000000..7313c206c6f --- /dev/null +++ b/mobile/com.sap.sailing.android.tracking.app/lint.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/mobile/com.sap.sailing.android.tracking.app/pom.xml b/mobile/com.sap.sailing.android.tracking.app/pom.xml new file mode 100644 index 00000000000..acd4a8df845 --- /dev/null +++ b/mobile/com.sap.sailing.android.tracking.app/pom.xml @@ -0,0 +1,103 @@ + + + 4.0.0 + + + com.sap.sailing + mobile + 1.0.0-SNAPSHOT + + + com.sap.sailing + com.sap.sailing.android.tracking.app + apk + + + + + android + android + + + + + android.support + compatibility-v4 + + + + + com.google.android.maps + maps + 13_r1 + provided + + + + + com.google.android.gms + google-play-services + 13 + jar + + + + com.google.android.gms + google-play-services + 13 + apklib + + + + com.sap.sailing + com.sap.sailing.android.shared + 1.0.0-SNAPSHOT + apklib + + + + + ${project.artifactId} + src + + + com.jayway.maven.plugins.android.generation2 + android-maven-plugin + + true + true + + 13 + + true + + + true + proguard-project.txt + + ${env.ANDROID_HOME}/tools/proguard/proguard-android.txt + + + + false + + + + + + apk + + + + + ^com\.sap\..*.jar$ + + + + + + + + + diff --git a/mobile/com.sap.sailing.android.tracking.app/proguard-project.txt b/mobile/com.sap.sailing.android.tracking.app/proguard-project.txt new file mode 100644 index 00000000000..37fbcf2fce2 --- /dev/null +++ b/mobile/com.sap.sailing.android.tracking.app/proguard-project.txt @@ -0,0 +1,64 @@ +# To enable ProGuard in your project, edit project.properties +# to define the proguard.config property as described in that file. +# +# Add project specific ProGuard rules here. +# By default, the flags in this file are appended to flags specified +# in ${sdk.dir}/tools/proguard/proguard-android.txt +# You can edit the include path and order by changing the ProGuard +# include property in project.properties. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +-keep public class * extends android.app.Activity +-keep public class * extends android.app.Application +-keep public class * extends android.app.Service +-keep public class * extends android.content.BroadcastReceiver +-keep public class * extends android.content.ContentProvider +-keep public class * extends android.support.v4.app.FragmentActivity +-keep public class * extends android.support.v4.app.Fragment + +-keep public class * extends android.view.View { + public (android.content.Context); + public (android.content.Context, android.util.AttributeSet); + public (android.content.Context, android.util.AttributeSet, int); + public void set*(...); +} + +-keepclasseswithmembers class * { + public (android.content.Context, android.util.AttributeSet); +} + +-keepclasseswithmembers class * { + public (android.content.Context, android.util.AttributeSet, int); +} + +# Remove the following lines as soon as the gateway.serialization bundle +# is split up! +-dontwarn com.sap.sailing.domain.base.** +-dontwarn com.sap.sailing.domain.tracking.** +-dontwarn com.sap.sailing.domain.masterdataimport.** +-dontwarn com.sap.sailing.domain.leaderboard.** + +# google stuff +-dontwarn com.google.android.gms.** + +-keep class com.google.android.gms.maps.** { *; } +-keep interface com.google.android.gms.maps.** { *; } + +-keep class * extends java.util.ListResourceBundle { + protected Object[][] getContents(); +} + +-keep public class com.google.android.gms.common.internal.safeparcel.SafeParcelable { + public static final *** NULL; +} + +-keepnames @com.google.android.gms.common.annotation.KeepName class * +-keepclassmembernames class * { + @ccom.google.android.gms.common.annotation.KeepName *; +} + +-keepnames class * implements android.os.Parcelable { + public static final ** CREATOR; +} \ No newline at end of file diff --git a/mobile/com.sap.sailing.android.tracking.app/project.properties b/mobile/com.sap.sailing.android.tracking.app/project.properties new file mode 100644 index 00000000000..5186891db89 --- /dev/null +++ b/mobile/com.sap.sailing.android.tracking.app/project.properties @@ -0,0 +1,16 @@ +# This file is automatically generated by Android Tools. +# Do not modify this file -- YOUR CHANGES WILL BE ERASED! +# +# This file must be checked in Version Control Systems. +# +# To customize properties used by the Ant build system edit +# "ant.properties", and override values to adapt the script to your +# project structure. +# +# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home): +#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt + +# Project target. +target=Google Inc.:Google APIs:13 +android.library.reference.1=../google-play-services_lib +android.library.reference.2=../com.sap.sailing.android.shared diff --git a/mobile/com.sap.sailing.android.tracking.app/res/drawable-hdpi/ic_menu_info_details.png b/mobile/com.sap.sailing.android.tracking.app/res/drawable-hdpi/ic_menu_info_details.png new file mode 100644 index 00000000000..6a7a1e94a73 Binary files /dev/null and b/mobile/com.sap.sailing.android.tracking.app/res/drawable-hdpi/ic_menu_info_details.png differ diff --git a/mobile/com.sap.sailing.android.tracking.app/res/drawable-hdpi/icon.png b/mobile/com.sap.sailing.android.tracking.app/res/drawable-hdpi/icon.png new file mode 100644 index 00000000000..3b520c3e579 Binary files /dev/null and b/mobile/com.sap.sailing.android.tracking.app/res/drawable-hdpi/icon.png differ diff --git a/mobile/com.sap.sailing.android.tracking.app/res/drawable-hdpi/sap_sailing_app_icon.png b/mobile/com.sap.sailing.android.tracking.app/res/drawable-hdpi/sap_sailing_app_icon.png new file mode 100644 index 00000000000..6d2e034e4b8 Binary files /dev/null and b/mobile/com.sap.sailing.android.tracking.app/res/drawable-hdpi/sap_sailing_app_icon.png differ diff --git a/mobile/com.sap.sailing.android.tracking.app/res/drawable-ldpi/ic_menu_info_details.png b/mobile/com.sap.sailing.android.tracking.app/res/drawable-ldpi/ic_menu_info_details.png new file mode 100644 index 00000000000..55c57d5c544 Binary files /dev/null and b/mobile/com.sap.sailing.android.tracking.app/res/drawable-ldpi/ic_menu_info_details.png differ diff --git a/mobile/com.sap.sailing.android.tracking.app/res/drawable-ldpi/sap_sailing_app_icon.png b/mobile/com.sap.sailing.android.tracking.app/res/drawable-ldpi/sap_sailing_app_icon.png new file mode 100644 index 00000000000..6a3e2d4a57a Binary files /dev/null and b/mobile/com.sap.sailing.android.tracking.app/res/drawable-ldpi/sap_sailing_app_icon.png differ diff --git a/mobile/com.sap.sailing.android.tracking.app/res/drawable-mdpi/ic_menu_info_details.png b/mobile/com.sap.sailing.android.tracking.app/res/drawable-mdpi/ic_menu_info_details.png new file mode 100644 index 00000000000..18b15b5adda Binary files /dev/null and b/mobile/com.sap.sailing.android.tracking.app/res/drawable-mdpi/ic_menu_info_details.png differ diff --git a/mobile/com.sap.sailing.android.tracking.app/res/drawable-mdpi/sap_sailing_app_icon.png b/mobile/com.sap.sailing.android.tracking.app/res/drawable-mdpi/sap_sailing_app_icon.png new file mode 100644 index 00000000000..edb8f018a5d Binary files /dev/null and b/mobile/com.sap.sailing.android.tracking.app/res/drawable-mdpi/sap_sailing_app_icon.png differ diff --git a/mobile/com.sap.sailing.android.tracking.app/res/drawable-xhdpi/ic_menu_info_details.png b/mobile/com.sap.sailing.android.tracking.app/res/drawable-xhdpi/ic_menu_info_details.png new file mode 100644 index 00000000000..24ea5437337 Binary files /dev/null and b/mobile/com.sap.sailing.android.tracking.app/res/drawable-xhdpi/ic_menu_info_details.png differ diff --git a/mobile/com.sap.sailing.android.tracking.app/res/drawable-xhdpi/sap_sailing_app_icon.png b/mobile/com.sap.sailing.android.tracking.app/res/drawable-xhdpi/sap_sailing_app_icon.png new file mode 100644 index 00000000000..4d623e95d3e Binary files /dev/null and b/mobile/com.sap.sailing.android.tracking.app/res/drawable-xhdpi/sap_sailing_app_icon.png differ diff --git a/mobile/com.sap.sailing.android.tracking.app/res/drawable/settings_grey.png b/mobile/com.sap.sailing.android.tracking.app/res/drawable/settings_grey.png new file mode 100644 index 00000000000..a5ab5969c03 Binary files /dev/null and b/mobile/com.sap.sailing.android.tracking.app/res/drawable/settings_grey.png differ diff --git a/mobile/com.sap.sailing.android.tracking.app/res/layout/launch_activity.xml b/mobile/com.sap.sailing.android.tracking.app/res/layout/launch_activity.xml new file mode 100644 index 00000000000..41a818c6a74 --- /dev/null +++ b/mobile/com.sap.sailing.android.tracking.app/res/layout/launch_activity.xml @@ -0,0 +1,13 @@ + + + +