package org.atlasapi.persistence.content;
import org.atlasapi.media.entity.LookupRef;
import org.atlasapi.persistence.lookup.entry.LookupEntry;
import org.atlasapi.persistence.lookup.entry.LookupEntryStore;
import com.google.common.base.Predicates;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Iterables;
public class LookupResolvingContentResolver implements ContentResolver {
private final KnownTypeContentResolver knownTypeResolver;
private final LookupEntryStore lookupResolver;
public LookupResolvingContentResolver(KnownTypeContentResolver knownTypeResolver, LookupEntryStore mongoLookupEntryStore) {
this.knownTypeResolver = knownTypeResolver;
this.lookupResolver = mongoLookupEntryStore;
}
@Override
public ResolvedContent findByCanonicalUris(Iterable<String> canonicalUris) {
Iterable<LookupEntry> entriesForCanonicalUris = lookupResolver.entriesForCanonicalUris(canonicalUris);
return resolveLookupEntries(entriesForCanonicalUris).copyWithAllRequestedUris(canonicalUris);
}
@Override
public ResolvedContent findByUris(Iterable<String> uris) {
Iterable<LookupEntry> entriesForIdentifiers = lookupResolver.entriesForIdentifiers(uris, true);
return resolveLookupEntries(entriesForIdentifiers);
}
private ResolvedContent resolveLookupEntries(Iterable<LookupEntry> entriesForCanonicalUris) {
Iterable<LookupRef> lookupRefs = Iterables.transform(entriesForCanonicalUris, LookupEntry.TO_SELF);
ImmutableSet<LookupRef> resolvedLookups = ImmutableSet.copyOf(Iterables.filter(lookupRefs, Predicates.notNull()));
return knownTypeResolver.findByLookupRefs(resolvedLookups);
}
}