package org.atlasapi.persistence.media.entity; import org.atlasapi.media.entity.ContentGroup; import org.atlasapi.media.entity.EntityType; import org.atlasapi.persistence.ModelTranslator; import com.metabroadcast.common.persistence.translator.TranslatorUtils; import com.mongodb.DBObject; public class ContentGroupTranslator implements ModelTranslator<ContentGroup> { public static final String GROUP_TYPE_KEY = "groupType"; public static final String CONTENT_URIS_KEY = "childRefs"; private final DescribedTranslator contentTranslator; private final ChildRefTranslator childTranslator; public ContentGroupTranslator() { this(true); } protected ContentGroupTranslator(boolean useAtlasIdAsId) { this.contentTranslator = new DescribedTranslator(new IdentifiedTranslator(useAtlasIdAsId), new ImageTranslator()); this.childTranslator = new ChildRefTranslator(); } @Override public ContentGroup fromDBObject(DBObject dbObject, ContentGroup entity) { if (entity == null) { entity = new ContentGroup(); } contentTranslator.fromDBObject(dbObject, entity); entity.setType(ContentGroup.Type.valueOf(TranslatorUtils.toString(dbObject, GROUP_TYPE_KEY))); entity.setContents(childTranslator.fromDBObjects(TranslatorUtils.toDBObjectList(dbObject, CONTENT_URIS_KEY))); entity.setReadHash(generateHashByRemovingFieldsFromTheDbo(dbObject)); return entity; } @Override public DBObject toDBObject(DBObject dbObject, ContentGroup entity) { dbObject = contentTranslator.toDBObject(dbObject, entity); dbObject.put(DescribedTranslator.TYPE_KEY, EntityType.from(entity).toString()); TranslatorUtils.from(dbObject, GROUP_TYPE_KEY, entity.getType().toString()); TranslatorUtils.from(dbObject, CONTENT_URIS_KEY, childTranslator.toDBList(entity.getContents())); return dbObject; } public String hashCodeOf(ContentGroup contentGroup) { return generateHashByRemovingFieldsFromTheDbo(toDBObject(null, contentGroup)); } private String generateHashByRemovingFieldsFromTheDbo(DBObject dbObject) { dbObject.removeField(DescribedTranslator.LAST_FETCHED_KEY); dbObject.removeField(DescribedTranslator.THIS_OR_CHILD_LAST_UPDATED_KEY); dbObject.removeField(IdentifiedTranslator.LAST_UPDATED); return String.valueOf(dbObject.hashCode()); } }