Index: lams_tool_chat/src/java/org/lamsfoundation/lams/tool/chat/service/ChatService.java
===================================================================
diff -u -rf13d09ffa7205d8242a15785ff5e9d933a372605 -ra097e00efc002b4c2ab226d0c24793422fff42dd
--- lams_tool_chat/src/java/org/lamsfoundation/lams/tool/chat/service/ChatService.java (.../ChatService.java) (revision f13d09ffa7205d8242a15785ff5e9d933a372605)
+++ lams_tool_chat/src/java/org/lamsfoundation/lams/tool/chat/service/ChatService.java (.../ChatService.java) (revision a097e00efc002b4c2ab226d0c24793422fff42dd)
@@ -56,10 +56,12 @@
import org.lamsfoundation.lams.tool.ToolSessionManager;
import org.lamsfoundation.lams.tool.chat.dao.IChatAttachmentDAO;
import org.lamsfoundation.lams.tool.chat.dao.IChatDAO;
+import org.lamsfoundation.lams.tool.chat.dao.IChatMessageDAO;
import org.lamsfoundation.lams.tool.chat.dao.IChatSessionDAO;
import org.lamsfoundation.lams.tool.chat.dao.IChatUserDAO;
import org.lamsfoundation.lams.tool.chat.model.Chat;
import org.lamsfoundation.lams.tool.chat.model.ChatAttachment;
+import org.lamsfoundation.lams.tool.chat.model.ChatMessage;
import org.lamsfoundation.lams.tool.chat.model.ChatSession;
import org.lamsfoundation.lams.tool.chat.model.ChatUser;
import org.lamsfoundation.lams.tool.chat.util.ChatConstants;
@@ -70,6 +72,9 @@
import org.lamsfoundation.lams.tool.exception.ToolException;
import org.lamsfoundation.lams.tool.service.ILamsToolService;
import org.lamsfoundation.lams.usermanagement.dto.UserDTO;
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
/**
* An implementation of the NoticeboardService interface.
@@ -89,6 +94,8 @@
private IChatUserDAO chatUserDAO = null;
+ private IChatMessageDAO chatMessageDAO = null;
+
private IChatAttachmentDAO chatAttachmentDAO = null;
private ILearnerService learnerService;
@@ -103,7 +110,7 @@
super();
// TODO Auto-generated constructor stub
}
-
+
/* ************ Methods from ToolSessionManager ************* */
public void createToolSession(Long toolSessionId, String toolSessionName,
Long toolContentId) throws ToolException {
@@ -182,9 +189,9 @@
// TODO Auto-generated method stub
}
-
- /* ************ Methods from ToolContentManager ************************* */
-
+
+ /* ************ Methods from ToolContentManager ************************* */
+
public void copyToolContent(Long fromContentId, Long toContentId)
throws ToolException {
@@ -287,10 +294,24 @@
return chatSession;
}
+ public ChatSession getSessionByJabberRoom(String jabberRoom) {
+ ChatSession chatSession = chatSessionDAO.getByJabberRoom(jabberRoom);
+ if (chatSession == null) {
+ logger.debug("Could not find the chat session with jabberRoom:"
+ + jabberRoom);
+ }
+ return chatSession;
+ }
+
public ChatUser getUserByUserIdAndSessionId(Long userId, Long toolSessionId) {
return chatUserDAO.getByUserIdAndSessionId(userId, toolSessionId);
}
+ public ChatUser getUserByLoginNameAndSessionId(String loginName,
+ Long toolSessionId) {
+ return chatUserDAO.getByLoginNameAndSessionId(loginName, toolSessionId);
+ }
+
public ChatAttachment uploadFileToContent(Long toolContentId,
FormFile file, String type) {
if (file == null || StringUtils.isEmpty(file.getFileName()))
@@ -337,6 +358,10 @@
chatUserDAO.saveOrUpdate(chatUser);
}
+ public void saveOrUpdateChatMessage(ChatMessage chatMessage) {
+ chatMessageDAO.saveOrUpdate(chatMessage);
+ }
+
public ChatUser createChatUser(UserDTO user, ChatSession chatSession) {
ChatUser chatUser = new ChatUser(user, chatSession);
chatUser.setJabberId(createJabberId(user));
@@ -390,6 +415,105 @@
}
}
+ public void processIncomingMessages(NodeList messageElems) {
+ for (int i = 0; i < messageElems.getLength(); i++) {
+ // extract message attributes
+ Node message = messageElems.item(i);
+ NamedNodeMap nnm = message.getAttributes();
+
+ Node from = nnm.getNamedItem("from");
+ Node to = nnm.getNamedItem("to");
+ Node type = nnm.getNamedItem("type");
+
+ // handle message children elements
+ NodeList nl = message.getChildNodes();
+ Node body = null;
+ for (int j = 0; j < nl.getLength(); j++) {
+ // We are looking for the
element.
+ // More than one may exists, we will take the first one we see
+ // We ignore and elements
+ Node msgChild = nl.item(j);
+ if (msgChild.getNodeName() == "body") {
+ body = msgChild;
+ break;
+ }
+ }
+
+ // save the messages.
+ ChatMessage chatMessage = new ChatMessage();
+ String jabberRoom;
+ String toNick = "";
+
+ // setting to field
+ if (type.getNodeValue().equals("chat")) {
+ // we are sending to an individual user.
+ // extract the jabber room from the to field.
+ // format is room@domain/nick
+ int index = to.getNodeValue().lastIndexOf("/");
+ if (index == -1) {
+ logger
+ .debug("processIncomingMessages: malformed 'to' attribute :"
+ + to.getNodeValue());
+ return; // somethings wrong, ignore packet
+ }
+ jabberRoom = to.getNodeValue().substring(0, index);
+ toNick = to.getNodeValue().substring(index + 1);
+ } else if (type.getNodeValue().equals("groupchat")) {
+ // we are sending to the whole room.
+ // format is room@domain
+ jabberRoom = to.getNodeValue();
+ } else {
+ logger.debug("processIncomingMessages: unknown type: "
+ + type.getNodeValue());
+ return;
+ }
+
+ ChatSession chatSession = this.getSessionByJabberRoom(jabberRoom);
+ ChatUser toChatUser = getUserByLoginNameAndSessionId(toNick,
+ chatSession.getSessionId());
+ chatMessage.setToUser(toChatUser);
+
+ // setting from field
+ int index = from.getNodeValue().lastIndexOf("@");
+ if (index == -1) {
+ logger
+ .debug("processIncomingMessages: malformed 'from' attribute :"
+ + from.getNodeValue());
+ return; // somethings wrong, ignore packet
+ }
+ String JidUsername = from.getNodeValue().substring(0, index);
+ // NB: JID and userId are the same.
+ Long userId;
+ try {
+ userId = new Long(JidUsername);
+ } catch (NumberFormatException e) {
+ logger
+ .debug("processIncomingMessages: malformed JID username: "
+ + JidUsername);
+ return;
+ }
+ ChatUser fromUser = getUserByUserIdAndSessionId(userId, chatSession
+ .getSessionId());
+ chatMessage.setFromUser(fromUser);
+
+ logger.debug(System.getProperty("java version"));
+
+ chatMessage.setType(type.getNodeValue());
+ Node bodyText = body.getFirstChild();
+ String bodyTextStr = "";
+ if (bodyText != null) {
+ bodyTextStr = bodyText.getNodeValue();
+ }
+ chatMessage.setBody(bodyTextStr);
+ saveOrUpdateChatMessage(chatMessage);
+ }
+ }
+
+ public void processIncomingPresence(NodeList presenceElems) {
+ // TODO Auto-generated method stub
+
+ }
+
/* ********** Private methods ********** */
/**
@@ -405,8 +529,9 @@
AccountManager manager = con.getAccountManager();
if (manager.supportsAccountCreation()) {
- // using the lams username as jabber username and password.
- manager.createAccount(user.getLogin(), user.getLogin());
+ // using the lams userId as jabber username and password.
+ manager.createAccount(user.getUserID().toString(), user
+ .getUserID().toString());
}
} catch (XMPPException e) {
@@ -525,6 +650,14 @@
this.chatUserDAO = userDAO;
}
+ public IChatMessageDAO getChatMessageDAO() {
+ return chatMessageDAO;
+ }
+
+ public void setChatMessageDAO(IChatMessageDAO messageDAO) {
+ this.chatMessageDAO = messageDAO;
+ }
+
public ILearnerService getLearnerService() {
return learnerService;
}
Index: lams_tool_chat/src/java/org/lamsfoundation/lams/tool/chat/service/IChatService.java
===================================================================
diff -u -r6060aa975c38d08ce3236c019d05212b6be0e501 -ra097e00efc002b4c2ab226d0c24793422fff42dd
--- lams_tool_chat/src/java/org/lamsfoundation/lams/tool/chat/service/IChatService.java (.../IChatService.java) (revision 6060aa975c38d08ce3236c019d05212b6be0e501)
+++ lams_tool_chat/src/java/org/lamsfoundation/lams/tool/chat/service/IChatService.java (.../IChatService.java) (revision a097e00efc002b4c2ab226d0c24793422fff42dd)
@@ -27,10 +27,12 @@
import org.apache.struts.upload.FormFile;
import org.lamsfoundation.lams.tool.chat.model.Chat;
import org.lamsfoundation.lams.tool.chat.model.ChatAttachment;
+import org.lamsfoundation.lams.tool.chat.model.ChatMessage;
import org.lamsfoundation.lams.tool.chat.model.ChatSession;
import org.lamsfoundation.lams.tool.chat.model.ChatUser;
import org.lamsfoundation.lams.tool.chat.util.ChatException;
import org.lamsfoundation.lams.usermanagement.dto.UserDTO;
+import org.w3c.dom.NodeList;
/**
* Defines the services available to the web layer from the Chat Service
@@ -95,9 +97,15 @@
* @return
*/
public ChatSession getSessionBySessionId(Long toolSessionId);
-
/**
+ *
+ * @param jabberRoom
+ * @return
+ */
+ public ChatSession getSessionByJabberRoom(String jabberRoom);
+
+ /**
* @param chatSession
*/
public void saveOrUpdateChatSession(ChatSession chatSession);
@@ -112,10 +120,20 @@
/**
*
+ * @param loginName
+ * @param sessionId
+ * @return
+ */
+ public ChatUser getUserByLoginNameAndSessionId(String loginName, Long sessionId);
+
+ /**
+ *
* @param chatUser
*/
public void saveOrUpdateChatUser(ChatUser chatUser);
+ public void saveOrUpdateChatMessage(ChatMessage chatMessage);
+
/**
*
* @param user
@@ -129,5 +147,17 @@
* @param chatSession
*/
public void createJabberRoom(ChatSession chatSession);
+
+ /**
+ *
+ * @param messageElems
+ */
+ public void processIncomingMessages(NodeList messageElems);
+
+ /**
+ *
+ * @param presenceElems
+ */
+ public void processIncomingPresence(NodeList presenceElems);
}
\ No newline at end of file