Commit 8c30d32e authored by Gaston Dombiak's avatar Gaston Dombiak Committed by gaston

Refactoring work. JM-338


git-svn-id: http://svn.igniterealtime.org/svn/repos/messenger/trunk@1653 b35dd754-fafc-0310-a699-88a17e54d16e
parent b64c2739
...@@ -11,19 +11,18 @@ ...@@ -11,19 +11,18 @@
package org.jivesoftware.messenger.handler; package org.jivesoftware.messenger.handler;
import org.jivesoftware.messenger.*; import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.QName;
import org.jivesoftware.messenger.IQHandlerInfo;
import org.jivesoftware.messenger.PacketException;
import org.jivesoftware.messenger.XMPPServer;
import org.jivesoftware.messenger.auth.UnauthorizedException; import org.jivesoftware.messenger.auth.UnauthorizedException;
import org.jivesoftware.messenger.user.User; import org.jivesoftware.messenger.user.User;
import org.jivesoftware.messenger.user.UserManager; import org.jivesoftware.messenger.user.UserManager;
import org.jivesoftware.messenger.user.UserNotFoundException; import org.jivesoftware.messenger.user.UserNotFoundException;
import java.util.ArrayList; import org.jivesoftware.messenger.vcard.VCardManager;
import java.util.Iterator; import org.jivesoftware.util.Log;
import java.util.List;
import java.util.Collection;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.QName;
import org.xmpp.packet.IQ; import org.xmpp.packet.IQ;
import org.xmpp.packet.JID; import org.xmpp.packet.JID;
import org.xmpp.packet.PacketError; import org.xmpp.packet.PacketError;
...@@ -75,14 +74,19 @@ public class IQvCardHandler extends IQHandler { ...@@ -75,14 +74,19 @@ public class IQvCardHandler extends IQHandler {
try { try {
IQ.Type type = packet.getType(); IQ.Type type = packet.getType();
if (type.equals(IQ.Type.set)) { if (type.equals(IQ.Type.set)) {
result = IQ.createResultIQ(packet);
User user = userManager.getUser(packet.getFrom().getNode()); User user = userManager.getUser(packet.getFrom().getNode());
// Proper format // Proper format
Element vcard = packet.getChildElement(); Element vcard = packet.getChildElement();
if (vcard != null) { if (vcard != null) {
List nameStack = new ArrayList(5); try {
readVCard(vcard, nameStack, user); VCardManager.getInstance().setVCard(user.getUsername(), vcard);
}
catch (Exception e) {
Log.error(e);
result.setError(PacketError.Condition.internal_server_error);
}
} }
result = IQ.createResultIQ(packet);
} }
else if (type.equals(IQ.Type.get)) { else if (type.equals(IQ.Type.get)) {
JID recipient = packet.getTo(); JID recipient = packet.getTo();
...@@ -99,11 +103,9 @@ public class IQvCardHandler extends IQHandler { ...@@ -99,11 +103,9 @@ public class IQvCardHandler extends IQHandler {
if (recipient != null && recipient.getNode() != null) { if (recipient != null && recipient.getNode() != null) {
User user = userManager.getUser(recipient.getNode()); User user = userManager.getUser(recipient.getNode());
VCardManager vManager = VCardManager.getInstance(); VCardManager vManager = VCardManager.getInstance();
Collection<String> names = vManager.getVCardPropertyNames(user.getUsername()); Element userVCard = vManager.getVCard(user.getUsername());
for (String name : names) { if (userVCard != null) {
String path = name.replace(':', '/'); result.setChildElement(userVCard);
Element node = DocumentHelper.makeElement(vcard, path);
node.setText(vManager.getVCardProperty(user.getUsername(), name));
} }
} }
} }
...@@ -121,52 +123,6 @@ public class IQvCardHandler extends IQHandler { ...@@ -121,52 +123,6 @@ public class IQvCardHandler extends IQHandler {
return result; return result;
} }
/**
* We need to build names from heirarchical position in the DOM tree.
*
* @param element The element to interrogate for text nodes
* @param nameStack The current name of the vcard property (list as a stack)
* @param user the user getting their vcard set
*/
private void readVCard(Element element, List nameStack, User user) throws UnauthorizedException {
Iterator children = element.elementIterator();
while (children.hasNext()) {
Element child = (Element)children.next();
nameStack.add(child.getName());
String value = child.getTextTrim();
if (value != null) {
if (!"".equals(value)) {
VCardManager.getInstance().setVCardProperty(user.getUsername(),
createName(nameStack), value);
}
else {
VCardManager.getInstance().deleteVCardProperty(user.getUsername(),
createName(nameStack));
}
}
readVCard(child, nameStack, user);
nameStack.remove(nameStack.size() - 1);
}
}
/**
* Generate a name for the given name stack values
*
* @param nameStack
* @return The name concatenating the values with the ':' character
*/
private String createName(List nameStack) {
StringBuilder buf = new StringBuilder();
Iterator iter = nameStack.iterator();
while (iter.hasNext()) {
if (buf.length() > 0) {
buf.append(':');
}
buf.append(iter.next());
}
return buf.toString();
}
public void initialize(XMPPServer server) { public void initialize(XMPPServer server) {
super.initialize(server); super.initialize(server);
userManager = server.getUserManager(); userManager = server.getUserManager();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment