JAL-1700 made PDB service error mechanism more user friendly
[jalview.git] / src / jalview / gui / StructureChooser.java
index ff7cdcb..015cd8e 100644 (file)
@@ -165,7 +165,7 @@ public class StructureChooser extends GStructureChooser
               && !resultList.getSearchSummary().isEmpty())
       {
         discoveredStructuresSet.addAll(resultList.getSearchSummary());
-        updateSequenceDbRef(seq, resultList.getSearchSummary());
+        updateSequencePDBEntries(seq, resultList.getSearchSummary());
       }
     }
 
@@ -188,8 +188,8 @@ public class StructureChooser extends GStructureChooser
 .setTitle("Structure Chooser - Manual association");
       if (errors.size() > 0)
       {
-        StringBuilder errorMsg = new StringBuilder(
-                "Operation was unsucessful due to the following: \n");
+        StringBuilder errorMsg = new StringBuilder();
+        // "Operation was unsucessful due to the following: \n");
         for (String error : errors)
         {
           errorMsg.append(error).append("\n");
@@ -216,6 +216,7 @@ public class StructureChooser extends GStructureChooser
       {
         for (PDBEntry pdbEntry : seq.getDatasetSequence().getPDBId())
         {
+
           String chain = pdbEntry.getChainCode() == null ? "_" : pdbEntry
                   .getChainCode();
           String[] pdbEntryRowData = new String[]
@@ -223,7 +224,10 @@ public class StructureChooser extends GStructureChooser
  chain,
               pdbEntry.getType(),
               pdbEntry.getFile() };
-          tableModel.addRow(pdbEntryRowData);
+          if (pdbEntry.getFile() != null)
+          {
+            tableModel.addRow(pdbEntryRowData);
+          }
           cachedEntryMap.put(pdbEntry.getId().toLowerCase(),
                   pdbEntry);
         }
@@ -233,7 +237,7 @@ public class StructureChooser extends GStructureChooser
   }
 
   /**
-   * Update the DBRef entry for a given sequence with values retrieved from
+   * Update the PDBEntry for a given sequence with values retrieved from
    * PDBResponseSummary
    * 
    * @param seq
@@ -241,15 +245,20 @@ public class StructureChooser extends GStructureChooser
    * @param responseSummaries
    *          a collection of PDBResponseSummary
    */
-  public void updateSequenceDbRef(SequenceI seq,
+  public void updateSequencePDBEntries(SequenceI seq,
           Collection<PDBResponseSummary> responseSummaries)
   {
     for (PDBResponseSummary response : responseSummaries)
     {
-      PDBEntry newEntry = new PDBEntry();
-      newEntry.setId(response.getPdbId());
-      newEntry.setType(PDBEntry.Type.PDB);
-      seq.getDatasetSequence().addPDBId(newEntry);
+      String pdbIdStr = response.getPdbId();
+      PDBEntry pdbEntry = cachedEntryMap.get(pdbIdStr.toLowerCase());
+      if (pdbEntry == null)
+      {
+        pdbEntry = new PDBEntry();
+        pdbEntry.setId(pdbIdStr);
+        pdbEntry.setType(PDBEntry.Type.PDB);
+      }
+      seq.getDatasetSequence().addPDBId(pdbEntry);
     }
   }
 
@@ -552,6 +561,21 @@ public class StructureChooser extends GStructureChooser
     AssociateSeqOptions assSeqOpt = (AssociateSeqOptions) idInputAssSeqPanel
             .getCmb_assSeq().getSelectedItem();
     lbl_pdbManualFetchStatus.setIcon(errorImage);
+    lbl_pdbManualFetchStatus.setToolTipText("");
+    if (txt_search.getText().length() > 0)
+    {
+      lbl_pdbManualFetchStatus.setToolTipText(JvSwingUtils.wrapTooltip(
+              true, "No PDB entry found for \'" + txt_search.getText()
+                      + "\'"));
+    }
+
+    if (errorWarning.length() > 0)
+    {
+      lbl_pdbManualFetchStatus.setIcon(warningImage);
+      lbl_pdbManualFetchStatus.setToolTipText(JvSwingUtils.wrapTooltip(
+              true, errorWarning.toString()));
+    }
+
     if (selectedSequences.length == 1
             || !assSeqOpt.getName().equalsIgnoreCase(
                     "-Select Associated Seq-"))
@@ -560,6 +584,7 @@ public class StructureChooser extends GStructureChooser
       if (isValidPBDEntry)
       {
         btn_view.setEnabled(true);
+        lbl_pdbManualFetchStatus.setToolTipText("");
         lbl_pdbManualFetchStatus.setIcon(goodImage);
       }
     }
@@ -780,6 +805,7 @@ public class StructureChooser extends GStructureChooser
   @Override
   protected void txt_search_ActionPerformed()
   {
+    errorWarning.setLength(0);
     isValidPBDEntry = false;
     if (txt_search.getText().length() > 0)
     {
@@ -799,12 +825,13 @@ public class StructureChooser extends GStructureChooser
         resultList = pdbRestCleint.executeRequest(pdbRequest);
       } catch (Exception e)
       {
-        JOptionPane.showMessageDialog(this, e.getMessage(),
-                "PDB Web-service Error", JOptionPane.ERROR_MESSAGE);
+        // JOptionPane.showMessageDialog(this, e.getMessage(),
+        // "PDB Web-service Error", JOptionPane.ERROR_MESSAGE);
+        errorWarning.append(e.getMessage());
         return;
       } finally
       {
-        System.out.println(">>>>> executing finally block");
+        // System.out.println(">>>>> executing finally block");
         validateSelections();
       }
       if (resultList.getSearchSummary() != null
@@ -835,5 +862,4 @@ public class StructureChooser extends GStructureChooser
     }
   }
 
-
 }