Index: lams_tool_chat/conf/hibernate/mappings/org/lamsfoundation/lams/tool/chat/model/ChatUser.hbm.xml
===================================================================
RCS file: /usr/local/cvsroot/lams_tool_chat/conf/hibernate/mappings/org/lamsfoundation/lams/tool/chat/model/Attic/ChatUser.hbm.xml,v
diff -u -r1.3 -r1.4
--- lams_tool_chat/conf/hibernate/mappings/org/lamsfoundation/lams/tool/chat/model/ChatUser.hbm.xml 8 Jun 2006 05:57:31 -0000 1.3
+++ lams_tool_chat/conf/hibernate/mappings/org/lamsfoundation/lams/tool/chat/model/ChatUser.hbm.xml 9 Jun 2006 09:54:42 -0000 1.4
@@ -70,6 +70,22 @@
length="255"
/>
+
+
+
+
atts = toolContentObj.getChatAttachments();
- for(ChatAttachment att: atts){
- att.setChat(null);
- }
+ if (toolContentObj == null)
+ throw new DataMissingException(
+ "Unable to find tool content by given id :" + toolContentId);
+
+ // set ResourceToolContentHandler as null to avoid copy file node in
+ // repository again.
+ toolContentObj = Chat.newInstance(toolContentObj, toolContentId, null);
+ toolContentObj.setToolContentHandler(null);
+ toolContentObj.setChatSessions(null);
+ Set atts = toolContentObj.getChatAttachments();
+ for (ChatAttachment att : atts) {
+ att.setChat(null);
+ }
try {
- exportContentService.registerFileClassForExport(ChatAttachment.class.getName(),"fileUuid","fileVersionId");
- exportContentService.exportToolContent( toolContentId, toolContentObj,chatToolContentHandler, rootPath);
+ exportContentService
+ .registerFileClassForExport(ChatAttachment.class.getName(),
+ "fileUuid", "fileVersionId");
+ exportContentService.exportToolContent(toolContentId,
+ toolContentObj, chatToolContentHandler, rootPath);
} catch (ExportToolContentException e) {
throw new ToolException(e);
}
}
-
- /**
- * Import the XML fragment for the tool's content, along with any files needed
- * for the content.
- * @throws ToolException if any other error occurs
- */
- public void importToolContent(Long toolContentId, Integer newUserUid, String toolContentPath) throws ToolException {
+ /**
+ * Import the XML fragment for the tool's content, along with any files
+ * needed for the content.
+ *
+ * @throws ToolException
+ * if any other error occurs
+ */
+ public void importToolContent(Long toolContentId, Integer newUserUid,
+ String toolContentPath) throws ToolException {
try {
- exportContentService.registerFileClassForImport(ChatAttachment.class.getName()
- ,"fileUuid","fileVersionId","fileName","fileType",null,null);
-
- Object toolPOJO = exportContentService.importToolContent(toolContentPath,chatToolContentHandler);
- if(!(toolPOJO instanceof Chat))
- throw new ImportToolContentException("Import Chat tool content failed. Deserialized object is " + toolPOJO);
+ exportContentService.registerFileClassForImport(
+ ChatAttachment.class.getName(), "fileUuid",
+ "fileVersionId", "fileName", "fileType", null, null);
+
+ Object toolPOJO = exportContentService.importToolContent(
+ toolContentPath, chatToolContentHandler);
+ if (!(toolPOJO instanceof Chat))
+ throw new ImportToolContentException(
+ "Import Chat tool content failed. Deserialized object is "
+ + toolPOJO);
Chat toolContentObj = (Chat) toolPOJO;
-
-// reset it to new toolContentId
+
+ // reset it to new toolContentId
toolContentObj.setToolContentId(toolContentId);
toolContentObj.setCreateBy(new Long(newUserUid.longValue()));
-
+
chatDAO.saveOrUpdate(toolContentObj);
} catch (ImportToolContentException e) {
throw new ToolException(e);
}
}
-
+
/* ********** IChatService Methods ************************************** */
public Long getDefaultContentIdBySignature(String toolSignature) {
Long toolContentId = null;
@@ -392,11 +408,17 @@
String jabberRoom) {
return chatUserDAO.getByJabberIDAndJabberRoom(jabberID, jabberRoom);
}
-
+
public ChatUser getUserByUID(Long uid) {
return chatUserDAO.getByUID(uid);
}
-
+
+ public ChatUser getUserByJabberNicknameAndSessionID(String jabberNickname,
+ Long sessionID) {
+ return chatUserDAO.getByJabberNicknameAndSessionID(jabberNickname,
+ sessionID);
+ }
+
public List getMessagesForUser(ChatUser chatUser) {
return chatMessageDAO.getForUser(chatUser);
}
@@ -452,14 +474,38 @@
chatMessageDAO.saveOrUpdate(chatMessage);
}
- public ChatUser createChatUser(UserDTO user, ChatSession chatSession) {
+ public synchronized ChatUser createChatUser(UserDTO user,
+ ChatSession chatSession) {
ChatUser chatUser = new ChatUser(user, chatSession);
chatUser.setJabberId(createJabberId(user));
- // persist chatUser to db
+ chatUser.setJabberNickname(createJabberNickname(chatUser));
saveOrUpdateChatUser(chatUser);
return chatUser;
}
+ public String createJabberNickname(ChatUser chatUser) {
+ String desiredJabberNickname = chatUser.getFirstName() + " "
+ + chatUser.getLastName();
+ String jabberNickname = desiredJabberNickname;
+
+ boolean valid = false;
+ int count = 1;
+
+ // TODO may need max tries to prevent possibly entering infinite loop.
+ while (!valid) {
+ if (getUserByJabberNicknameAndSessionID(jabberNickname, chatUser
+ .getChatSession().getSessionId()) == null) {
+ // jabberNickname is available
+ valid = true;
+ } else {
+ jabberNickname = desiredJabberNickname + " " + count;
+ count++;
+ }
+ }
+
+ return jabberNickname;
+ }
+
public void createJabberRoom(ChatSession chatSession) {
try {
XMPPConnection.DEBUG_ENABLED = false;
@@ -501,7 +547,7 @@
chatSession.setJabberRoom(jabberRoom);
con.close();
-
+
} catch (XMPPException e) {
logger.error(e);
}
@@ -549,7 +595,7 @@
}
ChatSession chatSession = this.getSessionByJabberRoom(jabberRoom);
- ChatUser toChatUser = getUserByLoginNameAndSessionId(toNick,
+ ChatUser toChatUser = getUserByJabberNicknameAndSessionID(toNick,
chatSession.getSessionId());
chatMessage.setChatSession(chatSession);
chatMessage.setToUser(toChatUser);
@@ -597,20 +643,24 @@
Node to = nnm.getNamedItem("to");
if (from == null || to == null) {
// somethings wrong, return empty list
- logger.debug("malformed presence xml: no from or to attributes present");
+ logger
+ .debug("malformed presence xml: no from or to attributes present");
return null;
}
-
- // TODO, do we really need to check this ??
+
+ // TODO, do we really need to check this ??
// checking presence packet for correct values
Node xElem = presence.getFirstChild();
if (xElem == null) {
logger.debug("malformed presence xml: no x element present");
}
nnm = xElem.getAttributes();
Node xmlns = nnm.getNamedItem("xmlns");
- if (xmlns == null || !xmlns.getNodeValue().equals("http://jabber.org/protocol/muc")) {
- logger.debug("malformed presence xml: xmlns attribute for x element not available or incorrect");
+ if (xmlns == null
+ || !xmlns.getNodeValue().equals(
+ "http://jabber.org/protocol/muc")) {
+ logger
+ .debug("malformed presence xml: xmlns attribute for x element not available or incorrect");
return null;
}
@@ -634,7 +684,7 @@
Element messageElement = document.createElement("message");
messageElement.setAttribute("from", jabberRoom + "/"
- + message.getFromUser().getLoginName());
+ + message.getFromUser().getJabberNickname());
messageElement
.setAttribute("to", jabberID + "/lams_chatclient");
messageElement.setAttribute("type", message.getType());
@@ -645,16 +695,18 @@
Element xElement = document.createElement("x");
xElement.setAttribute("xmlns", "jabber:x:delay");
- xElement.setAttribute("stamp", "TODO"); // TODO generate the stamp attribute
+ xElement.setAttribute("stamp", "TODO"); // TODO generate the
+ // stamp attribute
xElement.setAttribute("from", jabberRoom + "/"
- + message.getFromUser().getLoginName());
+ + message.getFromUser().getJabberNickname());
messageElement.appendChild(bodyElement);
messageElement.appendChild(xElement);
- filterMessage(messageElement, chatUser.getChatSession().getChat());
-
+ filterMessage(messageElement, chatUser.getChatSession()
+ .getChat());
+
xmlMessageList.add(messageElement);
- //printXMLNode(messageElement, "");
+ // printXMLNode(messageElement, "");
}
} catch (ParserConfigurationException e) {
e.printStackTrace();
@@ -666,20 +718,20 @@
private void printXMLNode(Node node, String tab) {
System.out.print(tab + node.getNodeName() + ":");
-
+
NamedNodeMap nnm = node.getAttributes();
for (int j = 0; j < nnm.getLength(); j++) {
Node m = nnm.item(j);
System.out.print(" " + m.getNodeName() + "=" + m.getNodeValue());
}
System.out.print(" => " + node.getNodeValue() + "\n");
-
+
NodeList nl = node.getChildNodes();
for (int i = 0; i < nl.getLength(); i++) {
- Node n = nl.item(i);
+ Node n = nl.item(i);
printXMLNode(n, tab + " ");
}
-
+
}
public void filterMessage(Node message, Chat chat) {
@@ -721,7 +773,7 @@
Matcher matcher = pattern.matcher(bodyText.getNodeValue());
bodyText.setNodeValue(matcher.replaceAll("***"));
}
-
+
public void filterMessage(Node message) {
NamedNodeMap nnm = message.getAttributes();
String from = nnm.getNamedItem("from").getNodeValue();
@@ -745,13 +797,13 @@
messageFilters.put(chat.getToolContentId(), filter);
return filter;
}
-
+
public ChatMessage getMessageByUID(Long messageUID) {
return chatMessageDAO.getByUID(messageUID);
}
- public List getLastestMessages(ChatSession chatSession, int max) {
- return chatMessageDAO.getLatest(chatSession, max);
+ public List getLastestMessages(ChatSession chatSession, int max) {
+ return chatMessageDAO.getLatest(chatSession, max);
}
public IAuditService getAuditService() {
@@ -761,20 +813,23 @@
public void setAuditService(IAuditService auditService) {
this.auditService = auditService;
}
-
+
public void auditEditMessage(ChatMessage chatMessage, String messageBody) {
- auditService.logChange(ChatConstants.TOOL_SIGNATURE,
- chatMessage.getFromUser().getUserId(), chatMessage.getFromUser().getLoginName(),
- chatMessage.getBody(), messageBody);
+ auditService.logChange(ChatConstants.TOOL_SIGNATURE, chatMessage
+ .getFromUser().getUserId(), chatMessage.getFromUser()
+ .getLoginName(), chatMessage.getBody(), messageBody);
}
- public void auditHideShowMessage(ChatMessage chatMessage, boolean messageHidden) {
- if ( messageHidden ) {
- auditService.logHideEntry(ChatConstants.TOOL_SIGNATURE, chatMessage.getFromUser().getUserId(),
- chatMessage.getFromUser().getLoginName(), chatMessage.toString());
+ public void auditHideShowMessage(ChatMessage chatMessage,
+ boolean messageHidden) {
+ if (messageHidden) {
+ auditService.logHideEntry(ChatConstants.TOOL_SIGNATURE, chatMessage
+ .getFromUser().getUserId(), chatMessage.getFromUser()
+ .getLoginName(), chatMessage.toString());
} else {
- auditService.logShowEntry(ChatConstants.TOOL_SIGNATURE, chatMessage.getFromUser().getUserId(),
- chatMessage.getFromUser().getLoginName(), chatMessage.toString());
+ auditService.logShowEntry(ChatConstants.TOOL_SIGNATURE, chatMessage
+ .getFromUser().getUserId(), chatMessage.getFromUser()
+ .getLoginName(), chatMessage.toString());
}
}
@@ -955,7 +1010,8 @@
return exportContentService;
}
- public void setExportContentService(IExportToolContentService exportContentService) {
+ public void setExportContentService(
+ IExportToolContentService exportContentService) {
this.exportContentService = exportContentService;
}
}
Index: lams_tool_chat/src/java/org/lamsfoundation/lams/tool/chat/service/IChatService.java
===================================================================
RCS file: /usr/local/cvsroot/lams_tool_chat/src/java/org/lamsfoundation/lams/tool/chat/service/IChatService.java,v
diff -u -r1.9 -r1.10
--- lams_tool_chat/src/java/org/lamsfoundation/lams/tool/chat/service/IChatService.java 9 Jun 2006 06:40:14 -0000 1.9
+++ lams_tool_chat/src/java/org/lamsfoundation/lams/tool/chat/service/IChatService.java 9 Jun 2006 09:54:42 -0000 1.10
@@ -147,6 +147,14 @@
/**
*
+ * @param jabberNickname
+ * @param sessionID
+ * @return
+ */
+ public ChatUser getUserByJabberNicknameAndSessionID(String jabberNickname, Long sessionID);
+
+ /**
+ *
* @param chatUser
*/
public void saveOrUpdateChatUser(ChatUser chatUser);
Index: lams_tool_chat/src/java/org/lamsfoundation/lams/tool/chat/web/actions/LearningAction.java
===================================================================
RCS file: /usr/local/cvsroot/lams_tool_chat/src/java/org/lamsfoundation/lams/tool/chat/web/actions/LearningAction.java,v
diff -u -r1.9 -r1.10
--- lams_tool_chat/src/java/org/lamsfoundation/lams/tool/chat/web/actions/LearningAction.java 9 Jun 2006 06:40:14 -0000 1.9
+++ lams_tool_chat/src/java/org/lamsfoundation/lams/tool/chat/web/actions/LearningAction.java 9 Jun 2006 09:54:42 -0000 1.10
@@ -102,7 +102,7 @@
request.setAttribute("USERNAME", chatUser.getUserId());
request.setAttribute("PASSWORD", chatUser.getUserId());
request.setAttribute("CONFERENCEROOM", chatSession.getJabberRoom());
- request.setAttribute("NICK", chatUser.getLoginName());
+ request.setAttribute("NICK", chatUser.getJabberNickname());
request.setAttribute("MODE", "learner");
request.setAttribute("USER_UID", chatUser.getUid());
request.setAttribute("LEARNER_FINISHED", chatUser.getFinishedActivity());
Index: lams_tool_chat/src/java/org/lamsfoundation/lams/tool/chat/web/actions/MonitoringAction.java
===================================================================
RCS file: /usr/local/cvsroot/lams_tool_chat/src/java/org/lamsfoundation/lams/tool/chat/web/actions/MonitoringAction.java,v
diff -u -r1.8 -r1.9
--- lams_tool_chat/src/java/org/lamsfoundation/lams/tool/chat/web/actions/MonitoringAction.java 9 Jun 2006 00:07:37 -0000 1.8
+++ lams_tool_chat/src/java/org/lamsfoundation/lams/tool/chat/web/actions/MonitoringAction.java 9 Jun 2006 09:54:42 -0000 1.9
@@ -142,7 +142,7 @@
request.setAttribute("USERNAME", chatUser.getUserId());
request.setAttribute("PASSWORD", chatUser.getUserId());
request.setAttribute("CONFERENCEROOM", chatSession.getJabberRoom());
- request.setAttribute("NICK", chatUser.getLoginName());
+ request.setAttribute("NICK", chatUser.getJabberNickname());
request.setAttribute("MODE", "teacher");
request.setAttribute("chatTitle", chatSession.getChat().getTitle());
Index: lams_tool_chat/web/chat_client/chat_app.js
===================================================================
RCS file: /usr/local/cvsroot/lams_tool_chat/web/chat_client/Attic/chat_app.js,v
diff -u -r1.3 -r1.4
--- lams_tool_chat/web/chat_client/chat_app.js 9 Jun 2006 06:40:14 -0000 1.3
+++ lams_tool_chat/web/chat_client/chat_app.js 9 Jun 2006 09:54:42 -0000 1.4
@@ -224,7 +224,9 @@
// apending the private message to the incoming window,
// since the jabber server will not echo sent private messages.
// TODO: need to check if this is correct behaviour
- // updateMessageDisplay(generateMessageHTML(NICK, aForm.msg.value, PRIVATE_MSG));
+ if (!(NICK == toNick)) {
+ updateMessageDisplay(generateMessageHTML(NICK, aForm.msg.value, PRIVATE_MSG));
+ }
} else {
aMsg.setTo(CONFERENCEROOM);
aMsg.setType("groupchat");