diff --git a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/DomainObjectFactory.java b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/DomainObjectFactory.java index 9841970faa6..b0540dec3c5 100755 --- a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/DomainObjectFactory.java +++ b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/DomainObjectFactory.java @@ -31,5 +31,7 @@ public interface DomainObjectFactory { LeaderboardGroup loadLeaderboardGroup(String name); Iterable getAllLeaderboardGroups(); + + Iterable getLeaderboardsNotInGroup(); } 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 5298eccefc2..af3fd309dc5 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 @@ -212,7 +212,7 @@ public class DomainObjectFactoryImpl implements DomainObjectFactory { @Override public Iterable getAllLeaderboardGroups() { DBCollection leaderboardGroupCollection = database.getCollection(CollectionNames.LEADERBOARD_GROUPS.name()); - ArrayList leaderboardGroups = new ArrayList(); + Set leaderboardGroups = new HashSet(); try { for (DBObject o : leaderboardGroupCollection.find()) { @@ -231,7 +231,7 @@ public class DomainObjectFactoryImpl implements DomainObjectFactory { String name = (String) o.get(FieldNames.LEADERBOARD_GROUP_NAME.name()); String description = (String) o.get(FieldNames.LEADERBOARD_GROUP_DESCRIPTION.name()); - ArrayList leaderboards = new ArrayList<>(); + ArrayList leaderboards = new ArrayList(); BasicDBList dbLeaderboardIds = (BasicDBList) o.get(FieldNames.LEADERBOARD_GROUP_LEADERBOARDS.name()); for (Object object : dbLeaderboardIds) { @@ -242,5 +242,26 @@ public class DomainObjectFactoryImpl implements DomainObjectFactory { return new LeaderboardGroupImpl(name, description, leaderboards); } + + @Override + public Iterable getLeaderboardsNotInGroup() { + DBCollection leaderboardCollection = database.getCollection(CollectionNames.LEADERBOARDS.name()); + DBCollection leaderboardGroupCollection = database.getCollection(CollectionNames.LEADERBOARD_GROUPS.name()); + + Set result = new HashSet(); + try { + for (DBObject o : leaderboardCollection.find()) { + ObjectId leaderboardId = (ObjectId) o.get("_id"); + BasicDBObject query = new BasicDBObject(FieldNames.LEADERBOARD_GROUP_LEADERBOARDS.name(), leaderboardId); + if (leaderboardGroupCollection.count(query) == 0) { + result.add(loadLeaderboard(o)); + } + } + } catch (Throwable t) { + logger.log(Level.SEVERE, "Error connecting to MongoDB, unable to load leaderboards."); + logger.throwing(DomainObjectFactoryImpl.class.getName(), "getAllLeaderboards", t); + } + return result; + } }