package fr.openwide.core.jpa.more.business.history.service; import java.util.Date; import org.springframework.beans.factory.annotation.Autowired; import fr.openwide.core.jpa.more.business.history.model.AbstractHistoryLog; import fr.openwide.core.jpa.more.business.history.model.embeddable.HistoryEventSummary; import fr.openwide.core.jpa.util.HibernateUtils; public abstract class AbstractHistoryEventSummaryServiceImpl<U> implements IGenericHistoryEventSummaryService<U> { @Autowired private IHistoryValueService valueService; protected abstract U getDefaultSubject(); @Override public void refresh(HistoryEventSummary evenement) { refresh(evenement, new Date()); } @Override public void refresh(HistoryEventSummary evenement, Date date) { refresh(evenement, date, getDefaultSubject()); } @Override public void refresh(HistoryEventSummary evenement, Date date, U subject) { evenement.setDate(date); evenement.setSubject(valueService.create(HibernateUtils.unwrap(subject))); } @Override public void refresh(HistoryEventSummary evenement, AbstractHistoryLog<?, ?, ?> historyLog) { evenement.setDate(historyLog.getDate()); evenement.setSubject(historyLog.getSubject()); } @Override public void clear(HistoryEventSummary event) { event.setDate(null); event.setSubject(null); } @Override public boolean isSubject(HistoryEventSummary event, U subject) { return valueService.matches(event.getSubject(), subject).or(false); } }