Ticket
to login and access the Content Repository.
+ *
+ * A valid ticket is needed in order to access the content from the
+ * repository. This method would be called evertime the tool needs to
+ * upload/download files from the content repository.
+ *
+ * @return ITicket The ticket for repostory access
+ * @throws SubmitFilesException
+ */
+ private ITicket getRepositoryLoginTicket() throws ChatException {
+ repositoryService = RepositoryProxy.getRepositoryService();
+ ICredentials credentials = new SimpleCredentials(
+ ChatToolContentHandler.repositoryUser,
+ ChatToolContentHandler.repositoryId);
+ try {
+ ITicket ticket = repositoryService.login(credentials,
+ ChatToolContentHandler.repositoryWorkspaceName);
+ return ticket;
+ } catch (AccessDeniedException ae) {
+ throw new ChatException("Access Denied to repository."
+ + ae.getMessage());
+ } catch (WorkspaceNotFoundException we) {
+ throw new ChatException("Workspace not found."
+ + we.getMessage());
+ } catch (LoginException e) {
+ throw new ChatException("Login failed." + e.getMessage());
+ }
+ }
+
/* ********** Used by Spring to "inject" the linked objects ************* */
public IChatAttachmentDAO getChatAttachmentDAO() {
@@ -249,5 +407,4 @@
public void setLearnerService(ILearnerService learnerService) {
this.learnerService = learnerService;
}
-
}
Index: lams_tool_chat/src/java/org/lamsfoundation/lams/tool/chat/service/IChatService.java
===================================================================
diff -u -r57a8fd80863308a6aae133850dbe2de4acd15abf -rb32ded72d955763a9b49e33e2dc2ab195d83564b
--- lams_tool_chat/src/java/org/lamsfoundation/lams/tool/chat/service/IChatService.java (.../IChatService.java) (revision 57a8fd80863308a6aae133850dbe2de4acd15abf)
+++ lams_tool_chat/src/java/org/lamsfoundation/lams/tool/chat/service/IChatService.java (.../IChatService.java) (revision b32ded72d955763a9b49e33e2dc2ab195d83564b)
@@ -23,12 +23,74 @@
/* $$Id$$ */
package org.lamsfoundation.lams.tool.chat.service;
+import org.apache.struts.upload.FormFile;
+import org.lamsfoundation.lams.tool.chat.model.Chat;
+import org.lamsfoundation.lams.tool.chat.model.ChatAttachment;
-
/**
* Defines the services available to the web layer from the Chat Service
*/
public interface IChatService {
+ /**
+ * Makes a copy of the default content and assigns it a newContentID
+ *
+ * @params newContentID
+ * @return
+ */
+ public Chat copyDefaultContent(Long newContentID);
-
-}
+ /**
+ * Returns an instance of the Chat tools default content.
+ *
+ * @return
+ */
+ public Chat getDefaultContent();
+
+ /**
+ *
+ * @param toolSignature
+ * @return
+ */
+ public Long getToolDefaultContentIdBySignature(String toolSignature);
+
+ /**
+ *
+ * @param toolContentID
+ * @return
+ */
+ public Chat getChatByContentId(Long toolContentID);
+
+ /**
+ *
+ *
+ * @param toolContentId
+ * @param file
+ * @param type
+ * @return
+ */
+ public ChatAttachment uploadFileToContent(Long toolContentId, FormFile file, String type);
+
+ /**
+ *
+ * @param uuid
+ * @param versionID
+ */
+ public void deleteFromRepository(Long uuid, Long versionID);
+
+ /**
+ *
+ * @param contentID
+ * @param uuid
+ * @param versionID
+ * @param type
+ */
+ public void deleteInstructionFile(Long contentID, Long uuid, Long versionID, String type);
+
+ /*
+ *
+ */
+ public void saveOrUpdateContent(Chat persistContent);
+
+
+
+}
\ No newline at end of file
Index: lams_tool_chat/src/java/org/lamsfoundation/lams/tool/chat/util/ChatConstants.java
===================================================================
diff -u -r57a8fd80863308a6aae133850dbe2de4acd15abf -rb32ded72d955763a9b49e33e2dc2ab195d83564b
--- lams_tool_chat/src/java/org/lamsfoundation/lams/tool/chat/util/ChatConstants.java (.../ChatConstants.java) (revision 57a8fd80863308a6aae133850dbe2de4acd15abf)
+++ lams_tool_chat/src/java/org/lamsfoundation/lams/tool/chat/util/ChatConstants.java (.../ChatConstants.java) (revision b32ded72d955763a9b49e33e2dc2ab195d83564b)
@@ -26,4 +26,9 @@
public interface ChatConstants {
public static final String TOOL_SIGNATURE = "lachat11";
public static final Integer COMPLETED = new Integer(1);
+ public static final String AUTHORING_DEFAULT_TAB = "1";
+ public static final String ATTACHMENT_LIST = "attachmentList";
+ public static final String DELETED_ATTACHMENT_LIST = "deletedAttachmentList";
+ public static final String AUTH_SESSION_ID_COUNTER = "authoringSessionIdCounter";
+ public static final String AUTH_SESSION_ID = "authoringSessionId";
}
Index: lams_tool_chat/src/java/org/lamsfoundation/lams/tool/chat/util/ChatException.java
===================================================================
diff -u -r57a8fd80863308a6aae133850dbe2de4acd15abf -rb32ded72d955763a9b49e33e2dc2ab195d83564b
--- lams_tool_chat/src/java/org/lamsfoundation/lams/tool/chat/util/ChatException.java (.../ChatException.java) (revision 57a8fd80863308a6aae133850dbe2de4acd15abf)
+++ lams_tool_chat/src/java/org/lamsfoundation/lams/tool/chat/util/ChatException.java (.../ChatException.java) (revision b32ded72d955763a9b49e33e2dc2ab195d83564b)
@@ -30,6 +30,11 @@
*/
public class ChatException extends RuntimeException {
+ /**
+ *
+ */
+ private static final long serialVersionUID = -5518806968051758859L;
+
public ChatException(String message) {
super(message);
}
Index: lams_tool_chat/src/java/org/lamsfoundation/lams/tool/chat/util/ChatToolContentHandler.java
===================================================================
diff -u -r57a8fd80863308a6aae133850dbe2de4acd15abf -rb32ded72d955763a9b49e33e2dc2ab195d83564b
--- lams_tool_chat/src/java/org/lamsfoundation/lams/tool/chat/util/ChatToolContentHandler.java (.../ChatToolContentHandler.java) (revision 57a8fd80863308a6aae133850dbe2de4acd15abf)
+++ lams_tool_chat/src/java/org/lamsfoundation/lams/tool/chat/util/ChatToolContentHandler.java (.../ChatToolContentHandler.java) (revision b32ded72d955763a9b49e33e2dc2ab195d83564b)
@@ -30,36 +30,46 @@
*/
public class ChatToolContentHandler extends ToolContentHandler {
- private static String repositoryWorkspaceName = "chatworkspace";
- private static String repositoryUser = "chat";
- private static char[] repositoryId = {'l','a','m','s','-','e','x'};
+ // TODO these three fields were changed to public, since accessor methods
+ // cannot be made static. Check if we can do this a better way.
+ public static String repositoryWorkspaceName = "chatworkspace";
- /**
- *
- */
- public ChatToolContentHandler() {
- super();
- }
+ public static String repositoryUser = "chat";
- /* (non-Javadoc)
- * @see org.lamsfoundation.lams.contentrepository.client.ToolContentHandler#getRepositoryWorkspaceName()
- */
- public String getRepositoryWorkspaceName() {
- return repositoryWorkspaceName;
- }
+ public static char[] repositoryId = { 'l', 'a', 'm', 's', '-', 'e', 'x' };
- /* (non-Javadoc)
- * @see org.lamsfoundation.lams.contentrepository.client.ToolContentHandler#getRepositoryUser()
- */
- public String getRepositoryUser() {
- return repositoryUser;
- }
+ /**
+ *
+ */
+ public ChatToolContentHandler() {
+ super();
+ }
- /* (non-Javadoc)
- * @see org.lamsfoundation.lams.contentrepository.client.ToolContentHandler#getRepositoryId()
- */
- public char[] getRepositoryId() {
- return repositoryId;
- }
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.lamsfoundation.lams.contentrepository.client.ToolContentHandler#getRepositoryWorkspaceName()
+ */
+ public String getRepositoryWorkspaceName() {
+ return repositoryWorkspaceName;
+ }
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.lamsfoundation.lams.contentrepository.client.ToolContentHandler#getRepositoryUser()
+ */
+ public String getRepositoryUser() {
+ return repositoryUser;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.lamsfoundation.lams.contentrepository.client.ToolContentHandler#getRepositoryId()
+ */
+ public char[] getRepositoryId() {
+ return repositoryId;
+ }
+
}
Index: lams_tool_chat/src/java/org/lamsfoundation/lams/tool/chat/web/actions/AuthoringAction.java
===================================================================
diff -u -r57a8fd80863308a6aae133850dbe2de4acd15abf -rb32ded72d955763a9b49e33e2dc2ab195d83564b
--- lams_tool_chat/src/java/org/lamsfoundation/lams/tool/chat/web/actions/AuthoringAction.java (.../AuthoringAction.java) (revision 57a8fd80863308a6aae133850dbe2de4acd15abf)
+++ lams_tool_chat/src/java/org/lamsfoundation/lams/tool/chat/web/actions/AuthoringAction.java (.../AuthoringAction.java) (revision b32ded72d955763a9b49e33e2dc2ab195d83564b)
@@ -23,31 +23,393 @@
/* $$Id$$ */
package org.lamsfoundation.lams.tool.chat.web.actions;
+import java.util.Date;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
-import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
+import org.apache.struts.upload.FormFile;
+import org.lamsfoundation.lams.contentrepository.client.IToolContentHandler;
+import org.lamsfoundation.lams.tool.chat.beans.AuthoringSessionBean;
+import org.lamsfoundation.lams.tool.chat.model.Chat;
+import org.lamsfoundation.lams.tool.chat.model.ChatAttachment;
+import org.lamsfoundation.lams.tool.chat.service.ChatServiceProxy;
+import org.lamsfoundation.lams.tool.chat.service.IChatService;
+import org.lamsfoundation.lams.tool.chat.util.ChatConstants;
+import org.lamsfoundation.lams.tool.chat.web.forms.AuthoringForm;
+import org.lamsfoundation.lams.util.WebUtil;
+import org.lamsfoundation.lams.web.action.LamsDispatchAction;
+import org.lamsfoundation.lams.web.util.AttributeNames;
/**
* @author
* @version
*
- * @struts.action path="/authoring"
- *
- * @struts.action-forward name="success" path="tiles:/authoring/main"
- * @struts.action-forward name="test" path="/pages/test.html"
+ * @struts.action path="/authoring" name="authoringForm" parameter="dispatch"
+ * scope="request" validate="false"
+ *
+ * @struts.action-forward name="success" path="tiles:/authoring/main"
*/
-public class AuthoringAction extends Action {
+public class AuthoringAction extends LamsDispatchAction {
- private static Logger log = Logger.getLogger(AuthoringAction.class);
+ private static Logger logger = Logger.getLogger(AuthoringAction.class);
- public ActionForward execute(ActionMapping mapping, ActionForm form,
- HttpServletRequest request, HttpServletResponse response)
- throws Exception {
- // TODO Auto-generated method stub
- return mapping.findForward("success"); }
-}
+ public IChatService chatService;
+
+ /**
+ * Default method when no dispatch parameter is specified. It is expected
+ * that the parameter toolContentID
will be passed in. This
+ * will be used to retrieve content for this tool.
+ *
+ */
+ protected ActionForward unspecified(ActionMapping mapping, ActionForm form,
+ HttpServletRequest request, HttpServletResponse response) {
+
+ // set up the form.
+ AuthoringForm authForm = (AuthoringForm) form;
+
+ // Extract toolContentID from parameters.
+ Long toolContentID = new Long(WebUtil.readLongParam(request,
+ AttributeNames.PARAM_TOOL_CONTENT_ID));
+ if (logger.isDebugEnabled()) {
+ logger.debug("entering method unspecified: toolContentID = "
+ + toolContentID);
+ }
+
+ // create a new authoringSessionBean and add to session
+ AuthoringSessionBean authSession = new AuthoringSessionBean();
+ String id = ChatConstants.AUTH_SESSION_ID
+ + createAuthSessionId(request.getSession());
+ authSession.setAuthSessionId(id);
+ request.getSession().setAttribute(id, authSession);
+
+ // set up chatService
+ if (chatService == null) {
+ chatService = ChatServiceProxy.getChatService(this.getServlet()
+ .getServletContext());
+ }
+
+ // retrieving Chat with given toolContentID
+ Chat chat = chatService.getChatByContentId(toolContentID);
+ if (chat == null) {
+ chat = chatService.copyDefaultContent(toolContentID);
+ chat.setCreateDate(new Date());
+ chatService.saveOrUpdateContent(chat);
+ // TODO NOTE: this causes DB orphans when LD not saved.
+ }
+
+ // populating the AuthoringForm using Chat content
+ populateAuthForm((AuthoringForm) form, chat);
+ resetAuthSession(authSession, chat);
+ authForm.setAuthSession(authSession);
+ authForm.setAuthSessionId(authSession.getAuthSessionId());
+ return mapping.findForward("success");
+ }
+
+ private synchronized Long createAuthSessionId(HttpSession httpSession) {
+ Long authSessionId = (Long) httpSession
+ .getAttribute(ChatConstants.AUTH_SESSION_ID_COUNTER);
+ if (authSessionId == null) {
+ authSessionId = 1L;
+ httpSession.setAttribute(ChatConstants.AUTH_SESSION_ID_COUNTER,
+ authSessionId);
+ } else {
+ authSessionId++;
+ }
+ return authSessionId;
+ }
+
+ public ActionForward updateContent(ActionMapping mapping, ActionForm form,
+ HttpServletRequest request, HttpServletResponse response) {
+ // Local History 10:29, started change.
+ // TODO need error checking.
+ AuthoringForm authForm = (AuthoringForm) form;
+
+ // retrieving authoring session bean
+ AuthoringSessionBean authSession = (AuthoringSessionBean) request
+ .getSession().getAttribute(authForm.getAuthSessionId());
+
+ // retrieve the content.
+ if (chatService == null) {
+ chatService = ChatServiceProxy.getChatService(this.getServlet()
+ .getServletContext());
+ }
+ Chat content = chatService.getChatByContentId(authForm
+ .getToolContentID());
+
+ // copy form inputs to content
+ populateChat(content, authForm);
+
+ // adding unsaved uploaded files.
+ Set attachments = content.getChatAttachments();
+ if (attachments == null) {
+ attachments = new HashSet();
+ }
+ attachments.addAll(authSession.getUnsavedOnlineFilesList());
+ attachments.addAll(authSession.getUnsavedOfflineFilesList());
+
+ // Removing attachments marked for deletion.
+ List