package org.atlasapi.media.segment;
import java.math.BigInteger;
import org.atlasapi.media.SegmentType;
import org.atlasapi.media.entity.Description;
import org.atlasapi.media.entity.Publisher;
import org.atlasapi.persistence.media.entity.DescribedTranslator;
import org.atlasapi.persistence.media.entity.IdentifiedTranslator;
import org.atlasapi.persistence.media.entity.ImageTranslator;
import org.joda.time.Duration;
import com.metabroadcast.common.ids.NumberToShortStringCodec;
import com.metabroadcast.common.persistence.translator.ModelTranslator;
import com.metabroadcast.common.persistence.translator.TranslatorUtils;
import com.mongodb.BasicDBObject;
import com.mongodb.DBObject;
public class SegmentTranslator implements ModelTranslator<Segment> {
public static final String SOURCE_ID_KEY = "sourceId";
public static final String PUBLISHER_KEY = "publisher";
private static final String DESCRIPTION_KEY = "description";
private static final String TYPE_KEY = "type";
private static final String DURATION_KEY = "duration";
private final DescribedTranslator describedTranslator = new DescribedTranslator(new IdentifiedTranslator(true), new ImageTranslator());
private final NumberToShortStringCodec idCodec;
public SegmentTranslator(NumberToShortStringCodec idCodec) {
this.idCodec = idCodec;
}
@Override
public DBObject toDBObject(DBObject dbo, Segment model) {
if (dbo == null) {
dbo = new BasicDBObject();
}
describedTranslator.toDBObject(dbo, model);
if (model.getPublisher() != null) {
TranslatorUtils.from(dbo, PUBLISHER_KEY, model.getPublisher().key());
}
if (model.getDescription() != null) {
TranslatorUtils.from(dbo, DESCRIPTION_KEY, model.getDescription());
}
if (model.getType() != null) {
TranslatorUtils.from(dbo, TYPE_KEY, model.getType().toString());
}
if (model.getDuration() != null) {
TranslatorUtils.from(dbo, DURATION_KEY, model.getDuration().getMillis());
}
return dbo;
}
@Override
public Segment fromDBObject(DBObject dbo, Segment model) {
if (model == null) {
model = new Segment();
}
describedTranslator.fromDBObject(dbo, model);
final Long rawDuration = TranslatorUtils.toLong(dbo, DURATION_KEY);
if (rawDuration != null) {
model.setDuration(new Duration(rawDuration));
}
model.setPublisher(Publisher.fromKey(TranslatorUtils.toString(dbo, PUBLISHER_KEY)).valueOrNull());
model.setType(SegmentType.fromString(TranslatorUtils.toString(dbo, TYPE_KEY)).valueOrNull());
if (dbo.get(DESCRIPTION_KEY) instanceof String) {
model.setDescription(TranslatorUtils.toString(dbo, DESCRIPTION_KEY));
}
return model;
}
}