package org.atlasapi.persistence.media.entity; import java.util.List; import org.atlasapi.media.entity.ChildRef; import org.atlasapi.media.entity.EntityType; 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; public class ChildRefTranslator { public static final String UPDATED_KEY = "updated"; public static final String SORT_KEY = "sortKey"; public static final String URI_KEY = "uri"; public static final String ID_KEY = "id"; public ChildRef fromDBObject(DBObject dbo) { Long id = (Long) dbo.get(ID_KEY); String uri = (String) dbo.get(URI_KEY); String sortKey = (String) dbo.get(SORT_KEY); DateTime updated = TranslatorUtils.toDateTime(dbo, UPDATED_KEY); EntityType type = EntityType.from((String) dbo.get(DescribedTranslator.TYPE_KEY)); return new ChildRef(id, uri, sortKey, updated, type); } public List<ChildRef> fromDBObjects(Iterable<DBObject> dbos) { return ImmutableList.<ChildRef>copyOf(Iterables.transform(dbos, TO_CHILD_REF)); } private final Function<DBObject, ChildRef> TO_CHILD_REF = new Function<DBObject, ChildRef>() { @Override public ChildRef apply(DBObject input) { return fromDBObject(input); } }; public DBObject toDBObject(ChildRef childRef) { DBObject dbObject = new BasicDBObject(); TranslatorUtils.from(dbObject, ID_KEY, childRef.getId()); TranslatorUtils.from(dbObject, URI_KEY, childRef.getUri()); TranslatorUtils.from(dbObject, SORT_KEY, childRef.getSortKey()); TranslatorUtils.fromDateTime(dbObject, UPDATED_KEY, childRef.getUpdated()); TranslatorUtils.from(dbObject, "type", childRef.getType().toString()); return dbObject; } public BasicDBList toDBList(Iterable<ChildRef> childRefs) { BasicDBList list = new BasicDBList(); list.addAll(ImmutableList.copyOf(Iterables.transform(childRefs, FROM_CHILD_REF))); return list; } private Function<ChildRef, DBObject> FROM_CHILD_REF = new Function<ChildRef, DBObject>() { @Override public DBObject apply(ChildRef input) { return toDBObject(input); } }; }