package org.atlasapi.persistence.content.mongo; import org.atlasapi.persistence.content.ResolvedContent; import org.atlasapi.persistence.content.ResolvedContent.ResolvedContentBuilder; import com.metabroadcast.common.persistence.mongo.DatabasedMongo; import com.mongodb.DBCollection; import com.mongodb.DBObject; import org.atlasapi.media.entity.ContentGroup; import org.atlasapi.persistence.content.ContentCategory; import org.atlasapi.persistence.content.ContentGroupResolver; import org.atlasapi.persistence.media.entity.ContentGroupTranslator; import org.atlasapi.persistence.media.entity.IdentifiedTranslator; import static com.metabroadcast.common.persistence.mongo.MongoBuilders.where; import com.mongodb.DBCursor; import java.util.HashSet; import java.util.Set; public class MongoContentGroupResolver implements ContentGroupResolver { private final ContentGroupTranslator contentGroupTranslator; private final DBCollection contentGroups; public MongoContentGroupResolver(DatabasedMongo mongo) { MongoContentTables contentTables = new MongoContentTables(mongo); this.contentGroups = contentTables.collectionFor(ContentCategory.CONTENT_GROUP); this.contentGroupTranslator = new ContentGroupTranslator(); } @Override public ResolvedContent findByCanonicalUris(Iterable<String> uris) { ResolvedContentBuilder results = ResolvedContent.builder(); for (String uri : uris) { DBObject found = contentGroups.findOne(where().fieldEquals(IdentifiedTranslator.CANONICAL_URL, uri).build()); if (found != null) { ContentGroup contentGroup = contentGroupTranslator.fromDBObject(found, new ContentGroup()); results.put(uri, contentGroup); } } return results.build(); } @Override public ResolvedContent findByIds(Iterable<Long> ids) { ResolvedContentBuilder results = ResolvedContent.builder(); for (Long id : ids) { DBObject found = contentGroups.findOne(where().fieldEquals(IdentifiedTranslator.ID, id).build()); if (found != null) { ContentGroup contentGroup = contentGroupTranslator.fromDBObject(found, new ContentGroup()); results.put(id.toString(), contentGroup); } } return results.build(); } @Override public Iterable<ContentGroup> findAll() { Set<ContentGroup> results = new HashSet<ContentGroup>(); DBCursor cursor = contentGroups.find(); for (DBObject current : cursor) { ContentGroup contentGroup = contentGroupTranslator.fromDBObject(current, new ContentGroup()); results.add(contentGroup); } return results; } }