Clover icon

Coverage Report

  1. Project Clover database Wed Nov 13 2024 18:27:33 GMT
  2. Package jalview.ws.rest.params

File Alignment.java

 

Coverage histogram

../../../../img/srcFileCovDistChart6.png
36% of files have more coverage

Code metrics

18
54
6
1
208
158
18
0.33
9
6
3

Classes

Class Line # Actions
Alignment 54 54 18
0.5128205451.3%
 

Contributing tests

This file is covered by 206 tests. .

Source view

1    /*
2    * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
3    * Copyright (C) $$Year-Rel$$ 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.ws.rest.params;
22   
23    import jalview.datamodel.AlignmentI;
24    import jalview.io.FileFormat;
25    import jalview.io.FileFormatI;
26    import jalview.io.FileFormats;
27    import jalview.io.FormatAdapter;
28    import jalview.ws.params.OptionI;
29    import jalview.ws.params.simple.BooleanOption;
30    import jalview.ws.params.simple.Option;
31    import jalview.ws.rest.InputType;
32    import jalview.ws.rest.NoValidInputDataException;
33    import jalview.ws.rest.RestJob;
34   
35    import java.io.BufferedOutputStream;
36    import java.io.File;
37    import java.io.FileOutputStream;
38    import java.io.OutputStreamWriter;
39    import java.io.PrintWriter;
40    import java.io.UnsupportedEncodingException;
41    import java.util.ArrayList;
42    import java.util.List;
43   
44    import org.apache.http.entity.mime.content.ContentBody;
45    import org.apache.http.entity.mime.content.FileBody;
46    import org.apache.http.entity.mime.content.StringBody;
47   
48    /**
49    * format an alignment for input to rest service.
50    *
51    * @author JimP
52    *
53    */
 
54    public class Alignment extends InputType
55    {
 
56  6748 toggle public Alignment()
57    {
58  6748 super(new Class[] { AlignmentI.class });
59    }
60   
61    FileFormatI format = FileFormat.Fasta;
62   
63    molType type;
64   
65    boolean jvsuffix = false;
66   
67    /**
68    * input data as a file upload rather than inline content
69    */
70    public boolean writeAsFile = false;
71   
 
72  2 toggle @Override
73    public ContentBody formatForInput(RestJob rj)
74    throws UnsupportedEncodingException, NoValidInputDataException
75    {
76  2 AlignmentI alignment = rj.getAlignmentForInput(token, type);
77  2 if (writeAsFile)
78    {
79  2 try
80    {
81  2 File fa = File.createTempFile("jvmime", ".fa");
82  2 PrintWriter pw = new PrintWriter(new OutputStreamWriter(
83    new BufferedOutputStream(new FileOutputStream(fa)),
84    "UTF-8"));
85  2 pw.append(new FormatAdapter().formatSequences(format, alignment,
86    jvsuffix));
87  2 pw.close();
88  2 return new FileBody(fa, "text/plain");
89    } catch (Exception ex)
90    {
91  0 throw new NoValidInputDataException(
92    "Couldn't write out alignment to file.", ex);
93    }
94    }
95    else
96    {
97  0 FormatAdapter fa = new FormatAdapter();
98  0 fa.setNewlineString("\r\n");
99  0 return new StringBody(
100    (fa.formatSequences(format, alignment, jvsuffix)));
101    // ,
102    // "text/plain",Charset.forName("UTF-8"));
103    // , "text/plain", Charset.forName("UTF-8"));
104    // sb.getContentTypeParameters().put("filename", "alignment.fa");
105    }
106    }
107   
 
108  30 toggle @Override
109    public List<String> getURLEncodedParameter()
110    {
111  30 List<String> prms = new ArrayList<String>();
112  30 prms.add("format='" + format.getName() + "'");
113  30 if (type != null)
114    {
115  0 prms.add("type='" + type.toString() + "'");
116    }
117  30 if (jvsuffix)
118    {
119  0 prms.add("jvsuffix");
120    }
121  30 if (writeAsFile)
122    {
123  30 prms.add("writeasfile");
124    }
125  30 return prms;
126    }
127   
 
128  6755 toggle @Override
129    public String getURLtokenPrefix()
130    {
131  6755 return "ALIGNMENT";
132    }
133   
 
134  6740 toggle @Override
135    public boolean configureProperty(String tok, String val,
136    StringBuffer warnings)
137    {
138  6740 if (tok.startsWith("jvsuffix"))
139    {
140  0 jvsuffix = true;
141  0 return true;
142    }
143  6740 if (tok.startsWith("writeasfile"))
144    {
145  3370 writeAsFile = true;
146  3370 return true;
147    }
148   
149  3370 if (tok.startsWith("format"))
150    {
151  3370 for (FileFormatI fmt : FileFormats.getInstance().getFormats())
152    {
153  3370 if (fmt.isWritable() && val.equalsIgnoreCase(fmt.getName()))
154    {
155  3370 format = fmt;
156  3370 return true;
157    }
158    }
159  0 warnings.append(
160    "Invalid alignment format '" + val + "'. Must be one of (");
161  0 for (String fmt : FileFormats.getInstance().getWritableFormats(true))
162    {
163  0 warnings.append(" ").append(fmt);
164    }
165  0 warnings.append(")\n");
166    }
167  0 if (tok.startsWith("type"))
168    {
169  0 try
170    {
171  0 type = molType.valueOf(val);
172  0 return true;
173    } catch (Exception x)
174    {
175  0 warnings.append(
176    "Invalid molecule type '" + val + "'. Must be one of (");
177  0 for (molType v : molType.values())
178    {
179  0 warnings.append(" " + v);
180    }
181  0 warnings.append(")\n");
182    }
183    }
184  0 return false;
185    }
186   
 
187  0 toggle @Override
188    public List<OptionI> getOptions()
189    {
190  0 List<OptionI> lst = getBaseOptions();
191  0 lst.add(new BooleanOption("jvsuffix",
192    "Append jalview style /start-end suffix to ID", false, false,
193    jvsuffix, null));
194  0 lst.add(new BooleanOption("writeasfile",
195    "Append jalview style /start-end suffix to ID", false, false,
196    writeAsFile, null));
197   
198  0 List<String> writable = FileFormats.getInstance()
199    .getWritableFormats(true);
200  0 lst.add(new Option("format", "Alignment upload format", true,
201    FileFormat.Fasta.toString(), format.getName(), writable, null));
202  0 lst.add(createMolTypeOption("type", "Sequence type", false, type,
203    null));
204   
205  0 return lst;
206    }
207   
208    }