package org.atlasapi.persistence.media.entity; import org.atlasapi.media.entity.Broadcast; import com.metabroadcast.common.persistence.translator.TranslatorUtils; import com.mongodb.BasicDBObject; import com.mongodb.DBObject; import org.joda.time.DateTime; import org.joda.time.Duration; public class BroadcastTranslator { private static final String NEW_SERIES_KEY = "newSeries"; private static final String NEW_EPISODE_KEY = "newEpisode"; private static final String PREMIER_KEY = "premier"; private static final String TRANSMISSION_END_TIME_KEY = "transmissionEndTime"; private static final String TRANSMISSION_TIME_KEY = "transmissionTime"; private static final String ACTUAL_TRANSMISSION_TIME_KEY = "actualTransmissionTime"; private static final String ACTUAL_TRANSMISSION_END_TIME_KEY = "actualTransmissionEndTime"; private static final String REPEAT_KEY = "repeat"; private static final String SUBTITLED_KEY = "subtitled"; private static final String SIGNED_KEY = "signed"; private static final String AUDIO_DESCRIBED_KEY = "audioDescribed"; private static final String HD_KEY = "highDefinition"; private static final String WIDESCREEN_KEY = "widescreen"; private static final String SURROUND_KEY = "surround"; private static final String LIVE_KEY = "live"; private static final String BLACKOUT_RESTRICTION_KEY = "blackoutRestriction"; private static final String REVISED_REPEAT = "revisedRepeat"; private static final String CONTINUATION = "continuation"; private static final String NEW_ONE_OFF = "newOneOff"; private final AliasTranslator aliasTranslator = new AliasTranslator(); private final BlackoutRestrictionTranslator blackoutTranslator = new BlackoutRestrictionTranslator(); public Broadcast fromDBObject(DBObject dbObject) { String broadcastOn = (String) dbObject.get("broadcastOn"); DateTime transmissionTime = TranslatorUtils.toDateTime(dbObject, TRANSMISSION_TIME_KEY); Integer duration = (Integer) dbObject.get("broadcastDuration"); Boolean activelyPublished = (dbObject.containsField("activelyPublished") ? (Boolean) dbObject.get("activelyPublished") : Boolean.TRUE); String id = (String) dbObject.get("id"); Broadcast broadcast = new Broadcast(broadcastOn, transmissionTime, Duration.standardSeconds(duration), activelyPublished).withId(id); broadcast.setActualTransmissionTime(TranslatorUtils.toDateTime(dbObject, ACTUAL_TRANSMISSION_TIME_KEY)); broadcast.setActualTransmissionEndTime(TranslatorUtils.toDateTime(dbObject, ACTUAL_TRANSMISSION_END_TIME_KEY)); broadcast.setScheduleDate(TranslatorUtils.toLocalDate(dbObject, "scheduleDate")); broadcast.setAliasUrls(TranslatorUtils.toSet(dbObject, IdentifiedTranslator.ALIASES)); broadcast.setAliases(aliasTranslator.fromDBObjects(TranslatorUtils.toDBObjectList(dbObject, IdentifiedTranslator.IDS))); broadcast.setLastUpdated(TranslatorUtils.toDateTime(dbObject, IdentifiedTranslator.LAST_UPDATED)); broadcast.setRepeat(TranslatorUtils.toBoolean(dbObject, REPEAT_KEY)); broadcast.setSubtitled(TranslatorUtils.toBoolean(dbObject, SUBTITLED_KEY)); broadcast.setSigned(TranslatorUtils.toBoolean(dbObject, SIGNED_KEY)); broadcast.setAudioDescribed(TranslatorUtils.toBoolean(dbObject, AUDIO_DESCRIBED_KEY)); broadcast.setHighDefinition(TranslatorUtils.toBoolean(dbObject, HD_KEY)); broadcast.setWidescreen(TranslatorUtils.toBoolean(dbObject, WIDESCREEN_KEY)); broadcast.setSurround(TranslatorUtils.toBoolean(dbObject, SURROUND_KEY)); broadcast.setLive(TranslatorUtils.toBoolean(dbObject, LIVE_KEY)); broadcast.setPremiere(TranslatorUtils.toBoolean(dbObject, PREMIER_KEY)); broadcast.setNewSeries(TranslatorUtils.toBoolean(dbObject, NEW_SERIES_KEY)); broadcast.setNewEpisode(TranslatorUtils.toBoolean(dbObject, NEW_EPISODE_KEY)); broadcast.setBlackoutRestriction(blackoutTranslator.fromDbObject((DBObject) dbObject.get(BLACKOUT_RESTRICTION_KEY))); broadcast.setRevisedRepeat(TranslatorUtils.toBoolean(dbObject, REVISED_REPEAT)); broadcast.setContinuation(TranslatorUtils.toBoolean(dbObject, CONTINUATION)); broadcast.setNewOneOff(TranslatorUtils.toBoolean(dbObject, NEW_ONE_OFF)); return broadcast; } public DBObject toDBObject(Broadcast entity) { DBObject dbObject = new BasicDBObject(); TranslatorUtils.from(dbObject, "broadcastDuration", entity.getBroadcastDuration()); TranslatorUtils.from(dbObject, "broadcastOn", entity.getBroadcastOn()); TranslatorUtils.fromLocalDate(dbObject, "scheduleDate", entity.getScheduleDate()); TranslatorUtils.fromDateTime(dbObject, TRANSMISSION_TIME_KEY, entity.getTransmissionTime()); TranslatorUtils.fromDateTime(dbObject, TRANSMISSION_END_TIME_KEY, entity.getTransmissionEndTime()); TranslatorUtils.fromDateTime(dbObject, ACTUAL_TRANSMISSION_TIME_KEY, entity.getActualTransmissionTime()); TranslatorUtils.fromDateTime(dbObject, ACTUAL_TRANSMISSION_END_TIME_KEY, entity.getActualTransmissionEndTime()); TranslatorUtils.fromSet(dbObject, entity.getAliasUrls(), IdentifiedTranslator.ALIASES); TranslatorUtils.from(dbObject, IdentifiedTranslator.IDS, aliasTranslator.toDBList(entity.getAliases())); TranslatorUtils.fromDateTime(dbObject, IdentifiedTranslator.LAST_UPDATED, entity.getLastUpdated()); TranslatorUtils.from(dbObject, "activelyPublished", entity.isActivelyPublished()); TranslatorUtils.from(dbObject, "id", entity.getSourceId()); TranslatorUtils.from(dbObject, REPEAT_KEY, entity.getRepeat()); TranslatorUtils.from(dbObject, SUBTITLED_KEY, entity.getSubtitled()); TranslatorUtils.from(dbObject, SIGNED_KEY, entity.getSigned()); TranslatorUtils.from(dbObject, AUDIO_DESCRIBED_KEY, entity.getAudioDescribed()); TranslatorUtils.from(dbObject, HD_KEY, entity.getHighDefinition()); TranslatorUtils.from(dbObject, WIDESCREEN_KEY, entity.getWidescreen()); TranslatorUtils.from(dbObject, SURROUND_KEY, entity.getSurround()); TranslatorUtils.from(dbObject, LIVE_KEY, entity.getLive()); TranslatorUtils.from(dbObject, PREMIER_KEY, entity.getPremiere()); TranslatorUtils.from(dbObject, NEW_SERIES_KEY, entity.getNewSeries()); TranslatorUtils.from(dbObject, NEW_EPISODE_KEY, entity.getNewEpisode()); TranslatorUtils.from(dbObject, BLACKOUT_RESTRICTION_KEY, blackoutTranslator.toDbObject(entity.getBlackoutRestriction())); TranslatorUtils.from(dbObject, REVISED_REPEAT, entity.getRevisedRepeat()); TranslatorUtils.from(dbObject, CONTINUATION, entity.getContinuation()); TranslatorUtils.from(dbObject, NEW_ONE_OFF, entity.getNewOneOff()); return dbObject; } }