use of cz.metacentrum.perun.webgui.model.PerunRequest in project perun by CESNET.
the class JsonClient method retrieveData.
/**
* Sends the data
*/
public void retrieveData(String url, String params, final JsonCallback callback) {
// create events
if (callback != null) {
this.events = new JsonCallbackEvents() {
@Override
public void onFinished(JavaScriptObject jso) {
callback.onFinished(jso);
}
@Override
public void onError(PerunError error) {
callback.onError(error);
}
@Override
public void onLoadingStart() {
callback.onLoadingStart();
}
};
}
final PerunRequest perunRequest = new JSONObject().getJavaScriptObject().cast();
perunRequest.setStartTime();
// url to call
final String requestUrl = URL.encode(PerunWebSession.getInstance().getRpcUrl() + url + "?callback=" + perunRequest.getStartTime() + "&" + params);
perunRequest.setManager(url.split("\\/")[0]);
perunRequest.setMethod(url.split("\\/")[1]);
perunRequest.setParamString("?callback=" + perunRequest.getStartTime() + "&" + params);
// request building
RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, requestUrl);
try {
// sends the request
onRequestLoadingStart();
if (isCacheEnabled) {
if (cache.get(requestUrl) != null) {
// jso
JavaScriptObject jso = cache.get(requestUrl);
// Return DATA if not error, otherwise start new call
PerunError error = (PerunError) jso;
if ("".equalsIgnoreCase(error.getErrorId()) && "".equalsIgnoreCase(error.getErrorInfo())) {
// not error, OK
if (session.getUiElements() != null) {
session.getUiElements().setLogText("Response not NULL, not ERROR.");
}
onRequestFinished(jso);
return;
}
}
}
final Request request = builder.sendRequest("", new RequestCallback() {
@Override
public void onResponseReceived(Request req, Response resp) {
// if response = OK
if (resp.getStatusCode() == 200) {
// jso
JavaScriptObject jso = parseResponse(perunRequest.getStartTime() + "", resp.getText());
// if null - finished
if (jso == null) {
if (session.getUiElements() != null) {
session.getUiElements().setLogText("Response NULL.");
}
runningRequests.remove(requestUrl);
onRequestFinished(null);
return;
}
// if error?
PerunError error = (PerunError) jso;
if ("".equalsIgnoreCase(error.getErrorId()) && "".equalsIgnoreCase(error.getErrorInfo())) {
// not error, OK
if (session.getUiElements() != null) {
session.getUiElements().setLogText("Response not NULL, not ERROR.");
}
runningRequests.remove(requestUrl);
onRequestFinished(jso);
if (isCacheEnabled) {
cache.put(requestUrl, jso);
}
return;
}
// triggers onError
if (session.getUiElements() != null) {
session.getUiElements().setLogText("Response ERROR.");
}
error.setRequest(perunRequest);
error.setRequestURL(requestUrl);
error.setPostData("");
onRequestError(error);
runningRequests.remove(requestUrl);
return;
} else {
// if response not OK
PerunError error = new JSONObject().getJavaScriptObject().cast();
error.setErrorId("" + resp.getStatusCode());
error.setName(resp.getStatusText());
error.setErrorInfo("Server responded with HTTP error: " + resp.getStatusCode() + " - " + resp.getStatusText());
error.setObjectType("PerunError");
error.setPostData("");
error.setRequestURL(requestUrl);
error.setRequest(perunRequest);
if (resp.getStatusCode() == 401 || resp.getStatusCode() == 403) {
error.setErrorInfo("You are not authorized to server. Your session might have expired. Please refresh the browser window to re-login.");
} else if (resp.getStatusCode() == 500) {
if (runningRequests.get(requestUrl) != null) {
if ((runningRequests.get(requestUrl).getDuration() / (1000 * 60)) >= 5) {
// 5 minute timeout
error.setName("Request Timeout");
error.setErrorInfo("Your request couldn't be handled within 5 minutes. Please refresh your view (table) to try it again.");
} else {
error.setName("Server Internal Error");
error.setErrorInfo("Server encounter internal error while processing your request. Please report this error and retry.");
}
}
} else if (resp.getStatusCode() == 503) {
error.setName("Server Temporarily Unavailable");
error.setErrorInfo("Server is temporarily unavailable. Please try again later.");
} else if (resp.getStatusCode() == 404) {
error.setName("Not found");
error.setErrorInfo("Server is probably being restarted at the moment. Please try again later.");
} else if (resp.getStatusCode() == 0) {
error.setName("Can't contact remote server.");
error.setErrorInfo("You are either without network connection or your session has expired. Click \"OK\" to reload the page (all unsaved changes will be lost).");
// force reload page if it's first GUI call, otherwise keep it to alert box
if (!hidden && runningRequests.get(requestUrl).getManager().equals("authzResolver") && runningRequests.get(requestUrl).getMethod().equals("getPerunPrincipal")) {
Window.Location.reload();
}
}
runningRequests.remove(requestUrl);
onRequestError(error);
return;
}
}
@Override
public void onError(Request req, Throwable exc) {
// request not sent
runningRequests.remove(requestUrl);
onRequestError(parseResponse(perunRequest.getStartTime() + "", exc.toString()));
}
});
runningRequests.put(requestUrl, perunRequest);
} catch (RequestException exc) {
// usually couldn't connect to server
onRequestError(parseResponse(perunRequest.getStartTime() + "", exc.toString()));
}
}
use of cz.metacentrum.perun.webgui.model.PerunRequest in project perun by CESNET.
the class JsonPostClient method send.
/**
* Sends the data
*/
private void send() {
final PerunRequest perunRequest = new JSONObject().getJavaScriptObject().cast();
perunRequest.setStartTime();
// url to call
final String requestUrl = URL.encode(PerunWebSession.getInstance().getRpcUrl() + url + "?callback=" + perunRequest.getStartTime());
String data = "";
if (sendNative) {
data = json;
} else {
data = jsonObject.toString();
}
perunRequest.setManager(url.split("\\/")[0]);
perunRequest.setMethod(url.split("\\/")[1]);
perunRequest.setParamString("?callback=" + perunRequest.getStartTime() + "&" + data);
// request building
RequestBuilder builder = new RequestBuilder(RequestBuilder.POST, requestUrl);
try {
// sends the request
onRequestLoadingStart();
final String payload = data;
builder.sendRequest(payload, new RequestCallback() {
@Override
public void onResponseReceived(Request req, Response resp) {
// if response = OK
if (resp.getStatusCode() == 200) {
// jso
JavaScriptObject jso = parseResponse(perunRequest.getStartTime() + "", resp.getText());
// if null - finished
if (jso == null) {
if (session.getUiElements() != null) {
session.getUiElements().setLogText("Response NULL.");
}
runningRequests.remove(requestUrl);
onRequestFinished(null);
return;
}
// if error?
PerunError error = (PerunError) jso;
if ("".equalsIgnoreCase(error.getErrorId()) && "".equalsIgnoreCase(error.getErrorInfo())) {
// not error, OK
if (session.getUiElements() != null) {
session.getUiElements().setLogText("Response not NULL, not ERROR.");
}
runningRequests.remove(requestUrl);
onRequestFinished(jso);
return;
}
// triggers onError
if (session.getUiElements() != null) {
session.getUiElements().setLogText("Response ERROR.");
}
error.setRequestURL(requestUrl);
error.setRequest(perunRequest);
error.setPostData(payload);
runningRequests.remove(requestUrl);
onRequestError(error);
return;
} else {
// if response not OK
PerunError error = new JSONObject().getJavaScriptObject().cast();
error.setErrorId("" + resp.getStatusCode());
error.setName(resp.getStatusText());
error.setErrorInfo("Server responded with HTTP error: " + resp.getStatusCode() + " - " + resp.getStatusText());
error.setObjectType("PerunError");
error.setPostData(payload);
error.setRequest(perunRequest);
error.setRequestURL(requestUrl);
if (resp.getStatusCode() == 401 || resp.getStatusCode() == 403) {
error.setName("Not Authorized");
error.setErrorInfo("You are not authorized to server. Your session might have expired. Please refresh the browser window to re-login.");
} else if (resp.getStatusCode() == 500) {
if (runningRequests.get(requestUrl) != null) {
// 5 minute timeout
if ((runningRequests.get(requestUrl).getDuration() / (1000 * 60)) >= 5) {
counter++;
layout.setHTML(0, 1, "<p>" + "Processing of your request(s) is taking longer than usual, but it's actively processed by the server.<p>Please do not close opened window/tab nor repeat your action. You will be notified once operation completes.<p>Remaining requests: " + counter);
if (!c.isShowing() && counter > 0)
c.show();
Scheduler.get().scheduleFixedDelay(new Scheduler.RepeatingCommand() {
boolean again = true;
@Override
public boolean execute() {
GetPendingRequests req = new GetPendingRequests(perunRequest.getStartTime(), new JsonCallbackEvents() {
@Override
public void onFinished(JavaScriptObject jso) {
final PerunRequest req = jso.cast();
if ((req.getCallbackId().equals(perunRequest.getStartTime() + "")) && req.getEndTime() > 0) {
if (again) {
again = false;
counter--;
layout.setHTML(0, 1, "<p>" + "Processing of your request(s) is taking longer than usual, but it's actively processed by the server.<p>Please do not close opened window/tab nor repeat your action. You will be notified once operation completes.<p>Remaining requests: " + counter);
// hide notification
if (c.isShowing() && counter <= 0)
c.hide();
JavaScriptObject result = req.getResult();
// if null - finished
if (result == null) {
if (session.getUiElements() != null) {
session.getUiElements().setLogText("Response NULL.");
}
runningRequests.remove(requestUrl);
onRequestFinished(null);
return;
}
// if error?
PerunError error = (PerunError) result;
if ("".equalsIgnoreCase(error.getErrorId()) && "".equalsIgnoreCase(error.getErrorInfo())) {
// not error, OK
if (session.getUiElements() != null) {
session.getUiElements().setLogText("Response not NULL, not ERROR.");
}
runningRequests.remove(requestUrl);
onRequestFinished(result);
return;
}
// triggers onError
if (session.getUiElements() != null) {
session.getUiElements().setLogText("Response ERROR.");
}
error.setRequestURL(requestUrl);
error.setRequest(perunRequest);
error.setPostData(payload);
runningRequests.remove(requestUrl);
onRequestError(error);
return;
}
}
}
});
req.retrieveData();
return again;
}
}, ((PerunWebConstants) GWT.create(PerunWebConstants.class)).pendingRequestsRefreshInterval());
return;
} else {
error.setName("ServerInternalError");
error.setErrorInfo("Server encounter internal error while processing your request. Please report this error and retry.");
}
}
} else if (resp.getStatusCode() == 503) {
error.setName("Server Temporarily Unavailable");
error.setErrorInfo("Server is temporarily unavailable. Please try again later.");
} else if (resp.getStatusCode() == 404) {
error.setName("Not found");
error.setErrorInfo("Server is probably being restarted at the moment. Please try again later.");
} else if (resp.getStatusCode() == 0) {
error.setName("Aborted");
error.setErrorInfo("Can't contact remote server, connection was lost.");
}
runningRequests.remove(requestUrl);
onRequestError(error);
return;
}
}
@Override
public void onError(Request req, Throwable exc) {
// request not sent
runningRequests.remove(requestUrl);
onRequestError(parseResponse(perunRequest.getStartTime() + "", exc.toString()));
}
});
runningRequests.put(requestUrl, perunRequest);
} catch (RequestException exc) {
// usually couldn't connect to server
onRequestError(parseResponse(perunRequest.getStartTime() + "", exc.toString()));
}
}
Aggregations