package org.atlasapi.media.channel; import java.util.List; import java.util.Set; import com.google.common.collect.Sets; import com.metabroadcast.common.persistence.mongo.MongoConstants; import com.metabroadcast.common.persistence.translator.TranslatorUtils; import com.mongodb.BasicDBList; import com.mongodb.BasicDBObject; import com.mongodb.DBObject; public class ChannelNumberingTranslator { private static final String CHANNEL_NUMBER_KEY = "channelNumber"; public static final String CHANNEL_KEY = "channel"; public static final String CHANNEL_GROUP_KEY = "channelGroup"; private static final String START_DATE_KEY = "startDate"; private static final String END_DATE_KEY = "endDate"; public DBObject toDBObject(ChannelNumbering model) { DBObject dbo = new BasicDBObject(); TranslatorUtils.from(dbo, CHANNEL_NUMBER_KEY, model.getChannelNumber()); TranslatorUtils.from(dbo, CHANNEL_KEY, new BasicDBObject(MongoConstants.ID, model.getChannel())); TranslatorUtils.from(dbo, CHANNEL_GROUP_KEY, new BasicDBObject(MongoConstants.ID, model.getChannelGroup())); TranslatorUtils.fromLocalDate(dbo, START_DATE_KEY, model.getStartDate()); TranslatorUtils.fromLocalDate(dbo, END_DATE_KEY, model.getEndDate()); return dbo; } public ChannelNumbering fromDBObject(DBObject dbo) { return ChannelNumbering.builder() .withChannelNumber(TranslatorUtils.toString(dbo, CHANNEL_NUMBER_KEY)) .withChannel(TranslatorUtils.toLong(TranslatorUtils.toDBObject(dbo, CHANNEL_KEY), MongoConstants.ID)) .withChannelGroup(TranslatorUtils.toLong(TranslatorUtils.toDBObject(dbo, CHANNEL_GROUP_KEY), MongoConstants.ID)) .withStartDate(TranslatorUtils.toLocalDate(dbo, START_DATE_KEY)) .withEndDate(TranslatorUtils.toLocalDate(dbo, END_DATE_KEY)) .build(); } public void fromChannelNumberingSet(DBObject dbObject, String key, Set<ChannelNumbering> set) { BasicDBList values = new BasicDBList(); for (ChannelNumbering value : set) { if (value != null) { values.add(toDBObject(value)); } } dbObject.put(key, values); } @SuppressWarnings("unchecked") public Set<ChannelNumbering> toChannelNumberingSet(DBObject object, String name) { Set<ChannelNumbering> channelNumbers = Sets.newLinkedHashSet(); if (object.containsField(name)) { for (DBObject element : (List<DBObject>) object.get(name)) { channelNumbers.add(fromDBObject(element)); } return channelNumbers; } return Sets.newLinkedHashSet(); } }