X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FStructureChooser.java;fp=src%2Fjalview%2Fgui%2FStructureChooser.java;h=35c5791176f96f977c471fca96abf101d5ab2d4a;hb=5dc62d509b6d0f90f3545bf40b272390410eda45;hp=f28ef68fbe84a9edf53015b80d0d4da36c4a6061;hpb=2cbc2e45a74eb8cf8040f9a71636289ca2db5241;p=jalview.git diff --git a/src/jalview/gui/StructureChooser.java b/src/jalview/gui/StructureChooser.java index f28ef68..35c5791 100644 --- a/src/jalview/gui/StructureChooser.java +++ b/src/jalview/gui/StructureChooser.java @@ -1,4 +1,5 @@ /* + * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.2) * Copyright (C) 2014 The Jalview Authors * @@ -37,12 +38,13 @@ import java.awt.event.ItemEvent; import java.util.ArrayList; import java.util.Collection; import java.util.HashSet; +import java.util.LinkedHashSet; import java.util.List; import java.util.Vector; import javax.swing.JCheckBox; import javax.swing.JComboBox; -import javax.swing.ListSelectionModel; +import javax.swing.JLabel; /** * Provides the behaviors for the Structure chooser Panel @@ -61,9 +63,9 @@ public class StructureChooser extends GStructureChooser private IProgressIndicator progressIndicator; - private Collection discoveredStructuresSet = new HashSet(); + private Collection discoveredStructuresSet; - private PDBRestRequest pdbRequest; + private PDBRestRequest lastPdbRequest; private PDBRestClient pdbRestCleint; @@ -130,17 +132,19 @@ public class StructureChooser extends GStructureChooser Collection wantedFields = PDBDocFieldPreferences .getStructureSummaryFields(); - pdbRequest = new PDBRestRequest(); - pdbRequest.setAllowEmptySeq(false); - pdbRequest.setResponseSize(500); - pdbRequest.setFieldToSearchBy("(text:"); - pdbRequest.setWantedFields(wantedFields); + discoveredStructuresSet = new LinkedHashSet(); for (SequenceI seq : selectedSequences) { + PDBRestRequest pdbRequest = new PDBRestRequest(); + pdbRequest.setAllowEmptySeq(false); + pdbRequest.setResponseSize(500); + pdbRequest.setFieldToSearchBy("(text:"); + pdbRequest.setWantedFields(wantedFields); pdbRequest.setSearchTerm(buildQuery(seq) + ")"); pdbRequest.setAssociatedSequence(seq.getName()); pdbRestCleint = new PDBRestClient(); PDBRestResponse resultList = pdbRestCleint.executeRequest(pdbRequest); + lastPdbRequest = pdbRequest; if (resultList.getSearchSummary() != null && !resultList.getSearchSummary().isEmpty()) { @@ -153,7 +157,7 @@ public class StructureChooser extends GStructureChooser if (discoveredStructuresSet != null && !discoveredStructuresSet.isEmpty()) { - tbl_summary.setModel(PDBRestResponse.getTableModel(pdbRequest, + tbl_summary.setModel(PDBRestResponse.getTableModel(lastPdbRequest, discoveredStructuresSet)); structuresDiscovered = true; noOfStructuresFound = discoveredStructuresSet.size(); @@ -234,6 +238,84 @@ public class StructureChooser extends GStructureChooser */ public void filterResultSet(final String fieldToFilterBy) { + + // SwingWorker aWorker = new SwingWorker() + // { + // long startTime = System.currentTimeMillis(); + // + // @Override + // protected Object doInBackground() throws Exception + // { + // lbl_loading.setVisible(true); + // + // Collection wantedFields = PDBDocFieldPreferences + // .getStructureSummaryFields(); + // Collection filteredResponse = new + // HashSet(); + // for (SequenceI seq : selectedSequences) + // { + // PDBRestRequest pdbRequest = new PDBRestRequest(); + // pdbRequest.setAllowEmptySeq(false); + // pdbRequest.setResponseSize(1); + // pdbRequest.setFieldToSearchBy("(text:"); + // pdbRequest.setFieldToSortBy(fieldToFilterBy, + // !chk_invertFilter.isSelected()); + // pdbRequest.setSearchTerm(buildQuery(seq) + ")"); + // pdbRequest.setWantedFields(wantedFields); + // pdbRequest.setAssociatedSequence(seq.getName()); + // pdbRestCleint = new PDBRestClient(); + // PDBRestResponse resultList = pdbRestCleint + // .executeRequest(pdbRequest); + // lastPdbRequest = pdbRequest; + // if (resultList.getSearchSummary() != null + // && !resultList.getSearchSummary().isEmpty()) + // { + // filteredResponse.addAll(resultList.getSearchSummary()); + // } + // } + // + // if (!filteredResponse.isEmpty()) + // { + // final int filterResponseCount = filteredResponse.size(); + // Collection reorderedStructuresSet = new + // LinkedHashSet(); + // reorderedStructuresSet.addAll(filteredResponse); + // reorderedStructuresSet.addAll(discoveredStructuresSet); + // tbl_summary.setModel(PDBRestResponse.getTableModel( + // lastPdbRequest, reorderedStructuresSet)); + // + // // Update the model here + // // ListSelectionModel model = tbl_summary.getSelectionModel(); + // // model.clearSelection(); + // // model.addSelectionInterval(0, filterResponseCount - 1); + // // EventQueue.invokeLater(new Runnable() + // // { + // // public void run() + // // { + // // tbl_summary.addRowSelectionInterval(0, filterResponseCount - 1); + // + // // } + // // }); + // // Discard unwanted objects to make them eligible for garbage + // // collection + // reorderedStructuresSet = null; + // } + // return null; + // } + // + // public void done() + // { + // lbl_loading.setVisible(false); + // tbl_summary.addRowSelectionInterval(0, 2); + // String totalTime = (System.currentTimeMillis() - startTime) + // + " milli secs"; + // mainFrame.setTitle("Structure Chooser - Filter time (" + totalTime + // + ")"); + // validateSelections(); + // } + // }; + // aWorker.execute(); + Thread filterThread = new Thread(new Runnable() { @Override @@ -243,19 +325,25 @@ public class StructureChooser extends GStructureChooser try { lbl_loading.setVisible(true); - pdbRequest.setResponseSize(1); - pdbRequest.setFieldToSearchBy("(text:"); - pdbRequest.setFieldToSortBy(fieldToFilterBy, - !chk_invertFilter.isSelected()); + Collection wantedFields = PDBDocFieldPreferences + .getStructureSummaryFields(); Collection filteredResponse = new HashSet(); for (SequenceI seq : selectedSequences) { + PDBRestRequest pdbRequest = new PDBRestRequest(); + pdbRequest.setAllowEmptySeq(false); + pdbRequest.setResponseSize(1); + pdbRequest.setFieldToSearchBy("(text:"); + pdbRequest.setFieldToSortBy(fieldToFilterBy, + !chk_invertFilter.isSelected()); pdbRequest.setSearchTerm(buildQuery(seq) + ")"); + pdbRequest.setWantedFields(wantedFields); pdbRequest.setAssociatedSequence(seq.getName()); pdbRestCleint = new PDBRestClient(); PDBRestResponse resultList = pdbRestCleint .executeRequest(pdbRequest); + lastPdbRequest = pdbRequest; if (resultList.getSearchSummary() != null && !resultList.getSearchSummary().isEmpty()) { @@ -263,50 +351,49 @@ public class StructureChooser extends GStructureChooser } } - if (filteredResponse != null) + if (!filteredResponse.isEmpty()) { - int filterResponseCount = filteredResponse.size(); - List originalDiscoveredStructuresList = new ArrayList( - discoveredStructuresSet); - originalDiscoveredStructuresList.removeAll(filteredResponse); - Collection reorderedStructuresSet = new ArrayList(); + final int filterResponseCount = filteredResponse.size(); + Collection reorderedStructuresSet = new LinkedHashSet(); reorderedStructuresSet.addAll(filteredResponse); - reorderedStructuresSet.addAll(originalDiscoveredStructuresList); - - tbl_summary.setModel(PDBRestResponse.getTableModel(pdbRequest, - reorderedStructuresSet)); - - ListSelectionModel model = tbl_summary.getSelectionModel(); - model.clearSelection(); - for (int x = 0; x < filterResponseCount; x++) - { - model.addSelectionInterval(x, x); - } - + reorderedStructuresSet.addAll(discoveredStructuresSet); + tbl_summary.setModel(PDBRestResponse.getTableModel( + lastPdbRequest, reorderedStructuresSet)); + + // Update the model here + // ListSelectionModel model = tbl_summary.getSelectionModel(); + // model.clearSelection(); + // model.addSelectionInterval(0, filterResponseCount - 1); + // EventQueue.invokeLater(new Runnable() + // { + // public void run() + // { + tbl_summary.addRowSelectionInterval(0, filterResponseCount - 1); + + // } + // }); // Discard unwanted objects to make them eligible for garbage // collection - originalDiscoveredStructuresList = null; reorderedStructuresSet = null; } lbl_loading.setVisible(false); + String totalTime = (System.currentTimeMillis() - startTime) + + " milli secs"; + mainFrame.setTitle("Structure Chooser - Filter time (" + + totalTime + ")"); + + validateSelections(); } catch (Exception e) { e.printStackTrace(); } - String totalTime = (System.currentTimeMillis() - startTime) - + " milli secs"; - mainFrame.setTitle("Structure Chooser - Filter time (" + totalTime - + ")"); - - validateSelections(); } }); filterThread.start(); } - /** * Handles action event for btn_pdbFromFile */ @@ -409,7 +496,6 @@ public class StructureChooser extends GStructureChooser { validateAssociationFromFile(); } - } /** @@ -504,7 +590,7 @@ public class StructureChooser extends GStructureChooser if (currentView == VIEWS_FILTER) { int pdbIdCol = PDBRestClient.getPDBIdColumIndex( - pdbRequest.getWantedFields(), true); + lastPdbRequest.getWantedFields(), true); int[] selectedRows = tbl_summary.getSelectedRows(); PDBEntry[] pdbEntriesToView = new PDBEntry[selectedRows.length]; int count = 0; @@ -551,12 +637,13 @@ public class StructureChooser extends GStructureChooser * a unique sequence when more than one sequence selection is made. */ public void populateCmbAssociateSeqOptions( - JComboBox cmb_assSeq) + JComboBox cmb_assSeq, JLabel lbl_associateSeq) { cmb_assSeq.removeAllItems(); cmb_assSeq.addItem(new AssociateSeqOptions("-Select Associated Seq-", null)); // cmb_assSeq.addItem(new AssociateSeqOptions("Auto Detect", null)); + lbl_associateSeq.setVisible(false); if (selectedSequences.length > 1) { for (SequenceI seq : selectedSequences) @@ -566,6 +653,10 @@ public class StructureChooser extends GStructureChooser } else { + String seqName = selectedSequence.getDisplayId(false); + seqName = seqName.length() <= 40 ? seqName : seqName.substring(0, 39); + lbl_associateSeq.setText(seqName); + lbl_associateSeq.setVisible(true); cmb_assSeq.setVisible(false); } } @@ -593,7 +684,7 @@ public class StructureChooser extends GStructureChooser { List wantedFields = new ArrayList(); wantedFields.add(PDBDocField.PDB_ID); - pdbRequest = new PDBRestRequest(); + PDBRestRequest pdbRequest = new PDBRestRequest(); pdbRequest.setAllowEmptySeq(false); pdbRequest.setResponseSize(1); pdbRequest.setFieldToSearchBy("(pdb_id:"); @@ -611,4 +702,23 @@ public class StructureChooser extends GStructureChooser validateSelections(); } + @Override + public void tabRefresh() + { + if (selectedSequences != null) + { + Thread refreshThread = new Thread(new Runnable() + { + @Override + public void run() + { + fetchStructuresMetaData(); + filterResultSet(((FilterOption) cmb_filterOption + .getSelectedItem()).getValue()); + } + }); + refreshThread.start(); + } + } + }