JAL-1645 Version-Rel Version 2.9 Year-Rel 2015 Licensing glob
[jalview.git] / src / jalview / ws / rest / params / SeqIdVector.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.ws.rest.params;
22
23 import jalview.datamodel.AlignmentI;
24 import jalview.datamodel.SequenceI;
25 import jalview.ws.params.OptionI;
26 import jalview.ws.params.simple.Option;
27 import jalview.ws.rest.InputType;
28 import jalview.ws.rest.NoValidInputDataException;
29 import jalview.ws.rest.RestJob;
30
31 import java.io.UnsupportedEncodingException;
32 import java.util.ArrayList;
33 import java.util.Arrays;
34 import java.util.List;
35
36 import org.apache.http.entity.mime.content.ContentBody;
37 import org.apache.http.entity.mime.content.StringBody;
38
39 /**
40  * input a list of sequence IDs separated by some separator
41  * 
42  * @author JimP
43  * 
44  */
45 public class SeqIdVector extends InputType
46 {
47   public SeqIdVector()
48   {
49     super(new Class[] { AlignmentI.class });
50   }
51
52   /**
53    * separator for list of sequence IDs - default is ','
54    */
55   String sep = ",";
56
57   molType type;
58
59   @Override
60   public ContentBody formatForInput(RestJob rj)
61           throws UnsupportedEncodingException, NoValidInputDataException
62   {
63     StringBuffer idvector = new StringBuffer();
64     boolean list = false;
65     for (SequenceI seq : rj.getSequencesForInput(token, type))
66     {
67       if (list)
68       {
69         idvector.append(sep);
70       }
71       idvector.append(seq.getName());
72     }
73     return new StringBody(idvector.toString());
74   }
75
76   @Override
77   public List<String> getURLEncodedParameter()
78   {
79     ArrayList<String> prms = new ArrayList<String>();
80     super.addBaseParams(prms);
81     prms.add("sep='" + sep + "'");
82     if (type != null)
83     {
84       prms.add("type='" + type + "'");
85     }
86     return prms;
87   }
88
89   @Override
90   public String getURLtokenPrefix()
91   {
92     return "SEQIDS";
93   }
94
95   @Override
96   public boolean configureProperty(String tok, String val,
97           StringBuffer warnings)
98   {
99     if (tok.startsWith("sep"))
100     {
101       sep = val;
102       return true;
103     }
104     if (tok.startsWith("type"))
105     {
106       try
107       {
108         type = molType.valueOf(val);
109         return true;
110       } catch (Exception x)
111       {
112         warnings.append("Invalid molecule type '" + val
113                 + "'. Must be one of (");
114         for (molType v : molType.values())
115         {
116           warnings.append(" " + v);
117         }
118         warnings.append(")\n");
119       }
120     }
121     return false;
122   }
123
124   @Override
125   public List<OptionI> getOptions()
126   {
127     List<OptionI> lst = getBaseOptions();
128     lst.add(new Option("sep",
129             "Separator character between elements of vector", true, ",",
130             sep, Arrays.asList(new String[] { " ", ",", ";", "\t", "|" }),
131             null));
132     lst.add(createMolTypeOption("type", "Sequence type", false, type, null));
133     return lst;
134   }
135 }