Index: lams_tool_task/conf/language/lams/ApplicationResources.properties =================================================================== diff -u -ra370ee2f7fe049337ac7b342e0218bdde3f3ee68 -r721fa349b42e0b7e2ae19d60756fea47146bfdd4 --- lams_tool_task/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision a370ee2f7fe049337ac7b342e0218bdde3f3ee68) +++ lams_tool_task/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision 721fa349b42e0b7e2ae19d60756fea47146bfdd4) @@ -185,6 +185,7 @@ lable.topic.title.createDate =Date lable.topic.title.author =Author label.default.user.name =Instructor +output.desc.learner.number.of.tasks.completed =Learner''s number of tasks completed +output.desc.tool.condition =Complex tool conditions - #======= End labels: Exported 156 labels for en AU ===== Index: lams_tool_task/db/sql/tool_insert.sql =================================================================== diff -u -r875f56cb6917d1a52bed0545f2933c3b55497a02 -r721fa349b42e0b7e2ae19d60756fea47146bfdd4 --- lams_tool_task/db/sql/tool_insert.sql (.../tool_insert.sql) (revision 875f56cb6917d1a52bed0545f2933c3b55497a02) +++ lams_tool_task/db/sql/tool_insert.sql (.../tool_insert.sql) (revision 721fa349b42e0b7e2ae19d60756fea47146bfdd4) @@ -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-latask10.jar', '/org/lamsfoundation/lams/tool/taskList/taskListApplicationContext.xml', NOW(), -NOW() +NOW(), +1 ) Index: lams_tool_task/src/java/org/lamsfoundation/lams/tool/taskList/model/TaskList.java =================================================================== diff -u -r12a0e5152335f664f19ad5b1449633f7fec6b8a9 -r721fa349b42e0b7e2ae19d60756fea47146bfdd4 --- lams_tool_task/src/java/org/lamsfoundation/lams/tool/taskList/model/TaskList.java (.../TaskList.java) (revision 12a0e5152335f664f19ad5b1449633f7fec6b8a9) +++ lams_tool_task/src/java/org/lamsfoundation/lams/tool/taskList/model/TaskList.java (.../TaskList.java) (revision 721fa349b42e0b7e2ae19d60756fea47146bfdd4) @@ -25,9 +25,11 @@ import java.util.ArrayList; import java.util.Date; +import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.List; +import java.util.Map; import java.util.Set; import org.apache.commons.lang.StringUtils; @@ -90,7 +92,7 @@ private List offlineFileList; /** - * Default contruction method. + * Default contructor. */ public TaskList(){ attachments = new HashSet(); @@ -125,6 +127,7 @@ try{ taskList = (TaskList) super.clone(); taskList.setUid(null); + //clone taskListItems if(taskListItems != null){ Iterator iter = taskListItems.iterator(); @@ -151,35 +154,43 @@ } taskList.attachments = set; } + //clone conditions if(conditions != null){ - Iterator iter = conditions.iterator(); - Set set = new HashSet(); - while(iter.hasNext()){ - TaskListCondition condition = (TaskListCondition)iter.next(); + + // create map of pairs: sequenceId that corresponds to appropreate + // taskListItem. Will need then for making ties beetween conditions' + // taskListItems and real ones. + HashMap taskListItemsSeq = new HashMap(); + for(Object itemObject:taskListItems) { + TaskListItem item = (TaskListItem) itemObject; + taskListItemsSeq.put(item.getSequenceId(), item); + } + + Set newConditions = new HashSet(); + Iterator conds = conditions.iterator(); + while(conds.hasNext()){ + TaskListCondition condition = (TaskListCondition)conds.next(); TaskListCondition newCondition = (TaskListCondition) condition.clone(); //picking up all the taskListItems that condition had if(condition.getTaskListItems() != null){ - Set set2 = new HashSet(); - newCondition.setTaskListItems(set2); -// Iterator iter2 = taskListItems.iterator(); -// while(iter.hasNext()){ -// TaskListItem item = (TaskListItem)iter.next(); -// TaskListItem newItem = (TaskListItem) item.clone(); -// //just clone old file without duplicate it in repository -// set.add(newItem); -// } + Set condTaskListItems = new HashSet(); + Iterator iterCondItems = condition.getTaskListItems().iterator(); + while(iterCondItems.hasNext()){ + TaskListItem item = (TaskListItem)iterCondItems.next(); + + condTaskListItems.add(taskListItemsSeq.get(item.getSequenceId())); + } + newCondition.setTaskListItems(condTaskListItems); } - - - - set.add(newCondition); + newConditions.add(newCondition); } - taskList.conditions = set; + taskList.conditions = newConditions; } - //clone ReourceUser as well + + //clone ResourceUser as well if(this.createdBy != null){ taskList.setCreatedBy((TaskListUser) this.createdBy.clone()); } Index: lams_tool_task/src/java/org/lamsfoundation/lams/tool/taskList/model/TaskListCondition.hbm.xml =================================================================== diff -u -r12a0e5152335f664f19ad5b1449633f7fec6b8a9 -r721fa349b42e0b7e2ae19d60756fea47146bfdd4 --- lams_tool_task/src/java/org/lamsfoundation/lams/tool/taskList/model/TaskListCondition.hbm.xml (.../TaskListCondition.hbm.xml) (revision 12a0e5152335f664f19ad5b1449633f7fec6b8a9) +++ lams_tool_task/src/java/org/lamsfoundation/lams/tool/taskList/model/TaskListCondition.hbm.xml (.../TaskListCondition.hbm.xml) (revision 721fa349b42e0b7e2ae19d60756fea47146bfdd4) @@ -38,7 +38,7 @@ table="tl_latask10_condition_tl_item" lazy="true" inverse="false" - cascade="all" + cascade="none" sort="unsorted" > Index: lams_tool_task/src/java/org/lamsfoundation/lams/tool/taskList/model/TaskListCondition.java =================================================================== diff -u -r12a0e5152335f664f19ad5b1449633f7fec6b8a9 -r721fa349b42e0b7e2ae19d60756fea47146bfdd4 --- lams_tool_task/src/java/org/lamsfoundation/lams/tool/taskList/model/TaskListCondition.java (.../TaskListCondition.java) (revision 12a0e5152335f664f19ad5b1449633f7fec6b8a9) +++ lams_tool_task/src/java/org/lamsfoundation/lams/tool/taskList/model/TaskListCondition.java (.../TaskListCondition.java) (revision 721fa349b42e0b7e2ae19d60756fea47146bfdd4) @@ -184,8 +184,6 @@ * @hibernate.collection-key column="condition_uid" * @hibernate.collection-many-to-many column="uid" class="org.lamsfoundation.lams.tool.taskList.model.TaskListItem" */ - - //TODO maybe th reason of a problem cascade="all"!!! public Set getTaskListItems() { return taskListItems; } Index: lams_tool_task/src/java/org/lamsfoundation/lams/tool/taskList/service/ITaskListService.java =================================================================== diff -u -r12a0e5152335f664f19ad5b1449633f7fec6b8a9 -r721fa349b42e0b7e2ae19d60756fea47146bfdd4 --- lams_tool_task/src/java/org/lamsfoundation/lams/tool/taskList/service/ITaskListService.java (.../ITaskListService.java) (revision 12a0e5152335f664f19ad5b1449633f7fec6b8a9) +++ lams_tool_task/src/java/org/lamsfoundation/lams/tool/taskList/service/ITaskListService.java (.../ITaskListService.java) (revision 721fa349b42e0b7e2ae19d60756fea47146bfdd4) @@ -55,13 +55,28 @@ /** + * Returns number of tasks completed by user. Used in TaskListOutputFactory. + * * @param toolSessionId * @param userUid * @return */ public int getNumTasksCompletedByUser(Long toolSessionId, Long userUid); + /** + * Checks current condition for matching. This condition belongs to the + * taskList from this particular toolSession.Used in + * TaskListOutputFactory. + * + * @param conditionName name of a condition + * @param toolSessionId session Id contains particular taskList + * @param userUid user for whom this condition is being checked + * @return + */ + public boolean checkCondition(String conditionName, Long toolSessionId, Long userUid); + + /** * Get TaskList by toolContentID. * * @param contentId Index: lams_tool_task/src/java/org/lamsfoundation/lams/tool/taskList/service/TaskListOutputFactory.java =================================================================== diff -u -r12a0e5152335f664f19ad5b1449633f7fec6b8a9 -r721fa349b42e0b7e2ae19d60756fea47146bfdd4 --- lams_tool_task/src/java/org/lamsfoundation/lams/tool/taskList/service/TaskListOutputFactory.java (.../TaskListOutputFactory.java) (revision 12a0e5152335f664f19ad5b1449633f7fec6b8a9) +++ lams_tool_task/src/java/org/lamsfoundation/lams/tool/taskList/service/TaskListOutputFactory.java (.../TaskListOutputFactory.java) (revision 721fa349b42e0b7e2ae19d60756fea47146bfdd4) @@ -23,14 +23,21 @@ /* $Id$ */ package org.lamsfoundation.lams.tool.taskList.service; +import java.util.ArrayList; +import java.util.Iterator; import java.util.List; +import java.util.Set; import java.util.SortedMap; import java.util.TreeMap; +import org.lamsfoundation.lams.learningdesign.BranchCondition; import org.lamsfoundation.lams.tool.OutputFactory; +import org.lamsfoundation.lams.tool.OutputType; import org.lamsfoundation.lams.tool.ToolOutput; import org.lamsfoundation.lams.tool.ToolOutputDefinition; import org.lamsfoundation.lams.tool.exception.ToolException; +import org.lamsfoundation.lams.tool.taskList.model.TaskList; +import org.lamsfoundation.lams.tool.taskList.model.TaskListCondition; /** * Creates the output definitions for forum. Eventually there will be a definition @@ -45,39 +52,111 @@ /** The number of posts the learner has made in one forum activity. */ protected final static String OUTPUT_NAME_LEARNER_NUM_TASKS_COMPLETED = "learner.number.of.tasks.completed"; + protected final static String OUTPUT_NAME_TOOL_CONDITION = "tool.condition"; + /** * {@inheritDoc} */ public SortedMap getToolOutputDefinitions(Object toolContentObject) throws ToolException { TreeMap definitionMap = new TreeMap(); - ToolOutputDefinition definition = buildRangeDefinition(OUTPUT_NAME_LEARNER_NUM_TASKS_COMPLETED, new Long(0), null); - definitionMap.put(OUTPUT_NAME_LEARNER_NUM_TASKS_COMPLETED, definition); + ToolOutputDefinition simpleDefinition = buildRangeDefinition(OUTPUT_NAME_LEARNER_NUM_TASKS_COMPLETED, new Long(0), null); + definitionMap.put(OUTPUT_NAME_LEARNER_NUM_TASKS_COMPLETED, simpleDefinition); + + if ( toolContentObject != null ) { + + TaskList taskList = (TaskList) toolContentObject; + ToolOutputDefinition definition = buildBooleanSetOutputDefinition(OUTPUT_NAME_TOOL_CONDITION); + if ( definition.getDefaultConditions() == null ) + definition.setDefaultConditions(new ArrayList()); + + List defaultConditions = definition.getDefaultConditions(); + String trueString = Boolean.TRUE.toString(); + + Iterator iter2 = taskList.getConditions().iterator(); + while ( iter2.hasNext() ) { + TaskListCondition condition = iter2.next(); + String name = buildConditionName(OUTPUT_NAME_TOOL_CONDITION, condition.getName()); + defaultConditions.add(new BranchCondition(null, null, condition.getSequenceId(), name, + condition.getName(), + OutputType.OUTPUT_BOOLEAN.toString(), + null, + null, + trueString)); + } + + definition.setShowConditionNameOnly(Boolean.TRUE); + + definitionMap.put(OUTPUT_NAME_TOOL_CONDITION, definition); + } + return definitionMap; } public SortedMap getToolOutput(List names, ITaskListService taskListService, Long toolSessionId, Long learnerId) { - TreeMap map = new TreeMap(); - if ( names == null || names.contains(OUTPUT_NAME_LEARNER_NUM_TASKS_COMPLETED)) { - map.put(OUTPUT_NAME_LEARNER_NUM_TASKS_COMPLETED,getNumTasksCompleted(taskListService, learnerId, toolSessionId)); + TreeMap output = null; + if ( names == null ) { + output = createAllDisplayOrderOutputs(taskListService, toolSessionId, learnerId); + } else { + output = new TreeMap(); + for ( String name: names) { + ToolOutput newOutput = getToolOutput(name, taskListService, toolSessionId, learnerId); + if ( newOutput != null ) + output.put(name, newOutput); + } } - return map; + return output; } public ToolOutput getToolOutput(String name, ITaskListService taskListService, Long toolSessionId, Long learnerId) { if ( name != null && name.equals(OUTPUT_NAME_LEARNER_NUM_TASKS_COMPLETED)) { - return getNumTasksCompleted(taskListService, learnerId, toolSessionId); + + int num = taskListService.getNumTasksCompletedByUser(toolSessionId, learnerId); + return new ToolOutput(OUTPUT_NAME_LEARNER_NUM_TASKS_COMPLETED, getI18NText(OUTPUT_NAME_LEARNER_NUM_TASKS_COMPLETED, true), new Long(num)); + + } else if (name.startsWith(OUTPUT_NAME_TOOL_CONDITION)) { + + boolean check; + String[] dcNames = splitConditionName(name); + if ( dcNames[1] == null || dcNames[1].length() == 0) { + log.error("Wrong name for tool output " + OUTPUT_NAME_TOOL_CONDITION + ". Returning false. Condition name was: " + name); + check = false; + } else { + check = taskListService.checkCondition(dcNames[1], toolSessionId, learnerId); + } + return new ToolOutput(name, getI18NText(OUTPUT_NAME_TOOL_CONDITION, true), check); + } return null; - + } + + /** + * Check the display order embedded in the condition name. The name MUST start with OUTPUT_NAME_NOMINATION_SELECTION. + */ + private TreeMap createAllDisplayOrderOutputs(ITaskListService taskListService, Long toolSessionId, Long learnerId) { + + TreeMap output = null; - private ToolOutput getNumTasksCompleted(ITaskListService taskListService, Long learnerId, Long toolSessionId) { int num = taskListService.getNumTasksCompletedByUser(toolSessionId, learnerId); - return new ToolOutput(OUTPUT_NAME_LEARNER_NUM_TASKS_COMPLETED, getI18NText(OUTPUT_NAME_LEARNER_NUM_TASKS_COMPLETED, true), new Long(num)); + ToolOutput toolOutput = new ToolOutput(OUTPUT_NAME_LEARNER_NUM_TASKS_COMPLETED, getI18NText(OUTPUT_NAME_LEARNER_NUM_TASKS_COMPLETED, true), new Long(num)); + output.put(OUTPUT_NAME_LEARNER_NUM_TASKS_COMPLETED, toolOutput); + + + String i18nDescription = getI18NText(OUTPUT_NAME_TOOL_CONDITION, true); + TaskList taskList = taskListService.getTaskListBySessionId(toolSessionId); + Set conditions = taskList.getConditions(); + for (TaskListCondition condition:conditions) { + String name = buildConditionName(OUTPUT_NAME_TOOL_CONDITION, condition.getName()); + boolean check = taskListService.checkCondition(condition.getName(), toolSessionId, learnerId); + output.put(name, new ToolOutput(name, i18nDescription, check)); + } + + return output; } + } Index: lams_tool_task/src/java/org/lamsfoundation/lams/tool/taskList/service/TaskListServiceImpl.java =================================================================== diff -u -r12a0e5152335f664f19ad5b1449633f7fec6b8a9 -r721fa349b42e0b7e2ae19d60756fea47146bfdd4 --- lams_tool_task/src/java/org/lamsfoundation/lams/tool/taskList/service/TaskListServiceImpl.java (.../TaskListServiceImpl.java) (revision 12a0e5152335f664f19ad5b1449633f7fec6b8a9) +++ lams_tool_task/src/java/org/lamsfoundation/lams/tool/taskList/service/TaskListServiceImpl.java (.../TaskListServiceImpl.java) (revision 721fa349b42e0b7e2ae19d60756fea47146bfdd4) @@ -490,6 +490,40 @@ /** * {@inheritDoc} */ + public boolean checkCondition(String conditionName, Long toolSessionId, Long userUid) { + TaskListUser user = taskListUserDao.getUserByUserIDAndSessionID(userUid, toolSessionId); + TaskList taskList = taskListSessionDao.getSessionBySessionId(toolSessionId).getTaskList(); + Set conditions = taskList.getConditions(); + TaskListCondition condition = null; + for (TaskListCondition cond:conditions) { + if (cond.getName().equals(conditionName)) { + condition = cond; + break; + } + } + + boolean result = false; + if (condition != null) { + Iterator it = condition.getTaskListItems().iterator(); + while(it.hasNext()) { + TaskListItem item = (TaskListItem) it.next(); + + TaskListItemVisitLog visitLog = taskListItemVisitDao.getTaskListItemLog(item.getUid(), user.getUid()); + if (visitLog != null) { + result &= visitLog.isComplete(); + } else { + result = false; + break; + } + } + } + + return result; + } + + /** + * {@inheritDoc} + */ public TaskSummary getTaskSummary(Long contentId, Long taskListItemUid) { TaskListItem taskListItem = taskListItemDao.getByUid(taskListItemUid); Index: lams_tool_task/src/java/org/lamsfoundation/lams/tool/taskList/web/action/AuthoringAction.java =================================================================== diff -u -r12a0e5152335f664f19ad5b1449633f7fec6b8a9 -r721fa349b42e0b7e2ae19d60756fea47146bfdd4 --- lams_tool_task/src/java/org/lamsfoundation/lams/tool/taskList/web/action/AuthoringAction.java (.../AuthoringAction.java) (revision 12a0e5152335f664f19ad5b1449633f7fec6b8a9) +++ lams_tool_task/src/java/org/lamsfoundation/lams/tool/taskList/web/action/AuthoringAction.java (.../AuthoringAction.java) (revision 721fa349b42e0b7e2ae19d60756fea47146bfdd4) @@ -430,26 +430,26 @@ } - //Handle taskList items - SortedSet conditions = getTaskListConditionList(sessionMap); - for (TaskListCondition condition:conditions) { - - - Set itemList2 = new LinkedHashSet(); - Set topics2 = condition.getTaskListItems(); - iter = topics2.iterator(); - while(iter.hasNext()){ - TaskListItem item2 = (TaskListItem) iter.next(); - if(item2 != null){ - //This flushs user UID info to message if this user is a new user. - item2.setCreateBy(taskListUser); - itemList2.add(item2); - } - } - condition.setTaskListItems(itemList2); - - - } +// //Handle taskList items +// SortedSet conditions = getTaskListConditionList(sessionMap); +// for (TaskListCondition condition:conditions) { +// +// +// Set itemList2 = new LinkedHashSet(); +// Set topics2 = condition.getTaskListItems(); +// iter = topics2.iterator(); +// while(iter.hasNext()){ +// TaskListItem item2 = (TaskListItem) iter.next(); +// if(item2 != null){ +// //This flushs user UID info to message if this user is a new user. +// item2.setCreateBy(taskListUser); +// itemList2.add(item2); +// } +// } +// condition.setTaskListItems(itemList2); +// +// +// } @@ -475,8 +475,8 @@ //finally persist taskListPO again service.saveOrUpdateTaskList(taskListPO); + service.getTaskListByContentId(taskListPO.getContentId()); - //initialize attachmentList again attachmentList = getAttachmentList(sessionMap); attachmentList.addAll(taskList.getAttachments()); Index: lams_tool_task/src/java/org/lamsfoundation/lams/tool/taskList/web/action/LearningAction.java =================================================================== diff -u -r12a0e5152335f664f19ad5b1449633f7fec6b8a9 -r721fa349b42e0b7e2ae19d60756fea47146bfdd4 --- lams_tool_task/src/java/org/lamsfoundation/lams/tool/taskList/web/action/LearningAction.java (.../LearningAction.java) (revision 12a0e5152335f664f19ad5b1449633f7fec6b8a9) +++ lams_tool_task/src/java/org/lamsfoundation/lams/tool/taskList/web/action/LearningAction.java (.../LearningAction.java) (revision 721fa349b42e0b7e2ae19d60756fea47146bfdd4) @@ -265,9 +265,7 @@ //get back SessionMap String sessionMapID = request.getParameter(TaskListConstants.ATTR_SESSION_MAP_ID); SessionMap sessionMap = (SessionMap) request.getSession().getAttribute(sessionMapID); - - //get mode and ToolSessionID from sessionMAP - ToolAccessMode mode = (ToolAccessMode) sessionMap.get(AttributeNames.ATTR_MODE); + Long sessionId = (Long) sessionMap.get(AttributeNames.PARAM_TOOL_SESSION_ID); //auto run mode, when use finish the only one taskList item, mark it as complete then finish this activity as well.