diff --git a/client/src/main/java/com/mirth/connect/client/ui/browsers/message/MessageBrowserAdvancedFilter.java b/client/src/main/java/com/mirth/connect/client/ui/browsers/message/MessageBrowserAdvancedFilter.java index 07ce2c2c57..519f9f2032 100644 --- a/client/src/main/java/com/mirth/connect/client/ui/browsers/message/MessageBrowserAdvancedFilter.java +++ b/client/src/main/java/com/mirth/connect/client/ui/browsers/message/MessageBrowserAdvancedFilter.java @@ -383,13 +383,13 @@ private List getMetaDataSearch() throws MetaDataColumnExc } else { for (int i = 0; i < rowCount; i++) { String metaDataName = (String) model.getValueAt(i, 0); - String operator = ((MetaDataSearchOperator) model.getValueAt(i, 1)).toFullString(); + MetaDataSearchOperator operator = (MetaDataSearchOperator) model.getValueAt(i, 1); String searchText = (String) model.getValueAt(i, 2); Boolean ignoreCase = (Boolean) model.getValueAt(i, 3); + MetaDataColumn column = cachedMetaDataColumns.get(metaDataName); - if (StringUtils.isNotEmpty(searchText)) { - MetaDataColumn column = cachedMetaDataColumns.get(metaDataName); - metaDataSearch.add(new MetaDataSearchElement(metaDataName, operator, column.getType().castValue(searchText), ignoreCase)); + if (shouldIncludeMetaDataSearch(column.getType(), operator, searchText)) { + metaDataSearch.add(new MetaDataSearchElement(metaDataName, operator.toFullString(), column.getType().castValue(searchText), ignoreCase)); } } @@ -397,6 +397,10 @@ private List getMetaDataSearch() throws MetaDataColumnExc } } + static boolean shouldIncludeMetaDataSearch(MetaDataColumnType columnType, MetaDataSearchOperator operator, String searchText) { + return StringUtils.isNotEmpty(searchText) || (columnType == MetaDataColumnType.STRING && (operator == MetaDataSearchOperator.EQUAL || operator == MetaDataSearchOperator.NOT_EQUAL)); + } + @Override public void setVisible(boolean visible) { if (visible) { diff --git a/client/src/test/java/com/mirth/connect/client/ui/browsers/message/MessageBrowserAdvancedFilterTest.java b/client/src/test/java/com/mirth/connect/client/ui/browsers/message/MessageBrowserAdvancedFilterTest.java new file mode 100644 index 0000000000..314e9cf175 --- /dev/null +++ b/client/src/test/java/com/mirth/connect/client/ui/browsers/message/MessageBrowserAdvancedFilterTest.java @@ -0,0 +1,30 @@ +package com.mirth.connect.client.ui.browsers.message; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import org.junit.Test; + +import com.mirth.connect.donkey.model.channel.MetaDataColumnType; +import com.mirth.connect.model.filters.elements.MetaDataSearchOperator; + +public class MessageBrowserAdvancedFilterTest { + + @Test + public void shouldIncludeBlankStringEqualitySearches() { + assertTrue(MessageBrowserAdvancedFilter.shouldIncludeMetaDataSearch(MetaDataColumnType.STRING, MetaDataSearchOperator.EQUAL, "")); + assertTrue(MessageBrowserAdvancedFilter.shouldIncludeMetaDataSearch(MetaDataColumnType.STRING, MetaDataSearchOperator.NOT_EQUAL, "")); + } + + @Test + public void shouldIgnoreBlankNonEqualitySearches() { + assertFalse(MessageBrowserAdvancedFilter.shouldIncludeMetaDataSearch(MetaDataColumnType.STRING, MetaDataSearchOperator.CONTAINS, "")); + assertFalse(MessageBrowserAdvancedFilter.shouldIncludeMetaDataSearch(MetaDataColumnType.NUMBER, MetaDataSearchOperator.EQUAL, "")); + } + + @Test + public void shouldIncludeNonBlankSearches() { + assertTrue(MessageBrowserAdvancedFilter.shouldIncludeMetaDataSearch(MetaDataColumnType.STRING, MetaDataSearchOperator.CONTAINS, "value")); + assertTrue(MessageBrowserAdvancedFilter.shouldIncludeMetaDataSearch(MetaDataColumnType.NUMBER, MetaDataSearchOperator.EQUAL, "1")); + } +} \ No newline at end of file