diff options
Diffstat (limited to 'Swiften/Serializer/PayloadSerializers/RosterItemExchangeSerializer.cpp')
| -rw-r--r-- | Swiften/Serializer/PayloadSerializers/RosterItemExchangeSerializer.cpp | 46 | 
1 files changed, 46 insertions, 0 deletions
| diff --git a/Swiften/Serializer/PayloadSerializers/RosterItemExchangeSerializer.cpp b/Swiften/Serializer/PayloadSerializers/RosterItemExchangeSerializer.cpp new file mode 100644 index 0000000..b60db12 --- /dev/null +++ b/Swiften/Serializer/PayloadSerializers/RosterItemExchangeSerializer.cpp @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2011 Jan Kaluza + * Licensed under the Simplified BSD license. + * See Documentation/Licenses/BSD-simplified.txt for more information. + */ + +#include <Swiften/Serializer/PayloadSerializers/RosterItemExchangeSerializer.h> + +#include <boost/shared_ptr.hpp> + +#include <Swiften/Base/foreach.h> +#include <Swiften/Serializer/XML/XMLTextNode.h> +#include <Swiften/Serializer/XML/XMLRawTextNode.h> +#include <Swiften/Serializer/XML/XMLElement.h> + +namespace Swift { + +RosterItemExchangeSerializer::RosterItemExchangeSerializer() : GenericPayloadSerializer<RosterItemExchangePayload>() { +} + +std::string RosterItemExchangeSerializer::serializePayload(boost::shared_ptr<RosterItemExchangePayload> roster)  const { +	XMLElement queryElement("x", "http://jabber.org/protocol/rosterx"); +	foreach(const RosterItemExchangePayload::Item& item, roster->getItems()) { +		boost::shared_ptr<XMLElement> itemElement(new XMLElement("item")); +		itemElement->setAttribute("jid", item.getJID()); +		itemElement->setAttribute("name", item.getName()); + +		switch (item.getAction()) { +			case RosterItemExchangePayload::Item::Add: itemElement->setAttribute("action", "add"); break; +			case RosterItemExchangePayload::Item::Modify: itemElement->setAttribute("action", "modify"); break; +			case RosterItemExchangePayload::Item::Delete: itemElement->setAttribute("action", "delete"); break; +		} + +		foreach(const std::string& group, item.getGroups()) { +			boost::shared_ptr<XMLElement> groupElement(new XMLElement("group")); +			groupElement->addNode(boost::shared_ptr<XMLTextNode>(new XMLTextNode(group))); +			itemElement->addNode(groupElement); +		} + +		queryElement.addNode(itemElement); +	} + +	return queryElement.serialize(); +} + +} | 
 Swift
 Swift