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 <[email protected]>
AuthorDate: Fri Nov 22 15:14:22 2019 -0500
NIFI-5924 Labels should be searchable
Signed-off-by: Matthew Burgess <[email protected]>
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>');