cecf5e19d3d2edfafe53370fb53d6c3f4b7feadb
[jalview.git] / src / jalview / ws / rest / params / JobConstant.java
1 /*
2  * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8)
3  * Copyright (C) 2012 J Procter, AM Waterhouse, LM Lui, J Engelhardt, G Barton, M Clamp, S Searle
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  */
18 package jalview.ws.rest.params;
19
20 import jalview.ws.params.OptionI;
21 import jalview.ws.rest.InputType;
22 import jalview.ws.rest.NoValidInputDataException;
23 import jalview.ws.rest.RestJob;
24
25 import java.io.UnsupportedEncodingException;
26 import java.net.URLEncoder;
27 import java.util.ArrayList;
28 import java.util.List;
29
30 import org.apache.http.entity.mime.content.ContentBody;
31 import org.apache.http.entity.mime.content.StringBody;
32
33 /**
34  * defines a constant value always provided as a parameter.
35  * 
36  * @author JimP
37  * 
38  */
39 public class JobConstant extends InputType
40 {
41
42   String value;
43
44   /**
45    * 
46    * @param param
47    *          name of parameter
48    * @param val
49    *          value of parameter
50    */
51   public JobConstant(String param, String val)
52   {
53     // needs no data from the restJob
54     super(null);
55     this.token = param;
56     value = val;
57   }
58
59   @Override
60   public ContentBody formatForInput(RestJob rj)
61           throws UnsupportedEncodingException, NoValidInputDataException
62   {
63
64     return new StringBody(value);
65   }
66
67   @Override
68   public List<String> getURLEncodedParameter()
69   {
70     ArrayList<String> prm = new ArrayList<String>();
71
72     if (value != null && value.length() > 0)
73     {
74       try
75       {
76         prm.add(URLEncoder.encode(value, "UTF-8"));
77       } catch (UnsupportedEncodingException ex)
78       {
79         throw new Error("Couldn't encode '" + value + "' as UTF-8.", ex);
80
81       }
82     }
83     return prm;
84   }
85
86   @Override
87   public String getURLtokenPrefix()
88   {
89     return "";
90   }
91
92   @Override
93   public boolean configureFromURLtokenString(List<String> tokenstring,
94           StringBuffer warnings)
95   {
96     if (tokenstring.size() > 1)
97     {
98       warnings.append("IMPLEMENTATION ERROR: Constant POST parameters cannot have more than one value.");
99       return false;
100     }
101     if (tokenstring.size() == 1)
102     {
103       value = tokenstring.get(0);
104     }
105     return true;
106   }
107
108   @Override
109   public boolean configureProperty(String tok, String val,
110           StringBuffer warnings)
111   {
112     warnings.append("IMPLEMENTATION ERROR: No Properties to configure for a Constant parameter.");
113     return false;
114   }
115
116   @Override
117   public List<OptionI> getOptions()
118   {
119     // empty list - this parameter isn't configurable, so don't try.
120     return new ArrayList<OptionI>();
121   }
122 }