Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -510,6 +510,81 @@ public Boolean hasAdvancedCriteria() {
return hasAdvancedCriteria;
}

public void applyFilter(MessageFilter messageFilter) {
stopEditing();
resetSelections();

if (messageFilter == null) {
return;
}

ItemSelectionTableModel<Integer, String> connectorModel = ((ItemSelectionTableModel<Integer, String>) connectorTable.getModel());
DefaultTableModel contentSearchModel = ((DefaultTableModel) contentSearchTable.getModel());
DefaultTableModel metaDataSearchModel = ((DefaultTableModel) metaDataSearchTable.getModel());

List<Integer> includedMetaDataIds = messageFilter.getIncludedMetaDataIds();
List<Integer> excludedMetaDataIds = messageFilter.getExcludedMetaDataIds();

if (includedMetaDataIds != null) {
connectorModel.unselectAllKeys();
for (Integer metaDataId : includedMetaDataIds) {
connectorModel.selectKey(metaDataId);
}
} else if (excludedMetaDataIds != null) {
connectorModel.selectAllKeys();
for (int row = 0; row < connectorModel.getRowCount(); row++) {
Integer metaDataId = (Integer) connectorModel.getValueAt(row, ItemSelectionTableModel.KEY_COLUMN);
if (excludedMetaDataIds.contains(metaDataId)) {
connectorModel.setValueAt(Boolean.FALSE, row, ItemSelectionTableModel.CHECKBOX_COLUMN);
}
}
}

messageIdLowerField.setText((messageFilter.getMinMessageId() == null) ? "" : String.valueOf(messageFilter.getMinMessageId()));
messageIdUpperField.setText((messageFilter.getMaxMessageId() == null) ? "" : String.valueOf(messageFilter.getMaxMessageId()));
originalIdLowerField.setText((messageFilter.getOriginalIdLower() == null) ? "" : String.valueOf(messageFilter.getOriginalIdLower()));
originalIdUpperField.setText((messageFilter.getOriginalIdUpper() == null) ? "" : String.valueOf(messageFilter.getOriginalIdUpper()));
importIdLowerField.setText((messageFilter.getImportIdLower() == null) ? "" : String.valueOf(messageFilter.getImportIdLower()));
importIdUpperField.setText((messageFilter.getImportIdUpper() == null) ? "" : String.valueOf(messageFilter.getImportIdUpper()));
serverIdField.setText(StringUtils.defaultString(messageFilter.getServerId()));
sendAttemptsLower.setValue((messageFilter.getSendAttemptsLower() == null) ? 0 : messageFilter.getSendAttemptsLower());
sendAttemptsUpper.setValue((messageFilter.getSendAttemptsUpper() == null) ? "" : String.valueOf(messageFilter.getSendAttemptsUpper()));
attachmentCheckBox.setSelected(Boolean.TRUE.equals(messageFilter.getAttachment()));
errorCheckBox.setSelected(Boolean.TRUE.equals(messageFilter.getError()));

if (messageFilter.getContentSearch() != null) {
for (ContentSearchElement contentSearchElement : messageFilter.getContentSearch()) {
for (String search : contentSearchElement.getSearches()) {
contentSearchModel.addRow(new Object[] { ContentType.fromCode(contentSearchElement.getContentCode()), search });
}
}
}

if (messageFilter.getMetaDataSearch() != null) {
for (MetaDataSearchElement metaDataSearchElement : messageFilter.getMetaDataSearch()) {
if (cachedMetaDataColumns.containsKey(metaDataSearchElement.getColumnName())) {
metaDataSearchModel.addRow(new Object[] {
metaDataSearchElement.getColumnName(),
MetaDataSearchOperator.fromString(metaDataSearchElement.getOperator()),
formatMetaDataValue(metaDataSearchElement.getValue()),
Boolean.TRUE.equals(metaDataSearchElement.getIgnoreCase()) });
}
}
}
}

private String formatMetaDataValue(Object value) {
if (value == null) {
return "";
}

if (value instanceof java.util.Calendar) {
return new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(((java.util.Calendar) value).getTime());
}

return String.valueOf(value);
}

private void stopEditing() {
// if the user had typed in a value in the content search table, close the cell editor so that any value that was entered will be included in the search
TableCellEditor cellEditor = contentSearchTable.getCellEditor();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
/*
* Copyright (c) Mirth Corporation. All rights reserved.
*
* http://www.mirthcorp.com
*
* The software in this package is published under the terms of the MPL license a copy of which has
* been included with this distribution in the LICENSE.txt file.
*/

package com.mirth.connect.client.ui.browsers.message;

import java.util.ArrayList;
import java.util.List;
import java.util.prefs.Preferences;

import org.apache.commons.lang3.StringUtils;

import com.mirth.connect.client.ui.Mirth;
import com.mirth.connect.model.converters.ObjectXMLSerializer;
import com.mirth.connect.model.filters.MessageFilter;

class MessageBrowserRecentFilterStore {
private static final int MAX_RECENT_FILTERS = 10;
private static final String RECENT_FILTERS_PREFERENCE_PREFIX = "messageBrowserRecentFilters.";

private final String prefKey;

public MessageBrowserRecentFilterStore(String channelId) {
this.prefKey = RECENT_FILTERS_PREFERENCE_PREFIX + channelId;
}

public List<MessageFilter> getRecentFilters() {
try {
String serialized = Preferences.userNodeForPackage(Mirth.class).get(prefKey, "");
if (StringUtils.isBlank(serialized)) return List.of();

var result = ObjectXMLSerializer.getInstance().deserialize(serialized, List.class);
if (result == null) return List.of();

return (List<MessageFilter>) result;
} catch (Exception e) {
// Fail quietly if the stored filters cannot be deserialized for any reason.
e.printStackTrace();
return List.of();
}
}

public void addRecentFilter(MessageFilter filter) {
if (filter == null) {
throw new IllegalArgumentException("Filter cannot be null");
}

var filters = new ArrayList<MessageFilter>(getRecentFilters());

// Remove then re-add to avoid duplicates
filters.remove(filter);
filters.add(0, filter);

// Trim to the maximum number of recent filters
if (filters.size() > MAX_RECENT_FILTERS) {
filters.subList(MAX_RECENT_FILTERS, filters.size()).clear();
}

try {
var preferences = Preferences.userNodeForPackage(Mirth.class);
preferences.put(prefKey, ObjectXMLSerializer.getInstance().serialize(filters));
} catch (Exception e) {
e.printStackTrace();
}
}
}
Loading
Loading