JAL-1645 Version-Rel Version 2.9 Year-Rel 2015 Licensing glob
[jalview.git] / src / jalview / io / AMSAFile.java
1 /*
2  * Jalview - A Sequence Alignment Editor and Viewer (Version 2.9)
3  * Copyright (C) 2015 The Jalview Authors
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
10  * of the License, or (at your option) any later version.
11  *  
12  * Jalview is distributed in the hope that it will be useful, but 
13  * WITHOUT ANY WARRANTY; without even the implied warranty 
14  * of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
15  * PURPOSE.  See the GNU General Public License for more details.
16  * 
17  * You should have received a copy of the GNU General Public License
18  * along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
19  * The Jalview Authors are detailed in the 'AUTHORS' file.
20  */
21 package jalview.io;
22
23 import jalview.datamodel.AlignmentAnnotation;
24 import jalview.datamodel.AlignmentI;
25
26 public class AMSAFile extends jalview.io.FastaFile
27 {
28
29   AlignmentI al;
30
31   /**
32    * Creates a new AMSAFile object for output.
33    */
34   public AMSAFile(AlignmentI al)
35   {
36     this.al = al;
37   }
38
39   /**
40    * DOCUMENT ME!
41    * 
42    * @return DOCUMENT ME!
43    */
44   public String print()
45   {
46     super.print(getSeqsAsArray());
47
48     AlignmentAnnotation aa;
49     if (al.getAlignmentAnnotation() != null)
50     {
51
52       for (int i = 0; i < al.getAlignmentAnnotation().length; i++)
53       {
54         aa = al.getAlignmentAnnotation()[i];
55
56         if (aa.autoCalculated || !aa.visible)
57         {
58           continue;
59         }
60
61         out.append(">#_" + aa.label);
62         if (aa.description != null)
63         {
64           out.append(" " + aa.description);
65         }
66
67         out.append(newline);
68
69         int nochunks = Math.min(aa.annotations.length, al.getWidth()) / len
70                 + 1;
71
72         for (int j = 0; j < nochunks; j++)
73         {
74           int start = j * len;
75           int end = start + len;
76           if (end > aa.annotations.length)
77           {
78             end = aa.annotations.length;
79           }
80
81           String ch;
82           for (int k = start; k < end; k++)
83           {
84             if (aa.annotations[k] == null)
85             {
86               ch = " ";
87             }
88             else
89             {
90               ch = aa.annotations[k].displayCharacter;
91             }
92             if (ch.length() > 1)
93             {
94               this.warningMessage = "Truncated column annotation to first letter.";
95               ch = ch.substring(0, 1);
96             }
97             out.append(ch);
98
99           }
100           out.append(newline);
101         }
102       }
103     }
104     return out.toString();
105   }
106 }