From a855e14ebfcfe3e66140cc0c739cc403b2d59968 Mon Sep 17 00:00:00 2001 From: Eberhard Graether Date: Fri, 2 Oct 2015 10:18:17 +0200 Subject: [PATCH] logic: make SearchController only listen to MessageActivateTokens This change makes MessageActivateTokens being used consistently throughout all Controllers. The FeatureController accepts all incoming activation messages and turns them into MessageActivateTokens, which are then accepted by all view controllers. --- .../component/controller/SearchController.cpp | 41 ++----------------- .../component/controller/SearchController.h | 17 ++------ src/lib/data/Storage.cpp | 36 ++++++++++++++++ src/lib/data/Storage.h | 4 ++ src/lib/data/access/StorageAccess.h | 2 + src/lib/data/access/StorageAccessProxy.cpp | 10 +++++ src/lib/data/access/StorageAccessProxy.h | 5 ++- 7 files changed, 61 insertions(+), 54 deletions(-) diff --git a/src/lib/component/controller/SearchController.cpp b/src/lib/component/controller/SearchController.cpp index 704c83df..c826a676 100644 --- a/src/lib/component/controller/SearchController.cpp +++ b/src/lib/component/controller/SearchController.cpp @@ -12,42 +12,12 @@ SearchController::~SearchController() { } -void SearchController::handleMessage(MessageActivateEdge* message) +void SearchController::handleMessage(MessageActivateTokens* message) { - if (!message->isAggregation()) + if (!message->isEdge) { - return; + getView()->setMatches(m_storageAccess->getSearchMatchesForTokenIds(message->tokenIds)); } - - getView()->setMatches(std::vector()); -} - -void SearchController::handleMessage(MessageActivateFile* message) -{ - SearchMatch match; - match.fullName = message->filePath.fileName(); - match.nodeType = Node::NODE_FILE; - match.tokenIds.insert(m_storageAccess->getTokenIdForFileNode(message->filePath)); - match.searchType = SearchMatch::SEARCH_TOKEN; - - getView()->setMatches(std::vector(1, match)); -} - -void SearchController::handleMessage(MessageActivateNodes* message) -{ - std::vector matches; - - for (const MessageActivateNodes::ActiveNode& node : message->nodes) - { - SearchMatch match; - match.fullName = node.nameHierarchy.getFullName(); - match.nodeType = node.type; - match.tokenIds.insert(node.nodeId); - match.searchType = SearchMatch::SEARCH_TOKEN; - matches.push_back(match); - } - - getView()->setMatches(matches); } void SearchController::handleMessage(MessageFind* message) @@ -55,11 +25,6 @@ void SearchController::handleMessage(MessageFind* message) getView()->setFocus(); } -void SearchController::handleMessage(MessageSearch* message) -{ - getView()->setMatches(message->getMatches()); -} - void SearchController::handleMessage(MessageSearchAutocomplete* message) { LOG_INFO("autocomplete string: \"" + message->word + "\""); diff --git a/src/lib/component/controller/SearchController.h b/src/lib/component/controller/SearchController.h index dde7ab87..d0075c4d 100644 --- a/src/lib/component/controller/SearchController.h +++ b/src/lib/component/controller/SearchController.h @@ -1,15 +1,10 @@ #ifndef SEARCH_CONTROLLER_H #define SEARCH_CONTROLLER_H -#include - #include "component/controller/Controller.h" #include "utility/messaging/MessageListener.h" -#include "utility/messaging/type/MessageActivateEdge.h" -#include "utility/messaging/type/MessageActivateFile.h" -#include "utility/messaging/type/MessageActivateNodes.h" +#include "utility/messaging/type/MessageActivateTokens.h" #include "utility/messaging/type/MessageFind.h" -#include "utility/messaging/type/MessageSearch.h" #include "utility/messaging/type/MessageSearchAutocomplete.h" class StorageAccess; @@ -17,11 +12,8 @@ class SearchView; class SearchController : public Controller - , public MessageListener - , public MessageListener - , public MessageListener + , public MessageListener , public MessageListener - , public MessageListener , public MessageListener { public: @@ -29,11 +21,8 @@ public: ~SearchController(); private: - virtual void handleMessage(MessageActivateEdge* message); - virtual void handleMessage(MessageActivateFile* message); - virtual void handleMessage(MessageActivateNodes* message); + virtual void handleMessage(MessageActivateTokens* message); virtual void handleMessage(MessageFind* message); - virtual void handleMessage(MessageSearch* message); virtual void handleMessage(MessageSearchAutocomplete* message); SearchView* getView(); diff --git a/src/lib/data/Storage.cpp b/src/lib/data/Storage.cpp index 5fd07ff0..d415c28f 100644 --- a/src/lib/data/Storage.cpp +++ b/src/lib/data/Storage.cpp @@ -784,6 +784,42 @@ std::vector Storage::getAutocompletionMatches(const std::string& qu return matches; } +std::vector Storage::getSearchMatchesForTokenIds(const std::vector& tokenIds) const +{ + std::vector matches; + + for (Id tokenId : tokenIds) + { + SearchMatch match; + + if (m_sqliteStorage.isFile(tokenId)) + { + StorageFile file = m_sqliteStorage.getFileById(tokenId); + + match.fullName = m_tokenIndex.getNameHierarchyForTokenId(tokenId).getFullName(); + match.nodeType = Node::NODE_FILE; + } + else if (m_sqliteStorage.isNode(tokenId)) + { + StorageNode node = m_sqliteStorage.getNodeById(tokenId); + + match.fullName = m_tokenIndex.getNameHierarchyForTokenId(tokenId).getFullName(); + match.nodeType = Node::intToType(node.type); + } + else + { + continue; + } + + match.tokenIds.insert(tokenId); + match.searchType = SearchMatch::SEARCH_TOKEN; + + matches.push_back(match); + } + + return matches; +} + std::shared_ptr Storage::getGraphForActiveTokenIds(const std::vector& tokenIds) const { std::shared_ptr g = std::make_shared(); diff --git a/src/lib/data/Storage.h b/src/lib/data/Storage.h index a4c28f68..e7a57b9b 100644 --- a/src/lib/data/Storage.h +++ b/src/lib/data/Storage.h @@ -130,8 +130,10 @@ public: virtual NameHierarchy getNameHierarchyForNodeWithId(Id nodeId) const; virtual Node::NodeType getNodeTypeForNodeWithId(Id nodeId) const; + virtual std::vector getAutocompletionMatches( const std::string& query, const std::string& word) const; + virtual std::vector getSearchMatchesForTokenIds(const std::vector& tokenIds) const; virtual std::shared_ptr getGraphForActiveTokenIds(const std::vector& tokenIds) const; @@ -156,6 +158,8 @@ public: virtual std::shared_ptr getFileContent(const FilePath& filePath) const; + + private: Id addNodeHierarchy(Node::NodeType nodeType, NameHierarchy nameHierarchy, bool distinct = false); Id addNodeHierarchyWithDistinctSignature(Node::NodeType type, const ParseFunction& function); diff --git a/src/lib/data/access/StorageAccess.h b/src/lib/data/access/StorageAccess.h index 6a4823a9..6dc25aad 100644 --- a/src/lib/data/access/StorageAccess.h +++ b/src/lib/data/access/StorageAccess.h @@ -31,8 +31,10 @@ public: virtual NameHierarchy getNameHierarchyForNodeWithId(Id id) const = 0; virtual Node::NodeType getNodeTypeForNodeWithId(Id id) const = 0; + virtual std::vector getAutocompletionMatches( const std::string& query, const std::string& word) const = 0; + virtual std::vector getSearchMatchesForTokenIds(const std::vector& tokenIds) const = 0; virtual std::shared_ptr getGraphForActiveTokenIds(const std::vector& tokenIds) const = 0; diff --git a/src/lib/data/access/StorageAccessProxy.cpp b/src/lib/data/access/StorageAccessProxy.cpp index 0a599933..0f5ee366 100644 --- a/src/lib/data/access/StorageAccessProxy.cpp +++ b/src/lib/data/access/StorageAccessProxy.cpp @@ -94,6 +94,16 @@ std::vector StorageAccessProxy::getAutocompletionMatches( return std::vector(); } +std::vector StorageAccessProxy::getSearchMatchesForTokenIds(const std::vector& tokenIds) const +{ + if (hasSubject()) + { + return m_subject->getSearchMatchesForTokenIds(tokenIds); + } + + return std::vector(); +} + std::shared_ptr StorageAccessProxy::getGraphForActiveTokenIds(const std::vector& tokenIds) const { if (hasSubject()) diff --git a/src/lib/data/access/StorageAccessProxy.h b/src/lib/data/access/StorageAccessProxy.h index 3e6feb13..23fbb547 100644 --- a/src/lib/data/access/StorageAccessProxy.h +++ b/src/lib/data/access/StorageAccessProxy.h @@ -21,8 +21,9 @@ public: virtual NameHierarchy getNameHierarchyForNodeWithId(Id id) const; virtual Node::NodeType getNodeTypeForNodeWithId(Id id) const; - virtual std::vector getAutocompletionMatches( - const std::string& query, const std::string& word) const; + + virtual std::vector getAutocompletionMatches(const std::string& query, const std::string& word) const; + virtual std::vector getSearchMatchesForTokenIds(const std::vector& tokenIds) const; virtual std::shared_ptr getGraphForActiveTokenIds(const std::vector& tokenIds) const;