package org.atlasapi.persistence.media.entity;
import java.util.List;
import org.atlasapi.media.entity.SeriesRef;
import org.joda.time.DateTime;
import com.google.common.base.Function;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Iterables;
import com.metabroadcast.common.persistence.translator.TranslatorUtils;
import com.mongodb.BasicDBList;
import com.mongodb.BasicDBObject;
import com.mongodb.DBObject;
import static org.atlasapi.persistence.media.entity.ChildRefTranslator.ID_KEY;
import static org.atlasapi.persistence.media.entity.ChildRefTranslator.URI_KEY;
import static org.atlasapi.persistence.media.entity.ChildRefTranslator.SORT_KEY;
import static org.atlasapi.persistence.media.entity.ChildRefTranslator.UPDATED_KEY;
public class SeriesRefTranslator {
private static final String SERIES_NUMBER_KEY = "seriesNumber";
public SeriesRef fromDBObject(DBObject dbo) {
Long id = (Long) dbo.get(ID_KEY);
String uri = (String) dbo.get(URI_KEY);
DateTime updated = TranslatorUtils.toDateTime(dbo, UPDATED_KEY);
String sortKey = (String) dbo.get(SORT_KEY);
Integer seriesNumber = TranslatorUtils.toInteger(dbo, SERIES_NUMBER_KEY);
return new SeriesRef(id, uri, sortKey, seriesNumber, updated);
}
public List<SeriesRef> fromDBObjects(Iterable<DBObject> dbos) {
return ImmutableList.<SeriesRef>copyOf(Iterables.transform(dbos, TO_SERIES_REF));
}
private final Function<DBObject, SeriesRef> TO_SERIES_REF = new Function<DBObject, SeriesRef>() {
@Override
public SeriesRef apply(DBObject input) {
return fromDBObject(input);
}
};
public DBObject toDBObject(SeriesRef seriesRef) {
DBObject dbObject = new BasicDBObject();
TranslatorUtils.from(dbObject, ID_KEY, seriesRef.getId());
TranslatorUtils.from(dbObject, URI_KEY, seriesRef.getUri());
TranslatorUtils.from(dbObject, SORT_KEY, seriesRef.getTitle());
TranslatorUtils.fromDateTime(dbObject, UPDATED_KEY, seriesRef.getUpdated());
TranslatorUtils.from(dbObject, SERIES_NUMBER_KEY, seriesRef.getSeriesNumber());
return dbObject;
}
public BasicDBList toDBList(Iterable<SeriesRef> seriesRefs) {
BasicDBList list = new BasicDBList();
list.addAll(ImmutableList.copyOf(Iterables.transform(seriesRefs, FROM_SERIES_REF)));
return list;
}
private Function<SeriesRef, DBObject> FROM_SERIES_REF = new Function<SeriesRef, DBObject>() {
@Override
public DBObject apply(SeriesRef input) {
return toDBObject(input);
}
};
}