5f7c5519ee72aecdc93a2a3cdd51aac1c34e5500
[jalview.git] / src / jalview / ws / rest / params / SeqIdVector.java
1 package jalview.ws.rest.params;
2
3 import jalview.datamodel.AlignmentI;
4 import jalview.datamodel.SequenceI;
5 import jalview.ws.rest.InputType;
6 import jalview.ws.rest.NoValidInputDataException;
7 import jalview.ws.rest.RestJob;
8 import jalview.ws.rest.RestServiceDescription;
9 import jalview.ws.rest.InputType.molType;
10
11 import java.io.UnsupportedEncodingException;
12 import java.util.ArrayList;
13 import java.util.List;
14 import java.util.regex.Matcher;
15 import java.util.regex.Pattern;
16
17 import org.apache.http.entity.mime.content.ContentBody;
18 import org.apache.http.entity.mime.content.StringBody;
19
20 /**
21  * input a list of sequence IDs separated by some separator 
22  * @author JimP
23  *
24  */
25 public class SeqIdVector extends InputType {
26   public SeqIdVector()
27   {
28     super(new Class[] { AlignmentI.class} );
29   }
30
31   /**
32    * separator for list of sequence IDs - default is ','
33    */
34   String sep=",";
35   molType type;
36   @Override
37   public ContentBody formatForInput(RestJob rj) throws UnsupportedEncodingException, NoValidInputDataException
38   {
39     StringBuffer idvector = new StringBuffer();
40     boolean list=false;
41     for (SequenceI seq:rj.getSequencesForInput(token, type))
42     {
43       if (list)
44       {
45         idvector.append(sep);
46       }
47       idvector.append(seq.getName());
48     }
49     return new StringBody(idvector.toString());
50   }  
51   @Override
52   public List<String> getURLEncodedParameter()
53   {
54     ArrayList<String> prms = new ArrayList<String>();
55     super.addBaseParams(prms);
56     prms.add("sep='"+ sep+"'");
57     prms.add("type='"+type+"'");
58     return prms;
59   }
60   @Override
61   public String getURLtokenPrefix()
62   {
63     return "SEQIDS";
64   }
65   @Override
66   public boolean configureProperty(String tok, String val, StringBuffer warnings)
67   {
68     if (tok.startsWith("sep"))
69     {
70       sep=val;
71       return true;
72     }
73     if (tok.startsWith("type"))
74     {
75       try {
76         type=molType.valueOf(val);
77         return true;
78       } catch (Exception x)
79       {
80         warnings.append("Invalid molecule type '"+val+"'. Must be one of (");
81         for (molType v:molType.values())
82         {
83           warnings.append(" "+v);
84         }
85         warnings.append(")\n");
86       }
87     }
88     return false;
89   }
90 }