private Event toEvent(ResultSet rs,
BiFunction<ProjectEntityType, ID, ProjectEntity> entityLoader,
Function<String, EventType> eventTypeLoader) throws SQLException {
String eventTypeName = rs.getString("event_type");
Signature signature = readSignature(rs, "event_time", "event_user");
Map<ProjectEntityType, ProjectEntity> entities = new LinkedHashMap<>();
for (ProjectEntityType type : ProjectEntityType.values()) {
int entityId = rs.getInt(type.name());
if (!rs.wasNull()) {
ProjectEntity entity = entityLoader.apply(type, ID.of(entityId));
entities.put(type, entity);
}
}
ProjectEntityType refEntity = getEnum(ProjectEntityType.class, rs, "ref");
Map<String, NameValue> values = loadValues(rs);
return new Event(
eventTypeLoader.apply(eventTypeName),
signature,
entities,
refEntity,
values
);
}