package org.atlasapi.persistence.media.entity;
import java.util.List;
import org.atlasapi.media.TransportSubType;
import org.atlasapi.media.TransportType;
import org.atlasapi.media.entity.Image;
import org.atlasapi.media.entity.Location;
import org.atlasapi.media.entity.Policy;
import org.atlasapi.media.entity.Quality;
import org.atlasapi.persistence.ModelTranslator;
import com.metabroadcast.common.persistence.translator.TranslatorUtils;
import com.mongodb.BasicDBList;
import com.mongodb.BasicDBObject;
import com.mongodb.DBObject;
public class LocationTranslator implements ModelTranslator<Location> {
public static final String POLICY = "policy";
private final IdentifiedTranslator descriptionTranslator = new IdentifiedTranslator();
private final PolicyTranslator policyTranslator = new PolicyTranslator();
@Override
public Location fromDBObject(DBObject dbObject, Location entity) {
if (entity == null) {
entity = new Location();
}
descriptionTranslator.fromDBObject(dbObject, entity);
entity.setAvailable((Boolean) dbObject.get("available"));
entity.setEmbedCode((String) dbObject.get("embedCode"));
entity.setEmbedId((String) dbObject.get("embedId"));
entity.setTransportIsLive((Boolean) dbObject.get("transportIsLive"));
entity.setTransportType(readEnum(TransportType.class, dbObject, "transportType"));
entity.setTransportSubType(readEnum(TransportSubType.class, dbObject, "transportSubType"));
entity.setUri((String) dbObject.get("uri"));
DBObject policyObject = (DBObject) dbObject.get(POLICY);
if (policyObject != null) {
entity.setPolicy(policyTranslator.fromDBObject(policyObject, new Policy()));
}
return entity;
}
private <T extends Enum<T>> T readEnum(Class<T> clazz, DBObject dbObject, String field) {
String value = (String) dbObject.get(field);
if (value == null) {
return null;
}
return Enum.valueOf(clazz, value.toUpperCase());
}
@Override
public DBObject toDBObject(DBObject dbObject, Location entity) {
dbObject = descriptionTranslator.toDBObject(dbObject, entity);
TranslatorUtils.from(dbObject, "available", entity.getAvailable());
TranslatorUtils.from(dbObject, "embedCode", entity.getEmbedCode());
TranslatorUtils.from(dbObject, "embedId", entity.getEmbedId());
TranslatorUtils.from(dbObject, "transportIsLive", entity.getTransportIsLive());
if (entity.getTransportType() != null) {
TranslatorUtils.from(dbObject, "transportType", entity.getTransportType().toString());
}
if (entity.getTransportSubType() != null) {
TranslatorUtils.from(dbObject, "transportSubType", entity.getTransportSubType().toString());
}
TranslatorUtils.from(dbObject, "uri", entity.getUri());
TranslatorUtils.fromDateTime(dbObject, IdentifiedTranslator.LAST_UPDATED, entity.getLastUpdated());
if (entity.getPolicy() != null) {
DBObject policyObject = policyTranslator.toDBObject(new BasicDBObject(), entity.getPolicy());
if (!policyObject.keySet().isEmpty()) {
dbObject.put(POLICY, policyObject);
}
}
return dbObject;
}
}