Index: lams_tool_daco/build.properties =================================================================== diff -u -r843648563725cffa91af1dfd96dce9682d39b410 -r955a2a0ed552a7c8e8ffd9894cac59233e56747e --- lams_tool_daco/build.properties (.../build.properties) (revision 843648563725cffa91af1dfd96dce9682d39b410) +++ lams_tool_daco/build.properties (.../build.properties) (revision 955a2a0ed552a7c8e8ffd9894cac59233e56747e) @@ -13,7 +13,7 @@ weblib=lib #project version -tool.version=20080804 +tool.version=20081114 # hide tool option hideTool=false Index: lams_tool_daco/conf/language/lams/ApplicationResources.properties =================================================================== diff -u -r58b91aaeb6aca7cbf105f4fb79702ed44171c445 -r955a2a0ed552a7c8e8ffd9894cac59233e56747e --- lams_tool_daco/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision 58b91aaeb6aca7cbf105f4fb79702ed44171c445) +++ lams_tool_daco/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision 955a2a0ed552a7c8e8ffd9894cac59233e56747e) @@ -249,6 +249,6 @@ event.learnerentry.body =The learner {0} entered a data collection tool.\n\nThis message was send automatically, following tool''s advanced settings. event.recordsubmit.subject =LAMS: A learner submitted a record in a data collection tool event.recordsubmit.body =The learner {0} submitted a record in a data collection tool.\n\nThis message was send automatically, following tool''s advanced settings. +output.desc.learner.number.of.posts =Learner's number of records - #======= End labels: Exported 243 labels for en AU ===== Index: lams_tool_daco/conf/language/lams/ApplicationResources_en_AU.properties =================================================================== diff -u -r58b91aaeb6aca7cbf105f4fb79702ed44171c445 -r955a2a0ed552a7c8e8ffd9894cac59233e56747e --- lams_tool_daco/conf/language/lams/ApplicationResources_en_AU.properties (.../ApplicationResources_en_AU.properties) (revision 58b91aaeb6aca7cbf105f4fb79702ed44171c445) +++ lams_tool_daco/conf/language/lams/ApplicationResources_en_AU.properties (.../ApplicationResources_en_AU.properties) (revision 955a2a0ed552a7c8e8ffd9894cac59233e56747e) @@ -249,6 +249,6 @@ event.learnerentry.body =The learner {0} entered a data collection tool.\n\nThis message was send automatically, following tool''s advanced settings. event.recordsubmit.subject =LAMS: A learner submitted a record in a data collection tool event.recordsubmit.body =The learner {0} submitted a record in a data collection tool.\n\nThis message was send automatically, following tool''s advanced settings. +output.desc.learner.number.of.posts =Learner's number of records - #======= End labels: Exported 243 labels for en AU ===== Index: lams_tool_daco/db/sql/tool_insert.sql =================================================================== diff -u -r843648563725cffa91af1dfd96dce9682d39b410 -r955a2a0ed552a7c8e8ffd9894cac59233e56747e --- lams_tool_daco/db/sql/tool_insert.sql (.../tool_insert.sql) (revision 843648563725cffa91af1dfd96dce9682d39b410) +++ lams_tool_daco/db/sql/tool_insert.sql (.../tool_insert.sql) (revision 955a2a0ed552a7c8e8ffd9894cac59233e56747e) @@ -30,7 +30,8 @@ classpath_addition, context_file, create_date_time, -modified_date_time +modified_date_time, +supports_outputs ) VALUES ( @@ -60,5 +61,6 @@ 'lams-tool-ladaco10.jar', '/org/lamsfoundation/lams/tool/daco/dacoApplicationContext.xml', NOW(), -NOW() +NOW(), +1 ) Index: lams_tool_daco/src/java/org/lamsfoundation/lams/tool/daco/DacoConstants.java =================================================================== diff -u -r68d8b32a8fc98da70326874b6688e799e8d8a16f -r955a2a0ed552a7c8e8ffd9894cac59233e56747e --- lams_tool_daco/src/java/org/lamsfoundation/lams/tool/daco/DacoConstants.java (.../DacoConstants.java) (revision 68d8b32a8fc98da70326874b6688e799e8d8a16f) +++ lams_tool_daco/src/java/org/lamsfoundation/lams/tool/daco/DacoConstants.java (.../DacoConstants.java) (revision 955a2a0ed552a7c8e8ffd9894cac59233e56747e) @@ -286,4 +286,6 @@ public static final String ERROR_MSG_RECORD_TOOMUCH = "error.record.toomuch"; public static final String PAGE_EDITABLE = "isPageEditable"; + + public final static String LEARNER_NUM_POSTS_DEFINITION_NAME = "learner.number.of.posts"; } \ No newline at end of file Index: lams_tool_daco/src/java/org/lamsfoundation/lams/tool/daco/dacoApplicationContext.xml =================================================================== diff -u -r68d8b32a8fc98da70326874b6688e799e8d8a16f -r955a2a0ed552a7c8e8ffd9894cac59233e56747e --- lams_tool_daco/src/java/org/lamsfoundation/lams/tool/daco/dacoApplicationContext.xml (.../dacoApplicationContext.xml) (revision 68d8b32a8fc98da70326874b6688e799e8d8a16f) +++ lams_tool_daco/src/java/org/lamsfoundation/lams/tool/daco/dacoApplicationContext.xml (.../dacoApplicationContext.xml) (revision 955a2a0ed552a7c8e8ffd9894cac59233e56747e) @@ -64,6 +64,10 @@ + + + + @@ -111,6 +115,7 @@ + Index: lams_tool_daco/src/java/org/lamsfoundation/lams/tool/daco/dao/DacoAnswerDAO.java =================================================================== diff -u -r3bdebf472590492a1e54e2495e1b566449e5ea4a -r955a2a0ed552a7c8e8ffd9894cac59233e56747e --- lams_tool_daco/src/java/org/lamsfoundation/lams/tool/daco/dao/DacoAnswerDAO.java (.../DacoAnswerDAO.java) (revision 3bdebf472590492a1e54e2495e1b566449e5ea4a) +++ lams_tool_daco/src/java/org/lamsfoundation/lams/tool/daco/dao/DacoAnswerDAO.java (.../DacoAnswerDAO.java) (revision 955a2a0ed552a7c8e8ffd9894cac59233e56747e) @@ -5,18 +5,25 @@ import org.lamsfoundation.lams.tool.daco.dto.QuestionSummaryDTO; public interface DacoAnswerDAO extends DAO { - /** - * Gets the summary values for the questions. - * @param userUid user for who the summary should be created - * @param blankSummary the empty structure where the summary values will be filled into - * @return list of question summaries - */ - List getQuestionSummaries(Long userUid, List blankSummary); + /** + * Gets the summary values for the questions. + * + * @param userUid + * user for who the summary should be created + * @param blankSummary + * the empty structure where the summary values will be filled into + * @return list of question summaries + */ + List getQuestionSummaries(Long userUid, List blankSummary); - /** - * Gets the number of records in the group. - * @param sessionId session ID of the group - * @return number of records in that group - */ - Integer getGroupRecordCount(Long sessionId); + /** + * Gets the number of records in the group. + * + * @param sessionId + * session ID of the group + * @return number of records in that group + */ + Integer getGroupRecordCount(Long sessionId); + + Integer getUserRecordCount(Long userId, Long sessionId); } \ No newline at end of file Index: lams_tool_daco/src/java/org/lamsfoundation/lams/tool/daco/dao/hibernate/DacoAnswerDAOHibernate.java =================================================================== diff -u -r843648563725cffa91af1dfd96dce9682d39b410 -r955a2a0ed552a7c8e8ffd9894cac59233e56747e --- lams_tool_daco/src/java/org/lamsfoundation/lams/tool/daco/dao/hibernate/DacoAnswerDAOHibernate.java (.../DacoAnswerDAOHibernate.java) (revision 843648563725cffa91af1dfd96dce9682d39b410) +++ lams_tool_daco/src/java/org/lamsfoundation/lams/tool/daco/dao/hibernate/DacoAnswerDAOHibernate.java (.../DacoAnswerDAOHibernate.java) (revision 955a2a0ed552a7c8e8ffd9894cac59233e56747e) @@ -11,146 +11,154 @@ public class DacoAnswerDAOHibernate extends BaseDAOHibernate implements DacoAnswerDAO { - private static final String FIND_USER_NUMBER_SUMMARY = "SELECT a.question.uid, " + "SUM(a.answer),AVG(a.answer) FROM " - + DacoAnswer.class.getName() - + " AS a WHERE a.question.type=:numberQuestionType AND a.user.uid=:userUid AND a.answer IS NOT NULL " - + "GROUP BY a.question.uid ORDER BY a.question.uid"; + private static final String FIND_USER_NUMBER_SUMMARY = "SELECT a.question.uid, " + + "SUM(a.answer),AVG(a.answer) FROM " + DacoAnswer.class.getName() + + " AS a WHERE a.question.type=:numberQuestionType AND a.user.uid=:userUid AND a.answer IS NOT NULL " + + "GROUP BY a.question.uid ORDER BY a.question.uid"; - private static final String FIND_GROUP_NUMBER_SUMMARY = "SELECT a.question.uid, " - + "SUM(a.answer),AVG(a.answer) FROM " - + DacoAnswer.class.getName() - + " AS a, " - + DacoUser.class.getName() - + " AS u WHERE a.question.type=:numberQuestionType AND u.uid=:userUid AND a.user.session.sessionId=u.session.sessionId AND a.answer IS NOT NULL " - + "GROUP BY a.question.uid ORDER BY a.question.uid"; + private static final String FIND_GROUP_NUMBER_SUMMARY = "SELECT a.question.uid, " + + "SUM(a.answer),AVG(a.answer) FROM " + + DacoAnswer.class.getName() + + " AS a, " + + DacoUser.class.getName() + + " AS u WHERE a.question.type=:numberQuestionType AND u.uid=:userUid AND a.user.session.sessionId=u.session.sessionId AND a.answer IS NOT NULL " + + "GROUP BY a.question.uid ORDER BY a.question.uid"; - private static final String FIND_USER_ANSWER_ENUMERATION_QUERY = "SELECT DISTINCT a.question.uid, a.answer, a.question.type, COUNT(*) FROM " - + DacoAnswer.class.getName() - + " AS a WHERE a.user.uid=:userUid AND a.question.type IN (:numberQuestionType,:radioQuestionType,:dropdownQuestionType,:checkboxQuestionType) " - + "AND a.answer IS NOT NULL GROUP BY a.question.uid, a.answer ORDER BY a.question.uid,a.answer"; + private static final String FIND_USER_ANSWER_ENUMERATION_QUERY = "SELECT DISTINCT a.question.uid, a.answer, a.question.type, COUNT(*) FROM " + + DacoAnswer.class.getName() + + " AS a WHERE a.user.uid=:userUid AND a.question.type IN (:numberQuestionType,:radioQuestionType,:dropdownQuestionType,:checkboxQuestionType) " + + "AND a.answer IS NOT NULL GROUP BY a.question.uid, a.answer ORDER BY a.question.uid,a.answer"; - private static final String FIND_GROUP_ANSWER_ENUMERATION_QUERY = "SELECT DISTINCT a.question.uid, a.answer, a.question.type, COUNT(*) FROM " - + DacoAnswer.class.getName() - + " AS a, " - + DacoUser.class.getName() - + " AS u WHERE a.question.type IN (:numberQuestionType,:radioQuestionType,:dropdownQuestionType,:checkboxQuestionType) " - + " AND u.uid=:userUid AND a.user.session.sessionId=u.session.sessionId AND a.answer IS NOT NULL GROUP BY a.question.uid, a.answer ORDER BY a.question.uid,a.answer"; + private static final String FIND_GROUP_ANSWER_ENUMERATION_QUERY = "SELECT DISTINCT a.question.uid, a.answer, a.question.type, COUNT(*) FROM " + + DacoAnswer.class.getName() + + " AS a, " + + DacoUser.class.getName() + + " AS u WHERE a.question.type IN (:numberQuestionType,:radioQuestionType,:dropdownQuestionType,:checkboxQuestionType) " + + " AND u.uid=:userUid AND a.user.session.sessionId=u.session.sessionId AND a.answer IS NOT NULL GROUP BY a.question.uid, a.answer ORDER BY a.question.uid,a.answer"; - private static final String FIND_ANSWER_COUNT = "SELECT COUNT(*) FROM " + DacoAnswer.class.getName() - + " AS a WHERE a.question.uid=? AND a.answer IS NOT NULL"; + private static final String FIND_ANSWER_COUNT = "SELECT COUNT(*) FROM " + DacoAnswer.class.getName() + + " AS a WHERE a.question.uid=? AND a.answer IS NOT NULL"; - private static final String FIND_TOTAL_RECORD_COUNT = "SELECT COUNT (DISTINCT a.recordId) FROM " + DacoAnswer.class.getName() - + " AS a WHERE a.user.session.sessionId=?"; + private static final String FIND_TOTAL_RECORD_COUNT = "SELECT COUNT (DISTINCT a.recordId) FROM " + + DacoAnswer.class.getName() + " AS a WHERE a.user.session.sessionId=?"; - public List getQuestionSummaries(Long userUid, List summaries) { + private static final String FIND_USER_RECORD_COUNT = "SELECT COUNT (DISTINCT a.recordId) FROM " + + DacoAnswer.class.getName() + " AS a WHERE a.user.userId=:userId AND a.user.session.sessionId=:sessionId"; - List result = getHibernateTemplate().findByNamedParam(DacoAnswerDAOHibernate.FIND_USER_NUMBER_SUMMARY, - new String[] { "userUid", "numberQuestionType" }, new Object[] { userUid, DacoConstants.QUESTION_TYPE_NUMBER }); + public List getQuestionSummaries(Long userUid, List summaries) { - for (Object[] objectRow : result) { - addNumberSummary(summaries, objectRow, true); - } + List result = getHibernateTemplate().findByNamedParam( + DacoAnswerDAOHibernate.FIND_USER_NUMBER_SUMMARY, new String[] { "userUid", "numberQuestionType" }, + new Object[] { userUid, DacoConstants.QUESTION_TYPE_NUMBER }); - result = getHibernateTemplate().findByNamedParam(DacoAnswerDAOHibernate.FIND_GROUP_NUMBER_SUMMARY, - new String[] { "userUid", "numberQuestionType" }, new Object[] { userUid, DacoConstants.QUESTION_TYPE_NUMBER }); + for (Object[] objectRow : result) { + addNumberSummary(summaries, objectRow, true); + } - for (Object[] objectRow : result) { - addNumberSummary(summaries, objectRow, false); - } + result = getHibernateTemplate().findByNamedParam(DacoAnswerDAOHibernate.FIND_GROUP_NUMBER_SUMMARY, + new String[] { "userUid", "numberQuestionType" }, + new Object[] { userUid, DacoConstants.QUESTION_TYPE_NUMBER }); - result = getHibernateTemplate().findByNamedParam( - DacoAnswerDAOHibernate.FIND_USER_ANSWER_ENUMERATION_QUERY, - new String[] { "userUid", "numberQuestionType", "radioQuestionType", "dropdownQuestionType", - "checkboxQuestionType" }, - new Object[] { userUid, DacoConstants.QUESTION_TYPE_NUMBER, DacoConstants.QUESTION_TYPE_RADIO, - DacoConstants.QUESTION_TYPE_DROPDOWN, DacoConstants.QUESTION_TYPE_CHECKBOX }); + for (Object[] objectRow : result) { + addNumberSummary(summaries, objectRow, false); + } - for (Object[] objectRow : result) { - addAnswerEnumerationSummary(summaries, objectRow, true); - } + result = getHibernateTemplate().findByNamedParam( + DacoAnswerDAOHibernate.FIND_USER_ANSWER_ENUMERATION_QUERY, + new String[] { "userUid", "numberQuestionType", "radioQuestionType", "dropdownQuestionType", + "checkboxQuestionType" }, + new Object[] { userUid, DacoConstants.QUESTION_TYPE_NUMBER, DacoConstants.QUESTION_TYPE_RADIO, + DacoConstants.QUESTION_TYPE_DROPDOWN, DacoConstants.QUESTION_TYPE_CHECKBOX }); - result = getHibernateTemplate().findByNamedParam( - DacoAnswerDAOHibernate.FIND_GROUP_ANSWER_ENUMERATION_QUERY, - new String[] { "userUid", "numberQuestionType", "radioQuestionType", "dropdownQuestionType", - "checkboxQuestionType" }, - new Object[] { userUid, DacoConstants.QUESTION_TYPE_NUMBER, DacoConstants.QUESTION_TYPE_RADIO, - DacoConstants.QUESTION_TYPE_DROPDOWN, DacoConstants.QUESTION_TYPE_CHECKBOX }); - - for (Object[] objectRow : result) { - addAnswerEnumerationSummary(summaries, objectRow, false); - } - return summaries; + for (Object[] objectRow : result) { + addAnswerEnumerationSummary(summaries, objectRow, true); } - private void addAnswerEnumerationSummary(List summaries, Object[] objectRow, boolean isUserSummary) { - String[] row = rewriteRow(objectRow); - long currentUid = Long.parseLong(row[DacoConstants.QUESTION_DB_ANSWER_ENUMERATION_SUMMARY_QUESTION_UID]); - QuestionSummaryDTO summary = summaries.get(findQuestionSequenceNumber(currentUid, summaries)); - QuestionSummarySingleAnswerDTO singleAnswer = new QuestionSummarySingleAnswerDTO(); - singleAnswer.setAnswer(row[DacoConstants.QUESTION_DB_ANSWER_ENUMERATION_SUMMARY_ANSWER]); - singleAnswer.setCount(row[DacoConstants.QUESTION_DB_ANSWER_ENUMERATION_SUMMARY_COUNT]); - Integer answerCount = (Integer) getHibernateTemplate().find(DacoAnswerDAOHibernate.FIND_ANSWER_COUNT, currentUid).get(0); - singleAnswer.setAverage(Math.round(Float.parseFloat(singleAnswer.getCount()) / answerCount * 100) + "%"); + result = getHibernateTemplate().findByNamedParam( + DacoAnswerDAOHibernate.FIND_GROUP_ANSWER_ENUMERATION_QUERY, + new String[] { "userUid", "numberQuestionType", "radioQuestionType", "dropdownQuestionType", + "checkboxQuestionType" }, + new Object[] { userUid, DacoConstants.QUESTION_TYPE_NUMBER, DacoConstants.QUESTION_TYPE_RADIO, + DacoConstants.QUESTION_TYPE_DROPDOWN, DacoConstants.QUESTION_TYPE_CHECKBOX }); - if (Short.parseShort(row[DacoConstants.QUESTION_DB_ANSWER_ENUMERATION_SUMMARY_QUESTION_TYPE]) == DacoConstants.QUESTION_TYPE_NUMBER) { - QuestionSummarySingleAnswerDTO currentSingleAnswer = null; - int answerIndex = 1; - do { - currentSingleAnswer = isUserSummary ? summary.getUserSummarySingleAnswer(answerIndex) : summary - .getGroupSummarySingleAnswer(answerIndex); - if (currentSingleAnswer == null) { - if (isUserSummary) { - summary.addUserSummarySingleAnswer(answerIndex, singleAnswer); - } - else { - summary.addGroupSummarySingleAnswer(answerIndex, singleAnswer); - } - currentSingleAnswer = null; - } - answerIndex++; - } - while (currentSingleAnswer != null); - } - else { - int answerIndex = Integer.parseInt(singleAnswer.getAnswer()) - 1; - if (isUserSummary) { - summary.addUserSummarySingleAnswer(answerIndex, singleAnswer); - } - else { - summary.addGroupSummarySingleAnswer(answerIndex, singleAnswer); - } - } + for (Object[] objectRow : result) { + addAnswerEnumerationSummary(summaries, objectRow, false); } + return summaries; + } - private void addNumberSummary(List summaries, Object[] objectRow, boolean isUserSummary) { - String[] row = rewriteRow(objectRow); - long currentUid = Long.parseLong(row[DacoConstants.QUESTION_DB_NUMBER_SUMMARY_QUESTION_UID]); - QuestionSummaryDTO summary = summaries.get(findQuestionSequenceNumber(currentUid, summaries)); - QuestionSummarySingleAnswerDTO singleAnswer = isUserSummary ? summary.getUserSummarySingleAnswer(0) : summary - .getGroupSummarySingleAnswer(0); - singleAnswer.setSum(row[DacoConstants.QUESTION_DB_NUMBER_SUMMARY_SUM]); - singleAnswer.setAverage(row[DacoConstants.QUESTION_DB_NUMBER_SUMMARY_AVERAGE]); - } + private void addAnswerEnumerationSummary(List summaries, Object[] objectRow, + boolean isUserSummary) { + String[] row = rewriteRow(objectRow); + long currentUid = Long.parseLong(row[DacoConstants.QUESTION_DB_ANSWER_ENUMERATION_SUMMARY_QUESTION_UID]); + QuestionSummaryDTO summary = summaries.get(findQuestionSequenceNumber(currentUid, summaries)); + QuestionSummarySingleAnswerDTO singleAnswer = new QuestionSummarySingleAnswerDTO(); + singleAnswer.setAnswer(row[DacoConstants.QUESTION_DB_ANSWER_ENUMERATION_SUMMARY_ANSWER]); + singleAnswer.setCount(row[DacoConstants.QUESTION_DB_ANSWER_ENUMERATION_SUMMARY_COUNT]); + Integer answerCount = (Integer) getHibernateTemplate().find(DacoAnswerDAOHibernate.FIND_ANSWER_COUNT, + currentUid).get(0); + singleAnswer.setAverage(Math.round(Float.parseFloat(singleAnswer.getCount()) / answerCount * 100) + "%"); - private int findQuestionSequenceNumber(Long uid, List summaries) { - for (int summaryNumber = 0; summaryNumber < summaries.size(); summaryNumber++) { - QuestionSummaryDTO summary = summaries.get(summaryNumber); - if (summary != null && uid.equals(summary.getQuestionUid())) { - return summaryNumber; - } + if (Short.parseShort(row[DacoConstants.QUESTION_DB_ANSWER_ENUMERATION_SUMMARY_QUESTION_TYPE]) == DacoConstants.QUESTION_TYPE_NUMBER) { + QuestionSummarySingleAnswerDTO currentSingleAnswer = null; + int answerIndex = 1; + do { + currentSingleAnswer = isUserSummary ? summary.getUserSummarySingleAnswer(answerIndex) : summary + .getGroupSummarySingleAnswer(answerIndex); + if (currentSingleAnswer == null) { + if (isUserSummary) { + summary.addUserSummarySingleAnswer(answerIndex, singleAnswer); + } else { + summary.addGroupSummarySingleAnswer(answerIndex, singleAnswer); + } + currentSingleAnswer = null; } - return -1; + answerIndex++; + } while (currentSingleAnswer != null); + } else { + int answerIndex = Integer.parseInt(singleAnswer.getAnswer()) - 1; + if (isUserSummary) { + summary.addUserSummarySingleAnswer(answerIndex, singleAnswer); + } else { + summary.addGroupSummarySingleAnswer(answerIndex, singleAnswer); + } } + } - private String[] rewriteRow(Object[] objectRow) { - String[] row = new String[objectRow.length]; - for (int fieldNumber = 0; fieldNumber < objectRow.length; fieldNumber++) { - row[fieldNumber] = String.valueOf(objectRow[fieldNumber]); - } - return row; + private void addNumberSummary(List summaries, Object[] objectRow, boolean isUserSummary) { + String[] row = rewriteRow(objectRow); + long currentUid = Long.parseLong(row[DacoConstants.QUESTION_DB_NUMBER_SUMMARY_QUESTION_UID]); + QuestionSummaryDTO summary = summaries.get(findQuestionSequenceNumber(currentUid, summaries)); + QuestionSummarySingleAnswerDTO singleAnswer = isUserSummary ? summary.getUserSummarySingleAnswer(0) : summary + .getGroupSummarySingleAnswer(0); + singleAnswer.setSum(row[DacoConstants.QUESTION_DB_NUMBER_SUMMARY_SUM]); + singleAnswer.setAverage(row[DacoConstants.QUESTION_DB_NUMBER_SUMMARY_AVERAGE]); + } + + private int findQuestionSequenceNumber(Long uid, List summaries) { + for (int summaryNumber = 0; summaryNumber < summaries.size(); summaryNumber++) { + QuestionSummaryDTO summary = summaries.get(summaryNumber); + if (summary != null && uid.equals(summary.getQuestionUid())) { + return summaryNumber; + } } + return -1; + } - public Integer getGroupRecordCount(Long sessionId) { - return (Integer) getHibernateTemplate().find(DacoAnswerDAOHibernate.FIND_TOTAL_RECORD_COUNT, sessionId).get(0); + private String[] rewriteRow(Object[] objectRow) { + String[] row = new String[objectRow.length]; + for (int fieldNumber = 0; fieldNumber < objectRow.length; fieldNumber++) { + row[fieldNumber] = String.valueOf(objectRow[fieldNumber]); } + return row; + } + + public Integer getGroupRecordCount(Long sessionId) { + return (Integer) getHibernateTemplate().find(DacoAnswerDAOHibernate.FIND_TOTAL_RECORD_COUNT, sessionId).get(0); + } + + public Integer getUserRecordCount(Long userId, Long sessionId) { + return (Integer) getHibernateTemplate().findByNamedParam(DacoAnswerDAOHibernate.FIND_USER_RECORD_COUNT, + new String[] { "userId", "sessionId" }, new Object[] { userId, sessionId }).get(0); + } } \ No newline at end of file Index: lams_tool_daco/src/java/org/lamsfoundation/lams/tool/daco/dbupdates/patch20081114_updateFrom21.sql =================================================================== diff -u --- lams_tool_daco/src/java/org/lamsfoundation/lams/tool/daco/dbupdates/patch20081114_updateFrom21.sql (revision 0) +++ lams_tool_daco/src/java/org/lamsfoundation/lams/tool/daco/dbupdates/patch20081114_updateFrom21.sql (revision 955a2a0ed552a7c8e8ffd9894cac59233e56747e) @@ -0,0 +1,17 @@ +-- SQL statements to update from LAMS 2.1/2.1.1 + +-- Turn off autocommit, so nothing is committed if there is an error +SET AUTOCOMMIT = 0; + +----------------------Put all sql statements below here------------------------- + + +-- SQL statements to update from LAMS 2.1/2.1.1 + +UPDATE lams_tool SET supports_outputs=1 WHERE tool_signature='ladaco10'; + +---Put all sql statements above here------------------------- + +-- If there were no errors, commit and restore autocommit to on +COMMIT; +SET AUTOCOMMIT = 1; Index: lams_tool_daco/src/java/org/lamsfoundation/lams/tool/daco/service/DacoOutputFactory.java =================================================================== diff -u --- lams_tool_daco/src/java/org/lamsfoundation/lams/tool/daco/service/DacoOutputFactory.java (revision 0) +++ lams_tool_daco/src/java/org/lamsfoundation/lams/tool/daco/service/DacoOutputFactory.java (revision 955a2a0ed552a7c8e8ffd9894cac59233e56747e) @@ -0,0 +1,85 @@ +/**************************************************************** + * Copyright (C) 2005 LAMS Foundation (http://lamsfoundation.org) + * ============================================================= + * License Information: http://lamsfoundation.org/licensing/lams/2.0/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2.0 + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 * USA + * + * http://www.gnu.org/licenses/gpl.txt + * **************************************************************** + */ + +/* $Id$ */ +package org.lamsfoundation.lams.tool.daco.service; + +import java.util.List; +import java.util.SortedMap; +import java.util.TreeMap; + +import org.lamsfoundation.lams.tool.OutputFactory; +import org.lamsfoundation.lams.tool.ToolOutput; +import org.lamsfoundation.lams.tool.ToolOutputDefinition; +import org.lamsfoundation.lams.tool.daco.DacoConstants; +import org.lamsfoundation.lams.tool.exception.ToolException; + +/** + * Creates the output definitions for Daco. Currently it provides two types of output - an user answers represented by + * an map "topic creation date" -> "all learner's answers to that topic" (output type "OUTPUT_COMPLEX") and range + * definition for number of words entered by an user. + */ +public class DacoOutputFactory extends OutputFactory { + + /** + * @see org.lamsfoundation.lams.tool.OutputDefinitionFactory#getToolOutputDefinitions(java.lang.Object) + */ + @Override + public SortedMap getToolOutputDefinitions(Object toolContentObject) + throws ToolException { + + SortedMap definitionMap = new TreeMap(); + + ToolOutputDefinition numberOfPostsDefinition = buildRangeDefinition( + DacoConstants.LEARNER_NUM_POSTS_DEFINITION_NAME, new Long(0), null); + definitionMap.put(DacoConstants.LEARNER_NUM_POSTS_DEFINITION_NAME, numberOfPostsDefinition); + + return definitionMap; + } + + public SortedMap getToolOutput(List names, IDacoService dacoService, + Long toolSessionId, Long learnerId) { + TreeMap map = new TreeMap(); + if (names == null || names.contains(DacoConstants.LEARNER_NUM_POSTS_DEFINITION_NAME)) { + map + .put(DacoConstants.LEARNER_NUM_POSTS_DEFINITION_NAME, getNumRecords(dacoService, learnerId, + toolSessionId)); + } + return map; + + } + + public ToolOutput getToolOutput(String name, IDacoService dacoService, Long toolSessionId, Long learnerId) { + + if (name != null && name.equals(DacoConstants.LEARNER_NUM_POSTS_DEFINITION_NAME)) { + return getNumRecords(dacoService, learnerId, toolSessionId); + } + return null; + + } + + private ToolOutput getNumRecords(IDacoService dacoService, Long learnerId, Long toolSessionId) { + int num = dacoService.getRecordNum(learnerId, toolSessionId); + return new ToolOutput(DacoConstants.LEARNER_NUM_POSTS_DEFINITION_NAME, getI18NText( + DacoConstants.LEARNER_NUM_POSTS_DEFINITION_NAME, true), new Long(num)); + } +} Index: lams_tool_daco/src/java/org/lamsfoundation/lams/tool/daco/service/DacoServiceImpl.java =================================================================== diff -u -r68d8b32a8fc98da70326874b6688e799e8d8a16f -r955a2a0ed552a7c8e8ffd9894cac59233e56747e --- lams_tool_daco/src/java/org/lamsfoundation/lams/tool/daco/service/DacoServiceImpl.java (.../DacoServiceImpl.java) (revision 68d8b32a8fc98da70326874b6688e799e8d8a16f) +++ lams_tool_daco/src/java/org/lamsfoundation/lams/tool/daco/service/DacoServiceImpl.java (.../DacoServiceImpl.java) (revision 955a2a0ed552a7c8e8ffd9894cac59233e56747e) @@ -33,7 +33,6 @@ import java.util.List; import java.util.Set; import java.util.SortedMap; -import java.util.TreeMap; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; @@ -135,6 +134,8 @@ private ILessonService lessonService; + private DacoOutputFactory dacoOutputFactory; + public void copyToolContent(Long fromContentId, Long toContentId) throws ToolException { if (toContentId == null) { throw new ToolException("Failed to create the Data Collection tool seession"); @@ -537,7 +538,7 @@ * java.lang.Long) */ public SortedMap getToolOutput(List names, Long toolSessionId, Long learnerId) { - return new TreeMap(); + return dacoOutputFactory.getToolOutput(names, this, toolSessionId, learnerId); } /** @@ -547,7 +548,7 @@ * java.lang.Long) */ public ToolOutput getToolOutput(String name, Long toolSessionId, Long learnerId) { - return null; + return dacoOutputFactory.getToolOutput(name, this, toolSessionId, learnerId); } /** @@ -559,7 +560,15 @@ * @return SortedMap of ToolOutputDefinitions with the key being the name of each definition */ public SortedMap getToolOutputDefinitions(Long toolContentId) throws ToolException { - return new TreeMap(); + Daco daco = getDacoByContentId(toolContentId); + if (daco == null) { + try { + daco = getDefaultDaco(); + } catch (DacoApplicationException e) { + DacoServiceImpl.log.error(e.getMessage()); + } + } + return getDacoOutputFactory().getToolOutputDefinitions(daco); } public DacoUser getUser(Long uid) { @@ -891,4 +900,16 @@ public void setLessonService(ILessonService lessonService) { this.lessonService = lessonService; } + + public int getRecordNum(Long userID, Long sessionId) { + return dacoAnswerDao.getUserRecordCount(userID, sessionId); + } + + public DacoOutputFactory getDacoOutputFactory() { + return dacoOutputFactory; + } + + public void setDacoOutputFactory(DacoOutputFactory dacoOutputFactory) { + this.dacoOutputFactory = dacoOutputFactory; + } } \ No newline at end of file Index: lams_tool_daco/src/java/org/lamsfoundation/lams/tool/daco/service/IDacoService.java =================================================================== diff -u -r68d8b32a8fc98da70326874b6688e799e8d8a16f -r955a2a0ed552a7c8e8ffd9894cac59233e56747e --- lams_tool_daco/src/java/org/lamsfoundation/lams/tool/daco/service/IDacoService.java (.../IDacoService.java) (revision 68d8b32a8fc98da70326874b6688e799e8d8a16f) +++ lams_tool_daco/src/java/org/lamsfoundation/lams/tool/daco/service/IDacoService.java (.../IDacoService.java) (revision 955a2a0ed552a7c8e8ffd9894cac59233e56747e) @@ -305,4 +305,13 @@ IEventNotificationService getEventNotificationService(); public List getMonitorsByToolSessionId(Long sessionId); + + /** + * Get how many records has the given user posted. + * + * @param userID + * @param sessionId + * @return + */ + public int getRecordNum(Long userID, Long sessionId); }