JAL-1705 align CDS and peptide products to transcripts
[jalview.git] / src / jalview / gui / AlignFrame.java
index c93b84b..8d54f08 100644 (file)
@@ -32,6 +32,7 @@ import jalview.api.AlignViewControllerI;
 import jalview.api.AlignViewportI;
 import jalview.api.AlignmentViewPanel;
 import jalview.api.FeatureSettingsControllerI;
+import jalview.api.FeatureSettingsI;
 import jalview.api.SplitContainerI;
 import jalview.api.ViewStyleI;
 import jalview.api.analysis.ScoreModelI;
@@ -94,9 +95,11 @@ import jalview.schemes.ZappoColourScheme;
 import jalview.structure.StructureSelectionManager;
 import jalview.util.MessageManager;
 import jalview.viewmodel.AlignmentViewport;
+import jalview.ws.SequenceFetcher;
 import jalview.ws.jws1.Discoverer;
 import jalview.ws.jws2.Jws2Discoverer;
 import jalview.ws.jws2.jabaws2.Jws2Instance;
+import jalview.ws.seqfetcher.ASequenceFetcher;
 import jalview.ws.seqfetcher.DbSourceProxy;
 
 import java.awt.BorderLayout;
@@ -962,7 +965,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
   @Override
   public void fetchSequence_actionPerformed(ActionEvent e)
   {
-    new SequenceFetcher(this);
+    new jalview.gui.SequenceFetcher(this);
   }
 
   @Override
@@ -4722,11 +4725,28 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
            * alternative protein products for my protein's gene
            */
           List<SequenceI> addedPeers = new ArrayList<SequenceI>();
-          AlignmentI alignment = AlignFrame.this.getViewport().getAlignment();
+          AlignmentI alignment = AlignFrame.this.getViewport()
+                  .getAlignment();
           Alignment xrefs = CrossRef.findXrefSequences(sel, dna, source,
                   alignment, addedPeers);
           if (xrefs != null)
           {
+            /*
+             * figure out colour scheme if any to apply to features
+             */
+            ASequenceFetcher sftch = new SequenceFetcher();
+            List<DbSourceProxy> proxies = sftch.getSourceProxy(source);
+            FeatureSettingsI featureColourScheme = null;
+            for (DbSourceProxy proxy : proxies)
+            {
+              FeatureSettingsI preferredColours = proxy
+                      .getFeatureColourScheme();
+              if (preferredColours != null)
+              {
+                featureColourScheme = preferredColours;
+                break;
+              }
+            }
             Alignment al = makeCrossReferencesAlignment(
                     alignment.getDataset(), xrefs);
 
@@ -4760,11 +4780,13 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
               AlignmentI copyAlignment = null;
               final SequenceI[] sequenceSelection = AlignFrame.this.viewport
                       .getSequenceSelection();
+              final char gapChar = AlignFrame.this.viewport
+                      .getGapCharacter();
               List<AlignedCodonFrame> cf = xrefs.getCodonFrames();
               if (dna)
               {
                 copyAlignment = AlignmentUtils.makeCdsAlignment(
-                        sequenceSelection, cf);
+                        sequenceSelection, cf, gapChar);
                 al.getCodonFrames().clear();
                 al.getCodonFrames().addAll(cf);
               }
@@ -4773,6 +4795,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
                 copyAlignment = new Alignment(new Alignment(
                         sequenceSelection));
                 copyAlignment.getCodonFrames().addAll(cf);
+                copyAlignment.setGapCharacter(gapChar);
               }
               StructureSelectionManager ssm = StructureSelectionManager
                       .getStructureSelectionManager(Desktop.instance);
@@ -4790,15 +4813,14 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
               /*
                * align protein to dna
                */
-              // TODO needs debugging
-              // if (dna)
-              // {
-              // al.alignAs(copyAlignment);
-              // }
-              // else
-              // {
-              // copyAlignment.alignAs(al);
-              // }
+              if (dna)
+              {
+                al.alignAs(copyAlignment);
+              }
+              else
+              {
+                copyAlignment.alignAs(al);
+              }
 
               AlignFrame copyThis = new AlignFrame(copyAlignment,
                       AlignFrame.DEFAULT_WIDTH, AlignFrame.DEFAULT_HEIGHT);
@@ -4810,6 +4832,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
               copyThis.setShowSeqFeatures(showSequenceFeatures);
               FeatureRenderer myFeatureStyling = alignPanel.getSeqPanel().seqCanvas
                       .getFeatureRenderer();
+
               /*
                * copy feature rendering settings to split frame
                */
@@ -4819,6 +4842,16 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
               copyThis.alignPanel.getSeqPanel().seqCanvas
                       .getFeatureRenderer().transferSettings(
                               myFeatureStyling);
+
+              /*
+               * apply 'database source' feature configuration
+               * if any was found
+               */
+              newFrame.getViewport()
+                      .applyFeaturesStyle(featureColourScheme);
+              copyThis.getViewport()
+                      .applyFeaturesStyle(featureColourScheme);
+
               SplitFrame sf = new SplitFrame(dna ? copyThis : newFrame,
                       dna ? newFrame : copyThis);
               newFrame.setVisible(true);
@@ -4861,8 +4894,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
        * @param prods
        * @return
        */
-      protected Alignment makeCrossReferencesAlignment(
-Alignment dataset,
+      protected Alignment makeCrossReferencesAlignment(Alignment dataset,
               Alignment prods)
       {
         SequenceI[] sprods = new SequenceI[prods.getHeight()];
@@ -5318,10 +5350,10 @@ Alignment dataset,
               alignPanel.paintAlignment(true);
             }
           }
-            else
-            {
-              new FileLoader().LoadFile(viewport, file, protocol, format);
-            }
+          else
+          {
+            new FileLoader().LoadFile(viewport, file, protocol, format);
+          }
         }
       }
       if (isAnnotation)
@@ -5529,14 +5561,11 @@ Alignment dataset,
           @Override
           public void run()
           {
-            boolean isNuclueotide = alignPanel.alignFrame
-                    .getViewport().getAlignment()
-                    .isNucleotide();
+            boolean isNuclueotide = alignPanel.alignFrame.getViewport()
+                    .getAlignment().isNucleotide();
             new jalview.ws.DBRefFetcher(alignPanel.av
-                    .getSequenceSelection(),
-                    alignPanel.alignFrame, null,
-                    alignPanel.alignFrame.featureSettings,
-                    isNuclueotide)
+                    .getSequenceSelection(), alignPanel.alignFrame, null,
+                    alignPanel.alignFrame.featureSettings, isNuclueotide)
                     .fetchDBRefs(false);
           }
         }).start();
@@ -5551,7 +5580,7 @@ Alignment dataset,
       @Override
       public void run()
       {
-        final jalview.ws.SequenceFetcher sf = SequenceFetcher
+        final jalview.ws.SequenceFetcher sf = jalview.gui.SequenceFetcher
                 .getSequenceFetcherSingleton(me);
         javax.swing.SwingUtilities.invokeLater(new Runnable()
         {
@@ -5612,8 +5641,7 @@ Alignment dataset,
                                 .getSequenceSelection(),
                                 alignPanel.alignFrame, dassource,
                                 alignPanel.alignFrame.featureSettings,
-                                isNuclueotide)
-                                .fetchDBRefs(false);
+                                isNuclueotide).fetchDBRefs(false);
                       }
                     }).start();
                   }
@@ -5653,8 +5681,7 @@ Alignment dataset,
                                 .getSequenceSelection(),
                                 alignPanel.alignFrame, dassource,
                                 alignPanel.alignFrame.featureSettings,
-                                isNuclueotide)
-                                .fetchDBRefs(false);
+                                isNuclueotide).fetchDBRefs(false);
                       }
                     }).start();
                   }
@@ -5709,8 +5736,7 @@ Alignment dataset,
                                   .getSequenceSelection(),
                                   alignPanel.alignFrame, dassrc,
                                   alignPanel.alignFrame.featureSettings,
-                                  isNuclueotide)
-                                  .fetchDBRefs(false);
+                                  isNuclueotide).fetchDBRefs(false);
                         }
                       }).start();
                     }