X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FStructureViewer.java;h=cc4a033feef508b162a8fff84139e04ca5256c7f;hb=d043ce47fc710d3eb2629ba926a8a7417bd67d8c;hp=4db614091588ed1adf01030307c08a35f86838d6;hpb=49db0dff1da16c3355b43a41498c1fc93ef47e91;p=jalview.git diff --git a/src/jalview/gui/StructureViewer.java b/src/jalview/gui/StructureViewer.java index 4db6140..cc4a033 100644 --- a/src/jalview/gui/StructureViewer.java +++ b/src/jalview/gui/StructureViewer.java @@ -28,10 +28,18 @@ import java.util.Map; import java.util.Map.Entry; import jalview.api.structures.JalviewStructureDisplayI; import jalview.bin.Cache; +import jalview.bin.Console; import jalview.datamodel.PDBEntry; import jalview.datamodel.SequenceI; import jalview.datamodel.StructureViewerModel; +import jalview.structure.StructureMapping; import jalview.structure.StructureSelectionManager; +import jalview.util.MessageManager; +import jalview.util.Platform; +import jalview.ws.DBRefFetcher; +import jalview.ws.seqfetcher.DbSourceProxy; +import jalview.ws.sifts.SiftsSettings; + /** @@ -73,7 +81,8 @@ public class StructureViewer * * @param structureSelectionManager */ - public StructureViewer(StructureSelectionManager structureSelectionManager) + public StructureViewer( + StructureSelectionManager structureSelectionManager) { ssm = structureSelectionManager; } @@ -90,7 +99,6 @@ public class StructureViewer return sv; } - @Override public String toString() { @@ -100,9 +108,10 @@ public class StructureViewer } return "New View"; } + /** * - * @return ViewerType for currently configured structure viewer + * @return ViewerType for currently configured structure viewer */ public static ViewerType getViewerType() { @@ -140,10 +149,10 @@ public class StructureViewer Map seqsForPdbs = getSequencesForPdbs(pdbs, seqs); - PDBEntry[] pdbsForFile = seqsForPdbs.keySet().toArray( - new PDBEntry[seqsForPdbs.size()]); - SequenceI[][] theSeqs = seqsForPdbs.values().toArray( - new SequenceI[seqsForPdbs.size()][]); + PDBEntry[] pdbsForFile = seqsForPdbs.keySet() + .toArray(new PDBEntry[seqsForPdbs.size()]); + SequenceI[][] theSeqs = seqsForPdbs.values() + .toArray(new SequenceI[seqsForPdbs.size()][]); if (sview != null) { sview.setAlignAddedStructures(superposeAdded); @@ -190,7 +199,7 @@ public class StructureViewer } else { - Cache.log.error(UNKNOWN_VIEWER_TYPE + getViewerType().toString()); + Console.error(UNKNOWN_VIEWER_TYPE + getViewerType().toString()); } return sview; } @@ -338,7 +347,7 @@ public class StructureViewer } else { - Cache.log.error(UNKNOWN_VIEWER_TYPE + getViewerType().toString()); + Console.error(UNKNOWN_VIEWER_TYPE + getViewerType().toString()); } return sview; } @@ -380,7 +389,7 @@ public class StructureViewer viewer = new PymolViewer(viewerData, alignPanel, sessionFile, vid); break; default: - Cache.log.error(UNKNOWN_VIEWER_TYPE + type.toString()); + Console.error(UNKNOWN_VIEWER_TYPE + type.toString()); } return viewer; } @@ -422,4 +431,119 @@ public class StructureViewer superposeAdded = alignAddedStructures; } + /** + * Launch a minimal implementation of a StructureViewer. + * + * @param alignPanel + * @param pdb + * @param seqs + * @return + */ + public static StructureViewer launchStructureViewer( + AlignmentPanel alignPanel, PDBEntry pdb, SequenceI[] seqs) + { + return launchStructureViewer(alignPanel, new PDBEntry[] { pdb }, seqs, + false, null, null); + } + + /** + * Adds PDB structures to a new or existing structure viewer + * + * @param ssm + * @param pdbEntriesToView + * @param alignPanel + * @param sequences + * @return + */ + protected static StructureViewer launchStructureViewer( + final AlignmentPanel ap, final PDBEntry[] pdbEntriesToView, + SequenceI[] sequences, boolean superimpose, + StructureViewer theViewer, IProgressIndicator pb) + { + final StructureSelectionManager ssm = ap.getStructureSelectionManager(); + if (theViewer == null) + theViewer = new StructureViewer(ssm); + long progressId = sequences.hashCode(); + if (pb != null) + pb.setProgressBar(MessageManager.getString( + "status.launching_3d_structure_viewer"), progressId); + theViewer.setSuperpose(superimpose); + + /* + * remember user's choice of superimpose or not + */ + Cache.setProperty(StructureChooser.AUTOSUPERIMPOSE, + Boolean.valueOf(superimpose).toString()); + + if (pb != null) + pb.setProgressBar(null, progressId); + if (SiftsSettings.isMapWithSifts()) + { + List seqsWithoutSourceDBRef = new ArrayList<>(); + int p = 0; + // TODO: skip PDBEntry:Sequence pairs where PDBEntry doesn't look like a + // real PDB ID. For moment, we can also safely do this if there is already + // a known mapping between the PDBEntry and the sequence. + for (SequenceI seq : sequences) + { + PDBEntry pdbe = pdbEntriesToView[p++]; + if (pdbe != null && pdbe.getFile() != null) + { + StructureMapping[] smm = ssm.getMapping(pdbe.getFile()); + if (smm != null && smm.length > 0) + { + for (StructureMapping sm : smm) + { + if (sm.getSequence() == seq) + { + continue; + } + } + } + } + if (seq.getPrimaryDBRefs().isEmpty()) + { + seqsWithoutSourceDBRef.add(seq); + continue; + } + } + if (!seqsWithoutSourceDBRef.isEmpty()) + { + int y = seqsWithoutSourceDBRef.size(); + if (pb != null) + pb.setProgressBar(MessageManager.formatMessage( + "status.fetching_dbrefs_for_sequences_without_valid_refs", + y), progressId); + SequenceI[] seqWithoutSrcDBRef = seqsWithoutSourceDBRef + .toArray(new SequenceI[y]); + DBRefFetcher dbRefFetcher = new DBRefFetcher(seqWithoutSrcDBRef); + dbRefFetcher.fetchDBRefs(true); + + if (pb != null) + pb.setProgressBar("Fetch complete.", progressId); // todo i18n + } + } + if (pdbEntriesToView.length > 1) + { + if (pb != null) + pb.setProgressBar(MessageManager.getString( + "status.fetching_3d_structures_for_selected_entries"), + progressId); + theViewer.viewStructures(pdbEntriesToView, sequences, ap); + } + else + { + if (pb != null) + pb.setProgressBar(MessageManager.formatMessage( + "status.fetching_3d_structures_for", + pdbEntriesToView[0].getId()), progressId); + theViewer.viewStructures(pdbEntriesToView[0], sequences, ap); + } + if (pb != null) + pb.setProgressBar(null, progressId); + // remember the last viewer we used... + StructureChooser.lastTargetedView = theViewer; + return theViewer; + } + }