(JAL-978) refactored JABAWS2 service handle class to own package
[jalview.git] / src / jalview / gui / AppVarna.java
index bc83400..9054298 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * Jalview - A Sequence Alignment Editor and Viewer (Version 2.6)
- * Copyright (C) 2010 J Procter, AM Waterhouse, G Barton, M Clamp, S Searle
+ * Jalview - A Sequence Alignment Editor and Viewer (Version 2.7)
+ * Copyright (C) 2011 J Procter, AM Waterhouse, J Engelhardt, LM Lui, G Barton, M Clamp, S Searle
  * 
  * This file is part of Jalview.
  * 
 package jalview.gui;
 
 import java.util.*;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 import java.awt.*;
+
 import javax.swing.*;
 import javax.swing.event.*;
 
@@ -38,12 +41,12 @@ import fr.orsay.lri.varna.exceptions.ExceptionNonEqualLength;
 import fr.orsay.lri.varna.exceptions.ExceptionUnmatchedClosingParentheses;
 import fr.orsay.lri.varna.interfaces.InterfaceVARNAListener;
 import fr.orsay.lri.varna.models.VARNAConfig;
+import fr.orsay.lri.varna.models.annotations.HighlightRegionAnnotation;
 import fr.orsay.lri.varna.models.rna.ModeleBaseNucleotide;
-import fr.orsay.lri.varna.models.rna.ModeleStyleBP;
 import fr.orsay.lri.varna.models.rna.RNA;
 
 
-public class AppVarna extends JInternalFrame implements InterfaceVARNAListener// implements Runnable,SequenceStructureBinding, ViewSetProvider
+public class AppVarna extends JInternalFrame implements InterfaceVARNAListener,SecondaryStructureListener// implements Runnable,SequenceStructureBinding, ViewSetProvider
 
 {
   AppVarnaBinding vab;
@@ -52,16 +55,20 @@ public class AppVarna extends JInternalFrame implements InterfaceVARNAListener//
   
   public String name;
   
+  public StructureSelectionManager ssm;
+  
   /*public AppVarna(){
          vab = new AppVarnaBinding(); 
          initVarna();
   }*/
   
-  public AppVarna(String seq,String struc,String name){
+  
+  public AppVarna(String seq,String struc,String name,AlignmentPanel ap){
          ArrayList<RNA> rnaList = new ArrayList<RNA>();
          RNA rna1 = new RNA(name);
          try {
-                 rna1.setRNA(seq,struc);
+                 rna1.setRNA(seq,replaceOddGaps(struc));
          } catch (ExceptionUnmatchedClosingParentheses e2) {
                e2.printStackTrace();
          } catch (ExceptionFileFormatOrSyntax e3) {
@@ -76,7 +83,9 @@ public class AppVarna extends JInternalFrame implements InterfaceVARNAListener//
          //vab = new AppVarnaBinding(seq,struc);
          //System.out.println("Hallo: "+name);
          this.name=name;
-         initVarna();    
+         initVarna();
+      ssm = ap.getStructureSelectionManager();
+         ssm.addStructureViewerListener(this);
   }
   
   public void initVarna(){
@@ -86,17 +95,26 @@ public class AppVarna extends JInternalFrame implements InterfaceVARNAListener//
          JSplitPane split = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,true,vab.getListPanel(),varnaPanel);
          getContentPane().setLayout(new BorderLayout());
          getContentPane().add(split, BorderLayout.CENTER);
-         getContentPane().add(vab.getTools(), BorderLayout.NORTH);     
+         //getContentPane().add(vab.getTools(), BorderLayout.NORTH);   
          varnaPanel.addVARNAListener(this);
          jalview.gui.Desktop.addInternalFrame(this,"VARNA -"+name,getBounds().width, getBounds().height);
          this.pack();
          showPanel(true);
   }
   
+  public String replaceOddGaps(String oldStr){
+         String patternStr = "[^([{<>}])]";
+      String replacementStr = ".";
+      Pattern pattern = Pattern.compile(patternStr);
+      Matcher matcher = pattern.matcher(oldStr);
+      String newStr=matcher.replaceAll(replacementStr);
+         return newStr;
+  }
+  
   public RNA trimRNA(RNA rna){
          RNA rnaTrim = new RNA("trim_"+rna.getName());
          try {
-                 rnaTrim.setRNA(rna.getSeq(),rna.getStructDBN());
+                 rnaTrim.setRNA(rna.getSeq(),replaceOddGaps(rna.getStructDBN()));
          } catch (ExceptionUnmatchedClosingParentheses e2) {
                e2.printStackTrace();
          } catch (ExceptionFileFormatOrSyntax e3) {
@@ -106,9 +124,10 @@ public class AppVarna extends JInternalFrame implements InterfaceVARNAListener//
          StringBuffer seq=new StringBuffer(rnaTrim.getSeq());
          StringBuffer struc=new StringBuffer(rnaTrim.getStructDBN());
          for(int i=0;i<rnaTrim.getSeq().length();i++){
+                 //TODO: Jalview utility for gap detection java.utils.isGap()
+                 //TODO: Switch to jalview rna datamodel
                  if(seq.substring(i, i+1).compareTo("-")==0 || seq.substring(i, i+1).compareTo(".")==0){
                          if(!rnaTrim.findPair(i).isEmpty()){
-                                 System.out.println(rnaTrim.findPair(i));
                                  int m=rnaTrim.findPair(i).get(1);
                                  int l=rnaTrim.findPair(i).get(0);
                                  
@@ -159,23 +178,48 @@ public class AppVarna extends JInternalFrame implements InterfaceVARNAListener//
   }
 
 @Override
-public void onLayoutChanged() {
+public void onUINewStructure(VARNAConfig v, RNA r) {
        // TODO Auto-generated method stub
        
 }
 
 @Override
-public void onUINewStructure(VARNAConfig v, RNA r) {
-       //TODO _rnaList.add(v, r,"",true);
+public void onWarningEmitted(String s) {
+       // TODO Auto-generated method stub
+       
+}
+/**
+ * If a mouseOver event from the AlignmentPanel 
+ * is noticed the currently selected RNA in the 
+ * VARNA window is highlighted at the specific position. 
+ * To be able to remove it before the next highlight
+ * it is saved in _lastHighlight
+ */
+private  HighlightRegionAnnotation _lastHighlight;
+@Override
+public void mouseOverSequence(SequenceI sequence, int index) {
        // TODO Auto-generated method stub
+       RNA rna=vab.getSelectedRNA();
+       rna.removeHighlightRegion(_lastHighlight);
        
+       HighlightRegionAnnotation highlight = new HighlightRegionAnnotation(rna.getBasesBetween(index,index));
+       rna.addHighlightRegion(highlight);
+       _lastHighlight=highlight;
+       vab.updateSelectedRNA(rna);
 }
 
 @Override
-public void onWarningEmitted(String s) {
+public void mouseOverStructure(int atomIndex, String strInfo) {
        // TODO Auto-generated method stub
        
 }
+
+@Override
+public void onStructureRedrawn()
+{
+  // TODO Auto-generated method stub
   
+}
+
 
 }