From a0aab4b82562d58b0f1d97d42d85ba7043615f55 Mon Sep 17 00:00:00 2001
From: Tobias Markmann <tm@ayena.de>
Date: Mon, 18 Nov 2013 23:58:12 +0100
Subject: Move all RosterItemOperations to
 Swift/Controllers/Roster/ItemOperations and cleanup related includes.

Change-Id: I20b8c347dd6f250f7ca426f8eb4e0093e226de5f
License: This patch is BSD-licensed, see Documentation/Licenses/BSD-simplified.txt for details.

diff --git a/Swift/Controllers/Chat/MUCController.cpp b/Swift/Controllers/Chat/MUCController.cpp
index ed3ed5f..afcb782 100644
--- a/Swift/Controllers/Chat/MUCController.cpp
+++ b/Swift/Controllers/Chat/MUCController.cpp
@@ -10,38 +10,39 @@
 #include <boost/regex.hpp>
 #include <boost/algorithm/string.hpp>
 
-#include <Swift/Controllers/Intl.h>
+#include <Swiften/Avatars/AvatarManager.h>
+#include <Swiften/Base/foreach.h>
+#include <Swiften/Base/foreach.h>
 #include <Swiften/Base/format.h>
+#include <Swiften/Base/Log.h>
+#include <Swiften/Client/StanzaChannel.h>
+#include <Swiften/Disco/EntityCapsProvider.h>
+#include <Swiften/Elements/Delay.h>
+#include <Swiften/MUC/MUC.h>
 #include <Swiften/Network/Timer.h>
 #include <Swiften/Network/TimerFactory.h>
-#include <Swiften/Base/foreach.h>
+#include <Swiften/Roster/XMPPRoster.h>
+
 #include <SwifTools/TabComplete.h>
-#include <Swiften/Base/foreach.h>
-#include <Swift/Controllers/XMPPEvents/EventController.h>
-#include <Swift/Controllers/UIInterfaces/ChatWindow.h>
-#include <Swift/Controllers/UIInterfaces/ChatWindowFactory.h>
-#include <Swift/Controllers/UIEvents/UIEventStream.h>
-#include <Swift/Controllers/UIEvents/RequestChatUIEvent.h>
-#include <Swift/Controllers/UIEvents/RequestAddUserDialogUIEvent.h>
-#include <Swift/Controllers/UIEvents/ShowProfileForRosterItemUIEvent.h>
-#include <Swift/Controllers/UIEvents/RequestInviteToMUCUIEvent.h>
-#include <Swift/Controllers/UIEvents/InviteToMUCUIEvent.h>
-#include <Swift/Controllers/Roster/GroupRosterItem.h>
+
+#include <Swift/Controllers/Chat/ChatMessageParser.h>
+#include <Swift/Controllers/Highlighter.h>
+#include <Swift/Controllers/Intl.h>
 #include <Swift/Controllers/Roster/ContactRosterItem.h>
-#include <Swiften/Avatars/AvatarManager.h>
-#include <Swiften/Elements/Delay.h>
-#include <Swiften/MUC/MUC.h>
-#include <Swiften/Client/StanzaChannel.h>
+#include <Swift/Controllers/Roster/GroupRosterItem.h>
+#include <Swift/Controllers/Roster/ItemOperations/SetAvatar.h>
+#include <Swift/Controllers/Roster/ItemOperations/SetPresence.h>
 #include <Swift/Controllers/Roster/Roster.h>
 #include <Swift/Controllers/Roster/RosterVCardProvider.h>
-#include <Swift/Controllers/Roster/SetAvatar.h>
-#include <Swift/Controllers/Roster/SetPresence.h>
-#include <Swiften/Disco/EntityCapsProvider.h>
-#include <Swiften/Roster/XMPPRoster.h>
-#include <Swift/Controllers/Highlighter.h>
-#include <Swift/Controllers/Chat/ChatMessageParser.h>
-
-#include <Swiften/Base/Log.h>
+#include <Swift/Controllers/UIEvents/InviteToMUCUIEvent.h>
+#include <Swift/Controllers/UIEvents/RequestAddUserDialogUIEvent.h>
+#include <Swift/Controllers/UIEvents/RequestChatUIEvent.h>
+#include <Swift/Controllers/UIEvents/RequestInviteToMUCUIEvent.h>
+#include <Swift/Controllers/UIEvents/ShowProfileForRosterItemUIEvent.h>
+#include <Swift/Controllers/UIEvents/UIEventStream.h>
+#include <Swift/Controllers/UIInterfaces/ChatWindow.h>
+#include <Swift/Controllers/UIInterfaces/ChatWindowFactory.h>
+#include <Swift/Controllers/XMPPEvents/EventController.h>
 
 #define MUC_JOIN_WARNING_TIMEOUT_MILLISECONDS 60000
 
diff --git a/Swift/Controllers/HistoryViewController.cpp b/Swift/Controllers/HistoryViewController.cpp
index cfa2482..c24be50 100644
--- a/Swift/Controllers/HistoryViewController.cpp
+++ b/Swift/Controllers/HistoryViewController.cpp
@@ -12,16 +12,17 @@
 
 #include <Swift/Controllers/HistoryViewController.h>
 
-#include <Swift/Controllers/UIInterfaces/HistoryWindowFactory.h>
-#include <Swift/Controllers/UIEvents/RequestHistoryUIEvent.h>
-#include <Swift/Controllers/HistoryController.h>
-#include <Swiften/History/HistoryMessage.h>
-#include <Swiften/Base/foreach.h>
-#include <Swiften/Client/NickResolver.h>
 #include <Swiften/Avatars/AvatarManager.h>
-#include <Swift/Controllers/Roster/SetPresence.h>
-#include <Swift/Controllers/Roster/SetAvatar.h>
 #include <Swiften/Base/Path.h>
+#include <Swiften/Base/foreach.h>
+#include <Swiften/Client/NickResolver.h>
+#include <Swiften/History/HistoryMessage.h>
+
+#include <Swift/Controllers/HistoryController.h>
+#include <Swift/Controllers/Roster/ItemOperations/SetAvatar.h>
+#include <Swift/Controllers/Roster/ItemOperations/SetPresence.h>
+#include <Swift/Controllers/UIEvents/RequestHistoryUIEvent.h>
+#include <Swift/Controllers/UIInterfaces/HistoryWindowFactory.h>
 
 namespace Swift {
 	static const std::string category[] = { "Contacts", "MUC", "Contacts" };
diff --git a/Swift/Controllers/Roster/AppearOffline.h b/Swift/Controllers/Roster/AppearOffline.h
deleted file mode 100644
index 8bd53d7..0000000
--- a/Swift/Controllers/Roster/AppearOffline.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (c) 2010 Remko Tronçon
- * Licensed under the GNU General Public License v3.
- * See Documentation/Licenses/GPLv3.txt for more information.
- */
-
-#pragma once
-
-#include <Swift/Controllers/Roster/RosterItemOperation.h>
-#include <Swift/Controllers/Roster/ContactRosterItem.h>
-
-namespace Swift {
-
-class RosterItem;
-
-class AppearOffline : public RosterItemOperation {
-	public:
-		AppearOffline() {
-		}
-
-		virtual void operator() (RosterItem* item) const {
-			ContactRosterItem* contact = dynamic_cast<ContactRosterItem*>(item);
-			if (contact) {
-				contact->clearPresence();
-			}
-		}
-
-};
-
-}
-
-
diff --git a/Swift/Controllers/Roster/ItemOperations/AppearOffline.h b/Swift/Controllers/Roster/ItemOperations/AppearOffline.h
new file mode 100644
index 0000000..14beaa3
--- /dev/null
+++ b/Swift/Controllers/Roster/ItemOperations/AppearOffline.h
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2010 Remko Tronçon
+ * Licensed under the GNU General Public License v3.
+ * See Documentation/Licenses/GPLv3.txt for more information.
+ */
+
+#pragma once
+
+#include <Swift/Controllers/Roster/ItemOperations/RosterItemOperation.h>
+#include <Swift/Controllers/Roster/ContactRosterItem.h>
+
+namespace Swift {
+
+class RosterItem;
+
+class AppearOffline : public RosterItemOperation {
+	public:
+		AppearOffline() {
+		}
+
+		virtual void operator() (RosterItem* item) const {
+			ContactRosterItem* contact = dynamic_cast<ContactRosterItem*>(item);
+			if (contact) {
+				contact->clearPresence();
+			}
+		}
+
+};
+
+}
+
+
diff --git a/Swift/Controllers/Roster/ItemOperations/RosterItemOperation.h b/Swift/Controllers/Roster/ItemOperations/RosterItemOperation.h
new file mode 100644
index 0000000..f1dff8d
--- /dev/null
+++ b/Swift/Controllers/Roster/ItemOperations/RosterItemOperation.h
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2010 Remko Tronçon
+ * Licensed under the GNU General Public License v3.
+ * See Documentation/Licenses/GPLv3.txt for more information.
+ */
+
+#pragma once
+
+#include "Swift/Controllers/Roster/RosterItem.h"
+
+namespace Swift {
+
+class RosterItemOperation {
+	public:
+		RosterItemOperation(bool requiresLookup = false, const JID& lookupJID = JID()) : requiresLookup_(requiresLookup), lookupJID_(lookupJID) {}
+		virtual ~RosterItemOperation() {}
+		bool requiresLookup() const {return requiresLookup_;}
+		const JID& lookupJID() const {return lookupJID_;} 
+		/**
+		 * This is called when iterating over possible subjects, so must check it's
+		 * applying to the right items - even if requiresLookup() is true an item
+		 * with the same bare JID but different full JID may be passed.
+		 */
+		virtual void operator() (RosterItem*) const = 0;
+	private:
+		bool requiresLookup_;
+		JID lookupJID_;
+};
+
+}
diff --git a/Swift/Controllers/Roster/ItemOperations/SetAvailableFeatures.h b/Swift/Controllers/Roster/ItemOperations/SetAvailableFeatures.h
new file mode 100644
index 0000000..620a1ae
--- /dev/null
+++ b/Swift/Controllers/Roster/ItemOperations/SetAvailableFeatures.h
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2013 Tobias Markmann
+ * Licensed under the simplified BSD license.
+ * See Documentation/Licenses/BSD-simplified.txt for more information.
+ */
+
+#pragma once
+
+#include <Swiften/JID/JID.h>
+
+#include <Swift/Controllers/Roster/ItemOperations/RosterItemOperation.h>
+#include <Swift/Controllers/Roster/ContactRosterItem.h>
+
+namespace Swift {
+
+class RosterItem;
+
+class SetAvailableFeatures : public RosterItemOperation {
+	public:
+		SetAvailableFeatures(const JID& jid, const std::set<ContactRosterItem::Feature>& availableFeatures, JID::CompareType compareType = JID::WithoutResource) : RosterItemOperation(true, jid), jid_(jid), availableFeatures_(availableFeatures), compareType_(compareType) {
+		}
+
+		virtual void operator() (RosterItem* item) const {
+			ContactRosterItem* contact = dynamic_cast<ContactRosterItem*>(item);
+			if (contact && contact->getJID().equals(jid_, compareType_)) {
+				contact->setSupportedFeatures(availableFeatures_);
+			}
+		}
+
+	private:
+		JID jid_;
+		std::set<ContactRosterItem::Feature> availableFeatures_;
+		JID::CompareType compareType_;
+};
+
+}
diff --git a/Swift/Controllers/Roster/ItemOperations/SetAvatar.h b/Swift/Controllers/Roster/ItemOperations/SetAvatar.h
new file mode 100644
index 0000000..b3ec5f3
--- /dev/null
+++ b/Swift/Controllers/Roster/ItemOperations/SetAvatar.h
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2010-2013 Remko Tronçon
+ * Licensed under the GNU General Public License v3.
+ * See Documentation/Licenses/GPLv3.txt for more information.
+ */
+
+#pragma once
+
+#include <boost/filesystem/path.hpp>
+
+#include <Swiften/Elements/Presence.h>
+#include <Swiften/JID/JID.h>
+
+#include <Swift/Controllers/Roster/ItemOperations/RosterItemOperation.h>
+#include <Swift/Controllers/Roster/ContactRosterItem.h>
+
+namespace Swift {
+
+class RosterItem;
+
+class SetAvatar : public RosterItemOperation {
+	public:
+		SetAvatar(const JID& jid, const boost::filesystem::path& path, JID::CompareType compareType = JID::WithoutResource) : RosterItemOperation(true, jid), jid_(jid), path_(path), compareType_(compareType) {
+		}
+
+		virtual void operator() (RosterItem* item) const {
+			ContactRosterItem* contact = dynamic_cast<ContactRosterItem*>(item);
+			if (contact && contact->getJID().equals(jid_, compareType_)) {
+				contact->setAvatarPath(path_);
+			}
+		}
+	
+	private:
+		JID jid_;
+		boost::filesystem::path path_;
+		JID::CompareType compareType_;
+};
+
+}
diff --git a/Swift/Controllers/Roster/ItemOperations/SetBlockingState.h b/Swift/Controllers/Roster/ItemOperations/SetBlockingState.h
new file mode 100644
index 0000000..a8eea09
--- /dev/null
+++ b/Swift/Controllers/Roster/ItemOperations/SetBlockingState.h
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2013 Tobias Markmann
+ * Licensed under the simplified BSD license.
+ * See Documentation/Licenses/BSD-simplified.txt for more information.
+ */
+
+#pragma once
+
+#include <Swiften/JID/JID.h>
+
+#include <Swift/Controllers/Roster/ItemOperations/RosterItemOperation.h>
+#include <Swift/Controllers/Roster/ContactRosterItem.h>
+
+namespace Swift {
+
+class RosterItem;
+
+class SetBlockingState : public RosterItemOperation {
+	public:
+		SetBlockingState(const JID& jid, ContactRosterItem::BlockState state, JID::CompareType compareType = JID::WithoutResource) : RosterItemOperation(true, jid), jid_(jid), state_(state), compareType_(compareType) {
+		}
+
+		virtual void operator() (RosterItem* item) const {
+			ContactRosterItem* contact = dynamic_cast<ContactRosterItem*>(item);
+			if (contact && contact->getJID().equals(jid_, compareType_)) {
+				contact->setBlockState(state_);
+			}
+		}
+
+	private:
+		JID jid_;
+		ContactRosterItem::BlockState state_;
+		JID::CompareType compareType_;
+};
+
+}
diff --git a/Swift/Controllers/Roster/ItemOperations/SetName.h b/Swift/Controllers/Roster/ItemOperations/SetName.h
new file mode 100644
index 0000000..b21e4f2
--- /dev/null
+++ b/Swift/Controllers/Roster/ItemOperations/SetName.h
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) 2010 Kevin Smith
+ * Licensed under the GNU General Public License v3.
+ * See Documentation/Licenses/GPLv3.txt for more information.
+ */
+
+#pragma once
+
+#include <Swiften/JID/JID.h>
+
+#include <Swift/Controllers/Roster/ItemOperations/RosterItemOperation.h>
+#include <Swift/Controllers/Roster/ContactRosterItem.h>
+
+namespace Swift {
+
+class RosterItem;
+
+class SetName : public RosterItemOperation {
+	public:
+		SetName(const std::string& name, const JID& jid, JID::CompareType compareType = JID::WithoutResource) : RosterItemOperation(true, jid), name_(name), jid_(jid), compareType_(compareType) {
+		}
+
+		virtual void operator() (RosterItem* item) const {
+			ContactRosterItem* contact = dynamic_cast<ContactRosterItem*>(item);
+			if (contact && contact->getJID().equals(jid_, compareType_)) {
+				contact->setDisplayName(name_);
+			}
+		}
+	
+	private:
+		std::string name_;
+		JID jid_;
+		JID::CompareType compareType_;
+};
+
+}
+
+
diff --git a/Swift/Controllers/Roster/ItemOperations/SetPresence.h b/Swift/Controllers/Roster/ItemOperations/SetPresence.h
new file mode 100644
index 0000000..b298a88
--- /dev/null
+++ b/Swift/Controllers/Roster/ItemOperations/SetPresence.h
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2010 Remko Tronçon
+ * Licensed under the GNU General Public License v3.
+ * See Documentation/Licenses/GPLv3.txt for more information.
+ */
+
+#pragma once
+
+#include <Swiften/Elements/Presence.h>
+#include <Swiften/JID/JID.h>
+
+#include <Swift/Controllers/Roster/ItemOperations/RosterItemOperation.h>
+#include <Swift/Controllers/Roster/ContactRosterItem.h>
+
+namespace Swift {
+
+class RosterItem;
+
+class SetPresence : public RosterItemOperation {
+	public:
+		SetPresence(Presence::ref presence, JID::CompareType compareType = JID::WithoutResource) : RosterItemOperation(true, compareType == JID::WithoutResource ? presence->getFrom().toBare() : presence->getFrom()), presence_(presence), compareType_(compareType) {
+		}
+
+		virtual void operator() (RosterItem* item) const {
+			ContactRosterItem* contact = dynamic_cast<ContactRosterItem*>(item);
+			if (contact && contact->getJID().equals(presence_->getFrom(), compareType_)) {
+				contact->applyPresence(presence_->getFrom().getResource(), presence_);
+			}
+		}
+	
+	private:
+		Presence::ref presence_;
+		JID::CompareType compareType_;
+};
+
+}
+
diff --git a/Swift/Controllers/Roster/ItemOperations/SetVCard.h b/Swift/Controllers/Roster/ItemOperations/SetVCard.h
new file mode 100644
index 0000000..8ee73f9
--- /dev/null
+++ b/Swift/Controllers/Roster/ItemOperations/SetVCard.h
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2013 Tobias Markmann
+ * Licensed under the simplified BSD license.
+ * See Documentation/Licenses/BSD-simplified.txt for more information.
+ */
+
+#pragma once
+
+#include <Swiften/Elements/VCard.h>
+#include <Swiften/JID/JID.h>
+
+#include <Swift/Controllers/Roster/ItemOperations/RosterItemOperation.h>
+#include <Swift/Controllers/Roster/ContactRosterItem.h>
+
+namespace Swift {
+
+class RosterItem;
+
+class SetVCard : public RosterItemOperation {
+	public:
+		SetVCard(const JID& jid, VCard::ref vcard, JID::CompareType compareType = JID::WithoutResource) : RosterItemOperation(true, jid), jid_(jid), vcard_(vcard), compareType_(compareType) {
+		}
+
+		virtual void operator() (RosterItem* item) const {
+			ContactRosterItem* contact = dynamic_cast<ContactRosterItem*>(item);
+			if (contact && contact->getJID().equals(jid_, compareType_)) {
+				contact->setVCard(vcard_);
+			}
+		}
+
+	private:
+		JID jid_;
+		VCard::ref vcard_;
+		JID::CompareType compareType_;
+};
+
+}
diff --git a/Swift/Controllers/Roster/Roster.cpp b/Swift/Controllers/Roster/Roster.cpp
index 51e888f..44cf03d 100644
--- a/Swift/Controllers/Roster/Roster.cpp
+++ b/Swift/Controllers/Roster/Roster.cpp
@@ -19,7 +19,7 @@
 #include <Swift/Controllers/Roster/ContactRosterItem.h>
 #include <Swift/Controllers/Roster/RosterItem.h>
 #include <Swift/Controllers/Roster/GroupRosterItem.h>
-#include <Swift/Controllers/Roster/RosterItemOperation.h>
+#include <Swift/Controllers/Roster/ItemOperations/RosterItemOperation.h>
 
 namespace Swift {
 
diff --git a/Swift/Controllers/Roster/Roster.h b/Swift/Controllers/Roster/Roster.h
index 9a1dfa3..b60eafa 100644
--- a/Swift/Controllers/Roster/Roster.h
+++ b/Swift/Controllers/Roster/Roster.h
@@ -15,7 +15,7 @@
 #include <Swiften/Base/boost_bsignals.h>
 #include <Swiften/JID/JID.h>
 
-#include <Swift/Controllers/Roster/RosterItemOperation.h>
+#include <Swift/Controllers/Roster/ItemOperations/RosterItemOperation.h>
 #include <Swift/Controllers/Roster/RosterFilter.h>
 #include <Swift/Controllers/Roster/ContactRosterItem.h>
 
diff --git a/Swift/Controllers/Roster/RosterController.cpp b/Swift/Controllers/Roster/RosterController.cpp
index cb6d4d2..4016f81 100644
--- a/Swift/Controllers/Roster/RosterController.cpp
+++ b/Swift/Controllers/Roster/RosterController.cpp
@@ -29,17 +29,17 @@
 #include <Swiften/Roster/XMPPRosterItem.h>
 
 #include <Swift/Controllers/Intl.h>
-#include <Swift/Controllers/Roster/AppearOffline.h>
 #include <Swift/Controllers/Roster/GroupRosterItem.h>
 #include <Swift/Controllers/Roster/OfflineRosterFilter.h>
 #include <Swift/Controllers/Roster/Roster.h>
 #include <Swift/Controllers/Roster/RosterVCardProvider.h>
-#include <Swift/Controllers/Roster/SetAvatar.h>
-#include <Swift/Controllers/Roster/SetAvailableFeatures.h>
-#include <Swift/Controllers/Roster/SetBlockingState.h>
-#include <Swift/Controllers/Roster/SetName.h>
-#include <Swift/Controllers/Roster/SetPresence.h>
-#include <Swift/Controllers/Roster/SetVCard.h>
+#include <Swift/Controllers/Roster/ItemOperations/AppearOffline.h>
+#include <Swift/Controllers/Roster/ItemOperations/SetAvatar.h>
+#include <Swift/Controllers/Roster/ItemOperations/SetAvailableFeatures.h>
+#include <Swift/Controllers/Roster/ItemOperations/SetBlockingState.h>
+#include <Swift/Controllers/Roster/ItemOperations/SetName.h>
+#include <Swift/Controllers/Roster/ItemOperations/SetPresence.h>
+#include <Swift/Controllers/Roster/ItemOperations/SetVCard.h>
 #include <Swift/Controllers/SettingConstants.h>
 #include <Swift/Controllers/UIEvents/AddContactUIEvent.h>
 #include <Swift/Controllers/UIEvents/RemoveRosterItemUIEvent.h>
diff --git a/Swift/Controllers/Roster/RosterItemOperation.h b/Swift/Controllers/Roster/RosterItemOperation.h
deleted file mode 100644
index f1dff8d..0000000
--- a/Swift/Controllers/Roster/RosterItemOperation.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright (c) 2010 Remko Tronçon
- * Licensed under the GNU General Public License v3.
- * See Documentation/Licenses/GPLv3.txt for more information.
- */
-
-#pragma once
-
-#include "Swift/Controllers/Roster/RosterItem.h"
-
-namespace Swift {
-
-class RosterItemOperation {
-	public:
-		RosterItemOperation(bool requiresLookup = false, const JID& lookupJID = JID()) : requiresLookup_(requiresLookup), lookupJID_(lookupJID) {}
-		virtual ~RosterItemOperation() {}
-		bool requiresLookup() const {return requiresLookup_;}
-		const JID& lookupJID() const {return lookupJID_;} 
-		/**
-		 * This is called when iterating over possible subjects, so must check it's
-		 * applying to the right items - even if requiresLookup() is true an item
-		 * with the same bare JID but different full JID may be passed.
-		 */
-		virtual void operator() (RosterItem*) const = 0;
-	private:
-		bool requiresLookup_;
-		JID lookupJID_;
-};
-
-}
diff --git a/Swift/Controllers/Roster/RosterVCardProvider.cpp b/Swift/Controllers/Roster/RosterVCardProvider.cpp
index 26c9a81..954ac68 100644
--- a/Swift/Controllers/Roster/RosterVCardProvider.cpp
+++ b/Swift/Controllers/Roster/RosterVCardProvider.cpp
@@ -9,7 +9,7 @@
 #include <Swiften/VCards/VCardManager.h>
 
 #include <Swift/Controllers/Roster/Roster.h>
-#include <Swift/Controllers/Roster/SetVCard.h>
+#include <Swift/Controllers/Roster/ItemOperations/SetVCard.h>
 
 namespace Swift {
 
diff --git a/Swift/Controllers/Roster/SetAvailableFeatures.h b/Swift/Controllers/Roster/SetAvailableFeatures.h
deleted file mode 100644
index f7e00d0..0000000
--- a/Swift/Controllers/Roster/SetAvailableFeatures.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (c) 2013 Tobias Markmann
- * Licensed under the simplified BSD license.
- * See Documentation/Licenses/BSD-simplified.txt for more information.
- */
-
-#pragma once
-
-#include <Swiften/JID/JID.h>
-
-#include <Swift/Controllers/Roster/RosterItemOperation.h>
-#include <Swift/Controllers/Roster/ContactRosterItem.h>
-
-namespace Swift {
-
-class RosterItem;
-
-class SetAvailableFeatures : public RosterItemOperation {
-	public:
-		SetAvailableFeatures(const JID& jid, const std::set<ContactRosterItem::Feature>& availableFeatures, JID::CompareType compareType = JID::WithoutResource) : RosterItemOperation(true, jid), jid_(jid), availableFeatures_(availableFeatures), compareType_(compareType) {
-		}
-
-		virtual void operator() (RosterItem* item) const {
-			ContactRosterItem* contact = dynamic_cast<ContactRosterItem*>(item);
-			if (contact && contact->getJID().equals(jid_, compareType_)) {
-				contact->setSupportedFeatures(availableFeatures_);
-			}
-		}
-
-	private:
-		JID jid_;
-		std::set<ContactRosterItem::Feature> availableFeatures_;
-		JID::CompareType compareType_;
-};
-
-}
diff --git a/Swift/Controllers/Roster/SetAvatar.h b/Swift/Controllers/Roster/SetAvatar.h
deleted file mode 100644
index 424f0b3..0000000
--- a/Swift/Controllers/Roster/SetAvatar.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (c) 2010-2013 Remko Tronçon
- * Licensed under the GNU General Public License v3.
- * See Documentation/Licenses/GPLv3.txt for more information.
- */
-
-#pragma once
-
-#include "Swiften/Elements/Presence.h"
-#include "Swiften/JID/JID.h"
-#include "Swift/Controllers/Roster/RosterItemOperation.h"
-#include "Swift/Controllers/Roster/ContactRosterItem.h"
-#include <boost/filesystem/path.hpp>
-
-namespace Swift {
-
-class RosterItem;
-
-class SetAvatar : public RosterItemOperation {
-	public:
-		SetAvatar(const JID& jid, const boost::filesystem::path& path, JID::CompareType compareType = JID::WithoutResource) : RosterItemOperation(true, jid), jid_(jid), path_(path), compareType_(compareType) {
-		}
-
-		virtual void operator() (RosterItem* item) const {
-			ContactRosterItem* contact = dynamic_cast<ContactRosterItem*>(item);
-			if (contact && contact->getJID().equals(jid_, compareType_)) {
-				contact->setAvatarPath(path_);
-			}
-		}
-	
-	private:
-		JID jid_;
-		boost::filesystem::path path_;
-		JID::CompareType compareType_;
-};
-
-}
diff --git a/Swift/Controllers/Roster/SetBlockingState.h b/Swift/Controllers/Roster/SetBlockingState.h
deleted file mode 100644
index 72fd2e5..0000000
--- a/Swift/Controllers/Roster/SetBlockingState.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (c) 2013 Tobias Markmann
- * Licensed under the simplified BSD license.
- * See Documentation/Licenses/BSD-simplified.txt for more information.
- */
-
-#pragma once
-
-#include <Swiften/JID/JID.h>
-
-#include <Swift/Controllers/Roster/RosterItemOperation.h>
-#include <Swift/Controllers/Roster/ContactRosterItem.h>
-
-namespace Swift {
-
-class RosterItem;
-
-class SetBlockingState : public RosterItemOperation {
-	public:
-		SetBlockingState(const JID& jid, ContactRosterItem::BlockState state, JID::CompareType compareType = JID::WithoutResource) : RosterItemOperation(true, jid), jid_(jid), state_(state), compareType_(compareType) {
-		}
-
-		virtual void operator() (RosterItem* item) const {
-			ContactRosterItem* contact = dynamic_cast<ContactRosterItem*>(item);
-			if (contact && contact->getJID().equals(jid_, compareType_)) {
-				contact->setBlockState(state_);
-			}
-		}
-
-	private:
-		JID jid_;
-		ContactRosterItem::BlockState state_;
-		JID::CompareType compareType_;
-};
-
-}
diff --git a/Swift/Controllers/Roster/SetName.h b/Swift/Controllers/Roster/SetName.h
deleted file mode 100644
index aefb0dc..0000000
--- a/Swift/Controllers/Roster/SetName.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (c) 2010 Kevin Smith
- * Licensed under the GNU General Public License v3.
- * See Documentation/Licenses/GPLv3.txt for more information.
- */
-
-#pragma once
-
-#include "Swiften/JID/JID.h"
-#include "Swift/Controllers/Roster/RosterItemOperation.h"
-#include "Swift/Controllers/Roster/ContactRosterItem.h"
-
-namespace Swift {
-
-class RosterItem;
-
-class SetName : public RosterItemOperation {
-	public:
-		SetName(const std::string& name, const JID& jid, JID::CompareType compareType = JID::WithoutResource) : RosterItemOperation(true, jid), name_(name), jid_(jid), compareType_(compareType) {
-		}
-
-		virtual void operator() (RosterItem* item) const {
-			ContactRosterItem* contact = dynamic_cast<ContactRosterItem*>(item);
-			if (contact && contact->getJID().equals(jid_, compareType_)) {
-				contact->setDisplayName(name_);
-			}
-		}
-	
-	private:
-		std::string name_;
-		JID jid_;
-		JID::CompareType compareType_;
-};
-
-}
-
-
diff --git a/Swift/Controllers/Roster/SetPresence.h b/Swift/Controllers/Roster/SetPresence.h
deleted file mode 100644
index 06adfa4..0000000
--- a/Swift/Controllers/Roster/SetPresence.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (c) 2010 Remko Tronçon
- * Licensed under the GNU General Public License v3.
- * See Documentation/Licenses/GPLv3.txt for more information.
- */
-
-#pragma once
-
-#include "Swiften/Elements/Presence.h"
-#include "Swiften/JID/JID.h"
-#include "Swift/Controllers/Roster/RosterItemOperation.h"
-#include "Swift/Controllers/Roster/ContactRosterItem.h"
-
-namespace Swift {
-
-class RosterItem;
-
-class SetPresence : public RosterItemOperation {
-	public:
-		SetPresence(Presence::ref presence, JID::CompareType compareType = JID::WithoutResource) : RosterItemOperation(true, compareType == JID::WithoutResource ? presence->getFrom().toBare() : presence->getFrom()), presence_(presence), compareType_(compareType) {
-		}
-
-		virtual void operator() (RosterItem* item) const {
-			ContactRosterItem* contact = dynamic_cast<ContactRosterItem*>(item);
-			if (contact && contact->getJID().equals(presence_->getFrom(), compareType_)) {
-				contact->applyPresence(presence_->getFrom().getResource(), presence_);
-			}
-		}
-	
-	private:
-		Presence::ref presence_;
-		JID::CompareType compareType_;
-};
-
-}
-
diff --git a/Swift/Controllers/Roster/SetVCard.h b/Swift/Controllers/Roster/SetVCard.h
deleted file mode 100644
index 4a238ff..0000000
--- a/Swift/Controllers/Roster/SetVCard.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (c) 2013 Tobias Markmann
- * Licensed under the simplified BSD license.
- * See Documentation/Licenses/BSD-simplified.txt for more information.
- */
-
-#pragma once
-
-#include <Swiften/Elements/VCard.h>
-#include <Swiften/JID/JID.h>
-
-#include <Swift/Controllers/Roster/RosterItemOperation.h>
-#include <Swift/Controllers/Roster/ContactRosterItem.h>
-
-namespace Swift {
-
-class RosterItem;
-
-class SetVCard : public RosterItemOperation {
-	public:
-		SetVCard(const JID& jid, VCard::ref vcard, JID::CompareType compareType = JID::WithoutResource) : RosterItemOperation(true, jid), jid_(jid), vcard_(vcard), compareType_(compareType) {
-		}
-
-		virtual void operator() (RosterItem* item) const {
-			ContactRosterItem* contact = dynamic_cast<ContactRosterItem*>(item);
-			if (contact && contact->getJID().equals(jid_, compareType_)) {
-				contact->setVCard(vcard_);
-			}
-		}
-
-	private:
-		JID jid_;
-		VCard::ref vcard_;
-		JID::CompareType compareType_;
-};
-
-}
diff --git a/Swift/Controllers/Roster/UnitTest/RosterTest.cpp b/Swift/Controllers/Roster/UnitTest/RosterTest.cpp
index 0c3e769..7d86aaf 100644
--- a/Swift/Controllers/Roster/UnitTest/RosterTest.cpp
+++ b/Swift/Controllers/Roster/UnitTest/RosterTest.cpp
@@ -6,11 +6,12 @@
 
 #include <cppunit/extensions/HelperMacros.h>
 #include <cppunit/extensions/TestFactoryRegistry.h>
+
 #include <boost/shared_ptr.hpp>
 
-#include "Swift/Controllers/Roster/Roster.h"
-#include "Swift/Controllers/Roster/GroupRosterItem.h"
-#include "Swift/Controllers/Roster/SetPresence.h"
+#include <Swift/Controllers/Roster/Roster.h>
+#include <Swift/Controllers/Roster/GroupRosterItem.h>
+#include <Swift/Controllers/Roster/ItemOperations/SetPresence.h>
 
 using namespace Swift;
 
diff --git a/Swift/Controllers/Roster/UnitTest/TableRosterTest.cpp b/Swift/Controllers/Roster/UnitTest/TableRosterTest.cpp
index db8a2fd..f8e6a63 100644
--- a/Swift/Controllers/Roster/UnitTest/TableRosterTest.cpp
+++ b/Swift/Controllers/Roster/UnitTest/TableRosterTest.cpp
@@ -15,13 +15,14 @@ std::ostream& operator<<(std::ostream& os, const Swift::TableRoster::Index& i) {
 
 #include <cppunit/extensions/HelperMacros.h>
 #include <cppunit/extensions/TestFactoryRegistry.h>
+
 #include <boost/shared_ptr.hpp>
 #include <boost/variant.hpp>
 
 #include <Swiften/Network/DummyTimerFactory.h>
 #include <Swift/Controllers/Roster/Roster.h>
 #include <Swift/Controllers/Roster/GroupRosterItem.h>
-#include <Swift/Controllers/Roster/SetPresence.h>
+#include <Swift/Controllers/Roster/ItemOperations/SetPresence.h>
 
 using namespace Swift;
 
-- 
cgit v0.10.2-6-g49f6