package org.atlasapi.persistence.output; import static com.metabroadcast.common.persistence.mongo.MongoConstants.ID; import static org.atlasapi.persistence.media.entity.IdentifiedTranslator.CURIE; import static org.atlasapi.persistence.media.entity.IdentifiedTranslator.OPAQUE_ID; import java.math.BigInteger; import org.atlasapi.media.entity.ParentRef; import org.atlasapi.media.entity.simple.BrandSummary; import org.atlasapi.media.entity.simple.SeriesSummary; import org.atlasapi.persistence.content.ContentCategory; import com.google.common.base.Optional; import com.metabroadcast.common.ids.NumberToShortStringCodec; import com.metabroadcast.common.persistence.mongo.DatabasedMongo; import com.metabroadcast.common.persistence.mongo.MongoBuilders; import com.metabroadcast.common.persistence.translator.TranslatorUtils; import com.mongodb.DBCollection; import com.mongodb.DBObject; public class MongoContainerSummaryResolver implements ContainerSummaryResolver { private final String title = "title"; private final String description = "description"; private final String seriesNumber = "seriesNumber"; private final String totalEpisodes = "totalEpisodes"; private final String type = "type"; private final DBObject fields = MongoBuilders.select().fields(ID, CURIE, OPAQUE_ID, title).fields(seriesNumber, description, totalEpisodes, type).build(); private final DBCollection containers; private final DBCollection programmeGroups; private final NumberToShortStringCodec idCodec; public MongoContainerSummaryResolver(DatabasedMongo mongo, NumberToShortStringCodec idCodec) { this.idCodec = idCodec; this.containers = mongo.collection(ContentCategory.CONTAINER.tableName()); this.programmeGroups = mongo.collection(ContentCategory.PROGRAMME_GROUP.tableName()); } @Override public Optional<BrandSummary> summarizeTopLevelContainer(ParentRef container) { DBObject containerDbo = containers.findOne(container.getUri(), fields); if (containerDbo == null) { return Optional.absent(); } BrandSummary summary = new BrandSummary(); Long id = TranslatorUtils.toLong(containerDbo, OPAQUE_ID); summary.setId(id != null ? idCodec.encode(BigInteger.valueOf(id)) : null); summary.setUri(TranslatorUtils.toString(containerDbo, ID)); summary.setCurie(TranslatorUtils.toString(containerDbo, CURIE)); summary.setTitle(TranslatorUtils.toString(containerDbo, title)); summary.setDescription(TranslatorUtils.toString(containerDbo, description)); summary.setType(TranslatorUtils.toString(containerDbo, type)); return Optional.of(summary); } @Override public Optional<SeriesSummary> summarizeSeries(ParentRef series) { DBObject containerDbo = programmeGroups.findOne(series.getUri(), fields); if (containerDbo == null) { return Optional.absent(); } SeriesSummary summary = new SeriesSummary(); Long id = TranslatorUtils.toLong(containerDbo, OPAQUE_ID); summary.setId(id != null ? idCodec.encode(BigInteger.valueOf(id)) : null); summary.setUri(TranslatorUtils.toString(containerDbo, ID)); summary.setCurie(TranslatorUtils.toString(containerDbo, CURIE)); summary.setTitle(TranslatorUtils.toString(containerDbo, title)); summary.setDescription(TranslatorUtils.toString(containerDbo, description)); summary.setSeriesNumber(TranslatorUtils.toInteger(containerDbo, seriesNumber)); summary.setTotalEpisodes(TranslatorUtils.toInteger(containerDbo, totalEpisodes)); summary.setType(TranslatorUtils.toString(containerDbo, type)); return Optional.of(summary); } }