JAL-4001 Rationalise user-agent string into HttpUtils
[jalview.git] / src / jalview / util / HttpUtils.java
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.util;
22
23 import java.io.IOException;
24 import java.io.InputStream;
25 import java.net.HttpURLConnection;
26 import java.net.ProtocolException;
27 import java.net.URL;
28
29 import javax.ws.rs.HttpMethod;
30
31 import jalview.bin.Cache;
32
33 public class HttpUtils
34 {
35
36   /**
37    * Returns true if it is possible to open an input stream at the given URL,
38    * else false. The input stream is closed.
39    * 
40    * @param url
41    * @return
42    */
43   public static boolean isValidUrl(String url)
44   {
45     InputStream is = null;
46     try
47     {
48       is = new URL(url).openStream();
49       if (is != null)
50       {
51         return true;
52       }
53     } catch (IOException x)
54     {
55       // MalformedURLException, FileNotFoundException
56       return false;
57     } finally
58     {
59       if (is != null)
60       {
61         try
62         {
63           is.close();
64         } catch (IOException e)
65         {
66           // ignore
67         }
68       }
69     }
70     return false;
71   }
72
73   public static boolean startsWithHttpOrHttps(String file)
74   {
75     return file.startsWith("http://") || file.startsWith("https://");
76   }
77
78   /**
79    * wrapper to get/post to a URL or check headers
80    * 
81    * @param url
82    * @param ids
83    * @param readTimeout
84    * @return
85    * @throws IOException
86    * @throws ProtocolException
87    */
88   public static boolean checkUrlAvailable(URL url, int readTimeout)
89           throws IOException, ProtocolException
90   {
91     // System.out.println(System.currentTimeMillis() + " " + url);
92
93     HttpURLConnection connection = (HttpURLConnection) url.openConnection();
94
95     connection.setRequestMethod(HttpMethod.HEAD);
96
97     connection.setDoInput(true);
98
99     connection.setUseCaches(false);
100     connection.setConnectTimeout(300);
101     connection.setReadTimeout(readTimeout);
102     return connection.getResponseCode() == 200;
103   }
104
105   public static String getUserAgent()
106   {
107     return getUserAgent(null);
108   }
109
110   public static String getUserAgent(String className)
111   {
112     StringBuilder sb = new StringBuilder();
113     sb.append("Jalview");
114     sb.append('/');
115     sb.append(Cache.getDefault("VERSION", "Unknown"));
116     sb.append(" (");
117     sb.append(System.getProperty("os.name"));
118     sb.append("; ");
119     sb.append(System.getProperty("os.arch"));
120     sb.append(' ');
121     sb.append(System.getProperty("os.name"));
122     sb.append(' ');
123     sb.append(System.getProperty("os.version"));
124     sb.append("; ");
125     sb.append("java/");
126     sb.append(System.getProperty("java.version"));
127     sb.append("; ");
128     sb.append("jalview/");
129     sb.append(ChannelProperties.getProperty("channel"));
130     if (className != null)
131     {
132       sb.append("; ");
133       sb.append(className);
134     }
135     String installation = Cache.applicationProperties
136             .getProperty("INSTALLATION");
137     if (installation != null)
138     {
139       sb.append("; ");
140       sb.append(installation);
141     }
142     sb.append(')');
143     sb.append(" help@jalview.org");
144     return sb.toString();
145   }
146
147 }