package org.atlasapi.media.channel; import java.util.List; import java.util.Set; import org.atlasapi.media.entity.Image; import org.atlasapi.persistence.media.entity.ImageTranslator; import com.google.common.collect.Sets; import com.metabroadcast.common.persistence.translator.TranslatorUtils; import com.mongodb.BasicDBList; import com.mongodb.BasicDBObject; import com.mongodb.DBObject; public class TemporalImageTranslator { private static final String START_DATE_KEY = "startDate"; private static final String END_DATE_KEY = "endDate"; private static final String IMAGE_KEY = "value"; private final ImageTranslator imageTranslator = new ImageTranslator(); // TODO extract date translation to common utils class public DBObject toDBObject(TemporalField<Image> temporalImage) { DBObject dbo = new BasicDBObject(); TranslatorUtils.fromLocalDate(dbo, START_DATE_KEY, temporalImage.getStartDate()); TranslatorUtils.fromLocalDate(dbo, END_DATE_KEY, temporalImage.getEndDate()); TranslatorUtils.from(dbo, IMAGE_KEY, imageTranslator.toDBObject(null, temporalImage.getValue())); return dbo; } public TemporalField<Image> fromDBObject(DBObject dbo) { return new TemporalField<Image>( imageTranslator.fromDBObject(TranslatorUtils.toDBObject(dbo, IMAGE_KEY), null), TranslatorUtils.toLocalDate(dbo, START_DATE_KEY), TranslatorUtils.toLocalDate(dbo, END_DATE_KEY)); } public void fromTemporalImageSet(DBObject dbObject, String key, Iterable<TemporalField<Image>> images) { BasicDBList values = new BasicDBList(); for (TemporalField<Image> value : images) { if (value != null) { values.add(toDBObject(value)); } } dbObject.put(key, values); } @SuppressWarnings("unchecked") public Set<TemporalField<Image>> toTemporalImageSet(DBObject object, String name) { if (object.containsField(name)) { Set<TemporalField<Image>> temporalImage = Sets.newLinkedHashSet(); for (DBObject element : (List<DBObject>) object.get(name)) { temporalImage.add(fromDBObject(element)); } return temporalImage; } return Sets.newLinkedHashSet(); } }