package gov.nysenate.openleg.service.hearing.data;
import com.google.common.eventbus.EventBus;
import gov.nysenate.openleg.dao.base.LimitOffset;
import gov.nysenate.openleg.dao.base.SortOrder;
import gov.nysenate.openleg.dao.hearing.PublicHearingDao;
import gov.nysenate.openleg.model.hearing.PublicHearing;
import gov.nysenate.openleg.model.hearing.PublicHearingFile;
import gov.nysenate.openleg.model.hearing.PublicHearingId;
import gov.nysenate.openleg.service.hearing.event.PublicHearingUpdateEvent;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct;
import java.time.LocalDateTime;
import java.util.List;
@Service
public class CachedPublicHearingDataService implements PublicHearingDataService
{
private static final String publicHearingCache = "publicHearingCache";
@Autowired
private EventBus eventBus;
@Autowired
private PublicHearingDao publicHearingDao;
@PostConstruct
private void init() {
eventBus.register(this);
}
/** {@inheritDoc */
@Override
public PublicHearing getPublicHearing(PublicHearingId publicHearingId) throws PublicHearingNotFoundEx {
if (publicHearingId == null) {
throw new IllegalArgumentException("PublicHearingId cannot be null");
}
try {
return publicHearingDao.getPublicHearing(publicHearingId);
} catch (EmptyResultDataAccessException ex) {
throw new PublicHearingNotFoundEx(publicHearingId, ex);
}
}
/** {@inheritDoc */
@Override
public List<PublicHearingId> getPublicHearingIds(SortOrder order, LimitOffset limitOffset) {
return publicHearingDao.getPublicHearingIds(order, limitOffset);
}
/** {@inheritDoc */
@Override
public void savePublicHearing(PublicHearing publicHearing, PublicHearingFile publicHearingFile, boolean postUpdateEvent) {
if (publicHearing == null) {
throw new IllegalArgumentException("publicHearing cannot be null");
}
publicHearingDao.updatePublicHearing(publicHearing, publicHearingFile);
if (postUpdateEvent) {
eventBus.post(new PublicHearingUpdateEvent(publicHearing, LocalDateTime.now()));
}
}
}