package org.atlasapi.persistence.content.mongo; import static com.google.common.base.Preconditions.checkNotNull; import static com.metabroadcast.common.persistence.mongo.MongoBuilders.where; import static com.metabroadcast.common.persistence.mongo.MongoConstants.ID; import static com.metabroadcast.common.persistence.mongo.MongoConstants.SINGLE; import static com.metabroadcast.common.persistence.mongo.MongoConstants.UPSERT; import java.net.UnknownHostException; import org.atlasapi.media.entity.Alias; import org.atlasapi.media.entity.Service; import org.atlasapi.media.entity.Topic; import org.atlasapi.persistence.media.entity.DescribedTranslator; import org.atlasapi.persistence.media.entity.IdentifiedTranslator; import org.atlasapi.persistence.media.entity.ImageTranslator; import org.atlasapi.persistence.service.ServiceResolver; import com.google.common.base.Optional; import com.metabroadcast.common.persistence.mongo.DatabasedMongo; import com.metabroadcast.common.persistence.mongo.MongoConstants; import com.mongodb.BasicDBObject; import com.mongodb.DBCollection; import com.mongodb.DBObject; import com.mongodb.Mongo; import com.mongodb.MongoClient; public class MongoServiceStore implements ServiceResolver { private static final String COLLECTION = "services"; private final DBCollection collection; private DescribedTranslator serviceTranslator; public MongoServiceStore(DatabasedMongo mongo) { this.collection = mongo.collection(COLLECTION); this.serviceTranslator = new DescribedTranslator(new IdentifiedTranslator(true), new ImageTranslator()); } @Override public Optional<Service> serviceFor(long id) { DBObject dbo = collection.findOne(where().idEquals(id).build()); if (dbo == null) { return Optional.absent(); } return Optional.of((Service) serviceTranslator.fromDBObject(dbo, new Service())); } @Override public Iterable<Service> servicesFor(Alias alias) { throw new UnsupportedOperationException(); } // TODO: flesh this out and create a separate translator for this type public void write(Service service) { checkNotNull(service.getId(), "Can't persist topic with no ID"); DBObject dbo = serviceTranslator.toDBObject(new BasicDBObject(), service); collection.update(where().idEquals((Long)dbo.get(ID)).build(), dbo, UPSERT, SINGLE); } public static void main(String[] args) throws UnknownHostException { MongoServiceStore store = new MongoServiceStore(new DatabasedMongo(new MongoClient(), "atlas")); Service service = new Service(); service.setId(1234L); service.setCanonicalUri("http://atlas.metabroadcast.com/platforms/youview/"); service.setTitle("YouView"); store.write(service); } }