Index: lams_tool_daco/src/java/org/lamsfoundation/lams/tool/daco/service/DacoServiceImpl.java =================================================================== diff -u -r5e63656a12c02f7476564e278b43ff4ce86ac930 -raaedb9671016cda6a91d7de038a2e688fa4269a0 --- lams_tool_daco/src/java/org/lamsfoundation/lams/tool/daco/service/DacoServiceImpl.java (.../DacoServiceImpl.java) (revision 5e63656a12c02f7476564e278b43ff4ce86ac930) +++ lams_tool_daco/src/java/org/lamsfoundation/lams/tool/daco/service/DacoServiceImpl.java (.../DacoServiceImpl.java) (revision aaedb9671016cda6a91d7de038a2e688fa4269a0) @@ -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 -r102a93686f5779e8caf5a693f388edda2e01f05d -raaedb9671016cda6a91d7de038a2e688fa4269a0 --- lams_tool_daco/src/java/org/lamsfoundation/lams/tool/daco/web/action/LearningAction.java (.../LearningAction.java) (revision 102a93686f5779e8caf5a693f388edda2e01f05d) +++ lams_tool_daco/src/java/org/lamsfoundation/lams/tool/daco/web/action/LearningAction.java (.../LearningAction.java) (revision aaedb9671016cda6a91d7de038a2e688fa4269a0) @@ -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());