Index: lams_common/src/java/org/lamsfoundation/lams/qb/dao/IQbDAO.java =================================================================== diff -u -rf3adefcfcefee34698e4827cd96952a71225623e -rc393d2b92ec8c8bdc5916ac5f53e0adcaeee0ce3 --- lams_common/src/java/org/lamsfoundation/lams/qb/dao/IQbDAO.java (.../IQbDAO.java) (revision f3adefcfcefee34698e4827cd96952a71225623e) +++ lams_common/src/java/org/lamsfoundation/lams/qb/dao/IQbDAO.java (.../IQbDAO.java) (revision c393d2b92ec8c8bdc5916ac5f53e0adcaeee0ce3) @@ -30,6 +30,8 @@ // finds next question ID for Question Bank question int generateNextQuestionId(); + void updateMaxQuestionId(); + // finds next version for given question ID for Question Bank question int getMaxQuestionVersion(Integer qbQuestionId); Index: lams_common/src/java/org/lamsfoundation/lams/qb/dao/hibernate/QbDAO.java =================================================================== diff -u -rf3adefcfcefee34698e4827cd96952a71225623e -rc393d2b92ec8c8bdc5916ac5f53e0adcaeee0ce3 --- lams_common/src/java/org/lamsfoundation/lams/qb/dao/hibernate/QbDAO.java (.../QbDAO.java) (revision f3adefcfcefee34698e4827cd96952a71225623e) +++ lams_common/src/java/org/lamsfoundation/lams/qb/dao/hibernate/QbDAO.java (.../QbDAO.java) (revision c393d2b92ec8c8bdc5916ac5f53e0adcaeee0ce3) @@ -22,8 +22,10 @@ public class QbDAO extends LAMSBaseDAO implements IQbDAO { - private static final String FIND_MAX_QUESTION_ID = "SELECT MAX(lams_qb_question_question_id) FROM lams_sequence_generator"; + private static final String FIND_MAX_QUESTION_ID = "SELECT IFNULL(MAX(question_id), 0) FROM lams_qb_question"; + private static final String FIND_MAX_QUESTION_ID_FROM_GENERATOR = "SELECT IFNULL(MAX(lams_qb_question_question_id), 0) FROM lams_sequence_generator"; + private static final String FIND_MAX_VERSION = "SELECT MAX(version) FROM QbQuestion AS q WHERE q.questionId = :questionId"; private static final String FIND_QUESTION_ACTIVITIES = "SELECT a FROM QbToolQuestion AS q, ToolActivity AS a JOIN a.learningDesign.lessons AS l " @@ -144,13 +146,26 @@ @Override public int generateNextQuestionId() { - Integer max = (Integer) this.getSession().createNativeQuery(FIND_MAX_QUESTION_ID).uniqueResult(); + int max = ((BigInteger) this.getSession().createNativeQuery(FIND_MAX_QUESTION_ID_FROM_GENERATOR).uniqueResult()) + .intValue(); max++; this.getSession().createNativeQuery(GENERATE_QUESTION_ID).setParameter("qbQuestionId", max).executeUpdate(); return max; } @Override + public void updateMaxQuestionId() { + int maxGenerator = ((BigInteger) this.getSession().createNativeQuery(FIND_MAX_QUESTION_ID_FROM_GENERATOR) + .uniqueResult()).intValue(); + int maxTable = ((BigInteger) this.getSession().createNativeQuery(FIND_MAX_QUESTION_ID).uniqueResult()) + .intValue(); + if (maxGenerator < maxTable) { + this.getSession().createNativeQuery(GENERATE_QUESTION_ID).setParameter("qbQuestionId", maxTable) + .executeUpdate(); + } + } + + @Override public int getMaxQuestionVersion(Integer qbQuestionId) { Object result = this.getSession().createQuery(FIND_MAX_VERSION).setParameter("questionId", qbQuestionId) .uniqueResult(); Index: lams_common/src/java/org/lamsfoundation/lams/qb/service/IQbService.java =================================================================== diff -u -rf3adefcfcefee34698e4827cd96952a71225623e -rc393d2b92ec8c8bdc5916ac5f53e0adcaeee0ce3 --- lams_common/src/java/org/lamsfoundation/lams/qb/service/IQbService.java (.../IQbService.java) (revision f3adefcfcefee34698e4827cd96952a71225623e) +++ lams_common/src/java/org/lamsfoundation/lams/qb/service/IQbService.java (.../IQbService.java) (revision c393d2b92ec8c8bdc5916ac5f53e0adcaeee0ce3) @@ -55,6 +55,8 @@ // finds next question ID for Question Bank question int generateNextQuestionId(); + void updateMaxQuestionId(); + // finds next version for given question ID for Question Bank question int getMaxQuestionVersion(Integer qbQuestionId); Index: lams_common/src/java/org/lamsfoundation/lams/qb/service/QbService.java =================================================================== diff -u -rf3adefcfcefee34698e4827cd96952a71225623e -rc393d2b92ec8c8bdc5916ac5f53e0adcaeee0ce3 --- lams_common/src/java/org/lamsfoundation/lams/qb/service/QbService.java (.../QbService.java) (revision f3adefcfcefee34698e4827cd96952a71225623e) +++ lams_common/src/java/org/lamsfoundation/lams/qb/service/QbService.java (.../QbService.java) (revision c393d2b92ec8c8bdc5916ac5f53e0adcaeee0ce3) @@ -110,6 +110,11 @@ } @Override + public void updateMaxQuestionId() { + qbDAO.updateMaxQuestionId(); + } + + @Override public int getMaxQuestionVersion(Integer qbQuestionId) { return qbDAO.getMaxQuestionVersion(qbQuestionId); } @@ -600,12 +605,11 @@ */ @Override public void insertQuestion(QbQuestion qbQuestion) { - if (qbQuestion.getQuestionId() == null) { - qbQuestion.setQuestionId(generateNextQuestionId()); - } - if (qbQuestion.getVersion() == null) { - qbQuestion.setVersion(1); - } + // question identification may be overlapping with existing data + // it is a new question, so reset it + qbQuestion.setQuestionId(generateNextQuestionId()); + qbQuestion.setVersion(1); + if (qbQuestion.getContentFolderId() == null) { qbQuestion.setContentFolderId(FileUtil.generateUniqueContentFolderID()); } Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java =================================================================== diff -u -re423418cca5e77a3b54cb3be496b67abe01c4183 -rc393d2b92ec8c8bdc5916ac5f53e0adcaeee0ce3 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java (.../AssessmentServiceImpl.java) (revision e423418cca5e77a3b54cb3be496b67abe01c4183) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java (.../AssessmentServiceImpl.java) (revision c393d2b92ec8c8bdc5916ac5f53e0adcaeee0ce3) @@ -2897,6 +2897,8 @@ } assessmentDao.insert(assessmentQuestion); + // in case an imported question had a question ID which is the highest + qbService.updateMaxQuestionId(); } saveOrUpdateAssessment(toolContentObj); Index: lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/service/McService.java =================================================================== diff -u -rfef1c02da402c7a5c0b40264c013199e83b18657 -rc393d2b92ec8c8bdc5916ac5f53e0adcaeee0ce3 --- lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/service/McService.java (.../McService.java) (revision fef1c02da402c7a5c0b40264c013199e83b18657) +++ lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/service/McService.java (.../McService.java) (revision c393d2b92ec8c8bdc5916ac5f53e0adcaeee0ce3) @@ -1464,6 +1464,8 @@ } mcContentDAO.saveMcContent(toolContentObj); + // in case an imported question had a question ID which is the highest + qbService.updateMaxQuestionId(); } catch (ImportToolContentException e) { throw new ToolException(e); } Index: lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/service/QaService.java =================================================================== diff -u -rf0e4b56f3140e3387e9653b56c947132eb87a2a0 -rc393d2b92ec8c8bdc5916ac5f53e0adcaeee0ce3 --- lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/service/QaService.java (.../QaService.java) (revision f0e4b56f3140e3387e9653b56c947132eb87a2a0) +++ lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/service/QaService.java (.../QaService.java) (revision c393d2b92ec8c8bdc5916ac5f53e0adcaeee0ce3) @@ -639,6 +639,8 @@ } qaDAO.saveOrUpdateQa(toolContentObj); + // in case an imported question had a question ID which is the highest + qbService.updateMaxQuestionId(); } catch (ImportToolContentException e) { throw new ToolException(e); } Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieServiceImpl.java =================================================================== diff -u -rf0e4b56f3140e3387e9653b56c947132eb87a2a0 -rc393d2b92ec8c8bdc5916ac5f53e0adcaeee0ce3 --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieServiceImpl.java (.../ScratchieServiceImpl.java) (revision f0e4b56f3140e3387e9653b56c947132eb87a2a0) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieServiceImpl.java (.../ScratchieServiceImpl.java) (revision c393d2b92ec8c8bdc5916ac5f53e0adcaeee0ce3) @@ -2334,6 +2334,8 @@ } scratchieDao.insert(scratchieItem); + // in case an imported question had a question ID which is the highest + qbService.updateMaxQuestionId(); } scratchieDao.saveObject(toolContentObj);