#ifndef BOOKMARK_CONTROLLER_H #define BOOKMARK_CONTROLLER_H #include "data/bookmark/Bookmark.h" #include "data/bookmark/NodeBookmark.h" #include "data/bookmark/EdgeBookmark.h" #include "data/name/NameHierarchy.h" #include "data/StorageTypes.h" #include "utility/messaging/MessageListener.h" #include "utility/messaging/type/MessageActivateBookmark.h" #include "utility/messaging/type/MessageActivateEdge.h" #include "utility/messaging/type/MessageActivateTokens.h" #include "utility/messaging/type/MessageCreateBookmark.h" #include "utility/messaging/type/MessageCreateBookmarkCategory.h" #include "utility/messaging/type/MessageDeleteBookmark.h" #include "utility/messaging/type/MessageDeleteBookmarkCategory.h" #include "utility/messaging/type/MessageDeleteBookmarkForActiveTokens.h" #include "utility/messaging/type/MessageDisplayBookmarks.h" #include "utility/messaging/type/MessageEditBookmark.h" #include "utility/messaging/type/MessageFinishedParsing.h" #include "component/controller/Controller.h" class StorageAccess; class BookmarkController : public Controller , public MessageListener , public MessageListener , public MessageListener , public MessageListener , public MessageListener , public MessageListener , public MessageListener , public MessageListener , public MessageListener { public: BookmarkController(StorageAccess* storageAccess); virtual ~BookmarkController(); virtual void clear(); std::vector> getBookmarks( const MessageDisplayBookmarks::BookmarkFilter& filter, const MessageDisplayBookmarks::BookmarkOrder& order) const; std::vector getActiveTokenDisplayNames() const; std::vector getAllBookmarkCategories() const; bool hasBookmarkForActiveToken() const; std::shared_ptr getBookmarkForActiveToken() const; private: class BookmarkCache { public: BookmarkCache(StorageAccess* storageAccess); void clear(); std::vector getAllNodeBookmarks(); std::vector getAllEdgeBookmarks(); private: StorageAccess* m_storageAccess; std::vector m_nodeBookmarks; std::vector m_edgeBookmarks; bool m_nodeBookmarksValid; bool m_edgeBookmarksValid; }; virtual void handleMessage(MessageActivateBookmark* message); virtual void handleMessage(MessageActivateTokens* message); virtual void handleMessage(MessageCreateBookmark* message); virtual void handleMessage(MessageCreateBookmarkCategory* message); virtual void handleMessage(MessageDeleteBookmark* message); virtual void handleMessage(MessageDeleteBookmarkCategory* message); virtual void handleMessage(MessageDeleteBookmarkForActiveTokens* message); virtual void handleMessage(MessageEditBookmark* message); virtual void handleMessage(MessageFinishedParsing* message); std::vector> getAllBookmarks() const; std::vector> getAllNodeBookmarks() const; std::vector> getAllEdgeBookmarks() const; std::vector getActiveNodeDisplayNames() const; std::vector getActiveEdgeDisplayNames() const; std::string getNodeDisplayName(const Id id) const; std::vector> getFilteredBookmarks( const std::vector>& bookmarks, const MessageDisplayBookmarks::BookmarkFilter& filter) const; std::vector> getOrderedBookmarks( const std::vector>& bookmarks, const MessageDisplayBookmarks::BookmarkOrder& order) const; std::vector> getDateOrderedBookmarks( const std::vector>& bookmarks, const bool ascending) const; std::vector> getNameOrderedBookmarks( const std::vector>& bookmarks, const bool ascending) const; void cleanBookmarkCategories(); static bool bookmarkDateCompare(const std::shared_ptr a, const std::shared_ptr b); static bool bookmarkNameCompare(const std::shared_ptr a, const std::shared_ptr b); static const std::string s_edgeSeperatorToken; static const std::string s_defaultCategoryName; StorageAccess* m_storageAccess; mutable BookmarkCache m_bookmarkCache; std::vector m_activeNodeIds; std::vector m_activeEdgeIds; bool m_hasBookmarkForActiveToken; }; #endif // BOOKMARK_CONTROLLER_H