package org.atlasapi.persistence.media.entity; import static com.metabroadcast.common.persistence.mongo.MongoConstants.ID; import static org.atlasapi.persistence.media.entity.IdentifiedTranslator.OPAQUE_ID; import static org.atlasapi.persistence.media.entity.IdentifiedTranslator.PUBLISHER; import static org.atlasapi.persistence.media.entity.IdentifiedTranslator.TYPE; import org.atlasapi.media.entity.LookupRef; import org.atlasapi.media.entity.Publisher; import org.atlasapi.persistence.ModelTranslator; import org.atlasapi.persistence.content.ContentCategory; import com.metabroadcast.common.persistence.translator.TranslatorUtils; import com.mongodb.BasicDBObject; import com.mongodb.DBObject; public class LookupRefTranslator implements ModelTranslator<LookupRef> { @Override public DBObject toDBObject(DBObject dbObject, LookupRef model) { if (dbObject == null) { dbObject = new BasicDBObject(); } TranslatorUtils.from(dbObject, ID, model.uri()); TranslatorUtils.from(dbObject, PUBLISHER, model.publisher().key()); TranslatorUtils.from(dbObject, TYPE, model.category().toString()); TranslatorUtils.from(dbObject, OPAQUE_ID, model.id()); return dbObject; } @Override public LookupRef fromDBObject(DBObject dbObject, LookupRef model) { if (model != null) { // I hate the ModelTranslator interface throw new IllegalArgumentException("Cannot mutate an existing LookupRef"); } String uri = TranslatorUtils.toString(dbObject, ID); Long id = TranslatorUtils.toLong(dbObject, OPAQUE_ID); Publisher publisher = Publisher.fromKey(TranslatorUtils.toString(dbObject, PUBLISHER)) .requireValue(); String type = TranslatorUtils.toString(dbObject, TYPE); return new LookupRef(uri, id, publisher, ContentCategory.valueOf(type)); } }