try (Timer.Context context = _insertTimer.time()) {
final long docId = nextId("hol_holiday_seq");
final long docOid = (document.getUniqueId() != null ? extractOid(document.getUniqueId()) : docId);
// the arguments for inserting into the holiday table
final ManageableHoliday holiday = document.getHoliday();
final DbMapSqlParameterSource docArgs = new DbMapSqlParameterSource()
.addValue("doc_id", docId)
.addValue("doc_oid", docOid)
.addTimestamp("ver_from_instant", document.getVersionFromInstant())
.addTimestampNullFuture("ver_to_instant", document.getVersionToInstant())
.addTimestamp("corr_from_instant", document.getCorrectionFromInstant())
.addTimestampNullFuture("corr_to_instant", document.getCorrectionToInstant())
.addValue("name", document.getName())
.addValue("provider_scheme",
document.getProviderId() != null ? document.getProviderId().getScheme().getName() : null,
Types.VARCHAR)
.addValue("provider_value",
document.getProviderId() != null ? document.getProviderId().getValue() : null,
Types.VARCHAR)
.addValue("hol_type", holiday.getType().name())
.addValue("region_scheme",
holiday.getRegionExternalId() != null ? holiday.getRegionExternalId().getScheme().getName() : null,
Types.VARCHAR)
.addValue("region_value",
holiday.getRegionExternalId() != null ? holiday.getRegionExternalId().getValue() : null,
Types.VARCHAR)
.addValue("exchange_scheme",
holiday.getExchangeExternalId() != null ? holiday.getExchangeExternalId().getScheme().getName() : null,
Types.VARCHAR)
.addValue("exchange_value",
holiday.getExchangeExternalId() != null ? holiday.getExchangeExternalId().getValue() : null,
Types.VARCHAR)
.addValue("currency_iso",
holiday.getCurrency() != null ? holiday.getCurrency().getCode() : null,
Types.VARCHAR);
// the arguments for inserting into the date table
final List<DbMapSqlParameterSource> dateList = new ArrayList<DbMapSqlParameterSource>();
for (LocalDate date : holiday.getHolidayDates()) {
final DbMapSqlParameterSource dateArgs = new DbMapSqlParameterSource()
.addValue("doc_id", docId)
.addDate("hol_date", date);
dateList.add(dateArgs);
}
final String sqlDoc = getElSqlBundle().getSql("Insert", docArgs);
final String sqlDate = getElSqlBundle().getSql("InsertDate");
getJdbcTemplate().update(sqlDoc, docArgs);
getJdbcTemplate().batchUpdate(sqlDate, dateList.toArray(new DbMapSqlParameterSource[dateList.size()]));
// set the uniqueId
final UniqueId uniqueId = createUniqueId(docOid, docId);
holiday.setUniqueId(uniqueId);
document.setUniqueId(uniqueId);
return document;
}
}