Index: lams_tool_daco/src/java/org/lamsfoundation/lams/tool/daco/service/DacoServiceImpl.java =================================================================== diff -u -rfb49327c15998617c6cdbd99769650b5396371a4 -rb8ef9bf194b2eb0b974aeeb812738089a555fa4e --- lams_tool_daco/src/java/org/lamsfoundation/lams/tool/daco/service/DacoServiceImpl.java (.../DacoServiceImpl.java) (revision fb49327c15998617c6cdbd99769650b5396371a4) +++ lams_tool_daco/src/java/org/lamsfoundation/lams/tool/daco/service/DacoServiceImpl.java (.../DacoServiceImpl.java) (revision b8ef9bf194b2eb0b974aeeb812738089a555fa4e) @@ -259,7 +259,11 @@ for (DacoAnswer answer : answers) { if (recordId != answer.getRecordId()) { recordId = answer.getRecordId(); - result.add(record); + /* LDEV-3771: need to check we aren't adding a blank record + * if there isn't a record for record id 1 due to deletion. */ + if ( record.size() > 0) { + result.add(record); + } record = new LinkedList(); } record.add(answer); Index: lams_tool_daco/src/java/org/lamsfoundation/lams/tool/daco/web/action/LearningAction.java =================================================================== diff -u -rfb49327c15998617c6cdbd99769650b5396371a4 -rb8ef9bf194b2eb0b974aeeb812738089a555fa4e --- lams_tool_daco/src/java/org/lamsfoundation/lams/tool/daco/web/action/LearningAction.java (.../LearningAction.java) (revision fb49327c15998617c6cdbd99769650b5396371a4) +++ lams_tool_daco/src/java/org/lamsfoundation/lams/tool/daco/web/action/LearningAction.java (.../LearningAction.java) (revision b8ef9bf194b2eb0b974aeeb812738089a555fa4e) @@ -311,10 +311,29 @@ request.setAttribute(DacoConstants.ATTR_SESSION_MAP_ID, sessionMapID); sessionMap.put(DacoConstants.ATTR_LEARNING_CURRENT_TAB, 1); + /* design decision - assume users will not have a lot of records each. If very large record sets + * we should go to the db and just get the size & the next id, and the record to be updated, + * rather than manipulating the full list of records. + */ List record = null; List> records = (List>) sessionMap.get(DacoConstants.ATTR_RECORD_LIST); int recordCount = records.size(); int displayedRecordNumber = recordForm.getDisplayedRecordNumber(); + + /* Cannot use the displayRecordNumber as the new record id as records may be deleted and there will + * be missing numbers in the recordId sequence. Just using displayRecordNumber will add entries to + * existing records. + */ + int nextRecordId = 1; + if ( recordCount > 0 ) { + // records should be in recordId order, so find the next record id based on the last record + List lastRecord = records.get(recordCount - 1); + DacoAnswer lastRecordAnswer = lastRecord.get(0); + if ( lastRecordAnswer.getRecordId() >= nextRecordId ) { + nextRecordId = lastRecordAnswer.getRecordId() + 1; + } + } + boolean isEdit = false; if (displayedRecordNumber <= recordCount) { record = records.get(displayedRecordNumber - 1); @@ -347,7 +366,7 @@ } else { answer = new DacoAnswer(); answer.setQuestion(question); - answer.setRecordId(displayedRecordNumber); + answer.setRecordId(nextRecordId); answer.setUser(user); } answer.setCreateDate(new Date());