package org.atlasapi.media.segment; import java.math.BigInteger; import org.atlasapi.persistence.ModelTranslator; import org.atlasapi.persistence.media.entity.IdentifiedTranslator; import org.joda.time.Duration; import com.metabroadcast.common.ids.NumberToShortStringCodec; import com.metabroadcast.common.persistence.translator.TranslatorUtils; import com.mongodb.BasicDBObject; import com.mongodb.DBObject; public class SegmentEventTranslator implements ModelTranslator<SegmentEvent> { private static final String SEGMENT_KEY = "segment"; private static final String DESCRIPTION_KEY = "description"; private static final String POSITION_KEY = "position"; private static final String OFFSET_KEY = "offset"; private static final String CHAPTER_KEY = "chapter"; private final IdentifiedTranslator identifiedTranslator = new IdentifiedTranslator(); private final DescriptionTranslator descriptionTranslator = new DescriptionTranslator(); private final NumberToShortStringCodec idCodec; public SegmentEventTranslator(NumberToShortStringCodec idCodec) { this.idCodec = idCodec; } @Override public DBObject toDBObject(DBObject dbo, SegmentEvent model) { if (dbo == null) { dbo = new BasicDBObject(); } identifiedTranslator.toDBObject(dbo, model); TranslatorUtils.from(dbo, SEGMENT_KEY, model.getSegment().identifier()); TranslatorUtils.from(dbo, DESCRIPTION_KEY, descriptionTranslator.toDBObject(model.getDescription())); TranslatorUtils.from(dbo, POSITION_KEY, model.getPosition()); if (model.getOffset() != null) { TranslatorUtils.from(dbo, OFFSET_KEY, model.getOffset().getMillis()); } TranslatorUtils.from(dbo, CHAPTER_KEY, model.getIsChapter()); return dbo; } @Override public SegmentEvent fromDBObject(DBObject dbo, SegmentEvent model) { if (model == null) { model = new SegmentEvent(); } identifiedTranslator.fromDBObject(dbo, model); model.setSegment(new SegmentRef(TranslatorUtils.toLong(dbo, SEGMENT_KEY))); model.setDescription(descriptionTranslator.fromDBObject(TranslatorUtils.toDBObject(dbo, DESCRIPTION_KEY))); model.setPosition(TranslatorUtils.toInteger(dbo, POSITION_KEY)); model.setIsChapter(TranslatorUtils.toBoolean(dbo, CHAPTER_KEY)); Long rawOffset = TranslatorUtils.toLong(dbo, OFFSET_KEY); if (rawOffset != null) { model.setOffset(new Duration(rawOffset)); } return model; } }