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;