diff --git a/src/DynamoCore/Models/DynamoModel.cs b/src/DynamoCore/Models/DynamoModel.cs index d6dd202672d..78dcb2ae2b7 100644 --- a/src/DynamoCore/Models/DynamoModel.cs +++ b/src/DynamoCore/Models/DynamoModel.cs @@ -40,7 +40,6 @@ using DynamoServices; using Greg; using Lucene.Net.Documents; -using Lucene.Net.Search; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using ProtoCore; @@ -928,8 +927,16 @@ protected DynamoModel(IStartConfiguration config) CustomNodeManager = new CustomNodeManager(NodeFactory, MigrationManager, LibraryServices); - LuceneSearchUtility = new LuceneSearchUtility(this); - LuceneSearchUtility.InitializeLuceneConfig(LuceneConfig.NodesIndexingDirectory); + if (IsTestMode) + { + LuceneSearchUtility = new LuceneSearchUtility(this); + LuceneSearchUtility.InitializeLuceneConfig(string.Empty, LuceneSearchUtility.LuceneStorage.RAM); + } + else + { + LuceneSearchUtility = new LuceneSearchUtility(this); + LuceneSearchUtility.InitializeLuceneConfig(LuceneConfig.NodesIndexingDirectory); + } InitializeCustomNodeManager(); @@ -1518,19 +1525,19 @@ private void InitializeIncludedNodes() //WhenHomeWorkspaceIsFocusedInputAndOutputNodesAreMissingFromSearch //WhenStartingDynamoInputAndOutputNodesAreNolongerMissingFromSearch // New index process from Lucene, adding missing nodes: Code Block, Input and Output - //var ele = AddNodeTypeToSearch(outputData); - //if (ele != null) - //{ - // AddNodeTypeToSearchIndex(ele, iDoc); - //} - - //ele = AddNodeTypeToSearch(symbolData); - //if (ele != null) - //{ - // AddNodeTypeToSearchIndex(ele, iDoc); - //} - - var ele = AddNodeTypeToSearch(cbnData); + var ele = AddNodeTypeToSearch(outputData); + if (ele != null) + { + AddNodeTypeToSearchIndex(ele, iDoc); + } + + ele = AddNodeTypeToSearch(symbolData); + if (ele != null) + { + AddNodeTypeToSearchIndex(ele, iDoc); + } + + ele = AddNodeTypeToSearch(cbnData); if (ele != null) { AddNodeTypeToSearchIndex(ele, iDoc); @@ -1569,8 +1576,8 @@ private void InitializeNodeLibrary() // Import Zero Touch libs var functionGroups = LibraryServices.GetAllFunctionGroups(); - if (!IsTestMode) - AddZeroTouchNodesToSearch(functionGroups); + + AddZeroTouchNodesToSearch(functionGroups); #if DEBUG_LIBRARY DumpLibrarySnapshot(functionGroups); #endif @@ -3248,9 +3255,9 @@ private NodeModelSearchElement AddNodeTypeToSearch(TypeLoadData typeLoadData) /// /// node info that will be indexed /// Lucene document in which the node info will be indexed - private void AddNodeTypeToSearchIndex(NodeSearchElement node, Document doc) + internal void AddNodeTypeToSearchIndex(NodeSearchElement node, Document doc) { - if (IsTestMode) return; + //if (IsTestMode) return; if (LuceneSearchUtility.addedFields == null) return; LuceneSearchUtility.SetDocumentFieldValue(doc, nameof(LuceneConfig.NodeFieldsEnum.FullCategoryName), node.FullCategoryName); diff --git a/src/DynamoCore/Search/SearchElements/CustomNodeSearchElement.cs b/src/DynamoCore/Search/SearchElements/CustomNodeSearchElement.cs index 8cb94378efb..9b4a6bfcf89 100644 --- a/src/DynamoCore/Search/SearchElements/CustomNodeSearchElement.cs +++ b/src/DynamoCore/Search/SearchElements/CustomNodeSearchElement.cs @@ -1,12 +1,9 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Xml; -using Dynamo.Graph; using Dynamo.Graph.Nodes; using Dynamo.Graph.Nodes.CustomNodes; -using Dynamo.Interfaces; -using Dynamo.Models; namespace Dynamo.Search.SearchElements { diff --git a/src/DynamoCoreWpf/ViewModels/Search/SearchViewModel.cs b/src/DynamoCoreWpf/ViewModels/Search/SearchViewModel.cs index c3a1a0f7a2f..9d8455d4cfb 100644 --- a/src/DynamoCoreWpf/ViewModels/Search/SearchViewModel.cs +++ b/src/DynamoCoreWpf/ViewModels/Search/SearchViewModel.cs @@ -382,6 +382,13 @@ internal SearchViewModel(NodeSearchModel model) InitializeCore(); } + internal SearchViewModel(NodeSearchModel model, DynamoViewModel dynamoViewModel) + { + Model = model; + InitializeCore(); + LuceneSearchUtility = dynamoViewModel.Model.LuceneSearchUtility; + } + /// /// Dispose function /// @@ -875,7 +882,7 @@ public void SearchAndUpdateResults(string query) return; //Passing the second parameter as true will search using Lucene.NET - var foundNodes = DynamoModel.IsTestMode? Search(query) : Search(query, true); + var foundNodes = Search(query, true); searchResults = new List(foundNodes); FilteredResults = searchResults; @@ -937,7 +944,7 @@ internal IEnumerable Search(string search, IEnumerab /// Temporary flag that will be used for searching using Lucene.NET internal IEnumerable Search(string search, bool useLucene) { - if (useLucene) + if (LuceneSearchUtility != null) { //The DirectoryReader and IndexSearcher have to be assigned after commiting indexing changes and before executing the Searcher.Search() method, otherwise new indexed info won't be reflected LuceneSearchUtility.dirReader = LuceneSearchUtility.writer?.GetReader(applyAllDeletes: true); @@ -982,10 +989,7 @@ internal IEnumerable Search(string search, bool useL } return candidates; } - else - { - return Search(search); - } + return null; } /// diff --git a/test/DynamoCoreWpfTests/SearchViewModelTests.cs b/test/DynamoCoreWpfTests/SearchViewModelTests.cs index b4820d468c1..e7029984e2a 100644 --- a/test/DynamoCoreWpfTests/SearchViewModelTests.cs +++ b/test/DynamoCoreWpfTests/SearchViewModelTests.cs @@ -4,6 +4,7 @@ using Dynamo.Configuration; using Dynamo.Search; using Dynamo.Search.SearchElements; +using Dynamo.Utilities; using Dynamo.ViewModels; using Dynamo.Wpf.ViewModels; using NUnit.Framework; @@ -15,12 +16,13 @@ internal class SearchViewModelTests : DynamoViewModelUnitTest { private static NodeSearchModel model; private static SearchViewModel viewModel; + private static LuceneSearchUtility LuceneSearchUtility; [SetUp] public void Init() { model = new NodeSearchModel(); - viewModel = new SearchViewModel(model); + viewModel = new SearchViewModel(model, ViewModel); } [Test] @@ -794,23 +796,30 @@ public void CollapseAllTest() #region Helpers - private static NodeSearchElement CreateCustomNode(string name, string category, + private NodeSearchElement CreateCustomNode(string name, string category, string description = "", string path = "") { var element = new CustomNodeSearchElement(null, new CustomNodeInfo(Guid.NewGuid(), name, category, description, path)); + var iDoc = ViewModel.Model.LuceneSearchUtility.InitializeIndexDocumentForNodes(); + if (element != null) + { + ViewModel.Model.AddNodeTypeToSearchIndex(element, iDoc); + } + + return element; } - private static NodeSearchElementViewModel CreateCustomNodeViewModel(string name, string category, + private NodeSearchElementViewModel CreateCustomNodeViewModel(string name, string category, string description = "", string path = "") { var element = CreateCustomNode(name, category, description, path); return new NodeSearchElementViewModel(element, null); } - private static NodeSearchElementViewModel CreateCustomNodeViewModel(NodeSearchElement element) + private NodeSearchElementViewModel CreateCustomNodeViewModel(NodeSearchElement element) { return new NodeSearchElementViewModel(element, null); } @@ -819,7 +828,7 @@ private static NodeSearchElementViewModel CreateCustomNodeViewModel(NodeSearchEl /// Build complex tree. /// /// All members of built tree. - private static IEnumerable PrepareTestTree() + private IEnumerable PrepareTestTree() { // Next tree will be built. // Used blocks: ─, │, ┌, ┐, ┤, ├, ┴, ┬. diff --git a/test/DynamoCoreWpfTests/WorkspaceSaving.cs b/test/DynamoCoreWpfTests/WorkspaceSaving.cs index d44b8d16b48..1ca8499c1ad 100644 --- a/test/DynamoCoreWpfTests/WorkspaceSaving.cs +++ b/test/DynamoCoreWpfTests/WorkspaceSaving.cs @@ -1048,7 +1048,7 @@ public void CustomNodeSaveAsAddsNewCustomNodeToSearch() ViewModel.CurrentSpaceViewModel.InCanvasSearchViewModel.SearchAndUpdateResults("Constant2"); Assert.AreEqual(originalNumElements + 1, ViewModel.Model.SearchModel.NumElements); - Assert.AreEqual(2, ViewModel.CurrentSpaceViewModel.InCanvasSearchViewModel.FilteredResults.Count()); + Assert.AreEqual(2, ViewModel.CurrentSpaceViewModel.InCanvasSearchViewModel.FilteredResults.OfType().Count()); var res1 = ViewModel.CurrentSpaceViewModel.InCanvasSearchViewModel.FilteredResults.ElementAt(0); var res2 = ViewModel.CurrentSpaceViewModel.InCanvasSearchViewModel.FilteredResults.ElementAt(1); @@ -1060,7 +1060,7 @@ public void CustomNodeSaveAsAddsNewCustomNodeToSearch() var node2 = res2.Model as CustomNodeSearchElement; Assert.IsTrue((node1.ID == oldId && node2.ID == newId) || - (node1.ID == newId && node2.ID == oldId)); + (node1.ID == newId && node2.ID == oldId)); } @@ -1123,7 +1123,7 @@ public void CustomNodeSaveAsAddsNewCustomNodeToSearchAndItCanBeRefactoredWhilePr var examplePath = Path.Combine(TestDirectory, @"core\custom_node_saving", "Constant2.dyf"); ViewModel.OpenCommand.Execute(examplePath); - var oldId = (model.CurrentWorkspace as CustomNodeWorkspaceModel).CustomNodeDefinition.FunctionId; + var oldId = (model.CurrentWorkspace as CustomNodeWorkspaceModel).CustomNodeDefinition.FunctionId; CustomNodeWorkspaceModel nodeWorkspace; Assert.IsTrue(model.CustomNodeManager.TryGetFunctionWorkspace(oldId, true, out nodeWorkspace));