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 e80313dbe5a..a3c0963188f 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 @@ -546,9 +546,12 @@ public class DomainObjectFactoryImpl implements DomainObjectFactory { DBCollection leaderboardCollection = database.getCollection(CollectionNames.LEADERBOARDS.name()); Set result = new HashSet(); try { - //Don't change the query object, unless you know what you're doing + // Don't change the query object, unless you know what you're doing BasicDBObject query = new BasicDBObject("$where", "function() { return db." + CollectionNames.LEADERBOARD_GROUPS.name() + ".find({ " - + FieldNames.LEADERBOARD_GROUP_LEADERBOARDS.name() + ": this._id }).count() == 0; }"); + + FieldNames.LEADERBOARD_GROUP_LEADERBOARDS.name() + ": this._id }).count() == 0 && " + + "db."+CollectionNames.LEADERBOARD_GROUPS.name()+".find({ "+FieldNames.LEADERBOARD_GROUP_OVERALL_LEADERBOARD.name() + ": this._id }).count() == 0 && " + + "db."+CollectionNames.LEADERBOARD_GROUPS.name()+".find({ "+FieldNames.LEADERBOARD_GROUP_OVERALL_LEADERBOARD.name()+ + ": this."+FieldNames.LEADERBOARD_NAME.name()+" }).count() == 0; }}"); for (DBObject o : leaderboardCollection.find(query)) { final Leaderboard loadedLeaderboard = loadLeaderboard(o, regattaRegistry, leaderboardRegistry, /* groupForMetaLeaderboard */ null); if (loadedLeaderboard != null) { diff --git a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/media/impl/MediaDBImpl.java b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/media/impl/MediaDBImpl.java index b8cfcdb62c2..8b0300c4ca0 100644 --- a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/media/impl/MediaDBImpl.java +++ b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/media/impl/MediaDBImpl.java @@ -2,6 +2,7 @@ package com.sap.sailing.domain.persistence.media.impl; import java.util.ArrayList; import java.util.Collection; +import java.util.Collections; import java.util.Date; import java.util.List; @@ -153,28 +154,32 @@ public class MediaDBImpl implements MediaDB { @Override public Collection queryOverlappingMediaTracks(Date rangeStart, Date rangeEnd) { - BasicDBObject startTimeCondition = new BasicDBObject(); - startTimeCondition.put(DbNames.Fields.STARTTIME.name(), new BasicDBObject("$gt", rangeStart)); - startTimeCondition.put(DbNames.Fields.STARTTIME.name(), new BasicDBObject("$lt", rangeEnd)); - BasicDBObject endTimeCondition = new BasicDBObject(); - - // Should actually be "AND greater than rangeStart - duration". - // However, using values calculated on server side turns out to be a nightmare with mongodb. - // Instead do the remaining filtering on client side... - endTimeCondition.put(DbNames.Fields.STARTTIME.name(), new BasicDBObject("$lt", rangeStart)); - - DBObject query = QueryBuilder.start().or(startTimeCondition, endTimeCondition).get(); - - DBCursor cursor = getVideoCollection().find(query).sort(sortByStartTimeAndTitle); - - List result = new ArrayList<>(cursor.count()); - while (cursor.hasNext()) { - DBMediaTrack resultCandidate = createMediaObjectFromDB(cursor.next()); - if (resultCandidate.durationInMillis > rangeStart.getTime() - resultCandidate.startTime.getTime()) { - result.add(resultCandidate); + if ((rangeStart != null) && (rangeEnd != null)) { + BasicDBObject startTimeCondition = new BasicDBObject(); + startTimeCondition.put(DbNames.Fields.STARTTIME.name(), new BasicDBObject("$gt", rangeStart)); + startTimeCondition.put(DbNames.Fields.STARTTIME.name(), new BasicDBObject("$lt", rangeEnd)); + BasicDBObject endTimeCondition = new BasicDBObject(); + + // Should actually be "AND greater than rangeStart - duration". + // However, using values calculated on server side turns out to be a nightmare with mongodb. + // Instead do the remaining filtering on client side... + endTimeCondition.put(DbNames.Fields.STARTTIME.name(), new BasicDBObject("$lt", rangeStart)); + + DBObject query = QueryBuilder.start().or(startTimeCondition, endTimeCondition).get(); + + DBCursor cursor = getVideoCollection().find(query).sort(sortByStartTimeAndTitle); + + List result = new ArrayList<>(cursor.count()); + while (cursor.hasNext()) { + DBMediaTrack resultCandidate = createMediaObjectFromDB(cursor.next()); + if (resultCandidate.durationInMillis > rangeStart.getTime() - resultCandidate.startTime.getTime()) { + result.add(resultCandidate); + } } + return result; + } else { + return Collections.emptyList(); } - return result; } } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RaceColumnInLeaderboardDialog.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RaceColumnInLeaderboardDialog.java index 5e0f4ec29c1..d587fc99354 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RaceColumnInLeaderboardDialog.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RaceColumnInLeaderboardDialog.java @@ -70,7 +70,7 @@ public class RaceColumnInLeaderboardDialog extends DataEntryDialog getMediaTracksForRace(RegattaAndRaceIdentifier regattaAndRaceIdentifier) { TrackedRace trackedRace = racingEventServiceTracker.getService().getExistingTrackedRace(regattaAndRaceIdentifier); if (trackedRace != null) { - Date raceStart = trackedRace.getStartOfRace().asDate(); - Date raceEnd = trackedRace.getEndOfRace().asDate(); + Date raceStart = trackedRace.getStartOfRace() == null ? null : trackedRace.getStartOfRace().asDate(); + Date raceEnd = trackedRace.getEndOfRace() == null ? null : trackedRace.getEndOfRace().asDate(); return createMediaTracksFromDB(mediaDB().queryOverlappingMediaTracks(raceStart , raceEnd)); } else { return Collections.emptyList(); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/charts/WindChart.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/charts/WindChart.java index 2af1e3e8f62..618ad81d66b 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/charts/WindChart.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/charts/WindChart.java @@ -402,10 +402,10 @@ public class WindChart extends RaceChart implements Component double deltaMax = Math.abs(yMax - y); double yDown = y - 360; - double deltaMinDown = Math.abs(yMin - Math.abs(yDown)); + double deltaMinDown = Math.abs(yMin - yDown); double yUp = y + 360; - double deltaMaxUp = Math.abs(yMax - Math.abs(yUp)); + double deltaMaxUp = Math.abs(yMax - yUp); if (!(deltaMin <= deltaMinDown && deltaMin <= deltaMaxUp) && !(deltaMax <= deltaMinDown && deltaMax <= deltaMaxUp)) {