This is an automated email from the ASF dual-hosted git repository.

mattyb149 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nifi.git


The following commit(s) were added to refs/heads/master by this push:
     new acaf321  NIFI-5924 Labels should be searchable
acaf321 is described below

commit acaf321af022929533f0dc25e0e1eba796bc3e46
Author: MatthewKnight-NG <matthew.kni...@ngc.com>
AuthorDate: Fri Nov 22 15:14:22 2019 -0500

    NIFI-5924 Labels should be searchable
    
    Signed-off-by: Matthew Burgess <mattyb...@apache.org>
    
    This closes #4070
---
 .../nifi/web/api/dto/search/SearchResultsDTO.java  | 15 ++++++++
 .../web/controller/ControllerSearchService.java    | 33 +++++++++++++++-
 .../controller/ControllerSearchServiceTest.java    | 44 ++++++++++++++++++++++
 .../nf-ng-canvas-flow-status-controller.js         |  8 ++++
 4 files changed, 98 insertions(+), 2 deletions(-)

diff --git 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/search/SearchResultsDTO.java
 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/search/SearchResultsDTO.java
index 5054c29..1946261 100644
--- 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/search/SearchResultsDTO.java
+++ 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/search/SearchResultsDTO.java
@@ -35,6 +35,7 @@ public class SearchResultsDTO {
     private List<ComponentSearchResultDTO> outputPortResults = new 
ArrayList<>();
     private List<ComponentSearchResultDTO> remoteProcessGroupResults = new 
ArrayList<>();
     private List<ComponentSearchResultDTO> funnelResults = new ArrayList<>();
+    private List<ComponentSearchResultDTO> labelResults = new ArrayList<>();
     private List<ComponentSearchResultDTO> parameterContextResults = new 
ArrayList<>();
     private List<ComponentSearchResultDTO> parameterResults = new 
ArrayList<>();
 
@@ -137,6 +138,20 @@ public class SearchResultsDTO {
     }
 
     /**
+     * @return labels that matched the search
+     */
+    @ApiModelProperty(
+            value = "The labels that matched the search."
+    )
+    public List<ComponentSearchResultDTO> getLabelResults() {
+        return labelResults;
+    }
+
+    public void setLabelResults(List<ComponentSearchResultDTO> labelResults) {
+        this.labelResults = labelResults;
+    }
+
+    /**
      * @return parameter contexts that matched the search.
      */
     @ApiModelProperty(
diff --git 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/controller/ControllerSearchService.java
 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/controller/ControllerSearchService.java
index 9bec4bb..a41288e 100644
--- 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/controller/ControllerSearchService.java
+++ 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/controller/ControllerSearchService.java
@@ -31,6 +31,7 @@ import org.apache.nifi.connectable.Port;
 import org.apache.nifi.controller.FlowController;
 import org.apache.nifi.controller.ProcessorNode;
 import org.apache.nifi.controller.ScheduledState;
+import org.apache.nifi.controller.label.Label;
 import org.apache.nifi.controller.queue.FlowFileQueue;
 import org.apache.nifi.flowfile.FlowFilePrioritizer;
 import org.apache.nifi.groups.ProcessGroup;
@@ -74,8 +75,8 @@ public class ControllerSearchService {
      * Searches term in the controller beginning from a given process group.
      *
      * @param results Search results
-     * @param search The search term
-     * @param group The init process group
+     * @param search  The search term
+     * @param group   The init process group
      */
     public void search(final SearchResultsDTO results, final String search, 
final ProcessGroup group) {
         final NiFiUser user = NiFiUserUtils.getNiFiUser();
@@ -162,6 +163,18 @@ public class ControllerSearchService {
             }
         }
 
+        for (final Label label : group.getLabels()) {
+            if (label.isAuthorized(authorizer, RequestAction.READ, user)) {
+                final ComponentSearchResultDTO match = search(search, label);
+                if (match != null) {
+                    match.setGroupId(group.getIdentifier());
+                    match.setParentGroup(buildResultGroup(group, user));
+                    match.setVersionedGroup(buildVersionedGroup(group, user));
+                    results.getLabelResults().add(match);
+                }
+            }
+        }
+
         for (final ProcessGroup processGroup : group.getProcessGroups()) {
             search(results, search, processGroup);
         }
@@ -511,6 +524,22 @@ public class ControllerSearchService {
         return dto;
     }
 
+    private ComponentSearchResultDTO search(final String searchStr, final 
Label label) {
+        final List<String> matches = new ArrayList<>();
+        addIfAppropriate(searchStr, label.getIdentifier(), "Id", matches);
+        addIfAppropriate(searchStr, label.getValue(), "Value", matches);
+
+        if (matches.isEmpty()) {
+            return null;
+        }
+
+        final ComponentSearchResultDTO dto = new ComponentSearchResultDTO();
+        dto.setId(label.getIdentifier());
+        dto.setName(label.getValue());
+        dto.setMatches(matches);
+        return dto;
+    }
+
     private ComponentSearchResultDTO search(final String searchString, final 
ParameterContext parameterContext) {
         final List<String> matches = new ArrayList<>();
         addIfAppropriate(searchString, parameterContext.getIdentifier(), "Id", 
matches);
diff --git 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/test/java/org/apache/nifi/web/controller/ControllerSearchServiceTest.java
 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/test/java/org/apache/nifi/web/controller/ControllerSearchServiceTest.java
index 939f8c6..74ffc1c 100644
--- 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/test/java/org/apache/nifi/web/controller/ControllerSearchServiceTest.java
+++ 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/test/java/org/apache/nifi/web/controller/ControllerSearchServiceTest.java
@@ -23,6 +23,7 @@ import org.apache.nifi.controller.FlowController;
 import org.apache.nifi.controller.ProcessorNode;
 import org.apache.nifi.controller.StandardProcessorNode;
 import org.apache.nifi.controller.flow.FlowManager;
+import org.apache.nifi.controller.label.Label;
 import org.apache.nifi.groups.ProcessGroup;
 import org.apache.nifi.parameter.Parameter;
 import org.apache.nifi.parameter.ParameterContext;
@@ -403,6 +404,49 @@ public class ControllerSearchServiceTest {
         assertEquals(0, searchResultsDTO.getParameterResults().size());
     }
 
+    @Test
+    public void testSearchLabels() {
+        // root level PG
+        final ProcessGroup rootProcessGroup = setupMockedProcessGroup("root", 
null, true, variableRegistry, null);
+
+        // setup labels
+        setupMockedLabels(rootProcessGroup);
+
+        // perform search for foo
+        service.search(searchResultsDTO, "FOO", rootProcessGroup);
+
+        assertTrue(searchResultsDTO.getLabelResults().size() == 1);
+        
assertTrue(searchResultsDTO.getLabelResults().get(0).getId().equals("foo"));
+        
assertTrue(searchResultsDTO.getLabelResults().get(0).getName().equals("Value 
for label foo"));
+    }
+
+    /**
+     * Mocks Labels including isAuthorized() and their identifier and value
+     *
+     * @param containingProcessGroup The process group
+     */
+    private static void setupMockedLabels(final ProcessGroup 
containingProcessGroup) {
+        final Label label1 = mock(Label.class);
+        
Mockito.doReturn(true).when(label1).isAuthorized(AdditionalMatchers.or(any(Authorizer.class),
 isNull()), eq(RequestAction.READ),
+                AdditionalMatchers.or(any(NiFiUser.class), isNull()));
+        Mockito.doReturn("foo").when(label1).getIdentifier();
+        Mockito.doReturn("Value for label foo").when(label1).getValue();
+
+        final Label label2 = mock(Label.class);
+        
Mockito.doReturn(false).when(label2).isAuthorized(AdditionalMatchers.or(any(Authorizer.class),
 isNull()), eq(RequestAction.READ),
+                AdditionalMatchers.or(any(NiFiUser.class), isNull()));
+        Mockito.doReturn("bar").when(label2).getIdentifier();
+        Mockito.doReturn("Value for label bar, but FOO is in here 
too").when(label2).getValue();
+
+        // assign labels to the PG
+        Mockito.doReturn(new HashSet<Label>() {
+            {
+                add(label1);
+                add(label2);
+            }
+        }).when(containingProcessGroup).getLabels();
+    }
+
     /**
      * Sets up a mock Parameter Context including isAuthorized()
      * @param name                     name of the parameter context
diff --git 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/controllers/nf-ng-canvas-flow-status-controller.js
 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/controllers/nf-ng-canvas-flow-status-controller.js
index 0722295..357ad49 100644
--- 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/controllers/nf-ng-canvas-flow-status-controller.js
+++ 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/controllers/nf-ng-canvas-flow-status-controller.js
@@ -200,6 +200,14 @@
                                 });
                             }
 
+                            // show all labels
+                            if (!nfCommon.isEmpty(searchResults.labelResults)) 
{
+                                ul.append('<li class="search-header"><div 
class="search-result-icon icon icon-label"></div>Labels</li>');
+                                $.each(searchResults.labelResults, function 
(i, labelMatch) {
+                                    nfSearchAutocomplete._renderItem(ul, 
$.extend({}, labelMatch, { type: 'label' }));
+                                });
+                            }
+
                             // show all parameter contexts and parameters
                             if 
(!nfCommon.isEmpty(searchResults.parameterContextResults)) {
                                 ul.append('<li class="search-header"><div 
class="search-result-icon icon"></div>Parameter Contexts</li>');

Reply via email to