JAL-1432 updated copyright notices
[jalview.git] / src / jalview / io / AMSAFile.java
1 /*
2  * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.0b1)
3  * Copyright (C) 2014 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 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  * The Jalview Authors are detailed in the 'AUTHORS' file.
18  */
19 package jalview.io;
20
21 import jalview.datamodel.*;
22
23 public class AMSAFile extends jalview.io.FastaFile
24 {
25
26   AlignmentI al;
27
28   /**
29    * Creates a new AMSAFile object for output.
30    */
31   public AMSAFile(AlignmentI al)
32   {
33     this.al = al;
34   }
35
36   /**
37    * DOCUMENT ME!
38    * 
39    * @return DOCUMENT ME!
40    */
41   public String print()
42   {
43     super.print(getSeqsAsArray());
44
45     AlignmentAnnotation aa;
46     if (al.getAlignmentAnnotation() != null)
47     {
48
49       for (int i = 0; i < al.getAlignmentAnnotation().length; i++)
50       {
51         aa = al.getAlignmentAnnotation()[i];
52
53         if (aa.autoCalculated || !aa.visible)
54         {
55           continue;
56         }
57
58         out.append(">#_" + aa.label);
59         if (aa.description != null)
60         {
61           out.append(" " + aa.description);
62         }
63
64         out.append(newline);
65
66         int nochunks = Math.min(aa.annotations.length, al.getWidth()) / len
67                 + 1;
68
69         for (int j = 0; j < nochunks; j++)
70         {
71           int start = j * len;
72           int end = start + len;
73           if (end > aa.annotations.length)
74           {
75             end = aa.annotations.length;
76           }
77
78           String ch;
79           for (int k = start; k < end; k++)
80           {
81             if (aa.annotations[k] == null)
82             {
83               ch = " ";
84             }
85             else
86             {
87               ch = aa.annotations[k].displayCharacter;
88             }
89             if (ch.length() > 1)
90             {
91               this.warningMessage = "Truncated column annotation to first letter.";
92               ch = ch.substring(0, 1);
93             }
94             out.append(ch);
95
96           }
97           out.append(newline);
98         }
99       }
100     }
101     return out.toString();
102   }
103 }