package org.atlasapi.persistence.content.organisation;
import static com.google.common.base.Preconditions.checkNotNull;
import org.atlasapi.media.entity.LookupRef;
import org.atlasapi.media.entity.Organisation;
import com.google.common.base.Optional;
import com.metabroadcast.common.ids.IdGenerator;
public class IdSettingOrganisationStore implements OrganisationStore {
private final OrganisationStore delegate;
private final IdGenerator idGenerator;
public IdSettingOrganisationStore(OrganisationStore delegate, IdGenerator idGenerator) {
this.delegate = checkNotNull(delegate);
this.idGenerator = checkNotNull(idGenerator);
}
@Override
public void updateOrganisationItems(Organisation organisation) {
delegate.updateOrganisationItems(generateOrRestoreId(organisation));
}
@Override
public void createOrUpdateOrganisation(Organisation organisation) {
delegate.createOrUpdateOrganisation(generateOrRestoreId(organisation));
}
@Override
public Optional<Organisation> organisation(String uri) {
return delegate.organisation(uri);
}
@Override
public Optional<Organisation> organisation(Long id) {
return delegate.organisation(id);
}
@Override
public Iterable<Organisation> organisations(Iterable<LookupRef> lookupRefs) {
return delegate.organisations(lookupRefs);
}
private Organisation generateOrRestoreId(Organisation organisation) {
Optional<Organisation> existing = organisation(organisation.getCanonicalUri());
if (existing.isPresent() && existing.get().getId() != null) {
organisation.setId(existing.get().getId());
} else {
organisation.setId(idGenerator.generateRaw());
}
return organisation;
}
}