@Override
public ValidationStamp newValidationStamp(ValidationStamp validationStamp) {
try {
Integer orderNbValue = getFirstItem(
"SELECT MAX(ORDERNB) FROM VALIDATION_STAMPS WHERE BRANCHID = :branchId",
params("branchId", validationStamp.getBranch().id()),
Integer.class
);
int orderNb = orderNbValue != null ? orderNbValue + 1 : 0;
int id = dbCreate(
"INSERT INTO VALIDATION_STAMPS(BRANCHID, NAME, DESCRIPTION, ORDERNB, CREATION, CREATOR, DATA_TYPE_ID, DATA_TYPE_CONFIG) VALUES (:branchId, :name, :description, :orderNb, :creation, :creator, :dataTypeId, CAST(:dataTypeConfig AS JSONB))",
params("name", validationStamp.getName())
.addValue("description", validationStamp.getDescription())
.addValue("branchId", validationStamp.getBranch().id())
.addValue("orderNb", orderNb)
.addValue("creation", dateTimeForDB(validationStamp.getSignature().getTime()))
.addValue("creator", validationStamp.getSignature().getUser().getName())
.addValue("dataTypeId", validationStamp.getDataType() != null ? validationStamp.getDataType().getDescriptor().getId() : null)
.addValue("dataTypeConfig", validationStamp.getDataType() != null ? writeJson(validationStamp.getDataType().getConfig()) : null)
);
return validationStamp.withId(id(id));
} catch (DuplicateKeyException ex) {
throw new ValidationStampNameAlreadyDefinedException(validationStamp.getName());
}
}