package org.atlasapi.persistence.media.entity; import org.atlasapi.media.entity.Actor; import org.atlasapi.media.entity.CrewMember; import org.atlasapi.media.entity.CrewMember.Role; import org.atlasapi.media.entity.Publisher; import com.metabroadcast.common.persistence.translator.ModelTranslator; import com.metabroadcast.common.persistence.translator.TranslatorUtils; import com.mongodb.BasicDBObject; import com.mongodb.DBObject; public class CrewMemberTranslator implements ModelTranslator<CrewMember> { public static final String PERSON_URI = "uri"; public static final String PERSON_ID = IdentifiedTranslator.OPAQUE_ID; @Override public CrewMember fromDBObject(DBObject dbObject, CrewMember model) { String uri = (String) dbObject.get(PERSON_URI); String curie = (String) dbObject.get("curie"); Publisher publisher = Publisher.fromKey((String) dbObject.get("publisher")).requireValue(); Long aid = TranslatorUtils.toLong(dbObject, PERSON_ID); String roleKey = (String) dbObject.get("role"); Role role = roleKey != null ? Role.fromKey(roleKey) : null; CrewMember crew = null; if (Role.ACTOR.equals(role)) { crew = new Actor(uri, curie, publisher).withCharacter((String) dbObject.get("character")); } else { crew = new CrewMember(uri, curie, publisher).withRole(role); } crew.withProfileLinks(TranslatorUtils.toSet(dbObject, "profileLinks")).withName((String) dbObject.get("name")); crew.setId(aid); return crew; } @Override public DBObject toDBObject(DBObject dbObject, CrewMember model) { dbObject = new BasicDBObject(); TranslatorUtils.from(dbObject, "name", model.name()); TranslatorUtils.fromSet(dbObject, model.profileLinks(), "profileLinks"); TranslatorUtils.from(dbObject, PERSON_URI, model.getCanonicalUri()); TranslatorUtils.from(dbObject, PERSON_ID, model.getId()); TranslatorUtils.from(dbObject, "curie", model.getCurie()); TranslatorUtils.from(dbObject, "publisher", model.publisher().key()); if (model.role() != null) { TranslatorUtils.from(dbObject, "role", model.role().key()); } if (model instanceof Actor) { Actor actor = (Actor) model; TranslatorUtils.from(dbObject, "character", actor.character()); } return dbObject; } }