package controller; import gui.ErrorDialog; import gui.GUI; import gui.QueryBuilderRow; import gui.QuerySearchTab; import gui.UploadTab; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; import javax.swing.event.TreeSelectionEvent; import javax.swing.event.TreeSelectionListener; import model.ErrorLogger; import model.GenomizerModel; import util.ActiveSearchPanel; import util.AnnotationDataType; import util.ExperimentData; import util.RequestException; import util.TreeTable; public class QuerySearchTabController { GUI view; GenomizerModel model; private QuerySearchTab querySearchTab; public QuerySearchTabController(GUI view, GenomizerModel model) { this.view = view; this.querySearchTab = view.getQuerySearchTab(); this.model = model; // querySearchTab.addDownloadButtonListener(listener) querySearchTab.addSearchButtonListener(SearchButtonListener()); // view.addQuerySearchListener( QuerySearchListener()); querySearchTab .addUpdateAnnotationsListener(updateAnnotationsListener()); // view.addUpdateSearchAnnotationsListener( // updateSearchAnnotationsListener()); querySearchTab .addAddToWorkspaceButtonListener(SearchToWorkspaceListener()); // view.addSearchToWorkspaceListener( SearchToWorkspaceListener()); querySearchTab.addUploadToListener(SearchUploadToListener()); // view.addUploadToListenerSearchTab( SearchUploadToListener()); querySearchTab.getResultsTable().addTreeSelectionListener( SelectionListener()); } public TreeSelectionListener SelectionListener() { return new TreeSelectionListener() { @Override public void valueChanged(TreeSelectionEvent arg0) { TreeTable treeTable = querySearchTab.getResultsTable(); if (treeTable.getNumberOfSelected() > 0) { querySearchTab.getAddToWorkspaceButton().setEnabled(true); querySearchTab.getAddToUploadButton().setEnabled(true); } else { querySearchTab.getAddToWorkspaceButton().setEnabled(false); querySearchTab.getAddToUploadButton().setEnabled(false); } } }; } public ActionListener createClearButtonListener() { return new ActionListener() { @Override public void actionPerformed(ActionEvent e) { querySearchTab.clearSearchFields(); } }; } public ActionListener createManualEditButtonListener() { return new ActionListener() { @Override public void actionPerformed(ActionEvent e) { querySearchTab.getSearchArea().setEditable(true); for (QueryBuilderRow row : querySearchTab.getRowList()) { row.setEnabled(false); } } }; } // En uploadlistener som körs när upload knappen trycks i search-taben public ActionListener SearchUploadToListener() { return new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // If none selected, return directly and do nothing if ( view.getQuerySearchTab().getSelectedData().size() == 0 ) return; ExperimentData firstChosenExperiment = view.getQuerySearchTab() .getSelectedData().get(0); UploadTab ut = view.getUploadTab(); ut.getNewExpPanel().setSelectButtonEnabled(true); view.getTabbedPane().setSelectedComponent(ut); ut.getExperimentNameField().setText( firstChosenExperiment.getName()); ut.getExistingExpButton().doClick(); } }; } public ActionListener createQueryBuilderButtonListener() { return new ActionListener() { @Override public void actionPerformed(ActionEvent e) { querySearchTab.getSearchArea().setEditable(false); for (QueryBuilderRow row : querySearchTab.getRowList()) { row.setEnabled(true); } } }; } public ActionListener createBackButtonListener() { return new ActionListener() { @Override public void actionPerformed(ActionEvent e) { querySearchTab.showSearchView(); } }; } public ActionListener SearchButtonListener() { return new ActionListener() { @Override public void actionPerformed(ActionEvent e) { new Thread() { @Override public void run() { String pubmed = view.getQuerySearchTab() .getSearchString(); if (pubmed.isEmpty()) { pubmed = "[ExpID]"; } ArrayList<ExperimentData> searchResults; try { searchResults = model.search(pubmed); if (searchResults != null) { view.getQuerySearchTab().updateSearchResults( searchResults); if (view.getSelectedIndex() == 0) { view.setStatusPanel("Search successful: " + searchResults.size() + " matches."); view.setStatusPanelColor("success"); } // If search results are null and the active // panel // is search } else if (view.getQuerySearchTab() .getActivePanel() == ActiveSearchPanel.SEARCH) { view.setStatusPanel("No search results!"); view.setStatusPanelColor("fail"); // If search results are null and the active // panel // is table } else if (view.getQuerySearchTab() .getActivePanel() == ActiveSearchPanel.TABLE) { // Go back to the query search view.getBackButton().doClick(); view.getQuerySearchTab().getBackButton(); } } catch (RequestException e) { new ErrorDialog("Search failed", e).showDialog(); ErrorLogger.log(e); } querySearchTab.getResultsTable() .addTreeSelectionListener(SelectionListener()); }; }.start(); } }; } public ActionListener updateAnnotationsListener() { return new ActionListener() { @Override public void actionPerformed(ActionEvent e) { new Thread() { @Override public void run() { AnnotationDataType[] annotations = model .getAnnotations(); if (annotations != null && annotations.length > 0) { view.getQuerySearchTab().setAnnotationTypes( annotations); } }; }.start(); } }; } //TODO improve the "if one selected", making a new arraylist isn't that good public ActionListener SearchToWorkspaceListener() { return new ActionListener() { @Override public void actionPerformed(ActionEvent e) { new Thread() { @Override public void run() { if (querySearchTab.getResultsTable() .getNumberOfSelected() == 1) { ExperimentData selectedData = querySearchTab .getResultsTable().getSelectedExperiment(); view.setStatusPanel(selectedData.name + " was added to the workspace."); view.setStatusPanelColor("success"); ArrayList<ExperimentData> exDataAL = new ArrayList<ExperimentData>(); exDataAL.add(selectedData); view.getWorkSpaceTab().addExperimentsToTable(exDataAL); view.getWorkSpaceTab().changeTab(0); view.getQuerySearchTab().clearSearchSelection(); } else { ArrayList<ExperimentData> selectedData = view .getQuerySearchTab().getSelectedData(); if (selectedData.size() == 1) { view.setStatusPanel(selectedData.get(0).name + " was added to the workspace."); view.setStatusPanelColor("success"); // view.setStatusPanelColorSuccess(); } else if (selectedData.size() > 1) { view.setStatusPanel(selectedData.get(0).name + " + " + (selectedData.size() - 1) + " other experiments was added to the workspace."); view.setStatusPanelColor("success"); // view.setStatusPanelColorSuccess(); } view.getWorkSpaceTab().addExperimentsToTable( view.getQuerySearchTab().getSelectedData()); view.getWorkSpaceTab().changeTab(0); view.getQuerySearchTab().clearSearchSelection(); } }; }.start(); } }; } }