package org.atlasapi.persistence.content; import org.atlasapi.media.entity.Content; import org.atlasapi.persistence.lookup.entry.LookupEntry; import org.atlasapi.persistence.lookup.entry.LookupEntryStore; import com.metabroadcast.common.ids.IdGenerator; import com.google.common.collect.ImmutableList; import com.google.common.collect.Iterables; import static com.google.common.base.Preconditions.checkNotNull; public class LookupBackedContentIdGenerator { private final LookupEntryStore lookupStore; private final IdGenerator idGenerator; public LookupBackedContentIdGenerator(LookupEntryStore lookupStore, IdGenerator idGenerator) { this.lookupStore = checkNotNull(lookupStore); this.idGenerator = checkNotNull(idGenerator); } public <T extends Content> Long getId(T content) { Iterable<LookupEntry> entries = lookupStore .entriesForCanonicalUris(ImmutableList.of(content.getCanonicalUri())); if (Iterables.isEmpty(entries)) { return idGenerator.generateRaw(); } else { //ensures an adapter can't override and assign a new id for the content. return Iterables.getOnlyElement(entries).id(); } } }