package org.atlasapi.persistence.content.people;
import static com.google.common.base.Preconditions.checkNotNull;
import org.atlasapi.media.entity.LookupRef;
import org.atlasapi.media.entity.Person;
import org.atlasapi.persistence.content.PeopleListerListener;
import com.google.common.base.Optional;
import com.metabroadcast.common.ids.IdGenerator;
public class IdSettingPersonStore implements PersonStore {
private final PersonStore delegate;
private final IdGenerator idGenerator;
public IdSettingPersonStore(PersonStore delegate,
IdGenerator idGenerator) {
this.delegate = checkNotNull(delegate);
this.idGenerator = checkNotNull(idGenerator);
}
@Override
public void updatePersonItems(Person person) {
delegate.updatePersonItems(generateOrRestoreId(person));
}
@Override
public void createOrUpdatePerson(Person person) {
delegate.createOrUpdatePerson(generateOrRestoreId(person));
}
private Person generateOrRestoreId(Person person) {
Optional<Person> existing = person(person.getCanonicalUri());
if (existing.isPresent() && existing.get().getId() != null) {
person.setId(existing.get().getId());
} else {
person.setId(idGenerator.generateRaw());
}
return person;
}
@Override
public Optional<Person> person(String uri) {
return delegate.person(uri);
}
@Override
public Optional<Person> person(Long id) {
return delegate.person(id);
}
@Override
public void list(PeopleListerListener handler) {
delegate.list(handler);
}
@Override
public Iterable<Person> people(Iterable<LookupRef> lookupRefs) {
return delegate.people(lookupRefs);
}
}