Index: lams_common/src/java/org/lamsfoundation/lams/tool/SimpleURL.java =================================================================== diff -u --- lams_common/src/java/org/lamsfoundation/lams/tool/SimpleURL.java (revision 0) +++ lams_common/src/java/org/lamsfoundation/lams/tool/SimpleURL.java (revision 37b49e5e78d2b57936d98e68f6057539472b7725) @@ -0,0 +1,56 @@ +/**************************************************************** + * 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; + +import java.io.Serializable; + +public class SimpleURL implements Serializable { + private String url; + private String nameToDisplay; + + public SimpleURL() { + + } + + public SimpleURL(String nameToDisplay, String url) { + this.url = url; + this.nameToDisplay = nameToDisplay; + } + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + + public String getNameToDisplay() { + return nameToDisplay; + } + + public void setNameToDisplay(String nameToDisplay) { + this.nameToDisplay = nameToDisplay; + } +} Index: lams_tool_chat/conf/language/ApplicationResources.properties =================================================================== diff -u -r01356035a17bd07a46b0395eea233e939216000d -r37b49e5e78d2b57936d98e68f6057539472b7725 --- lams_tool_chat/conf/language/ApplicationResources.properties (.../ApplicationResources.properties) (revision 01356035a17bd07a46b0395eea233e939216000d) +++ lams_tool_chat/conf/language/ApplicationResources.properties (.../ApplicationResources.properties) (revision 37b49e5e78d2b57936d98e68f6057539472b7725) @@ -94,5 +94,5 @@ button.edit =Edit message.no.reflection.available =No notebook available - +output.desc.all.users.messages.output.definition.chat =Each user's messages sent in the Chat #======= End labels: Exported 87 labels for en AU ===== Index: lams_tool_chat/src/java/org/lamsfoundation/lams/tool/chat/service/ChatOutputFactory.java =================================================================== diff -u -r1a5446e3a1f962f1bb831c1bbaef14acf9d3635c -r37b49e5e78d2b57936d98e68f6057539472b7725 --- lams_tool_chat/src/java/org/lamsfoundation/lams/tool/chat/service/ChatOutputFactory.java (.../ChatOutputFactory.java) (revision 1a5446e3a1f962f1bb831c1bbaef14acf9d3635c) +++ lams_tool_chat/src/java/org/lamsfoundation/lams/tool/chat/service/ChatOutputFactory.java (.../ChatOutputFactory.java) (revision 37b49e5e78d2b57936d98e68f6057539472b7725) @@ -55,20 +55,28 @@ throws ToolException { SortedMap definitionMap = new TreeMap(); Class stringArrayClass = new String[] {}.getClass(); - if (toolContentObject != null) { - ToolOutputDefinition chatMessagesDefinition = buildComplexOutputDefinition( - ChatConstants.TEXT_SEARCH_DEFINITION_NAME, stringArrayClass); - Chat chat = (Chat) toolContentObject; - // adding all existing conditions - chatMessagesDefinition.setDefaultConditions(new ArrayList(chat.getConditions())); - // if no conditions were created in the tool instance, a default condition is added; - if (chatMessagesDefinition.getDefaultConditions().isEmpty()) { - ChatCondition defaultCondition = createDefaultComplexCondition(chat); - chat.getConditions().add(defaultCondition); - chatMessagesDefinition.getDefaultConditions().add(defaultCondition); + switch (definitionType) { + case ToolOutputDefinition.DATA_OUTPUT_DEFINITION_TYPE_CONDITION: + if (toolContentObject != null) { + ToolOutputDefinition chatMessagesDefinition = buildComplexOutputDefinition( + ChatConstants.USER_MESSAGES_DEFINITION_NAME, stringArrayClass); + Chat chat = (Chat) toolContentObject; + // adding all existing conditions + chatMessagesDefinition.setDefaultConditions(new ArrayList(chat.getConditions())); + // if no conditions were created in the tool instance, a default condition is added; + if (chatMessagesDefinition.getDefaultConditions().isEmpty()) { + ChatCondition defaultCondition = createDefaultUserMessagesCondition(chat); + chat.getConditions().add(defaultCondition); + chatMessagesDefinition.getDefaultConditions().add(defaultCondition); + } + chatMessagesDefinition.setShowConditionNameOnly(true); + definitionMap.put(ChatConstants.USER_MESSAGES_DEFINITION_NAME, chatMessagesDefinition); } - chatMessagesDefinition.setShowConditionNameOnly(true); - definitionMap.put(ChatConstants.TEXT_SEARCH_DEFINITION_NAME, chatMessagesDefinition); + case ToolOutputDefinition.DATA_OUTPUT_DEFINITION_TYPE_DATA_FLOW: + ToolOutputDefinition allUsersMessagesDefinition = buildComplexOutputDefinition( + ChatConstants.ALL_USERS_MESSAGES_DEFINITION_NAME, stringArrayClass); + definitionMap.put(ChatConstants.ALL_USERS_MESSAGES_DEFINITION_NAME, allUsersMessagesDefinition); + break; } return definitionMap; @@ -82,37 +90,36 @@ Long toolSessionId, Long learnerId) { TreeMap outputs = new TreeMap(); - // cached tool output for all text search conditions - ToolOutput chatMessagesOutput = null; + // tool output cache + TreeMap baseOutputs = new TreeMap(); + if (names == null) { // output will be set for all the existing conditions Chat chat = chatService.getSessionBySessionId(toolSessionId).getChat(); Set conditions = chat.getConditions(); for (ChatCondition condition : conditions) { String name = condition.getName(); - if (isTextSearchConditionName(name) && chatMessagesOutput != null) { - outputs.put(name, chatMessagesOutput); + String[] nameParts = splitConditionName(name); + if (baseOutputs.get(nameParts[0]) != null) { + outputs.put(name, baseOutputs.get(nameParts[0])); } else { ToolOutput output = getToolOutput(name, chatService, toolSessionId, learnerId); if (output != null) { outputs.put(name, output); - if (isTextSearchConditionName(name)) { - chatMessagesOutput = output; - } + baseOutputs.put(nameParts[0], output); } } } } else { for (String name : names) { - if (isTextSearchConditionName(name) && chatMessagesOutput != null) { - outputs.put(name, chatMessagesOutput); + String[] nameParts = splitConditionName(name); + if (baseOutputs.get(nameParts[0]) != null) { + outputs.put(name, baseOutputs.get(nameParts[0])); } else { ToolOutput output = getToolOutput(name, chatService, toolSessionId, learnerId); if (output != null) { outputs.put(name, output); - if (isTextSearchConditionName(name)) { - chatMessagesOutput = output; - } + baseOutputs.put(nameParts[0], output); } } } @@ -122,7 +129,8 @@ } public ToolOutput getToolOutput(String name, IChatService chatService, Long toolSessionId, Long learnerId) { - if (isTextSearchConditionName(name)) { + String[] nameParts = splitConditionName(name); + if (ChatConstants.USER_MESSAGES_DEFINITION_NAME.equals(nameParts[0])) { // entry is loaded from DB Chat chat = chatService.getSessionBySessionId(toolSessionId).getChat(); @@ -138,8 +146,26 @@ } } - return new ToolOutput(name, getI18NText(ChatConstants.TEXT_SEARCH_DEFINITION_NAME, true), textMessages, + return new ToolOutput(name, getI18NText(ChatConstants.USER_MESSAGES_DEFINITION_NAME, true), textMessages, false); + } else if (ChatConstants.ALL_USERS_MESSAGES_DEFINITION_NAME.equals(nameParts[0])) { + Set users = chatService.getSessionBySessionId(toolSessionId).getChatUsers(); + String[] usersMessages = new String[users.size()]; + int userIndex = 0; + for (ChatUser user : users) { + List messages = chatService.getMessagesSentByUser(user.getUid()); + + if (messages != null) { + StringBuilder messagesBuilder = new StringBuilder(); + for (ChatMessage message : messages) { + messagesBuilder.append(message.getBody()).append(ChatConstants.MESSAGE_SEPARATOR); + } + usersMessages[userIndex] = messagesBuilder.toString(); + } + userIndex++; + } + return new ToolOutput(name, getI18NText(ChatConstants.ALL_USERS_MESSAGES_DEFINITION_NAME, true), + usersMessages, false); } return null; } @@ -149,25 +175,22 @@ return super.splitConditionName(conditionName); } - protected String buildConditionName(String uniquePart) { - return super.buildConditionName(ChatConstants.TEXT_SEARCH_DEFINITION_NAME, uniquePart); + protected String buildUserMessagesConditionName(String uniquePart) { + return super.buildConditionName(ChatConstants.USER_MESSAGES_DEFINITION_NAME, uniquePart); } - private boolean isTextSearchConditionName(String name) { - return name != null && name.startsWith(ChatConstants.TEXT_SEARCH_DEFINITION_NAME); - } - /** * Creates a default condition so teachers know how to use complex conditions for this tool. * * @param chat * content of the tool * @return default chat condition */ - protected ChatCondition createDefaultComplexCondition(Chat chat) { - String name = buildConditionName(ChatConstants.TEXT_SEARCH_DEFINITION_NAME, chat.getToolContentId().toString()); + protected ChatCondition createDefaultUserMessagesCondition(Chat chat) { + String name = buildConditionName(ChatConstants.USER_MESSAGES_DEFINITION_NAME, chat.getToolContentId() + .toString()); // Default condition checks if messages contain word "LAMS" return new ChatCondition(null, null, 1, name, getI18NText( - ChatConstants.TEXT_SEARCH_DEFAULT_CONDITION_DISPLAY_NAME_KEY, false), "LAMS", null, null, null); + ChatConstants.USER_MESSAGES_DEFAULT_CONDITION_DISPLAY_NAME_KEY, false), "LAMS", null, null, null); } } \ No newline at end of file Index: lams_tool_chat/src/java/org/lamsfoundation/lams/tool/chat/service/ChatService.java =================================================================== diff -u -r1a5446e3a1f962f1bb831c1bbaef14acf9d3635c -r37b49e5e78d2b57936d98e68f6057539472b7725 --- lams_tool_chat/src/java/org/lamsfoundation/lams/tool/chat/service/ChatService.java (.../ChatService.java) (revision 1a5446e3a1f962f1bb831c1bbaef14acf9d3635c) +++ lams_tool_chat/src/java/org/lamsfoundation/lams/tool/chat/service/ChatService.java (.../ChatService.java) (revision 37b49e5e78d2b57936d98e68f6057539472b7725) @@ -413,7 +413,7 @@ throw new ChatException(error); } if (defaultContent.getConditions().isEmpty()) { - defaultContent.getConditions().add(getChatOutputFactory().createDefaultComplexCondition(defaultContent)); + defaultContent.getConditions().add(getChatOutputFactory().createDefaultUserMessagesCondition(defaultContent)); } return defaultContent; } @@ -1116,7 +1116,7 @@ } } } while (uniqueNumber == null); - return getChatOutputFactory().buildConditionName(uniqueNumber); + return getChatOutputFactory().buildUserMessagesConditionName(uniqueNumber); } public void deleteCondition(ChatCondition condition) { Index: lams_tool_chat/src/java/org/lamsfoundation/lams/tool/chat/util/ChatConstants.java =================================================================== diff -u -rcd0d0b28a7c27711a74ce2b41821f3ccf5c80df9 -r37b49e5e78d2b57936d98e68f6057539472b7725 --- lams_tool_chat/src/java/org/lamsfoundation/lams/tool/chat/util/ChatConstants.java (.../ChatConstants.java) (revision cd0d0b28a7c27711a74ce2b41821f3ccf5c80df9) +++ lams_tool_chat/src/java/org/lamsfoundation/lams/tool/chat/util/ChatConstants.java (.../ChatConstants.java) (revision 37b49e5e78d2b57936d98e68f6057539472b7725) @@ -54,10 +54,13 @@ public static final String PARAM_ORDER_ID = "orderId"; public static final String ATTR_DELETED_CONDITION_LIST = "deletedConditionList"; - public static final String TEXT_SEARCH_DEFINITION_NAME = "text.search.output.definition.chat"; - public static final String TEXT_SEARCH_DEFAULT_CONDITION_DISPLAY_NAME_KEY = "text.search.output.definition.chat.default.condition"; + public static final String USER_MESSAGES_DEFINITION_NAME = "user.messages.output.definition.chat"; + public static final String USER_MESSAGES_DEFAULT_CONDITION_DISPLAY_NAME_KEY = "user.messages.output.definition.chat.default.condition"; + public static final String ALL_USERS_MESSAGES_DEFINITION_NAME = "all.users.messages.output.definition.chat"; public static final String SUCCESS = "success"; public static final String ERROR_MSG_CONDITION = "error.condition"; public static final String ERROR_MSG_NAME_BLANK = "error.condition.name.blank"; public static final String ERROR_MSG_NAME_DUPLICATED = "error.condition.duplicated.name"; + + public static final String MESSAGE_SEPARATOR = "

"; } \ No newline at end of file Index: lams_tool_forum/conf/language/lams/ApplicationResources.properties =================================================================== diff -u -re53ef5e6597c5100d1e0cde695b6d33d216c7311 -r37b49e5e78d2b57936d98e68f6057539472b7725 --- lams_tool_forum/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision e53ef5e6597c5100d1e0cde695b6d33d216c7311) +++ lams_tool_forum/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision 37b49e5e78d2b57936d98e68f6057539472b7725) @@ -202,8 +202,8 @@ error.condition.duplicated.name =Duplicated name. Please choose unique one. error.condition.no.questions.selected =There are no questions selected. Please select at least one. error.condition =Error creating condition. -output.desc.text.search.output.definition.forum =Posts contain certain words -text.search.output.definition.forum.default.condition =Posts to the first topic contain word "LAMS" +output.desc.topic.name.to.answers.output.definition.forum =Posts contain certain words +topic.name.to.answers.output.definition.forum.default.condition =Posts to the first topic contain word "LAMS" textsearch.heading =Posts that... textsearch.all.words =have all these words: textsearch.phrase =have this exact wording or phrase: @@ -212,5 +212,6 @@ textsearch.topics =Search in these topics: event.mark.release.body =A teacher released marks in a Forum activity in LAMS.\nYour marks are:\n\n{0}\nThis message was sent automatically, please do not reply to it. +output.desc.all.users.answers.definition.forum =Each learner's posts sent in the Forum #======= End labels: Exported 205 labels for en AU ===== Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/service/ForumOutputFactory.java =================================================================== diff -u -r1a5446e3a1f962f1bb831c1bbaef14acf9d3635c -r37b49e5e78d2b57936d98e68f6057539472b7725 --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/service/ForumOutputFactory.java (.../ForumOutputFactory.java) (revision 1a5446e3a1f962f1bb831c1bbaef14acf9d3635c) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/service/ForumOutputFactory.java (.../ForumOutputFactory.java) (revision 37b49e5e78d2b57936d98e68f6057539472b7725) @@ -62,66 +62,76 @@ throws ToolException { SortedMap definitionMap = new TreeMap(); - Class answersClass = (new HashMap>()).getClass(); - if (toolContentObject != null) { - ToolOutputDefinition chosenTopicAnswersDefinition = buildComplexOutputDefinition( - ForumConstants.TEXT_SEARCH_DEFINITION_NAME, answersClass); - Forum forum = (Forum) toolContentObject; - // adding all existing conditions - chosenTopicAnswersDefinition.setDefaultConditions(new ArrayList(forum.getConditions())); - // if no conditions were created in the tool instance, a default condition is added; - if (chosenTopicAnswersDefinition.getDefaultConditions().isEmpty() && !forum.getMessages().isEmpty()) { - ForumCondition defaultCondition = createDefaultComplexCondition(forum); - forum.getConditions().add(defaultCondition); - chosenTopicAnswersDefinition.getDefaultConditions().add(defaultCondition); + Class topicDatesToAnswersClass = (new HashMap>()).getClass(); + Class stringArrayClass = String[].class; + + switch (definitionType) { + case ToolOutputDefinition.DATA_OUTPUT_DEFINITION_TYPE_CONDITION: + if (toolContentObject != null) { + ToolOutputDefinition chosenTopicAnswersDefinition = buildComplexOutputDefinition( + ForumConstants.TOPIC_DATE_TO_ANSWERS_DEFINITION_NAME, topicDatesToAnswersClass); + Forum forum = (Forum) toolContentObject; + // adding all existing conditions + chosenTopicAnswersDefinition + .setDefaultConditions(new ArrayList(forum.getConditions())); + // if no conditions were created in the tool instance, a default condition is added; + if (chosenTopicAnswersDefinition.getDefaultConditions().isEmpty() && !forum.getMessages().isEmpty()) { + ForumCondition defaultCondition = createDefaultTopicDateToAnswersCondition(forum); + forum.getConditions().add(defaultCondition); + chosenTopicAnswersDefinition.getDefaultConditions().add(defaultCondition); + } + chosenTopicAnswersDefinition.setShowConditionNameOnly(true); + definitionMap.put(ForumConstants.TOPIC_DATE_TO_ANSWERS_DEFINITION_NAME, chosenTopicAnswersDefinition); } - chosenTopicAnswersDefinition.setShowConditionNameOnly(true); - definitionMap.put(ForumConstants.TEXT_SEARCH_DEFINITION_NAME, chosenTopicAnswersDefinition); + ToolOutputDefinition numberOfPostsDefinition = buildRangeDefinition( + ForumConstants.LEARNER_NUM_POSTS_DEFINITION_NAME, new Long(0), null); + definitionMap.put(ForumConstants.LEARNER_NUM_POSTS_DEFINITION_NAME, numberOfPostsDefinition); + break; + case ToolOutputDefinition.DATA_OUTPUT_DEFINITION_TYPE_DATA_FLOW: + ToolOutputDefinition allUsersAnswersDefinition = buildComplexOutputDefinition( + ForumConstants.ALL_USERS_ANSWERS_DEFINITION_NAME, stringArrayClass); + definitionMap.put(ForumConstants.ALL_USERS_ANSWERS_DEFINITION_NAME, allUsersAnswersDefinition); + break; } - ToolOutputDefinition numberOfPostsDefinition = buildRangeDefinition( - ForumConstants.LEARNER_NUM_POSTS_DEFINITION_NAME, new Long(0), null); - definitionMap.put(ForumConstants.LEARNER_NUM_POSTS_DEFINITION_NAME, numberOfPostsDefinition); - return definitionMap; } public SortedMap getToolOutput(List names, IForumService forumService, Long toolSessionId, Long learnerId) { TreeMap outputs = new TreeMap(); - // cached tool output for all text search conditions - ToolOutput chosenTopicAnswersOutput = null; + // tool output cache + TreeMap baseOutputs = new TreeMap(); if (names == null) { // output will be set for all the existing conditions ForumToolSession session = forumService.getSessionBySessionId(toolSessionId); Forum forum = session.getForum(); + Set conditions = forum.getConditions(); for (ForumCondition condition : conditions) { String name = condition.getName(); - if (isTextSearchConditionName(name) && chosenTopicAnswersOutput != null) { - outputs.put(name, chosenTopicAnswersOutput); + String[] nameParts = splitConditionName(name); + if (baseOutputs.get(nameParts[0]) != null) { + outputs.put(name, baseOutputs.get(nameParts[0])); } else { ToolOutput output = getToolOutput(name, forumService, toolSessionId, learnerId); if (output != null) { outputs.put(name, output); - if (isTextSearchConditionName(name)) { - chosenTopicAnswersOutput = output; - } + baseOutputs.put(nameParts[0], output); } } } } else { for (String name : names) { - if (isTextSearchConditionName(name) && chosenTopicAnswersOutput != null) { - outputs.put(name, chosenTopicAnswersOutput); + String[] nameParts = splitConditionName(name); + if (baseOutputs.get(nameParts[0]) != null) { + outputs.put(name, baseOutputs.get(nameParts[0])); } else { ToolOutput output = getToolOutput(name, forumService, toolSessionId, learnerId); if (output != null) { outputs.put(name, output); - if (isTextSearchConditionName(name)) { - chosenTopicAnswersOutput = output; - } + baseOutputs.put(nameParts[0], output); } } } @@ -136,8 +146,8 @@ } public ToolOutput getToolOutput(String name, IForumService forumService, Long toolSessionId, Long learnerId) { - ToolOutput toolOutput = null; - if (isTextSearchConditionName(name)) { + String[] nameParts = splitConditionName(name); + if (ForumConstants.TOPIC_DATE_TO_ANSWERS_DEFINITION_NAME.equals(nameParts[0])) { // a map of "topic creation date" -> "all learner's answers to that topic" Map> answers = new HashMap>(); @@ -163,12 +173,32 @@ answers.put(createdDate, textAnswers); } } - toolOutput = new ToolOutput(name, getI18NText(ForumConstants.TEXT_SEARCH_DEFINITION_NAME, true), answers, - false); - } else if (name != null && name.equals(ForumConstants.LEARNER_NUM_POSTS_DEFINITION_NAME)) { - toolOutput = getNumPosts(forumService, learnerId, toolSessionId); + return new ToolOutput(name, getI18NText(ForumConstants.TOPIC_DATE_TO_ANSWERS_DEFINITION_NAME, true), + answers, false); + } else if (ForumConstants.LEARNER_NUM_POSTS_DEFINITION_NAME.equals(nameParts[0])) { + return getNumPosts(forumService, learnerId, toolSessionId); + } else if (ForumConstants.ALL_USERS_ANSWERS_DEFINITION_NAME.equals(nameParts[0])) { + List users = forumService.getUsersBySessionId(toolSessionId); + String[] usersAnswers = new String[users.size()]; + List userMessages = null; + int userIndex = 0; + for (ForumUser user : users) { + StringBuilder answersBuilder = new StringBuilder(); + userMessages = forumService.getMessagesByUserUid(user.getUid(), toolSessionId); + if (userMessages != null) { + for (MessageDTO messageDTO : userMessages) { + Message message = messageDTO.getMessage(); + answersBuilder.append(message.getBody()).append(ForumConstants.ANSWERS_SEPARATOR); + } + usersAnswers[userIndex] = answersBuilder.toString(); + } + userIndex++; + } + return new ToolOutput(name, getI18NText(ForumConstants.ALL_USERS_ANSWERS_DEFINITION_NAME, true), + usersAnswers, false); + } - return toolOutput; + return null; } @@ -183,22 +213,18 @@ return super.splitConditionName(conditionName); } - protected String buildTextSearchConditionName(String uniquePart) { - return super.buildConditionName(ForumConstants.TEXT_SEARCH_DEFINITION_NAME, uniquePart); + protected String buildTopicDatesToAnswersConditionName(String uniquePart) { + return super.buildConditionName(ForumConstants.TOPIC_DATE_TO_ANSWERS_DEFINITION_NAME, uniquePart); } - private boolean isTextSearchConditionName(String name) { - return name != null && name.startsWith(ForumConstants.TEXT_SEARCH_DEFINITION_NAME); - } - /** * Creates a default condition so teachers know how to use complex conditions for this tool. * * @param forum * content of the tool * @return default Forum condition */ - protected ForumCondition createDefaultComplexCondition(Forum forum) { + protected ForumCondition createDefaultTopicDateToAnswersCondition(Forum forum) { if (forum.getMessages().isEmpty()) { return null; @@ -211,10 +237,11 @@ } } - String name = buildConditionName(ForumConstants.TEXT_SEARCH_DEFINITION_NAME, forum.getContentId().toString()); + String name = buildConditionName(ForumConstants.TOPIC_DATE_TO_ANSWERS_DEFINITION_NAME, forum.getContentId() + .toString()); // Default condition checks if the answers for the first topic contain word "LAMS" return new ForumCondition(null, null, 1, name, getI18NText( - ForumConstants.TEXT_SEARCH_DEFAULT_CONDITION_DISPLAY_NAME_KEY, false), "LAMS", null, null, null, - messages); + ForumConstants.TOPIC_DATE_TO_ANSWERS_DEFAULT_CONDITION_DISPLAY_NAME_KEY, false), "LAMS", null, null, + null, messages); } } Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/service/ForumService.java =================================================================== diff -u -r1a5446e3a1f962f1bb831c1bbaef14acf9d3635c -r37b49e5e78d2b57936d98e68f6057539472b7725 --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/service/ForumService.java (.../ForumService.java) (revision 1a5446e3a1f962f1bb831c1bbaef14acf9d3635c) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/service/ForumService.java (.../ForumService.java) (revision 37b49e5e78d2b57936d98e68f6057539472b7725) @@ -976,7 +976,7 @@ Forum defaultContent = getDefaultForum(); if (defaultContent.getConditions().isEmpty()) { - defaultContent.getConditions().add(getForumOutputFactory().createDefaultComplexCondition(defaultContent)); + defaultContent.getConditions().add(getForumOutputFactory().createDefaultTopicDateToAnswersCondition(defaultContent)); } // get default content by given ID. Forum content = new Forum(); @@ -1312,7 +1312,7 @@ } } } while (uniqueNumber == null); - return getForumOutputFactory().buildTextSearchConditionName(uniqueNumber); + return getForumOutputFactory().buildTopicDatesToAnswersConditionName(uniqueNumber); } /** Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/util/ForumConstants.java =================================================================== diff -u -racc8d2acf5b6b0002e0c8129947040a779ab4077 -r37b49e5e78d2b57936d98e68f6057539472b7725 --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/util/ForumConstants.java (.../ForumConstants.java) (revision acc8d2acf5b6b0002e0c8129947040a779ab4077) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/util/ForumConstants.java (.../ForumConstants.java) (revision 37b49e5e78d2b57936d98e68f6057539472b7725) @@ -162,10 +162,12 @@ public static final String PARAM_ORDER_ID = "orderId"; public static final String ATTR_DELETED_CONDITION_LIST = "deletedConditionList"; - public static final String TEXT_SEARCH_DEFINITION_NAME = "text.search.output.definition.forum"; + public static final String TOPIC_DATE_TO_ANSWERS_DEFINITION_NAME = "topic.name.to.answers.output.definition.forum"; + public static final String ALL_USERS_ANSWERS_DEFINITION_NAME = "all.users.answers.definition.forum"; public final static String LEARNER_NUM_POSTS_DEFINITION_NAME = "learner.number.of.posts"; - public static final String TEXT_SEARCH_DEFAULT_CONDITION_DISPLAY_NAME_KEY = "text.search.output.definition.forum.default.condition"; + public static final String TOPIC_DATE_TO_ANSWERS_DEFAULT_CONDITION_DISPLAY_NAME_KEY = "topic.name.to.answers.output.definition.forum.default.condition"; + public static final String ANSWERS_SEPARATOR = "

"; // a forward key public static final String SUCCESS = "success"; Index: lams_tool_images/conf/language/lams/ApplicationResources.properties =================================================================== diff -u -rebaacb1d83e5b1c9376a5f77b0c282fa75d1127e -r37b49e5e78d2b57936d98e68f6057539472b7725 --- lams_tool_images/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision ebaacb1d83e5b1c9376a5f77b0c282fa75d1127e) +++ lams_tool_images/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision 37b49e5e78d2b57936d98e68f6057539472b7725) @@ -180,5 +180,6 @@ event.imagesubmit.subject =LAMS: Learner submitted an image in image gallery tool event.imagesubmit.body =The learner {0} submitted an image in a image gallery tool.\n\nThis message was send automatically, following tool''''s advanced settings. +output.desc.uploaded.images.urls =Image Gallery: images uploaded by learners #======= End labels: Exported 173 labels for en AU ===== Index: lams_tool_images/src/java/org/lamsfoundation/lams/tool/imageGallery/service/ImageGalleryOutputFactory.java =================================================================== diff -u -r61e7bbf20d65e2ecb5e50f3154e52264003defa1 -r37b49e5e78d2b57936d98e68f6057539472b7725 --- lams_tool_images/src/java/org/lamsfoundation/lams/tool/imageGallery/service/ImageGalleryOutputFactory.java (.../ImageGalleryOutputFactory.java) (revision 61e7bbf20d65e2ecb5e50f3154e52264003defa1) +++ lams_tool_images/src/java/org/lamsfoundation/lams/tool/imageGallery/service/ImageGalleryOutputFactory.java (.../ImageGalleryOutputFactory.java) (revision 37b49e5e78d2b57936d98e68f6057539472b7725) @@ -23,20 +23,24 @@ /* $Id$ */ package org.lamsfoundation.lams.tool.imageGallery.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.tool.OutputFactory; +import org.lamsfoundation.lams.tool.SimpleURL; import org.lamsfoundation.lams.tool.ToolOutput; import org.lamsfoundation.lams.tool.ToolOutputDefinition; import org.lamsfoundation.lams.tool.imageGallery.model.ImageComment; import org.lamsfoundation.lams.tool.imageGallery.model.ImageGallery; import org.lamsfoundation.lams.tool.imageGallery.model.ImageGalleryItem; import org.lamsfoundation.lams.tool.imageGallery.model.ImageGallerySession; import org.lamsfoundation.lams.tool.imageGallery.model.ImageGalleryUser; +import org.lamsfoundation.lams.util.Configuration; +import org.lamsfoundation.lams.util.ConfigurationKeys; public class ImageGalleryOutputFactory extends OutputFactory { @@ -45,62 +49,113 @@ protected final static String OUTPUT_NAME_LEARNER_NUM_COMMENTS = "learner.number.of.comments"; protected final static String OUTPUT_NAME_LEARNER_NUM_VOTES = "learner.number.of.votes"; + protected final static String OUTPUT_NAME_UPLOADED_IMAGES_URLS = "uploaded.images.urls"; + /** * @see org.lamsfoundation.lams.tool.OutputDefinitionFactory#getToolOutputDefinitions(java.lang.Object) */ + @Override public SortedMap getToolOutputDefinitions(Object toolContentObject, int definitionType) { TreeMap definitionMap = new TreeMap(); - - ToolOutputDefinition definition = buildRangeDefinition(OUTPUT_NAME_LEARNER_NUM_IMAGES_UPLOADED, new Long(0), null); - definitionMap.put(OUTPUT_NAME_LEARNER_NUM_IMAGES_UPLOADED, definition); - definition = buildRangeDefinition(OUTPUT_NAME_LEARNER_NUM_COMMENTS, new Long(0), null); - definitionMap.put(OUTPUT_NAME_LEARNER_NUM_COMMENTS, definition); - - definition = buildRangeDefinition(OUTPUT_NAME_LEARNER_NUM_VOTES, new Long(0), null); - definitionMap.put(OUTPUT_NAME_LEARNER_NUM_VOTES, definition); + Class simpleUrlArrayClass = SimpleURL[].class; + switch (definitionType) { + case ToolOutputDefinition.DATA_OUTPUT_DEFINITION_TYPE_CONDITION: + ToolOutputDefinition definition = buildRangeDefinition( + ImageGalleryOutputFactory.OUTPUT_NAME_LEARNER_NUM_IMAGES_UPLOADED, new Long(0), null); + definitionMap.put(ImageGalleryOutputFactory.OUTPUT_NAME_LEARNER_NUM_IMAGES_UPLOADED, definition); + definition = buildRangeDefinition(ImageGalleryOutputFactory.OUTPUT_NAME_LEARNER_NUM_COMMENTS, new Long(0), + null); + definitionMap.put(ImageGalleryOutputFactory.OUTPUT_NAME_LEARNER_NUM_COMMENTS, definition); + + definition = buildRangeDefinition(ImageGalleryOutputFactory.OUTPUT_NAME_LEARNER_NUM_VOTES, new Long(0), + null); + definitionMap.put(ImageGalleryOutputFactory.OUTPUT_NAME_LEARNER_NUM_VOTES, definition); + break; + case ToolOutputDefinition.DATA_OUTPUT_DEFINITION_TYPE_DATA_FLOW: + ToolOutputDefinition allUsersUploadedImagesDefinition = buildComplexOutputDefinition( + ImageGalleryOutputFactory.OUTPUT_NAME_UPLOADED_IMAGES_URLS, simpleUrlArrayClass); + definitionMap.put(ImageGalleryOutputFactory.OUTPUT_NAME_UPLOADED_IMAGES_URLS, + allUsersUploadedImagesDefinition); + break; + } + return definitionMap; } - public SortedMap getToolOutput(List names, IImageGalleryService imageGalleryService, Long toolSessionId, - Long learnerId) { + public SortedMap getToolOutput(List names, IImageGalleryService imageGalleryService, + Long toolSessionId, Long learnerId) { - TreeMap output = new TreeMap(); - - ImageGallerySession session = imageGalleryService.getImageGallerySessionBySessionId(toolSessionId); - if (session != null) { - + TreeMap outputs = new TreeMap(); + // tool output cache + TreeMap baseOutputs = new TreeMap(); + if (names == null) { ImageGalleryUser user = imageGalleryService.getUserByIDAndSession(learnerId, toolSessionId); - - if (names == null || names.contains(OUTPUT_NAME_LEARNER_NUM_IMAGES_UPLOADED)) { - output.put(OUTPUT_NAME_LEARNER_NUM_IMAGES_UPLOADED, getNumUploadedImages(user, session)); + outputs.put(ImageGalleryOutputFactory.OUTPUT_NAME_LEARNER_NUM_IMAGES_UPLOADED, getToolOutput( + ImageGalleryOutputFactory.OUTPUT_NAME_LEARNER_NUM_IMAGES_UPLOADED, imageGalleryService, + toolSessionId, learnerId)); + outputs.put(ImageGalleryOutputFactory.OUTPUT_NAME_LEARNER_NUM_COMMENTS, getToolOutput( + ImageGalleryOutputFactory.OUTPUT_NAME_LEARNER_NUM_COMMENTS, imageGalleryService, toolSessionId, + learnerId)); + outputs.put(ImageGalleryOutputFactory.OUTPUT_NAME_LEARNER_NUM_VOTES, getToolOutput( + ImageGalleryOutputFactory.OUTPUT_NAME_LEARNER_NUM_VOTES, imageGalleryService, toolSessionId, + learnerId)); + outputs.put(ImageGalleryOutputFactory.OUTPUT_NAME_UPLOADED_IMAGES_URLS, getToolOutput( + ImageGalleryOutputFactory.OUTPUT_NAME_UPLOADED_IMAGES_URLS, imageGalleryService, toolSessionId, + learnerId)); + } else { + for (String name : names) { + String[] nameParts = splitConditionName(name); + if (baseOutputs.get(nameParts[0]) != null) { + outputs.put(name, baseOutputs.get(nameParts[0])); + } else { + ToolOutput output = getToolOutput(name, imageGalleryService, toolSessionId, learnerId); + if (output != null) { + outputs.put(name, output); + baseOutputs.put(nameParts[0], output); + } + } } - if (names == null || names.contains(OUTPUT_NAME_LEARNER_NUM_COMMENTS)) { - output.put(OUTPUT_NAME_LEARNER_NUM_COMMENTS, getNumComments(user, session)); - } - if (names == null || names.contains(OUTPUT_NAME_LEARNER_NUM_VOTES)) { - output.put(OUTPUT_NAME_LEARNER_NUM_VOTES, getNumVotes(user, session, imageGalleryService)); - } } - return output; + return outputs; } - public ToolOutput getToolOutput(String name, IImageGalleryService imageGalleryService, Long toolSessionId, Long learnerId) { + public ToolOutput getToolOutput(String name, IImageGalleryService imageGalleryService, Long toolSessionId, + Long learnerId) { if (name != null) { + String[] nameParts = splitConditionName(name); ImageGallerySession session = imageGalleryService.getImageGallerySessionBySessionId(toolSessionId); if (session != null) { ImageGalleryUser user = imageGalleryService.getUserByIDAndSession(learnerId, toolSessionId); - if (name.equals(OUTPUT_NAME_LEARNER_NUM_IMAGES_UPLOADED)) { + if (nameParts[0].equals(ImageGalleryOutputFactory.OUTPUT_NAME_LEARNER_NUM_IMAGES_UPLOADED)) { return getNumUploadedImages(user, session); - } else if (name.equals(OUTPUT_NAME_LEARNER_NUM_COMMENTS)) { + } else if (nameParts[0].equals(ImageGalleryOutputFactory.OUTPUT_NAME_LEARNER_NUM_COMMENTS)) { return getNumComments(user, session); - } else if (name.equals(OUTPUT_NAME_LEARNER_NUM_VOTES)) { + } else if (nameParts[0].equals(ImageGalleryOutputFactory.OUTPUT_NAME_LEARNER_NUM_VOTES)) { return getNumVotes(user, session, imageGalleryService); + } else if (nameParts[0].equals(ImageGalleryOutputFactory.OUTPUT_NAME_UPLOADED_IMAGES_URLS)) { + List uploadedImagesUrls = new ArrayList(); + Set sessionImages = session.getImageGalleryItems(); + for (ImageGalleryItem image : sessionImages) { + if (!image.isCreateByAuthor()) { + String serverUrl = Configuration.get(ConfigurationKeys.SERVER_URL); + String imageUrl = "javascript:var dummy = window.open('" + serverUrl + "download/?uuid=" + + image.getOriginalFileUuid() + "&preferDownload=false','" + image.getTitle() + + "','resizable,width=" + image.getOriginalImageWidth() + ",height=" + + image.getOriginalImageHeight() + ",scrollbars')"; + SimpleURL simpleUrl = new SimpleURL(image.getTitle(), imageUrl); + uploadedImagesUrls.add(simpleUrl); + } + } + SimpleURL[] uploadedImagesUrlsArray = uploadedImagesUrls.toArray(new SimpleURL[] {}); + return new ToolOutput(ImageGalleryOutputFactory.OUTPUT_NAME_UPLOADED_IMAGES_URLS, getI18NText( + ImageGalleryOutputFactory.OUTPUT_NAME_UPLOADED_IMAGES_URLS, true), uploadedImagesUrlsArray, + false); } } } @@ -112,20 +167,20 @@ */ private ToolOutput getNumUploadedImages(ImageGalleryUser user, ImageGallerySession session) { ImageGallery imageGallery = session.getImageGallery(); - + int countImages = 0; if (user != null) { Set allImages = imageGallery.getImageGalleryItems(); - + for (ImageGalleryItem image : allImages) { if (user.getUserId().equals(image.getCreateBy().getUserId())) { - countImages++; + countImages++; } } } else { countImages = imageGallery.getImageGalleryItems().size(); } - + return new ToolOutput(ImageGalleryOutputFactory.OUTPUT_NAME_LEARNER_NUM_IMAGES_UPLOADED, getI18NText( ImageGalleryOutputFactory.OUTPUT_NAME_LEARNER_NUM_IMAGES_UPLOADED, true), countImages); } @@ -135,40 +190,41 @@ */ private ToolOutput getNumComments(ImageGalleryUser user, ImageGallerySession session) { ImageGallery imageGallery = session.getImageGallery(); - + int countComments = 0; if (user != null) { Set allImages = imageGallery.getImageGalleryItems(); Iterator it = allImages.iterator(); - while(it.hasNext()) { + while (it.hasNext()) { ImageGalleryItem image = it.next(); Set imageComments = image.getComments(); for (ImageComment comment : imageComments) { if (user.getUserId().equals(comment.getCreateBy().getUserId())) { - countComments++; + countComments++; } } } } else { - Set allImages = imageGallery.getImageGalleryItems(); + Set allImages = imageGallery.getImageGalleryItems(); for (ImageGalleryItem image : allImages) { Set imageComments = image.getComments(); for (ImageComment comment : imageComments) { - countComments++; + countComments++; } } } - + return new ToolOutput(ImageGalleryOutputFactory.OUTPUT_NAME_LEARNER_NUM_IMAGES_UPLOADED, getI18NText( ImageGalleryOutputFactory.OUTPUT_NAME_LEARNER_NUM_IMAGES_UPLOADED, true), countComments); } - + /** * Get the number of imageVotes for a specific user. Will always return a ToolOutput object. */ - private ToolOutput getNumVotes(ImageGalleryUser user, ImageGallerySession session, IImageGalleryService imageGalleryService) { + private ToolOutput getNumVotes(ImageGalleryUser user, ImageGallerySession session, + IImageGalleryService imageGalleryService) { ImageGallery imageGallery = session.getImageGallery(); - + int countVotes = 0; if (user != null) { countVotes = imageGalleryService.getNumberVotesByUserId(user.getUserId()); @@ -179,7 +235,7 @@ countVotes += userCountVotes; } } - + return new ToolOutput(ImageGalleryOutputFactory.OUTPUT_NAME_LEARNER_NUM_IMAGES_UPLOADED, getI18NText( ImageGalleryOutputFactory.OUTPUT_NAME_LEARNER_NUM_IMAGES_UPLOADED, true), countVotes); } Index: lams_tool_images/src/java/org/lamsfoundation/lams/tool/imageGallery/web/action/LearningAction.java =================================================================== diff -u -rcf64a8894a0ff0b3e95609514f259e7577490b46 -r37b49e5e78d2b57936d98e68f6057539472b7725 --- lams_tool_images/src/java/org/lamsfoundation/lams/tool/imageGallery/web/action/LearningAction.java (.../LearningAction.java) (revision cf64a8894a0ff0b3e95609514f259e7577490b46) +++ lams_tool_images/src/java/org/lamsfoundation/lams/tool/imageGallery/web/action/LearningAction.java (.../LearningAction.java) (revision 37b49e5e78d2b57936d98e68f6057539472b7725) @@ -27,9 +27,9 @@ import java.sql.Timestamp; import java.util.ArrayList; import java.util.Date; +import java.util.LinkedHashSet; import java.util.List; import java.util.Set; -import java.util.SortedSet; import java.util.TreeSet; import javax.servlet.http.HttpServletRequest; @@ -110,21 +110,21 @@ } if (param.equals("saveMultipleImages")) { return saveMultipleImages(mapping, form, request, response); - } - - // ================ Comments ======================= + } + + // ================ Comments ======================= if (param.equals("loadImageData")) { return loadImageData(mapping, form, request, response); - } + } if (param.equals("addNewComment")) { return addNewComment(mapping, form, request, response); - } - if (param.equals("saveOrUpdateRating")) { + } + if (param.equals("saveOrUpdateRating")) { return saveOrUpdateRating(mapping, form, request, response); - } - if (param.equals("vote")) { + } + if (param.equals("vote")) { return vote(mapping, form, request, response); - } + } // ================ Reflection ======================= if (param.equals("newReflection")) { @@ -151,7 +151,7 @@ request.getSession().setAttribute(sessionMap.getSessionID(), sessionMap); Long sessionId = new Long(request.getParameter(ImageGalleryConstants.PARAM_TOOL_SESSION_ID)); ToolAccessMode mode = WebUtil.readToolAccessModeParam(request, AttributeNames.PARAM_MODE, true); - IImageGalleryService service = getImageGalleryService(); + IImageGalleryService service = getImageGalleryService(); ImageGallery imageGallery = service.getImageGalleryBySessionId(sessionId); // save toolContentID into HTTPSession @@ -161,21 +161,21 @@ // get back the imageGallery and item list and display them on page ImageGalleryUser imageGalleryUser = null; - if ((mode != null) && mode.isTeacher()) { + if (mode != null && mode.isTeacher()) { // monitoring mode - user is specified in URL // imageGalleryUser may be null if the user was force completed. imageGalleryUser = getSpecifiedUser(service, sessionId, WebUtil.readIntParam(request, AttributeNames.PARAM_USER_ID, false)); } else { imageGalleryUser = getCurrentUser(service, sessionId); } - + // Get contentFolderID and save to form. -// String contentFolderID = WebUtil.readStrParam(request, AttributeNames.PARAM_CONTENT_FOLDER_ID); -// sessionMap.put(ImageGalleryConstants.ATTR_CONTENT_FOLDER_ID, contentFolderID); + // String contentFolderID = WebUtil.readStrParam(request, AttributeNames.PARAM_CONTENT_FOLDER_ID); + // sessionMap.put(ImageGalleryConstants.ATTR_CONTENT_FOLDER_ID, contentFolderID); // check whehter finish lock is on/off - boolean lock = imageGallery.getLockWhenFinished() && (imageGalleryUser != null) + boolean lock = imageGallery.getLockWhenFinished() && imageGalleryUser != null && imageGalleryUser.isSessionFinished(); // get notebook entry @@ -193,21 +193,25 @@ sessionMap.put(ImageGalleryConstants.ATTR_RESOURCE_INSTRUCTION, imageGallery.getInstructions()); sessionMap.put(ImageGalleryConstants.ATTR_FINISH_LOCK, lock); sessionMap.put(ImageGalleryConstants.ATTR_LOCK_ON_FINISH, imageGallery.getLockWhenFinished()); - sessionMap.put(ImageGalleryConstants.ATTR_USER_FINISHED, (imageGalleryUser != null) + sessionMap.put(ImageGalleryConstants.ATTR_USER_FINISHED, imageGalleryUser != null && imageGalleryUser.isSessionFinished()); sessionMap.put(AttributeNames.PARAM_TOOL_SESSION_ID, sessionId); sessionMap.put(AttributeNames.ATTR_MODE, mode); // reflection information sessionMap.put(ImageGalleryConstants.ATTR_REFLECTION_ON, imageGallery.isReflectOnActivity()); sessionMap.put(ImageGalleryConstants.ATTR_REFLECTION_INSTRUCTION, imageGallery.getReflectInstructions()); - sessionMap.put(ImageGalleryConstants.ATTR_REFLECTION_ENTRY, entryText); - - ImageGalleryConfigItem mediumImageDimensionsKey = service.getConfigItem(ImageGalleryConfigItem.KEY_MEDIUM_IMAGE_DIMENSIONS); - ImageGalleryConfigItem thumbnailImageDimensionsKey = service.getConfigItem(ImageGalleryConfigItem.KEY_THUMBNAIL_IMAGE_DIMENSIONS); - sessionMap.put(ImageGalleryConstants.ATTR_MEDIUM_IMAGE_DIMENSIONS, Integer.parseInt(mediumImageDimensionsKey.getConfigValue())); - sessionMap.put(ImageGalleryConstants.ATTR_THUMBNAIL_IMAGE_DIMENSIONS, Integer.parseInt(thumbnailImageDimensionsKey.getConfigValue())); - + sessionMap.put(ImageGalleryConstants.ATTR_REFLECTION_ENTRY, entryText); + + ImageGalleryConfigItem mediumImageDimensionsKey = service + .getConfigItem(ImageGalleryConfigItem.KEY_MEDIUM_IMAGE_DIMENSIONS); + ImageGalleryConfigItem thumbnailImageDimensionsKey = service + .getConfigItem(ImageGalleryConfigItem.KEY_THUMBNAIL_IMAGE_DIMENSIONS); + sessionMap.put(ImageGalleryConstants.ATTR_MEDIUM_IMAGE_DIMENSIONS, Integer.parseInt(mediumImageDimensionsKey + .getConfigValue())); + sessionMap.put(ImageGalleryConstants.ATTR_THUMBNAIL_IMAGE_DIMENSIONS, Integer + .parseInt(thumbnailImageDimensionsKey.getConfigValue())); + // add define later support if (imageGallery.isDefineLater()) { return mapping.findForward("defineLater"); @@ -243,9 +247,9 @@ } } else { images.addAll(imageGallery.getImageGalleryItems()); - } - - sessionMap.put(ImageGalleryConstants.ATTR_RESOURCE_ITEM_LIST, images); + } + + sessionMap.put(ImageGalleryConstants.ATTR_RESOURCE_ITEM_LIST, images); sessionMap.put(ImageGalleryConstants.ATTR_RESOURCE, imageGallery); return mapping.findForward(ImageGalleryConstants.SUCCESS); @@ -282,7 +286,7 @@ nextActivityUrl = service.finishToolSession(sessionId, userID); request.setAttribute(ImageGalleryConstants.ATTR_NEXT_ACTIVITY_URL, nextActivityUrl); } catch (ImageGalleryException e) { - log.error("Failed get next activity url:" + e.getMessage()); + LearningAction.log.error("Failed get next activity url:" + e.getMessage()); } return mapping.findForward(ImageGalleryConstants.SUCCESS); @@ -334,18 +338,18 @@ return mapping.findForward("image"); } } - - //redirect + + // redirect String sessionMapID = itemForm.getSessionMapID(); - SessionMap sessionMap = (SessionMap) request.getSession().getAttribute(sessionMapID); + SessionMap sessionMap = (SessionMap) request.getSession().getAttribute(sessionMapID); ToolAccessMode mode = (ToolAccessMode) sessionMap.get(AttributeNames.ATTR_MODE); request.setAttribute(AttributeNames.ATTR_MODE, mode); - Long sessionId = (Long) sessionMap.get(ImageGalleryConstants.ATTR_TOOL_SESSION_ID); + Long sessionId = (Long) sessionMap.get(ImageGalleryConstants.ATTR_TOOL_SESSION_ID); request.setAttribute(AttributeNames.PARAM_TOOL_SESSION_ID, sessionId); return mapping.findForward(ImageGalleryConstants.SUCCESS); } - + /** * Initial page for add imageGallery item (single file or URL). * @@ -392,18 +396,18 @@ return mapping.findForward("images"); } } - - //redirect + + // redirect String sessionMapID = multipleForm.getSessionMapID(); - SessionMap sessionMap = (SessionMap) request.getSession().getAttribute(sessionMapID); + SessionMap sessionMap = (SessionMap) request.getSession().getAttribute(sessionMapID); ToolAccessMode mode = (ToolAccessMode) sessionMap.get(AttributeNames.ATTR_MODE); request.setAttribute(AttributeNames.ATTR_MODE, mode); - Long sessionId = (Long) sessionMap.get(ImageGalleryConstants.ATTR_TOOL_SESSION_ID); + Long sessionId = (Long) sessionMap.get(ImageGalleryConstants.ATTR_TOOL_SESSION_ID); request.setAttribute(AttributeNames.PARAM_TOOL_SESSION_ID, sessionId); return mapping.findForward(ImageGalleryConstants.SUCCESS); } - + /** * Sets Image data to session variable, to be shown on main learning page. * @@ -420,16 +424,17 @@ SessionMap sessionMap = (SessionMap) request.getSession().getAttribute(sessionMapID); Long sessionId = (Long) sessionMap.get(ImageGalleryConstants.ATTR_TOOL_SESSION_ID); IImageGalleryService service = getImageGalleryService(); - ImageGallery imageGallery = service.getImageGalleryBySessionId(sessionId); + ImageGallery imageGallery = service.getImageGalleryBySessionId(sessionId); UserDTO user = (UserDTO) SessionManager.getSession().getAttribute(AttributeNames.USER); - ImageGalleryUser imageGalleryUser = service.getUserByIDAndSession(new Long(user.getUserID().intValue()),sessionId); + ImageGalleryUser imageGalleryUser = service.getUserByIDAndSession(new Long(user.getUserID().intValue()), + sessionId); Long imageUid = new Long(request.getParameter(ImageGalleryConstants.PARAM_IMAGE_UID)); ImageGalleryItem image = service.getImageGalleryItemByUid(imageUid); String escapedDescription = image.getDescription().replaceAll("[\"]", """); image.setDescription(escapedDescription); sessionMap.put(ImageGalleryConstants.PARAM_CURRENT_IMAGE, image); - + // becuase in webpage will use this login name. Here is just // initial it to avoid session close error in proxy object. if (image.getCreateBy() != null) { @@ -440,8 +445,8 @@ TreeSet comments = new TreeSet(new ImageCommentComparator()); Set dbComments = image.getComments(); List sessionUsers = service.getUserListBySessionId(sessionId); - for(ImageComment comment : dbComments) { - for(ImageGalleryUser sessionUser : sessionUsers) { + for (ImageComment comment : dbComments) { + for (ImageGalleryUser sessionUser : sessionUsers) { if (comment.getCreateBy().getUserId().equals(sessionUser.getUserId())) { comments.add(comment); } @@ -452,27 +457,27 @@ if (imageGallery.isAllowRank()) { ImageRating imageRating = service.getImageRatingByImageAndUser(imageUid, imageGalleryUser.getUserId()); - int rating = (imageRating == null) ? 0 : imageRating.getRating(); - + int rating = imageRating == null ? 0 : imageRating.getRating(); + Object[] ratingForGroup = service.getRatingForGroup(imageUid, sessionId); - sessionMap.put(ImageGalleryConstants.PARAM_NUMBER_RATINGS, ((Long)ratingForGroup[0]).toString()); - sessionMap.put(ImageGalleryConstants.PARAM_AVERAGE_RATING, ((Float)ratingForGroup[1]).toString()); - sessionMap.put(ImageGalleryConstants.PARAM_CURRENT_RATING, rating); + sessionMap.put(ImageGalleryConstants.PARAM_NUMBER_RATINGS, ((Long) ratingForGroup[0]).toString()); + sessionMap.put(ImageGalleryConstants.PARAM_AVERAGE_RATING, ((Float) ratingForGroup[1]).toString()); + sessionMap.put(ImageGalleryConstants.PARAM_CURRENT_RATING, rating); } if (imageGallery.isAllowVote()) { boolean isVotedForThisImage = false; ImageVote imageVote = service.getImageVoteByImageAndUser(image.getUid(), imageGalleryUser.getUserId()); - if ((imageVote != null) && imageVote.isVoted()) { + if (imageVote != null && imageVote.isVoted()) { isVotedForThisImage = true; } sessionMap.put(ImageGalleryConstants.PARAM_IS_VOTED, isVotedForThisImage); } - + request.setAttribute(ImageGalleryConstants.ATTR_SESSION_MAP_ID, sessionMapID); return mapping.findForward(ImageGalleryConstants.SUCCESS); } - + /** * Move down current item. * @@ -488,29 +493,30 @@ SessionMap sessionMap = (SessionMap) request.getSession().getAttribute(sessionMapID); Long sessionId = (Long) sessionMap.get(ImageGalleryConstants.ATTR_TOOL_SESSION_ID); String commentMessage = WebUtil.readStrParam(request, ImageGalleryConstants.ATTR_COMMENT, true); - + if (StringUtils.isBlank(commentMessage)) { ActionErrors errors = new ActionErrors(); errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(ImageGalleryConstants.ERROR_MSG_COMMENT_BLANK)); this.addErrors(request, errors); return mapping.findForward(ImageGalleryConstants.SUCCESS); } - + ImageComment comment = new ImageComment(); comment.setComment(commentMessage); UserDTO user = (UserDTO) SessionManager.getSession().getAttribute(AttributeNames.USER); IImageGalleryService service = getImageGalleryService(); - ImageGalleryUser imageGalleryUser = service.getUserByIDAndSession(new Long(user.getUserID().intValue()),sessionId); + ImageGalleryUser imageGalleryUser = service.getUserByIDAndSession(new Long(user.getUserID().intValue()), + sessionId); comment.setCreateBy(imageGalleryUser); comment.setCreateDate(new Timestamp(new Date().getTime())); - - //persist ImageGallery changes in DB - Long currentImageUid = new Long(request.getParameter(ImageGalleryConstants.ATTR_CURRENT_IMAGE_UID)); + + // persist ImageGallery changes in DB + Long currentImageUid = new Long(request.getParameter(ImageGalleryConstants.ATTR_CURRENT_IMAGE_UID)); ImageGalleryItem dbItem = service.getImageGalleryItemByUid(currentImageUid); Set dbComments = dbItem.getComments(); dbComments.add(comment); service.saveOrUpdateImageGalleryItem(dbItem); - + // to make available new changes be visible in jsp page TreeSet comments = new TreeSet(new ImageCommentComparator()); dbComments = dbItem.getComments(); @@ -523,13 +529,13 @@ } } sessionMap.put(ImageGalleryConstants.PARAM_COMMENTS, comments); - + form.reset(mapping, request); - + request.setAttribute(ImageGalleryConstants.ATTR_SESSION_MAP_ID, sessionMapID); return mapping.findForward(ImageGalleryConstants.SUCCESS); } - + /** * Move down current item. * @@ -546,30 +552,31 @@ Long sessionId = (Long) sessionMap.get(ImageGalleryConstants.ATTR_TOOL_SESSION_ID); IImageGalleryService service = getImageGalleryService(); - int rating = NumberUtils.stringToInt(((ImageRatingForm)form).getRating()); + int rating = NumberUtils.stringToInt(((ImageRatingForm) form).getRating()); Long imageUid = new Long(request.getParameter(ImageGalleryConstants.PARAM_IMAGE_UID)); UserDTO user = (UserDTO) SessionManager.getSession().getAttribute(AttributeNames.USER); - ImageGalleryUser imageGalleryUser = service.getUserByIDAndSession(new Long(user.getUserID().intValue()),sessionId); + ImageGalleryUser imageGalleryUser = service.getUserByIDAndSession(new Long(user.getUserID().intValue()), + sessionId); ImageRating imageRating = service.getImageRatingByImageAndUser(imageUid, imageGalleryUser.getUserId()); - //persist ImageGalleryItem changes in DB - ImageGalleryItem dbImage = service.getImageGalleryItemByUid(imageUid); + // persist ImageGalleryItem changes in DB + ImageGalleryItem dbImage = service.getImageGalleryItemByUid(imageUid); if (imageRating == null) { // add imageRating = new ImageRating(); imageRating.setCreateBy(imageGalleryUser); imageRating.setImageGalleryItem(dbImage); } imageRating.setRating(rating); service.saveOrUpdateImageRating(imageRating); - - //to make available new changes be visible in jsp page + + // to make available new changes be visible in jsp page sessionMap.put(ImageGalleryConstants.PARAM_CURRENT_IMAGE, dbImage); sessionMap.put(ImageGalleryConstants.PARAM_CURRENT_RATING, rating); - + request.setAttribute(ImageGalleryConstants.ATTR_SESSION_MAP_ID, sessionMapID); return mapping.findForward(ImageGalleryConstants.SUCCESS); - } - + } + /** * Move down current item. * @@ -587,10 +594,11 @@ IImageGalleryService service = getImageGalleryService(); Long imageUid = new Long(request.getParameter(ImageGalleryConstants.PARAM_IMAGE_UID)); UserDTO user = (UserDTO) SessionManager.getSession().getAttribute(AttributeNames.USER); - ImageGalleryUser imageGalleryUser = service.getUserByIDAndSession(new Long(user.getUserID().intValue()),sessionId); + ImageGalleryUser imageGalleryUser = service.getUserByIDAndSession(new Long(user.getUserID().intValue()), + sessionId); - //persist ImageGalleryItem changes in DB - boolean formVote = (((ImageRatingForm)form).getVote()); + // persist ImageGalleryItem changes in DB + boolean formVote = ((ImageRatingForm) form).getVote(); ImageVote imageVote = service.getImageVoteByImageAndUser(imageUid, imageGalleryUser.getUserId()); if (imageVote == null) { imageVote = new ImageVote(); @@ -599,11 +607,11 @@ imageVote.setImageGalleryItem(image); } imageVote.setVoted(formVote); - service.saveOrUpdateImageVote(imageVote); - + service.saveOrUpdateImageVote(imageVote); + request.setAttribute(ImageGalleryConstants.ATTR_SESSION_MAP_ID, sessionMapID); return mapping.findForward(ImageGalleryConstants.SUCCESS); - } + } /** * Display empty reflection form. @@ -714,7 +722,7 @@ } return imageGalleryUser; } - + /** * Extract web form content to imageGallery item. * @@ -726,13 +734,14 @@ throws Exception { SessionMap sessionMap = (SessionMap) request.getSession().getAttribute(imageForm.getSessionMapID()); IImageGalleryService service = getImageGalleryService(); - ImageGallery imageGallery = (ImageGallery) sessionMap.get(ImageGalleryConstants.ATTR_RESOURCE); + ImageGallery imageGallery = (ImageGallery) sessionMap.get(ImageGalleryConstants.ATTR_RESOURCE); ImageGalleryItem image = new ImageGalleryItem(); image.setCreateDate(new Timestamp(new Date().getTime())); - + // upload ImageGalleryItem file - // and setting file properties' fields: item.setFileUuid(); item.setFileVersionId(); item.setFileType(); item.setFileName(); + // and setting file properties' fields: item.setFileUuid(); item.setFileVersionId(); item.setFileType(); + // item.setFileName(); if (imageForm.getFile() != null) { try { service.uploadImageGalleryItemFile(image, imageForm.getFile()); @@ -744,30 +753,39 @@ String title = imageForm.getTitle(); if (StringUtils.isBlank(title)) { - Long nextConsecutiveImageTitle = imageGallery.getNextImageTitle(); + Long nextConsecutiveImageTitle = imageGallery.getNextImageTitle(); imageGallery.setNextImageTitle(nextConsecutiveImageTitle + 1); - + String imageLocalized = service.getLocalisedMessage("label.authoring.image", null); title = imageLocalized + " " + nextConsecutiveImageTitle; } image.setTitle(title); - Long sessionId = (Long) sessionMap.get(ImageGalleryConstants.ATTR_TOOL_SESSION_ID); + Long sessionId = (Long) sessionMap.get(ImageGalleryConstants.ATTR_TOOL_SESSION_ID); ImageGalleryUser imageGalleryUser = getCurrentUser(service, sessionId); image.setCreateBy(imageGalleryUser); image.setDescription(imageForm.getDescription()); image.setCreateByAuthor(false); image.setHide(false); - - //setting SequenceId + + ImageGallerySession session = service.getImageGallerySessionBySessionId(sessionId); + Set sessionItems = session.getImageGalleryItems(); + if (sessionItems == null) { + sessionItems = new LinkedHashSet(); + } + sessionItems.add(image); + + // setting SequenceId Set imageList = imageGallery.getImageGalleryItems(); int maxSeq = 0; for (ImageGalleryItem dbImage : imageList) { - if (dbImage.getSequenceId() > maxSeq) maxSeq = dbImage.getSequenceId(); + if (dbImage.getSequenceId() > maxSeq) { + maxSeq = dbImage.getSequenceId(); + } } maxSeq++; image.setSequenceId(maxSeq); - + imageList.add(image); service.saveOrUpdateImageGallery(imageGallery); @@ -788,7 +806,7 @@ } } } - + /** * Extract web form content to imageGallery items. * @@ -798,7 +816,7 @@ */ private void extractMultipleFormToImageGalleryItems(HttpServletRequest request, MultipleImagesForm multipleForm) throws Exception { - + List fileList = createFileListFromMultipleForm(multipleForm); for (FormFile file : fileList) { ImageGalleryItemForm imageForm = new ImageGalleryItemForm(); @@ -822,7 +840,7 @@ // validate file size FileValidatorUtil.validateFileSize(itemForm.getFile(), true, errors); // for edit validate: file already exist - if ((itemForm.getFile() == null) || StringUtils.isEmpty(itemForm.getFile().getFileName())) { + if (itemForm.getFile() == null || StringUtils.isEmpty(itemForm.getFile().getFileName())) { errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(ImageGalleryConstants.ERROR_MSG_FILE_BLANK)); } @@ -837,7 +855,7 @@ return errors; } - + /** * Validate imageGallery items. * @@ -848,7 +866,7 @@ ActionErrors errors = new ActionErrors(); List fileList = createFileListFromMultipleForm(multipleForm); - + // validate files size for (FormFile file : fileList) { FileValidatorUtil.validateFileSize(file, true, errors); @@ -863,7 +881,7 @@ return errors; } - + /** * Create file list from multiple form. * @@ -873,25 +891,25 @@ private List createFileListFromMultipleForm(MultipleImagesForm multipleForm) { List fileList = new ArrayList(); - if (! StringUtils.isEmpty(multipleForm.getFile1().getFileName())) { + if (!StringUtils.isEmpty(multipleForm.getFile1().getFileName())) { fileList.add(multipleForm.getFile1()); } - if (! StringUtils.isEmpty(multipleForm.getFile2().getFileName())) { + if (!StringUtils.isEmpty(multipleForm.getFile2().getFileName())) { fileList.add(multipleForm.getFile2()); } - if (! StringUtils.isEmpty(multipleForm.getFile3().getFileName())) { + if (!StringUtils.isEmpty(multipleForm.getFile3().getFileName())) { fileList.add(multipleForm.getFile3()); } - if (! StringUtils.isEmpty(multipleForm.getFile4().getFileName())) { + if (!StringUtils.isEmpty(multipleForm.getFile4().getFileName())) { fileList.add(multipleForm.getFile4()); } - if (! StringUtils.isEmpty(multipleForm.getFile5().getFileName())) { + if (!StringUtils.isEmpty(multipleForm.getFile5().getFileName())) { fileList.add(multipleForm.getFile5()); } return fileList; } - + /** * Checks if the format is allowed. * Index: lams_tool_laqa/conf/language/lams/ApplicationResources.properties =================================================================== diff -u -r354fba28c9fe6b476def18f92df5fe3c1422f9e9 -r37b49e5e78d2b57936d98e68f6057539472b7725 --- lams_tool_laqa/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision 354fba28c9fe6b476def18f92df5fe3c1422f9e9) +++ lams_tool_laqa/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision 37b49e5e78d2b57936d98e68f6057539472b7725) @@ -189,8 +189,8 @@ error.condition.duplicated.name =Duplicated name. Please choose unique one. error.condition.no.questions.selected =There are no questions selected. Please select at least one. error.condition =Error creating condition. -output.desc.text.search.output.definition.qa =Answers contain certain words -text.search.output.definition.qa.default.condition =First answer contains word "LAMS" +output.desc.user.answers.output.definition.qa =Answers contain certain words +user.answers.output.definition.qa.default.condition =First answer contains word "LAMS" textsearch.heading =Answers that... textsearch.all.words =have all these words: textsearch.phrase =have this exact wording or phrase: @@ -240,5 +240,7 @@ error.noStudentActivity =Sorry, the report can not be generated.
No learner has attempted the activity yet. label.allowRichEditor =Allow rich text editor +output.desc.group.answers.output.definition.qa =QA all learners' answers +output.desc.questions.output.definition.qa =QA questions asked #======= End labels: Exported 233 labels for en AU ===== Index: lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/service/QaOutputFactory.java =================================================================== diff -u -r1a5446e3a1f962f1bb831c1bbaef14acf9d3635c -r37b49e5e78d2b57936d98e68f6057539472b7725 --- lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/service/QaOutputFactory.java (.../QaOutputFactory.java) (revision 1a5446e3a1f962f1bb831c1bbaef14acf9d3635c) +++ lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/service/QaOutputFactory.java (.../QaOutputFactory.java) (revision 37b49e5e78d2b57936d98e68f6057539472b7725) @@ -65,8 +65,8 @@ if (toolContentObject != null) { QaContent qaContent = (QaContent) toolContentObject; // Different definitions are provided, depending how the output will be used - Class stringArrayClass = new String[] {}.getClass(); - Class listOfStringArrayClass = new LinkedList().getClass(); + Class stringArrayClass = String[].class; + Class arrayofStringArraysClass = String[][].class; switch (definitionType) { case ToolOutputDefinition.DATA_OUTPUT_DEFINITION_TYPE_CONDITION: { ToolOutputDefinition userAnswersDefinition = buildComplexOutputDefinition( @@ -88,7 +88,7 @@ break; case ToolOutputDefinition.DATA_OUTPUT_DEFINITION_TYPE_DATA_FLOW: { ToolOutputDefinition groupAnswersDefinition = buildComplexOutputDefinition( - QaAppConstants.GROUP_ANSWERS_DEFINITION_NAME, listOfStringArrayClass); + QaAppConstants.GROUP_ANSWERS_DEFINITION_NAME, arrayofStringArraysClass); definitionMap.put(QaAppConstants.GROUP_ANSWERS_DEFINITION_NAME, groupAnswersDefinition); ToolOutputDefinition questionsDefinition = buildComplexOutputDefinition( Index: lams_tool_larsrc/conf/language/lams/ApplicationResources.properties =================================================================== diff -u -r4022eecf95fc282197d0c80d674ca184b1c18c21 -r37b49e5e78d2b57936d98e68f6057539472b7725 --- lams_tool_larsrc/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision 4022eecf95fc282197d0c80d674ca184b1c18c21) +++ lams_tool_larsrc/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision 37b49e5e78d2b57936d98e68f6057539472b7725) @@ -179,5 +179,6 @@ error.planner.url.blank =In resource {0} URL can not be blank. error.planner.file.blank =In resource {0} file can not be blank. +output.desc.shared.items.output.definition.rsrc =Share Resources: Uploaded URLs and paths to files #======= End labels: Exported 172 labels for en AU ===== Index: lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/ResourceConstants.java =================================================================== diff -u -r05ab55ef4acdc0c374af7405c58fb0e0fe8eb6b7 -r37b49e5e78d2b57936d98e68f6057539472b7725 --- lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/ResourceConstants.java (.../ResourceConstants.java) (revision 05ab55ef4acdc0c374af7405c58fb0e0fe8eb6b7) +++ lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/ResourceConstants.java (.../ResourceConstants.java) (revision 37b49e5e78d2b57936d98e68f6057539472b7725) @@ -24,134 +24,136 @@ package org.lamsfoundation.lams.tool.rsrc; public class ResourceConstants { - public static final String TOOL_SIGNATURE = "larsrc11"; + public static final String TOOL_SIGNATURE = "larsrc11"; - public static final String RESOURCE_SERVICE = "resourceService"; + public static final String RESOURCE_SERVICE = "resourceService"; - public static final String TOOL_CONTENT_HANDLER_NAME = "resourceToolContentHandler"; + public static final String TOOL_CONTENT_HANDLER_NAME = "resourceToolContentHandler"; - public static final int COMPLETED = 1; + public static final int COMPLETED = 1; - //resource type; - public static final short RESOURCE_TYPE_URL = 1; + // resource type; + public static final short RESOURCE_TYPE_URL = 1; - public static final short RESOURCE_TYPE_FILE = 2; + public static final short RESOURCE_TYPE_FILE = 2; - public static final short RESOURCE_TYPE_WEBSITE = 3; + public static final short RESOURCE_TYPE_WEBSITE = 3; - public static final short RESOURCE_TYPE_LEARNING_OBJECT = 4; + public static final short RESOURCE_TYPE_LEARNING_OBJECT = 4; - //for action forward name - public static final String SUCCESS = "success"; + // for action forward name + public static final String SUCCESS = "success"; - public static final String ERROR = "error"; + public static final String ERROR = "error"; - public static final String DEFINE_LATER = "definelater"; + public static final String DEFINE_LATER = "definelater"; - //for parameters' name - public static final String PARAM_TOOL_CONTENT_ID = "toolContentID"; + // for parameters' name + public static final String PARAM_TOOL_CONTENT_ID = "toolContentID"; - public static final String PARAM_TOOL_SESSION_ID = "toolSessionID"; + public static final String PARAM_TOOL_SESSION_ID = "toolSessionID"; - public static final String PARAM_FILE_VERSION_ID = "fileVersionId"; + public static final String PARAM_FILE_VERSION_ID = "fileVersionId"; - public static final String PARAM_FILE_UUID = "fileUuid"; + public static final String PARAM_FILE_UUID = "fileUuid"; - public static final String PARAM_ITEM_INDEX = "itemIndex"; + public static final String PARAM_ITEM_INDEX = "itemIndex"; - public static final String PARAM_RESOURCE_ITEM_UID = "itemUid"; + public static final String PARAM_RESOURCE_ITEM_UID = "itemUid"; - public static final String PARAM_CURRENT_INSTRUCTION_INDEX = "insIdx"; + public static final String PARAM_CURRENT_INSTRUCTION_INDEX = "insIdx"; - public static final String PARAM_RUN_OFFLINE = "runOffline"; + public static final String PARAM_RUN_OFFLINE = "runOffline"; - public static final String PARAM_OPEN_URL_POPUP = "popupUrl"; + public static final String PARAM_OPEN_URL_POPUP = "popupUrl"; - public static final String PARAM_TITLE = "title"; + public static final String PARAM_TITLE = "title"; - //for request attribute name - public static final String ATTR_TOOL_CONTENT_ID = "toolContentID"; + // for request attribute name + public static final String ATTR_TOOL_CONTENT_ID = "toolContentID"; - public static final String ATTR_TOOL_SESSION_ID = "toolSessionID"; + public static final String ATTR_TOOL_SESSION_ID = "toolSessionID"; - public static final String ATTR_INSTRUCTION_LIST = "instructionList"; + public static final String ATTR_INSTRUCTION_LIST = "instructionList"; - public static final String ATTR_RESOURCE_ITEM_LIST = "resourceList"; + public static final String ATTR_RESOURCE_ITEM_LIST = "resourceList"; - public static final String ATT_ATTACHMENT_LIST = "instructionAttachmentList"; + public static final String ATT_ATTACHMENT_LIST = "instructionAttachmentList"; - public static final String ATTR_DELETED_RESOURCE_ITEM_LIST = "deleteResourceList"; + public static final String ATTR_DELETED_RESOURCE_ITEM_LIST = "deleteResourceList"; - public static final String ATTR_DELETED_ATTACHMENT_LIST = "deletedAttachmmentList"; + public static final String ATTR_DELETED_ATTACHMENT_LIST = "deletedAttachmmentList"; - public static final String ATTR_DELETED_RESOURCE_ITEM_ATTACHMENT_LIST = "deletedItemAttachmmentList";; + public static final String ATTR_DELETED_RESOURCE_ITEM_ATTACHMENT_LIST = "deletedItemAttachmmentList";; - public static final String ATT_LEARNING_OBJECT = "cpPackage"; + public static final String ATT_LEARNING_OBJECT = "cpPackage"; - public static final String ATTR_RESOURCE_REVIEW_URL = "resourceItemReviewUrl"; + public static final String ATTR_RESOURCE_REVIEW_URL = "resourceItemReviewUrl"; - public static final String ATTR_RESOURCE = "resource"; + public static final String ATTR_RESOURCE = "resource"; - public static final String ATTR_RUN_AUTO = "runAuto"; + public static final String ATTR_RUN_AUTO = "runAuto"; - public static final String ATTR_RESOURCE_ITEM_UID = "itemUid"; + public static final String ATTR_RESOURCE_ITEM_UID = "itemUid"; - public static final String ATTR_NEXT_ACTIVITY_URL = "nextActivityUrl"; + public static final String ATTR_NEXT_ACTIVITY_URL = "nextActivityUrl"; - public static final String ATTR_SUMMARY_LIST = "summaryList"; + public static final String ATTR_SUMMARY_LIST = "summaryList"; - public static final String ATTR_USER_LIST = "userList"; + public static final String ATTR_USER_LIST = "userList"; - public static final String ATTR_RESOURCE_INSTRUCTION = "instructions"; + public static final String ATTR_RESOURCE_INSTRUCTION = "instructions"; - public static final String ATTR_FINISH_LOCK = "finishedLock"; + public static final String ATTR_FINISH_LOCK = "finishedLock"; - public static final String ATTR_LOCK_ON_FINISH = "lockOnFinish"; + public static final String ATTR_LOCK_ON_FINISH = "lockOnFinish"; - public static final String ATTR_SESSION_MAP_ID = "sessionMapID"; + public static final String ATTR_SESSION_MAP_ID = "sessionMapID"; - public static final String ATTR_RESOURCE_FORM = "resourceForm"; + public static final String ATTR_RESOURCE_FORM = "resourceForm"; - public static final String ATTR_ADD_RESOURCE_TYPE = "addType"; + public static final String ATTR_ADD_RESOURCE_TYPE = "addType"; - public static final String ATTR_FILE_TYPE_FLAG = "fileTypeFlag"; + public static final String ATTR_FILE_TYPE_FLAG = "fileTypeFlag"; - public static final String ATTR_TITLE = "title"; + public static final String ATTR_TITLE = "title"; - public static final String ATTR_INSTRUCTIONS = "instructions"; + public static final String ATTR_INSTRUCTIONS = "instructions"; - public static final String ATTR_USER_FINISHED = "userFinished"; + public static final String ATTR_USER_FINISHED = "userFinished"; - //error message keys - public static final String ERROR_MSG_TITLE_BLANK = "error.resource.item.title.blank"; + // error message keys + public static final String ERROR_MSG_TITLE_BLANK = "error.resource.item.title.blank"; - public static final String ERROR_MSG_URL_BLANK = "error.resource.item.url.blank"; + public static final String ERROR_MSG_URL_BLANK = "error.resource.item.url.blank"; - public static final String ERROR_MSG_DESC_BLANK = "error.resource.item.desc.blank"; + public static final String ERROR_MSG_DESC_BLANK = "error.resource.item.desc.blank"; - public static final String ERROR_MSG_FILE_BLANK = "error.resource.item.file.blank"; + public static final String ERROR_MSG_FILE_BLANK = "error.resource.item.file.blank"; - public static final String ERROR_MSG_INVALID_URL = "error.resource.item.invalid.url"; + public static final String ERROR_MSG_INVALID_URL = "error.resource.item.invalid.url"; - public static final String ERROR_MSG_UPLOAD_FAILED = "error.upload.failed"; + public static final String ERROR_MSG_UPLOAD_FAILED = "error.upload.failed"; - public static final String PAGE_EDITABLE = "isPageEditable"; + public static final String PAGE_EDITABLE = "isPageEditable"; - public static final String MODE_AUTHOR_SESSION = "author_session"; + public static final String MODE_AUTHOR_SESSION = "author_session"; - public static final String ATTR_REFLECTION_ON = "reflectOn"; + public static final String ATTR_REFLECTION_ON = "reflectOn"; - public static final String ATTR_REFLECTION_INSTRUCTION = "reflectInstructions"; + public static final String ATTR_REFLECTION_INSTRUCTION = "reflectInstructions"; - public static final String ATTR_REFLECTION_ENTRY = "reflectEntry"; + public static final String ATTR_REFLECTION_ENTRY = "reflectEntry"; - public static final String ATTR_REFLECT_LIST = "reflectList"; + public static final String ATTR_REFLECT_LIST = "reflectList"; - public static final String ATTR_USER_UID = "userUid"; + public static final String ATTR_USER_UID = "userUid"; - public static final String DEFUALT_PROTOCOL_REFIX = "http://"; + public static final String DEFUALT_PROTOCOL_REFIX = "http://"; - public static final String ALLOW_PROTOCOL_REFIX = new String("[http://|https://|ftp://|nntp://]"); + public static final String ALLOW_PROTOCOL_REFIX = new String("[http://|https://|ftp://|nntp://]"); - public static final String EVENT_NAME_NOTIFY_TEACHERS_ON_ASSIGMENT_SUBMIT = "notify_teachers_on_assigment_submit"; + public static final String EVENT_NAME_NOTIFY_TEACHERS_ON_ASSIGMENT_SUBMIT = "notify_teachers_on_assigment_submit"; + + public static final String SHARED_ITEMS_DEFINITION_NAME = "shared.items.output.definition.rsrc"; } Index: lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/rsrcApplicationContext.xml =================================================================== diff -u -r126d84999e520648cb187e465cb4aaa3baad222e -r37b49e5e78d2b57936d98e68f6057539472b7725 --- lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/rsrcApplicationContext.xml (.../rsrcApplicationContext.xml) (revision 126d84999e520648cb187e465cb4aaa3baad222e) +++ lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/rsrcApplicationContext.xml (.../rsrcApplicationContext.xml) (revision 37b49e5e78d2b57936d98e68f6057539472b7725) @@ -45,6 +45,10 @@ + + + + @@ -100,7 +104,7 @@ - + Index: lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/service/ResourceOutputFactory.java =================================================================== diff -u --- lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/service/ResourceOutputFactory.java (revision 0) +++ lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/service/ResourceOutputFactory.java (revision 37b49e5e78d2b57936d98e68f6057539472b7725) @@ -0,0 +1,132 @@ +/**************************************************************** + * 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.rsrc.service; + +import java.util.ArrayList; +import java.util.List; +import java.util.SortedMap; +import java.util.TreeMap; + +import org.lamsfoundation.lams.tool.OutputFactory; +import org.lamsfoundation.lams.tool.SimpleURL; +import org.lamsfoundation.lams.tool.ToolOutput; +import org.lamsfoundation.lams.tool.ToolOutputDefinition; +import org.lamsfoundation.lams.tool.exception.ToolException; +import org.lamsfoundation.lams.tool.rsrc.ResourceConstants; +import org.lamsfoundation.lams.tool.rsrc.model.ResourceItem; +import org.lamsfoundation.lams.util.Configuration; +import org.lamsfoundation.lams.util.ConfigurationKeys; + +public class ResourceOutputFactory extends OutputFactory { + + /** + * {@inheritDoc} + */ + @Override + public SortedMap getToolOutputDefinitions(Object toolContentObject, int definitionType) + throws ToolException { + TreeMap definitionMap = new TreeMap(); + Class simpleUrlArrayClass = SimpleURL[].class; + switch (definitionType) { + case ToolOutputDefinition.DATA_OUTPUT_DEFINITION_TYPE_CONDITION: + break; + case ToolOutputDefinition.DATA_OUTPUT_DEFINITION_TYPE_DATA_FLOW: + ToolOutputDefinition sharedItemsDefinition = buildComplexOutputDefinition( + ResourceConstants.SHARED_ITEMS_DEFINITION_NAME, simpleUrlArrayClass); + definitionMap.put(ResourceConstants.SHARED_ITEMS_DEFINITION_NAME, sharedItemsDefinition); + break; + } + return definitionMap; + } + + /** + * Follows {@link PixlrService#getToolOutput(List, Long, Long)}. + * + */ + public SortedMap getToolOutput(List names, IResourceService resourceService, + Long toolSessionId, Long learnerId) { + + TreeMap outputs = new TreeMap(); + // tool output cache + TreeMap baseOutputs = new TreeMap(); + if (names == null) { + outputs.put(ResourceConstants.SHARED_ITEMS_DEFINITION_NAME, getToolOutput( + ResourceConstants.SHARED_ITEMS_DEFINITION_NAME, resourceService, toolSessionId, learnerId)); + } else { + for (String name : names) { + String[] nameParts = splitConditionName(name); + if (baseOutputs.get(nameParts[0]) != null) { + outputs.put(name, baseOutputs.get(nameParts[0])); + } else { + ToolOutput output = getToolOutput(name, resourceService, toolSessionId, learnerId); + if (output != null) { + outputs.put(name, output); + baseOutputs.put(nameParts[0], output); + } + } + } + } + + return outputs; + + } + + public ToolOutput getToolOutput(String name, IResourceService resourceService, Long toolSessionId, Long learnerId) { + if (name != null) { + String[] nameParts = splitConditionName(name); + if (ResourceConstants.SHARED_ITEMS_DEFINITION_NAME.equals(nameParts[0])) { + List items = resourceService.getResourceItemsBySessionId(toolSessionId); + List uploadedItems = new ArrayList(items.size()); + for (ResourceItem item : items) { + if (!item.isCreateByAuthor()) { + uploadedItems.add(item); + } + SimpleURL[] uploadedItemUrls = new SimpleURL[uploadedItems.size()]; + int uploadedItemIndex = 0; + if (!uploadedItems.isEmpty()) { + String serverUrl = Configuration.get(ConfigurationKeys.SERVER_URL); + for (ResourceItem uploadedItem : uploadedItems) { + + String path = uploadedItem.getUrl(); + if (path == null) { + path = serverUrl + "download/?uuid=" + uploadedItem.getFileUuid() + + "&preferDownload=false'"; + + } + path = "javascript:var dummy = window.open('" + path + "','" + uploadedItem.getTitle() + + "','resizable,scrollbars')"; + SimpleURL url = new SimpleURL(uploadedItem.getTitle(), path); + uploadedItemUrls[uploadedItemIndex] = url; + uploadedItemIndex++; + } + return new ToolOutput(ResourceConstants.SHARED_ITEMS_DEFINITION_NAME, getI18NText( + ResourceConstants.SHARED_ITEMS_DEFINITION_NAME, true), uploadedItemUrls, false); + } + + } + } + } + return null; + } +} Index: lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/service/ResourceServiceImpl.java =================================================================== diff -u -r1a5446e3a1f962f1bb831c1bbaef14acf9d3635c -r37b49e5e78d2b57936d98e68f6057539472b7725 --- lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/service/ResourceServiceImpl.java (.../ResourceServiceImpl.java) (revision 1a5446e3a1f962f1bb831c1bbaef14acf9d3635c) +++ lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/service/ResourceServiceImpl.java (.../ResourceServiceImpl.java) (revision 37b49e5e78d2b57936d98e68f6057539472b7725) @@ -158,6 +158,8 @@ private ILessonService lessonService; + private ResourceOutputFactory resourceOutputFactory; + public IVersionedNode getFileNode(Long itemUid, String relPathString) throws ResourceApplicationException { ResourceItem item = (ResourceItem) resourceItemDao.getObject(ResourceItem.class, itemUid); if (item == null) { @@ -945,10 +947,19 @@ * the toolContentId * * @return SortedMap of ToolOutputDefinitions with the key being the name of each definition + * @throws ResourceApplicationException */ public SortedMap getToolOutputDefinitions(Long toolContentId, int definitionType) throws ToolException { - return new TreeMap(); + Resource content = getResourceByContentId(toolContentId); + if (content == null) { + try { + content = getDefaultContent(toolContentId); + } catch (ResourceApplicationException e) { + throw new ToolException(e); + } + } + return getResourceOutputFactory().getToolOutputDefinitions(content, definitionType); } public void copyToolContent(Long fromContentId, Long toContentId) throws ToolException { @@ -1064,7 +1075,7 @@ * java.lang.Long) */ public SortedMap getToolOutput(List names, Long toolSessionId, Long learnerId) { - return new TreeMap(); + return getResourceOutputFactory().getToolOutput(names, this, toolSessionId, learnerId); } /** @@ -1074,7 +1085,7 @@ * java.lang.Long) */ public ToolOutput getToolOutput(String name, Long toolSessionId, Long learnerId) { - return null; + return getResourceOutputFactory().getToolOutput(name, this, toolSessionId, learnerId); } /* ===============Methods implemented from ToolContentImport102Manager =============== */ @@ -1302,6 +1313,14 @@ } public Class[] getSupportedToolOutputDefinitionClasses(int definitionType) { - return null; + return getResourceOutputFactory().getSupportedDefinitionClasses(definitionType); } + + public ResourceOutputFactory getResourceOutputFactory() { + return resourceOutputFactory; + } + + public void setResourceOutputFactory(ResourceOutputFactory resourceOutputFactory) { + this.resourceOutputFactory = resourceOutputFactory; + } } \ No newline at end of file Index: lams_tool_notebook/conf/language/lams/ApplicationResources.properties =================================================================== diff -u -rd00a5ed653e3d00056475d855413feccf6684f51 -r37b49e5e78d2b57936d98e68f6057539472b7725 --- lams_tool_notebook/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision d00a5ed653e3d00056475d855413feccf6684f51) +++ lams_tool_notebook/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision 37b49e5e78d2b57936d98e68f6057539472b7725) @@ -110,5 +110,6 @@ message.contentInUseSet =Modification of content is not allowed since one or more learners has attempted the activity. message.alertContentEdit =Warning: One of more learners have accessed this activity. Changing this content will result in learners getting different information. +output.desc.all.users.entries.definition.notebook =Each user's entry in Notebook #======= End labels: Exported 103 labels for en AU ===== Index: lams_tool_notebook/src/java/org/lamsfoundation/lams/tool/notebook/service/NotebookOutputFactory.java =================================================================== diff -u -r61e7bbf20d65e2ecb5e50f3154e52264003defa1 -r37b49e5e78d2b57936d98e68f6057539472b7725 --- lams_tool_notebook/src/java/org/lamsfoundation/lams/tool/notebook/service/NotebookOutputFactory.java (.../NotebookOutputFactory.java) (revision 61e7bbf20d65e2ecb5e50f3154e52264003defa1) +++ lams_tool_notebook/src/java/org/lamsfoundation/lams/tool/notebook/service/NotebookOutputFactory.java (.../NotebookOutputFactory.java) (revision 37b49e5e78d2b57936d98e68f6057539472b7725) @@ -41,8 +41,7 @@ import org.lamsfoundation.lams.tool.notebook.util.NotebookConstants; /** - * Output factory for Notebook tool. Currently it provides only one type of - * output - the entry that user provided. + * Output factory for Notebook tool. Currently it provides only one type of output - the entry that user provided. * * @author Marcin Cieslak */ @@ -55,19 +54,28 @@ public SortedMap getToolOutputDefinitions(Object toolContentObject, int definitionType) throws ToolException { SortedMap definitionMap = new TreeMap(); - if (toolContentObject != null) { - ToolOutputDefinition notebookEntryDefinition = buildStringOutputDefinition(NotebookConstants.TEXT_SEARCH_DEFINITION_NAME); - Notebook notebook = (Notebook) toolContentObject; - // adding all existing conditions - notebookEntryDefinition.setDefaultConditions(new ArrayList(notebook.getConditions())); - // if no conditions were created in the tool instance, a default condition is added; - if (notebookEntryDefinition.getDefaultConditions().isEmpty()) { - NotebookCondition defaultCondition = createDefaultComplexCondition(notebook); - notebook.getConditions().add(defaultCondition); - notebookEntryDefinition.getDefaultConditions().add(defaultCondition); + Class stringArrayClass = new String[] {}.getClass(); + switch (definitionType) { + case ToolOutputDefinition.DATA_OUTPUT_DEFINITION_TYPE_CONDITION: + if (toolContentObject != null) { + ToolOutputDefinition notebookEntryDefinition = buildStringOutputDefinition(NotebookConstants.USER_ENTRY_DEFINITION_NAME); + Notebook notebook = (Notebook) toolContentObject; + // adding all existing conditions + notebookEntryDefinition.setDefaultConditions(new ArrayList(notebook.getConditions())); + // if no conditions were created in the tool instance, a default condition is added; + if (notebookEntryDefinition.getDefaultConditions().isEmpty()) { + NotebookCondition defaultCondition = createDefaultUserEntryCondition(notebook); + notebook.getConditions().add(defaultCondition); + notebookEntryDefinition.getDefaultConditions().add(defaultCondition); + } + notebookEntryDefinition.setShowConditionNameOnly(true); + definitionMap.put(NotebookConstants.USER_ENTRY_DEFINITION_NAME, notebookEntryDefinition); } - notebookEntryDefinition.setShowConditionNameOnly(true); - definitionMap.put(NotebookConstants.TEXT_SEARCH_DEFINITION_NAME, notebookEntryDefinition); + case ToolOutputDefinition.DATA_OUTPUT_DEFINITION_TYPE_DATA_FLOW: + ToolOutputDefinition allUsersEntriesDefinition = buildComplexOutputDefinition( + NotebookConstants.ALL_USERS_ENTRIES_DEFINITION_NAME, stringArrayClass); + definitionMap.put(NotebookConstants.ALL_USERS_ENTRIES_DEFINITION_NAME, allUsersEntriesDefinition); + break; } return definitionMap; @@ -81,37 +89,35 @@ Long toolSessionId, Long learnerId) { TreeMap outputs = new TreeMap(); - // cached tool output for all text search conditions - ToolOutput notebookEntryOutput = null; + // tool output cache + TreeMap baseOutputs = new TreeMap(); if (names == null) { // output will be set for all the existing conditions Notebook notebook = notebookService.getSessionBySessionId(toolSessionId).getNotebook(); Set conditions = notebook.getConditions(); for (NotebookCondition condition : conditions) { String name = condition.getName(); - if (isTextSearchConditionName(name) && notebookEntryOutput != null) { - outputs.put(name, notebookEntryOutput); + String[] nameParts = splitConditionName(name); + if (baseOutputs.get(nameParts[0]) != null) { + outputs.put(name, baseOutputs.get(nameParts[0])); } else { ToolOutput output = getToolOutput(name, notebookService, toolSessionId, learnerId); if (output != null) { outputs.put(name, output); - if (isTextSearchConditionName(name)) { - notebookEntryOutput = output; - } + baseOutputs.put(nameParts[0], output); } } } } else { for (String name : names) { - if (isTextSearchConditionName(name) && notebookEntryOutput != null) { - outputs.put(name, notebookEntryOutput); + String[] nameParts = splitConditionName(name); + if (baseOutputs.get(nameParts[0]) != null) { + outputs.put(name, baseOutputs.get(nameParts[0])); } else { ToolOutput output = getToolOutput(name, notebookService, toolSessionId, learnerId); if (output != null) { outputs.put(name, output); - if (isTextSearchConditionName(name)) { - notebookEntryOutput = output; - } + baseOutputs.put(nameParts[0], output); } } } @@ -120,20 +126,35 @@ } - public ToolOutput getToolOutput(String name, INotebookService chatService, Long toolSessionId, Long learnerId) { - if (isTextSearchConditionName(name)) { + public ToolOutput getToolOutput(String name, INotebookService notebookService, Long toolSessionId, Long learnerId) { + String[] nameParts = splitConditionName(name); + if (NotebookConstants.USER_ENTRY_DEFINITION_NAME.equals(nameParts[0])) { // entry is loaded from DB - Notebook notebook = chatService.getSessionBySessionId(toolSessionId).getNotebook(); + Notebook notebook = notebookService.getSessionBySessionId(toolSessionId).getNotebook(); - NotebookUser user = chatService.getUserByUserIdAndSessionId(learnerId, toolSessionId); + NotebookUser user = notebookService.getUserByUserIdAndSessionId(learnerId, toolSessionId); if (user != null) { - NotebookEntry entry = chatService.getEntry(user.getEntryUID()); + NotebookEntry entry = notebookService.getEntry(user.getEntryUID()); String value = entry == null ? null : entry.getEntry(); - return new ToolOutput(name, getI18NText(NotebookConstants.TEXT_SEARCH_DEFINITION_NAME, true), value); + return new ToolOutput(name, getI18NText(NotebookConstants.USER_ENTRY_DEFINITION_NAME, true), value); } + } else if (NotebookConstants.ALL_USERS_ENTRIES_DEFINITION_NAME.equals(nameParts[0])) { + Set users = notebookService.getSessionBySessionId(toolSessionId).getNotebookUsers(); + String[] usersEntries = new String[users.size()]; + int userIndex = 0; + for (NotebookUser user : users) { + Long entryUid = user.getEntryUID(); + if (entryUid != null) { + NotebookEntry entry = notebookService.getEntry(entryUid); + usersEntries[userIndex] = entry.getEntry(); + } + userIndex++; + } + return new ToolOutput(name, getI18NText(NotebookConstants.ALL_USERS_ENTRIES_DEFINITION_NAME, true), + usersEntries, false); } return null; } @@ -143,27 +164,22 @@ return super.splitConditionName(conditionName); } - protected String buildConditionName(String uniquePart) { - return super.buildConditionName(NotebookConstants.TEXT_SEARCH_DEFINITION_NAME, uniquePart); + protected String buildUserEntryConditionName(String uniquePart) { + return super.buildConditionName(NotebookConstants.USER_ENTRY_DEFINITION_NAME, uniquePart); } - private boolean isTextSearchConditionName(String name) { - return name != null && name.startsWith(NotebookConstants.TEXT_SEARCH_DEFINITION_NAME); - } - /** - * Creates a default condition so teachers know how to use complex - * conditions for this tool. + * Creates a default condition so teachers know how to use complex conditions for this tool. * * @param notebook * content of the tool * @return default notebook condition */ - protected NotebookCondition createDefaultComplexCondition(Notebook notebook) { - String name = buildConditionName(NotebookConstants.TEXT_SEARCH_DEFINITION_NAME, notebook.getToolContentId() + protected NotebookCondition createDefaultUserEntryCondition(Notebook notebook) { + String name = buildConditionName(NotebookConstants.USER_ENTRY_DEFINITION_NAME, notebook.getToolContentId() .toString()); // Default condition checks if the text contains word "LAMS" return new NotebookCondition(null, null, 1, name, getI18NText( - NotebookConstants.TEXT_SEARCH_DEFAULT_CONDITION_DISPLAY_NAME_KEY, false), "LAMS", null, null, null); + NotebookConstants.USER_ENTRY_DEFAULT_CONDITION_DISPLAY_NAME_KEY, false), "LAMS", null, null, null); } } \ No newline at end of file Index: lams_tool_notebook/src/java/org/lamsfoundation/lams/tool/notebook/service/NotebookService.java =================================================================== diff -u -r1a5446e3a1f962f1bb831c1bbaef14acf9d3635c -r37b49e5e78d2b57936d98e68f6057539472b7725 --- lams_tool_notebook/src/java/org/lamsfoundation/lams/tool/notebook/service/NotebookService.java (.../NotebookService.java) (revision 1a5446e3a1f962f1bb831c1bbaef14acf9d3635c) +++ lams_tool_notebook/src/java/org/lamsfoundation/lams/tool/notebook/service/NotebookService.java (.../NotebookService.java) (revision 37b49e5e78d2b57936d98e68f6057539472b7725) @@ -346,7 +346,7 @@ } if (defaultContent.getConditions().isEmpty()) { defaultContent.getConditions() - .add(getNotebookOutputFactory().createDefaultComplexCondition(defaultContent)); + .add(getNotebookOutputFactory().createDefaultUserEntryCondition(defaultContent)); } return defaultContent; } @@ -644,7 +644,7 @@ } } } while (uniqueNumber == null); - return getNotebookOutputFactory().buildConditionName(uniqueNumber); + return getNotebookOutputFactory().buildUserEntryConditionName(uniqueNumber); } public void releaseConditionsFromCache(Notebook notebook) { Index: lams_tool_notebook/src/java/org/lamsfoundation/lams/tool/notebook/util/NotebookConstants.java =================================================================== diff -u -ra74ae929e1b5f6e321e7251fb5bf5f93285c5b92 -r37b49e5e78d2b57936d98e68f6057539472b7725 --- lams_tool_notebook/src/java/org/lamsfoundation/lams/tool/notebook/util/NotebookConstants.java (.../NotebookConstants.java) (revision a74ae929e1b5f6e321e7251fb5bf5f93285c5b92) +++ lams_tool_notebook/src/java/org/lamsfoundation/lams/tool/notebook/util/NotebookConstants.java (.../NotebookConstants.java) (revision 37b49e5e78d2b57936d98e68f6057539472b7725) @@ -54,8 +54,9 @@ public static final String PARAM_ORDER_ID = "orderId"; public static final String ATTR_DELETED_CONDITION_LIST = "deletedConditionList"; - public static final String TEXT_SEARCH_DEFINITION_NAME = "text.search.output.definition.notebook"; - public static final String TEXT_SEARCH_DEFAULT_CONDITION_DISPLAY_NAME_KEY = "text.search.output.definition.notebook.default.condition"; + public static final String USER_ENTRY_DEFINITION_NAME = "user.entry.output.definition.notebook"; + public static final String USER_ENTRY_DEFAULT_CONDITION_DISPLAY_NAME_KEY = "user.entry.output.definition.notebook.default.condition"; + public static final String ALL_USERS_ENTRIES_DEFINITION_NAME = "all.users.entries.definition.notebook"; public static final String SUCCESS = "success"; public static final String ERROR_MSG_CONDITION = "error.condition"; public static final String ERROR_MSG_NAME_BLANK = "error.condition.name.blank"; Index: lams_tool_pixlr/conf/language/lams/ApplicationResources.properties =================================================================== diff -u -r555f2d118ac71c71a40769aacb91adb0ba77450c -r37b49e5e78d2b57936d98e68f6057539472b7725 --- lams_tool_pixlr/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision 555f2d118ac71c71a40769aacb91adb0ba77450c) +++ lams_tool_pixlr/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision 37b49e5e78d2b57936d98e68f6057539472b7725) @@ -121,5 +121,6 @@ message.learner.saveWhenFinished =When you have finished editing your image, click file/save to return to learner. monitor.summary.td.addNotebook =Add Notebook at the end of Pixlr Activity +output.desc.image.url.definition.pixlr =Image URL from Pixlr #======= End labels: Exported 114 labels for en AU ===== Index: lams_tool_pixlr/src/java/org/lamsfoundation/lams/tool/pixlr/service/PixlrOutputFactory.java =================================================================== diff -u -r61e7bbf20d65e2ecb5e50f3154e52264003defa1 -r37b49e5e78d2b57936d98e68f6057539472b7725 --- lams_tool_pixlr/src/java/org/lamsfoundation/lams/tool/pixlr/service/PixlrOutputFactory.java (.../PixlrOutputFactory.java) (revision 61e7bbf20d65e2ecb5e50f3154e52264003defa1) +++ lams_tool_pixlr/src/java/org/lamsfoundation/lams/tool/pixlr/service/PixlrOutputFactory.java (.../PixlrOutputFactory.java) (revision 37b49e5e78d2b57936d98e68f6057539472b7725) @@ -28,12 +28,18 @@ import java.util.TreeMap; import org.lamsfoundation.lams.tool.OutputFactory; +import org.lamsfoundation.lams.tool.SimpleURL; import org.lamsfoundation.lams.tool.ToolOutput; import org.lamsfoundation.lams.tool.ToolOutputDefinition; import org.lamsfoundation.lams.tool.exception.ToolException; +import org.lamsfoundation.lams.tool.pixlr.model.Pixlr; +import org.lamsfoundation.lams.tool.pixlr.model.PixlrSession; +import org.lamsfoundation.lams.tool.pixlr.util.PixlrConstants; +import org.lamsfoundation.lams.util.Configuration; +import org.lamsfoundation.lams.util.ConfigurationKeys; /** - * Output factory for Pixlr tool. Currently it provides only one type of output - the entry that user provided. + * Output factory for Pixlr tool. Currently it provides only one type of output - the URL to the edited image. * * @author lfoxton */ @@ -45,8 +51,17 @@ @Override public SortedMap getToolOutputDefinitions(Object toolContentObject, int definitionType) throws ToolException { - SortedMap definitionMap = new TreeMap(); + TreeMap definitionMap = new TreeMap(); + switch (definitionType) { + case ToolOutputDefinition.DATA_OUTPUT_DEFINITION_TYPE_CONDITION: + break; + case ToolOutputDefinition.DATA_OUTPUT_DEFINITION_TYPE_DATA_FLOW: + ToolOutputDefinition imageUrlDefinition = buildComplexOutputDefinition( + PixlrConstants.IMAGE_URL_DEFINITION_NAME, SimpleURL.class); + definitionMap.put(PixlrConstants.IMAGE_URL_DEFINITION_NAME, imageUrlDefinition); + break; + } return definitionMap; } @@ -58,15 +73,48 @@ Long toolSessionId, Long learnerId) { TreeMap outputs = new TreeMap(); + // tool output cache + TreeMap baseOutputs = new TreeMap(); + if (names == null) { + outputs.put(PixlrConstants.IMAGE_URL_DEFINITION_NAME, getToolOutput( + PixlrConstants.IMAGE_URL_DEFINITION_NAME, pixlrService, toolSessionId, learnerId)); + } else { + for (String name : names) { + String[] nameParts = splitConditionName(name); + if (baseOutputs.get(nameParts[0]) != null) { + outputs.put(name, baseOutputs.get(nameParts[0])); + } else { + ToolOutput output = getToolOutput(name, pixlrService, toolSessionId, learnerId); + if (output != null) { + outputs.put(name, output); + baseOutputs.put(nameParts[0], output); + } + } + } + } + return outputs; } - public ToolOutput getToolOutput(String name, IPixlrService chatService, Long toolSessionId, Long learnerId) { + public ToolOutput getToolOutput(String name, IPixlrService pixlrService, Long toolSessionId, Long learnerId) { + if (name != null) { + String[] nameParts = splitConditionName(name); + if (PixlrConstants.IMAGE_URL_DEFINITION_NAME.equals(nameParts[0])) { + PixlrSession session = pixlrService.getSessionBySessionId(toolSessionId); + if (session != null) { + Pixlr pixlr = session.getPixlr(); + String serverUrl = Configuration.get(ConfigurationKeys.SERVER_URL); + String imageUrl = "javascript:var dummy = window.open('" + serverUrl + "www/images/pixlr/" + + pixlr.getImageFileName() + "','" + pixlr.getTitle() + "','resizable,width=" + + pixlr.getImageWidth() + ",height=" + pixlr.getImageHeight() + ",scrollbars')"; + + SimpleURL url = new SimpleURL(session.getPixlr().getImageFileName(), imageUrl); + return new ToolOutput(PixlrConstants.IMAGE_URL_DEFINITION_NAME, getI18NText( + PixlrConstants.IMAGE_URL_DEFINITION_NAME, true), url, false); + } + } + } return null; } - - - - } Index: lams_tool_pixlr/src/java/org/lamsfoundation/lams/tool/pixlr/util/PixlrConstants.java =================================================================== diff -u -r40cd87b86406940f074191411cb46d955e2d5325 -r37b49e5e78d2b57936d98e68f6057539472b7725 --- lams_tool_pixlr/src/java/org/lamsfoundation/lams/tool/pixlr/util/PixlrConstants.java (.../PixlrConstants.java) (revision 40cd87b86406940f074191411cb46d955e2d5325) +++ lams_tool_pixlr/src/java/org/lamsfoundation/lams/tool/pixlr/util/PixlrConstants.java (.../PixlrConstants.java) (revision 37b49e5e78d2b57936d98e68f6057539472b7725) @@ -56,16 +56,18 @@ static final String FILTER_REPLACE_TEXT = "***"; public static final String ATTR_SESSION_MAP_ID = "sessionMapID"; - + public static final String DEFAULT_IMAGE_FILE_NAME = "blank.jpg"; - + // error message keys public static final String ERROR_MSG_NOT_ALLOWED_FORMAT = "error.resource.image.not.alowed.format"; public static final String ERROR_MSG_FILE_BLANK = "error.resource.item.file.blank"; public static final String ERROR_MSG_FILE_UPLOAD = "error.file.upload.failed"; - - public static final String LAMS_WWW_PIXLR_FOLDER_URL = Configuration.get(ConfigurationKeys.SERVER_URL) + "/www/images/pixlr/"; - public static final String LAMS_PIXLR_BASE_DIR = Configuration.get(ConfigurationKeys.LAMS_EAR_DIR) + File.separator + FileUtil.LAMS_WWW_DIR - + File.separator + "images" + File.separator + "pixlr"; -} + public static final String LAMS_WWW_PIXLR_FOLDER_URL = Configuration.get(ConfigurationKeys.SERVER_URL) + + "/www/images/pixlr/"; + public static final String LAMS_PIXLR_BASE_DIR = Configuration.get(ConfigurationKeys.LAMS_EAR_DIR) + File.separator + + FileUtil.LAMS_WWW_DIR + File.separator + "images" + File.separator + "pixlr"; + + public static final String IMAGE_URL_DEFINITION_NAME = "image.url.definition.pixlr"; +} \ No newline at end of file Index: lams_tool_sbmt/conf/language/lams/ApplicationResources.properties =================================================================== diff -u -re2620c7a7a2db012e5bf7853cf61f73a07592978 -r37b49e5e78d2b57936d98e68f6057539472b7725 --- lams_tool_sbmt/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision e2620c7a7a2db012e5bf7853cf61f73a07592978) +++ lams_tool_sbmt/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision 37b49e5e78d2b57936d98e68f6057539472b7725) @@ -149,5 +149,5 @@ label.monitor.mark.notifyStudent =Notify student about marked file message.monitor.mark.confirmDeleteFile =Are you sure you want to delete this marked file? - +output.desc.submitted.items.output.definition.sbmt =Files submitted in the Submit Files tool #======= End labels: Exported 142 labels for en AU ===== Index: lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/service/SubmitFilesOutputFactory.java =================================================================== diff -u --- lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/service/SubmitFilesOutputFactory.java (revision 0) +++ lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/service/SubmitFilesOutputFactory.java (revision 37b49e5e78d2b57936d98e68f6057539472b7725) @@ -0,0 +1,132 @@ +/**************************************************************** + * 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.sbmt.service; + +import java.util.List; +import java.util.SortedMap; +import java.util.TreeMap; + +import org.lamsfoundation.lams.tool.OutputFactory; +import org.lamsfoundation.lams.tool.SimpleURL; +import org.lamsfoundation.lams.tool.ToolOutput; +import org.lamsfoundation.lams.tool.ToolOutputDefinition; +import org.lamsfoundation.lams.tool.exception.ToolException; +import org.lamsfoundation.lams.tool.sbmt.dto.FileDetailsDTO; +import org.lamsfoundation.lams.tool.sbmt.dto.SubmitUserDTO; +import org.lamsfoundation.lams.tool.sbmt.util.SbmtConstants; +import org.lamsfoundation.lams.util.Configuration; +import org.lamsfoundation.lams.util.ConfigurationKeys; + +public class SubmitFilesOutputFactory extends OutputFactory { + + /** + * {@inheritDoc} + */ + @Override + public SortedMap getToolOutputDefinitions(Object toolContentObject, int definitionType) + throws ToolException { + TreeMap definitionMap = new TreeMap(); + Class arrayOfSimpleUrlArrayClass = SimpleURL[][].class; + switch (definitionType) { + case ToolOutputDefinition.DATA_OUTPUT_DEFINITION_TYPE_CONDITION: + break; + case ToolOutputDefinition.DATA_OUTPUT_DEFINITION_TYPE_DATA_FLOW: + ToolOutputDefinition itemsSubmittedDefinition = buildComplexOutputDefinition( + SbmtConstants.SUBMITTED_ITEMS_DEFINITION_NAME, arrayOfSimpleUrlArrayClass); + definitionMap.put(SbmtConstants.SUBMITTED_ITEMS_DEFINITION_NAME, itemsSubmittedDefinition); + break; + } + return definitionMap; + } + + /** + * Follows {@link PixlrService#getToolOutput(List, Long, Long)}. + * + */ + public SortedMap getToolOutput(List names, ISubmitFilesService submitFilesService, + Long toolSessionId, Long learnerId) { + + TreeMap outputs = new TreeMap(); + // tool output cache + TreeMap baseOutputs = new TreeMap(); + if (names == null) { + outputs.put(SbmtConstants.SUBMITTED_ITEMS_DEFINITION_NAME, getToolOutput( + SbmtConstants.SUBMITTED_ITEMS_DEFINITION_NAME, submitFilesService, toolSessionId, learnerId)); + } else { + for (String name : names) { + String[] nameParts = splitConditionName(name); + if (baseOutputs.get(nameParts[0]) != null) { + outputs.put(name, baseOutputs.get(nameParts[0])); + } else { + ToolOutput output = getToolOutput(name, submitFilesService, toolSessionId, learnerId); + if (output != null) { + outputs.put(name, output); + baseOutputs.put(nameParts[0], output); + } + } + } + } + + return outputs; + + } + + public ToolOutput getToolOutput(String name, ISubmitFilesService submitFilesService, Long toolSessionId, + Long learnerId) { + if (name != null) { + String[] nameParts = splitConditionName(name); + if (SbmtConstants.SUBMITTED_ITEMS_DEFINITION_NAME.equals(nameParts[0])) { + + SortedMap> filesUploadedBySession = submitFilesService + .getFilesUploadedBySession(toolSessionId, null); + if (!filesUploadedBySession.isEmpty()) { + String serverUrl = Configuration.get(ConfigurationKeys.SERVER_URL); + SimpleURL[][] usersAndUrls = new SimpleURL[filesUploadedBySession.keySet().size()][]; + int userIndex = 0; + for (SubmitUserDTO userDTO : filesUploadedBySession.keySet()) { + List files = filesUploadedBySession.get(userDTO); + if (!files.isEmpty()) { + SimpleURL[] urlArray = new SimpleURL[files.size()]; + int urlIndex = 0; + for (FileDetailsDTO filesDetailsDTO : files) { + String fileUrl = "javascript:var dummy = window.open('" + serverUrl + "download/?uuid=" + + filesDetailsDTO.getUuID() + "&preferDownload=false','" + + filesDetailsDTO.getFileDescription() + "','resizable,scrollbars')"; + + SimpleURL url = new SimpleURL(filesDetailsDTO.getFileDescription(), fileUrl); + urlArray[urlIndex] = url; + urlIndex++; + } + usersAndUrls[userIndex] = urlArray; + } + userIndex++; + } + return new ToolOutput(SbmtConstants.SUBMITTED_ITEMS_DEFINITION_NAME, getI18NText( + SbmtConstants.SUBMITTED_ITEMS_DEFINITION_NAME, true), usersAndUrls, false); + } + } + } + return null; + } +} Index: lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/service/SubmitFilesService.java =================================================================== diff -u -r1a5446e3a1f962f1bb831c1bbaef14acf9d3635c -r37b49e5e78d2b57936d98e68f6057539472b7725 --- lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/service/SubmitFilesService.java (.../SubmitFilesService.java) (revision 1a5446e3a1f962f1bb831c1bbaef14acf9d3635c) +++ lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/service/SubmitFilesService.java (.../SubmitFilesService.java) (revision 37b49e5e78d2b57936d98e68f6057539472b7725) @@ -145,6 +145,8 @@ private IGradebookService gradebookService; + private SubmitFilesOutputFactory submitFilesOutputFactory; + private class FileDtoComparator implements Comparator { public int compare(FileDetailsDTO o1, FileDetailsDTO o2) { @@ -365,7 +367,11 @@ */ public SortedMap getToolOutputDefinitions(Long toolContentId, int definitionType) throws ToolException { - return new TreeMap(); + SubmitFilesContent content = getSubmitFilesContent(toolContentId); + if (content == null) { + content = getDefaultSubmit(); + } + return getSubmitFilesOutputFactory().getToolOutputDefinitions(content, definitionType); } /* @@ -581,7 +587,7 @@ * java.lang.Long) */ public SortedMap getToolOutput(List names, Long toolSessionId, Long learnerId) { - return new TreeMap(); + return getSubmitFilesOutputFactory().getToolOutput(names, this, toolSessionId, learnerId); } /** @@ -591,7 +597,7 @@ * java.lang.Long) */ public ToolOutput getToolOutput(String name, Long toolSessionId, Long learnerId) { - return null; + return getSubmitFilesOutputFactory().getToolOutput(name, this, toolSessionId, learnerId); } /** @@ -1224,7 +1230,15 @@ } public Class[] getSupportedToolOutputDefinitionClasses(int definitionType) { - return null; + return getSubmitFilesOutputFactory().getSupportedDefinitionClasses(definitionType); } + + public SubmitFilesOutputFactory getSubmitFilesOutputFactory() { + return submitFilesOutputFactory; + } + + public void setSubmitFilesOutputFactory(SubmitFilesOutputFactory submitFilesOutputFactory) { + this.submitFilesOutputFactory = submitFilesOutputFactory; + } } \ No newline at end of file Index: lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/submitFilesApplicationContext.xml =================================================================== diff -u -racc8d2acf5b6b0002e0c8129947040a779ab4077 -r37b49e5e78d2b57936d98e68f6057539472b7725 --- lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/submitFilesApplicationContext.xml (.../submitFilesApplicationContext.xml) (revision acc8d2acf5b6b0002e0c8129947040a779ab4077) +++ lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/submitFilesApplicationContext.xml (.../submitFilesApplicationContext.xml) (revision 37b49e5e78d2b57936d98e68f6057539472b7725) @@ -40,6 +40,10 @@ + + + + @@ -58,6 +62,7 @@ + Index: lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/util/SbmtConstants.java =================================================================== diff -u -r02696b4b5a761a0fcc9f72a677d3599656ffb725 -r37b49e5e78d2b57936d98e68f6057539472b7725 --- lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/util/SbmtConstants.java (.../SbmtConstants.java) (revision 02696b4b5a761a0fcc9f72a677d3599656ffb725) +++ lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/util/SbmtConstants.java (.../SbmtConstants.java) (revision 37b49e5e78d2b57936d98e68f6057539472b7725) @@ -27,56 +27,57 @@ public class SbmtConstants { - public static final String TOOL_SIGNATURE = "lasbmt11"; + public static final String TOOL_SIGNATURE = "lasbmt11"; - public static final String DEFAULT_TITLE = "Submit Files Title"; + public static final String DEFAULT_TITLE = "Submit Files Title"; - public static final String AUTHORING_DTO = "authoring"; + public static final String AUTHORING_DTO = "authoring"; - // public static final String TOOL_SESSION_ID = "toolSessionID"; - // public static final String TOOL_CONTENT_ID = "toolContentID"; - public static final String USER_ID = "userID"; + // public static final String TOOL_SESSION_ID = "toolSessionID"; + // public static final String TOOL_CONTENT_ID = "toolContentID"; + public static final String USER_ID = "userID"; - public static final String ATTACHMENT_LIST = "attachmentList"; + public static final String ATTACHMENT_LIST = "attachmentList"; - public static final String DELETED_ATTACHMENT_LIST = "deletedAttachmentList"; + public static final String DELETED_ATTACHMENT_LIST = "deletedAttachmentList"; - public static final String PAGE_EDITABLE = "isPageEditable"; + public static final String PAGE_EDITABLE = "isPageEditable"; - public static final String ATTR_FILE_TYPE_FLAG = "fileTypeFlag"; + public static final String ATTR_FILE_TYPE_FLAG = "fileTypeFlag"; - public static final String ATTR_SESSION_MAP_ID = "sessionMapID"; + public static final String ATTR_SESSION_MAP_ID = "sessionMapID"; - public static final String ATTR_USER_UID = "userUid"; + public static final String ATTR_USER_UID = "userUid"; - public static final String SUCCESS = "success"; + public static final String SUCCESS = "success"; - public static final String ATTR_FINISH_LOCK = "finishLock"; + public static final String ATTR_FINISH_LOCK = "finishLock"; - public static final String ATTR_REFLECTION_ON = "reflectOn"; + public static final String ATTR_REFLECTION_ON = "reflectOn"; - public static final String ATTR_REFLECTION_INSTRUCTION = "reflectInstructions"; + public static final String ATTR_REFLECTION_INSTRUCTION = "reflectInstructions"; - public static final String ATTR_TITLE = "title"; + public static final String ATTR_TITLE = "title"; - public static final String ATTR_INSTRUCTION = "instruction"; + public static final String ATTR_INSTRUCTION = "instruction"; - public static final String ATTR_LOCK_ON_FINISH = "lockOnFinish"; + public static final String ATTR_LOCK_ON_FINISH = "lockOnFinish"; - public static final String PARAM_MIN_UPLOAD = "minUpload"; + public static final String PARAM_MIN_UPLOAD = "minUpload"; - public static final String ATTR_LIMIT_UPLOAD = "limitUpload"; + public static final String ATTR_LIMIT_UPLOAD = "limitUpload"; - public static final String ATTR_LIMIT_UPLOAD_NUMBER = "limitUploadNumber"; + public static final String ATTR_LIMIT_UPLOAD_NUMBER = "limitUploadNumber"; - public static final Object ATTR_ARRIVE_LIMIT = "arriveLimit"; + public static final Object ATTR_ARRIVE_LIMIT = "arriveLimit"; - public static final String ATTR_USER_FINISHED = "userFinished"; + public static final String ATTR_USER_FINISHED = "userFinished"; - public static final String EVENT_NAME_NOTIFY_LEARNERS_ON_MARK_RELEASE = "notify_learners_on_mark_release"; + public static final String EVENT_NAME_NOTIFY_LEARNERS_ON_MARK_RELEASE = "notify_learners_on_mark_release"; - public static final String EVENT_NAME_NOTIFY_TEACHERS_ON_FILE_SUBMIT = "notify_teachers_on_file_submit"; - - public static final String EVENT_NAME_NOTIFY_LEARNERS_ON_MARKED_FILE = "notify_learners_on_marked_file"; - + public static final String EVENT_NAME_NOTIFY_TEACHERS_ON_FILE_SUBMIT = "notify_teachers_on_file_submit"; + + public static final String EVENT_NAME_NOTIFY_LEARNERS_ON_MARKED_FILE = "notify_learners_on_marked_file"; + + public static final String SUBMITTED_ITEMS_DEFINITION_NAME = "submitted.items.output.definition.sbmt"; } Index: lams_tool_vote/src/java/org/lamsfoundation/lams/tool/vote/service/VoteOutputFactory.java =================================================================== diff -u -r1a5446e3a1f962f1bb831c1bbaef14acf9d3635c -r37b49e5e78d2b57936d98e68f6057539472b7725 --- lams_tool_vote/src/java/org/lamsfoundation/lams/tool/vote/service/VoteOutputFactory.java (.../VoteOutputFactory.java) (revision 1a5446e3a1f962f1bb831c1bbaef14acf9d3635c) +++ lams_tool_vote/src/java/org/lamsfoundation/lams/tool/vote/service/VoteOutputFactory.java (.../VoteOutputFactory.java) (revision 37b49e5e78d2b57936d98e68f6057539472b7725) @@ -33,6 +33,7 @@ import org.lamsfoundation.lams.learningdesign.BranchCondition; import org.lamsfoundation.lams.tool.OutputFactory; import org.lamsfoundation.lams.tool.OutputType; +import org.lamsfoundation.lams.tool.SimpleURL; import org.lamsfoundation.lams.tool.ToolOutput; import org.lamsfoundation.lams.tool.ToolOutputDefinition; import org.lamsfoundation.lams.tool.vote.VoteUtils; @@ -240,9 +241,13 @@ if (ToolOutputDefinition.DATA_OUTPUT_DEFINITION_TYPE_DATA_FLOW == definitionType) { // currently array of strings and array of arrays of strings are supported Class stringArrayClass = String[].class; - Class arrayOfStringArrays = String[][].class; - return new Class[] { stringArrayClass, arrayOfStringArrays }; + Class stringClass = String.class; + Class simpleUrlArrayClass = SimpleURL[].class; + Class arrayOfSimpleUrlArrayClass = SimpleURL[][].class; + Class simpleUrlClass = SimpleURL.class; + return new Class[] { stringArrayClass, arrayOfStringArrays, stringClass, simpleUrlArrayClass, + arrayOfSimpleUrlArrayClass, simpleUrlClass }; } return super.getSupportedDefinitionClasses(definitionType); } Index: lams_tool_vote/src/java/org/lamsfoundation/lams/tool/vote/web/LearningUtil.java =================================================================== diff -u -r1a5446e3a1f962f1bb831c1bbaef14acf9d3635c -r37b49e5e78d2b57936d98e68f6057539472b7725 --- lams_tool_vote/src/java/org/lamsfoundation/lams/tool/vote/web/LearningUtil.java (.../LearningUtil.java) (revision 1a5446e3a1f962f1bb831c1bbaef14acf9d3635c) +++ lams_tool_vote/src/java/org/lamsfoundation/lams/tool/vote/web/LearningUtil.java (.../LearningUtil.java) (revision 37b49e5e78d2b57936d98e68f6057539472b7725) @@ -31,8 +31,10 @@ import javax.servlet.http.HttpServletRequest; +import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import org.lamsfoundation.lams.learningdesign.DataFlowObject; +import org.lamsfoundation.lams.tool.SimpleURL; import org.lamsfoundation.lams.tool.ToolOutput; import org.lamsfoundation.lams.tool.vote.VoteAppConstants; import org.lamsfoundation.lams.tool.vote.VoteComparator; @@ -324,6 +326,7 @@ DataFlowObject dataFlowObject = voteService.getAssignedDataFlowObject(voteContent.getVoteContentId()); ToolOutput toolInput = voteService.getToolInput(voteContent.getVoteContentId(), VoteUtils.getUserId() .intValue()); + Object value = toolInput.getValue().getComplex(); // The input is an array (users) of arrays of strings (their answers) if (value instanceof String[][]) { @@ -336,13 +339,12 @@ if (userAnswers != null) { if (maxInputs != null && maxInputs > 0 && inputCount >= maxInputs) { // if we reached the maximum number of inputs, i.e. number of students that will be taken - // into - // account + // into account break; } boolean anyAnswersAdded = false; for (String questionText : userAnswers) { - if (questionText != null) { + if (!StringUtils.isBlank(questionText)) { VoteQueContent nomination = new VoteQueContent(); nomination.setDisplayOrder(nominationIndex); nomination.setMcContent(voteContent); @@ -363,17 +365,111 @@ // the input is a list of strings (questions, for example) int nominationIndex = voteContent.getVoteQueContents().size() + 1; String[] userAnswers = (String[]) value; + Short maxInputs = voteContent.getMaxInputs(); + short inputCount = 0; for (String questionText : userAnswers) { - VoteQueContent nomination = new VoteQueContent(); - nomination.setDisplayOrder(nominationIndex); - nomination.setMcContent(voteContent); - nomination.setQuestion(questionText); - voteService.saveOrUpdateVoteQueContent(nomination); - voteContent.getVoteQueContents().add(nomination); - nominationIndex++; + if (maxInputs != null && maxInputs > 0 && inputCount >= maxInputs) { + // if we reached the maximum number of inputs, i.e. number of students that will be taken + // into account + break; + } + + if (!StringUtils.isBlank(questionText)) { + VoteQueContent nomination = new VoteQueContent(); + nomination.setDisplayOrder(nominationIndex); + nomination.setMcContent(voteContent); + nomination.setQuestion(questionText); + voteService.saveOrUpdateVoteQueContent(nomination); + voteContent.getVoteQueContents().add(nomination); + nominationIndex++; + inputCount++; + } } + } else if (value instanceof String && !StringUtils.isBlank((String) value)) { + int nominationIndex = voteContent.getVoteQueContents().size() + 1; + VoteQueContent nomination = new VoteQueContent(); + nomination.setDisplayOrder(nominationIndex); + nomination.setMcContent(voteContent); + nomination.setQuestion((String) value); + voteService.saveOrUpdateVoteQueContent(nomination); + voteContent.getVoteQueContents().add(nomination); + } + if (value instanceof SimpleURL[][]) { + if (value != null) { + SimpleURL[][] usersAndUrls = (SimpleURL[][]) value; + int nominationIndex = voteContent.getVoteQueContents().size() + 1; + Short maxInputs = voteContent.getMaxInputs(); + short inputCount = 0; + for (SimpleURL[] userUrls : usersAndUrls) { + if (userUrls != null) { + if (maxInputs != null && maxInputs > 0 && inputCount >= maxInputs) { + // if we reached the maximum number of inputs, i.e. number of students that will be taken + // into account + break; + } + boolean anyAnswersAdded = false; + for (SimpleURL url : userUrls) { + if (url != null) { + VoteQueContent nomination = new VoteQueContent(); + nomination.setDisplayOrder(nominationIndex); + nomination.setMcContent(voteContent); + String link = "" + url.getNameToDisplay() + ""; + nomination.setQuestion(link); + + voteService.saveOrUpdateVoteQueContent(nomination); + voteContent.getVoteQueContents().add(nomination); + nominationIndex++; + anyAnswersAdded = true; + } + } + if (anyAnswersAdded) { + inputCount++; + } + } + } + } } + + else if (value instanceof SimpleURL[]) { + // the input is a list of strings (questions, for example) + int nominationIndex = voteContent.getVoteQueContents().size() + 1; + SimpleURL[] userUrls = (SimpleURL[]) value; + Short maxInputs = voteContent.getMaxInputs(); + short inputCount = 0; + for (SimpleURL url : userUrls) { + if (maxInputs != null && maxInputs > 0 && inputCount >= maxInputs) { + // if we reached the maximum number of inputs, i.e. number of students that will be taken + // into account + break; + } + if (url != null) { + VoteQueContent nomination = new VoteQueContent(); + nomination.setDisplayOrder(nominationIndex); + nomination.setMcContent(voteContent); + + String link = "" + url.getNameToDisplay() + ""; + nomination.setQuestion(link); + + voteService.saveOrUpdateVoteQueContent(nomination); + voteContent.getVoteQueContents().add(nomination); + nominationIndex++; + inputCount++; + } + } + } else if (value instanceof SimpleURL) { + int nominationIndex = voteContent.getVoteQueContents().size() + 1; + VoteQueContent nomination = new VoteQueContent(); + nomination.setDisplayOrder(nominationIndex); + + SimpleURL url = (SimpleURL) value; + String link = "" + url.getNameToDisplay() + ""; + nomination.setQuestion(link); + + nomination.setMcContent(voteContent); + voteService.saveOrUpdateVoteQueContent(nomination); + voteContent.getVoteQueContents().add(nomination); + } } } \ No newline at end of file