Search in sources :

Example 1 with PerunRequest

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()));
    }
}
Also used : PerunRequest(cz.metacentrum.perun.webgui.model.PerunRequest) JSONObject(com.google.gwt.json.client.JSONObject) JavaScriptObject(com.google.gwt.core.client.JavaScriptObject) PerunError(cz.metacentrum.perun.webgui.model.PerunError) PerunRequest(cz.metacentrum.perun.webgui.model.PerunRequest)

Example 2 with PerunRequest

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()));
    }
}
Also used : Scheduler(com.google.gwt.core.client.Scheduler) PerunRequest(cz.metacentrum.perun.webgui.model.PerunRequest) JSONObject(com.google.gwt.json.client.JSONObject) JavaScriptObject(com.google.gwt.core.client.JavaScriptObject) PerunRequest(cz.metacentrum.perun.webgui.model.PerunRequest) PerunError(cz.metacentrum.perun.webgui.model.PerunError)

Aggregations

JavaScriptObject (com.google.gwt.core.client.JavaScriptObject)2 JSONObject (com.google.gwt.json.client.JSONObject)2 PerunError (cz.metacentrum.perun.webgui.model.PerunError)2 PerunRequest (cz.metacentrum.perun.webgui.model.PerunRequest)2 Scheduler (com.google.gwt.core.client.Scheduler)1