extend jmol binding handles selection events and add in a 'refreshPdbEntries' step...
[jalview.git] / src / jalview / io / AMSAFile.java
1 /*
2  * Jalview - A Sequence Alignment Editor and Viewer (Version 2.5)
3  * Copyright (C) 2010 J Procter, AM Waterhouse, G Barton, M Clamp, S Searle
4  * 
5  * This file is part of Jalview.
6  * 
7  * Jalview is free software: you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License 
9  * as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
10  * 
11  * Jalview is distributed in the hope that it will be useful, but 
12  * WITHOUT ANY WARRANTY; without even the implied warranty 
13  * of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
14  * PURPOSE.  See the GNU General Public License for more details.
15  * 
16  * You should have received a copy of the GNU General Public License along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
17  */
18 package jalview.io;
19
20 import jalview.datamodel.*;
21
22 public class AMSAFile extends jalview.io.FastaFile
23 {
24
25   AlignmentI al;
26
27   /**
28    * Creates a new AMSAFile object for output.
29    */
30   public AMSAFile(AlignmentI al)
31   {
32     this.al = al;
33   }
34
35   /**
36    * DOCUMENT ME!
37    * 
38    * @return DOCUMENT ME!
39    */
40   public String print()
41   {
42     super.print(getSeqsAsArray());
43
44     AlignmentAnnotation aa;
45     if (al.getAlignmentAnnotation() != null)
46     {
47
48       for (int i = 0; i < al.getAlignmentAnnotation().length; i++)
49       {
50         aa = al.getAlignmentAnnotation()[i];
51
52         if (aa.autoCalculated || !aa.visible)
53         {
54           continue;
55         }
56
57         out.append(">#_" + aa.label);
58         if (aa.description != null)
59         {
60           out.append(" " + aa.description);
61         }
62
63         out.append("\n");
64
65         int nochunks = Math.min(aa.annotations.length, al.getWidth()) / len
66                 + 1;
67
68         for (int j = 0; j < nochunks; j++)
69         {
70           int start = j * len;
71           int end = start + len;
72           if (end > aa.annotations.length)
73           {
74             end = aa.annotations.length;
75           }
76
77           String ch;
78           for (int k = start; k < end; k++)
79           {
80             if (aa.annotations[k] == null)
81             {
82               ch = " ";
83             }
84             else
85             {
86               ch = aa.annotations[k].displayCharacter;
87             }
88             if (ch.length() > 1)
89             {
90               this.warningMessage = "Truncated column annotation to first letter.";
91               ch = ch.substring(0, 1);
92             }
93             out.append(ch);
94
95           }
96           out.append("\n");
97         }
98       }
99     }
100     return out.toString();
101   }
102 }