org.ggp.base.util.loader.RemoteResourceLoader Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of alloy-ggp-base Show documentation
Show all versions of alloy-ggp-base Show documentation
A modified version of the GGP-Base library for Alloy.
The newest version!
package org.ggp.base.util.loader;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.URL;
import java.net.URLConnection;
import java.util.Map;
import external.JSON.JSONArray;
import external.JSON.JSONException;
import external.JSON.JSONObject;
/**
* RemoteResourceLoader loads remotely-stored resources. It can load resources
* as raw strings, JSON objects, or JSON arrays.
*
* @author Sam
*/
public class RemoteResourceLoader {
private RemoteResourceLoader() {
}
public static JSONObject loadJSON(String theURL) throws JSONException, IOException {
return loadJSON(theURL, 1);
}
public static JSONObject loadJSON(String theURL, int nMaxAttempts) throws JSONException, IOException {
return new JSONObject(loadRaw(theURL, nMaxAttempts));
}
public static JSONArray loadJSONArray(String theURL) throws JSONException, IOException {
return loadJSONArray(theURL, 1);
}
public static JSONArray loadJSONArray(String theURL, int nMaxAttempts) throws JSONException, IOException {
return new JSONArray(loadRaw(theURL, nMaxAttempts));
}
public static String loadRaw(String theURL) throws IOException {
return loadRaw(theURL, 1);
}
public static String loadRaw(String theURL, int nMaxAttempts) throws IOException {
return loadRaw(theURL, nMaxAttempts, null);
}
public static String loadRaw(String theURL, int nMaxAttempts, Map requestProperties) throws IOException {
int nAttempt = 0;
while(true) {
nAttempt++;
try {
URL url = new URL(theURL);
URLConnection urlConnection = url.openConnection();
urlConnection.setUseCaches(false);
urlConnection.setDefaultUseCaches(false);
urlConnection.addRequestProperty("Cache-Control", "no-cache,max-age=0");
urlConnection.addRequestProperty("Pragma", "no-cache");
if (requestProperties != null) {
for (String key : requestProperties.keySet()) {
urlConnection.addRequestProperty(key, requestProperties.get(key));
}
}
if (urlConnection.getContentLength() == 0)
throw new IOException("Could not load URL: " + theURL);
StringBuilder theRawData = new StringBuilder();
try (BufferedReader br = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()))) {
do {
String nextLine = br.readLine();
if (nextLine == null) break;
theRawData.append(nextLine + "\n");
} while (true);
}
return theRawData.toString();
} catch (IOException ie) {
if (nAttempt >= nMaxAttempts) {
throw ie;
}
}
}
}
public static String postRawWithTimeout(String theURL, String toPost, int nTimeout) throws IOException {
URL url = new URL(theURL);
URLConnection urlConnection = url.openConnection();
urlConnection.setDoOutput(true);
urlConnection.setConnectTimeout(nTimeout);
OutputStreamWriter out = new OutputStreamWriter(urlConnection.getOutputStream());
out.write(toPost);
out.close();
BufferedReader in = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
StringBuilder decodedString = new StringBuilder();
String decodedLine;
while ((decodedLine = in.readLine()) != null) {
decodedString.append(decodedLine);
}
in.close();
return decodedString.toString();
}
}