package org.rr.jeborker.gui.action; import java.awt.event.ActionEvent; import java.lang.reflect.Field; import java.util.List; import javax.swing.AbstractAction; import javax.swing.Action; import javax.swing.SwingUtilities; import org.rr.commons.utils.ListUtils; import org.rr.commons.utils.StringUtil; import org.rr.jeborker.gui.MainController; import org.rr.jeborker.gui.MainMonitor; import org.rr.jeborker.gui.model.EbookPropertyDBTableModel; import org.rr.jeborker.gui.resources.ImageResourceBundle; class SearchAction extends AbstractAction { private static final long serialVersionUID = -2514716618739877972L; private static final String QUERY_IDENTIFER = SearchAction.class.getName(); SearchAction() { putValue(Action.SMALL_ICON, ImageResourceBundle.getResourceAsImageIcon("play_16.png")); } public void actionPerformed(ActionEvent e) { final MainController controller = MainController.getController(); final String filterText = controller.getFilterText(); monitorStart(filterText); try { final List<String> filterValues = ListUtils.split(filterText, ",", -1); controller.changeToDatabaseModel().addWhereCondition(new EbookPropertyDBTableModel.EbookPropertyDBTableModelQuery() { @Override public String getIdentifier() { return QUERY_IDENTIFER; } @Override public void appendKeyword(List<String> keywords) { for (String filterValue : filterValues) { if(!StringUtil.toString(filterValue).trim().isEmpty()) { controller.setFilterColorEnabled(true); List<Field> selectedFilterFields = controller.getSelectedFilterFields(); if(!selectedFilterFields.isEmpty()) { for (int i = 0; i < selectedFilterFields.size(); i++) { Field field = selectedFilterFields.get(i); keywords.add(field.getName() + ":" + filterValue); } } else { //default filter/search fields keywords.add(filterValue); } } else { controller.setFilterColorEnabled(false); } } } }); controller.getEbookTableHandler().refreshTable(); controller.addFilterFieldSearch(filterText); } finally { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { int rowCount = controller.getModel().getRowCount(); monitorStop(filterText, rowCount); } }); } } private void monitorStart(String filterText) { MainMonitor progressMonitor = MainController.getController().getProgressMonitor(); if(progressMonitor!=null) { progressMonitor.monitorProgressStart(Bundle.getFormattedString("SearchAction.message", filterText)); } } private void monitorStop(final String filterText, final int entries) { MainMonitor progressMonitor = MainController.getController().getProgressMonitor(); if(progressMonitor!=null) { if(filterText!=null && filterText.length() > 0) { progressMonitor.monitorProgressStop( Bundle.getFormattedString("SearchAction.message.finish", filterText) + " / " + Bundle.getFormattedString("SearchAction.message.count", String.valueOf(entries)) ); } else { progressMonitor.monitorProgressStop(Bundle.getFormattedString("SearchAction.message.count", String.valueOf(entries))); } } } }