Example usage for com.google.gwt.json.client JSONValue isObject

List of usage examples for com.google.gwt.json.client JSONValue isObject

Introduction

In this page you can find the example usage for com.google.gwt.json.client JSONValue isObject.

Prototype

public JSONObject isObject() 

Source Link

Document

Returns non-null if this JSONValue is really a JSONObject.

Usage

From source file:org.opennms.features.gwt.snmpselect.list.client.rest.DefaultSnmpInterfaceRestService.java

License:Open Source License

protected List<SnmpCellListItem> parseJSONData(final String jsonString) {
    final List<SnmpCellListItem> cellList = new ArrayList<SnmpCellListItem>();
    final JSONValue value = JSONParser.parseStrict(jsonString);
    final JSONObject obj = value.isObject();
    final JSONArray arr = value.isArray();
    JsArray<SnmpCellListItem> jsArray = null;

    if (obj != null) {
        jsArray = createJsArray(obj.getJavaScriptObject());
    } else if (arr != null) {
        jsArray = createJsArray(arr.getJavaScriptObject());
    } else {//from  w  w w  . j av a2s  .  c o  m
        doLog(jsonString + " does not parse as an array or object!", value);
    }

    if (jsArray != null) {
        for (int i = 0; i < jsArray.length(); i++) {
            cellList.add(jsArray.get(i));
        }
    }

    return cellList;
}

From source file:org.opennms.features.node.list.gwt.client.NodeRestResponseMapper.java

License:Open Source License

public static List<IpInterface> createIpInterfaceData(String jsonString) {
    final List<IpInterface> ipIfaceList = new ArrayList<IpInterface>();
    final JSONValue value = JSONParser.parseStrict(jsonString);

    JSONObject obj = value.isObject();
    JSONArray arr = value.isArray();/*from  w ww .j  a  v a2s.  com*/
    JsArray<IpInterface> ipIfaces = null;
    if (obj != null) {
        ipIfaces = createIpInterfaceData(obj.getJavaScriptObject());
    } else if (arr != null) {
        ipIfaces = createIpInterfaceData(arr.getJavaScriptObject());
    } else {
        doLog(jsonString + " did not parse as an object or array!", value);
    }

    if (ipIfaces != null) {
        for (int i = 0; i < ipIfaces.length(); i++) {
            ipIfaceList.add(ipIfaces.get(i));
        }
    }
    doLog("ip interfaces:", ipIfaceList);
    return ipIfaceList;
}

From source file:org.opennms.features.node.list.gwt.client.NodeRestResponseMapper.java

License:Open Source License

public static List<PhysicalInterface> createSnmpInterfaceData(String jsonString) {
    final List<PhysicalInterface> physIfaceList = new ArrayList<PhysicalInterface>();
    final JSONValue value = JSONParser.parseStrict(jsonString);
    final JSONObject obj = value.isObject();
    final JSONArray arr = value.isArray();
    JsArray<PhysicalInterface> snmpIfaces = null;
    if (obj != null) {
        snmpIfaces = createSnmpInterfaceData(obj.getJavaScriptObject());
    } else if (arr != null) {
        snmpIfaces = createSnmpInterfaceData(arr.getJavaScriptObject());
    } else {/* w  w w  .j  av  a2s .  c om*/
        doLog(jsonString + " did not parse as an object or array!", value);
    }

    if (snmpIfaces != null) {
        for (int i = 0; i < snmpIfaces.length(); i++) {
            physIfaceList.add(snmpIfaces.get(i));
        }
    }

    doLog("physical interfaces:", physIfaceList);
    return physIfaceList;
}

From source file:org.openremote.modeler.client.gxtextends.NestedJsonLoadResultReader.java

License:Open Source License

@SuppressWarnings("unchecked")
@Override//from   ww  w. j a  v a 2s  . com
public D read(Object loadConfig, Object data) {
    JSONObject jsonRoot = null;
    if (data instanceof JavaScriptObject) {
        jsonRoot = new JSONObject((JavaScriptObject) data);
    } else {
        jsonRoot = (JSONObject) JSONParser.parse((String) data);
    }

    // You can specify root using dot separate. eg, vendors.vendor 
    String[] roots = myModelType.getRoot().split("\\.");
    JSONValue rootValue = null;
    JSONArray root = null;
    for (int i = 0; i < roots.length; i++) {
        rootValue = jsonRoot.get(roots[i]);
        if (i == roots.length - 1) {
            if (rootValue instanceof JSONObject) {
                root = new JSONArray();
                root.set(0, rootValue);
            } else {
                root = (JSONArray) rootValue;
            }
        } else {
            jsonRoot = (JSONObject) jsonRoot.get(roots[i]);
        }
    }

    int size = root.size();
    ArrayList<ModelData> models = new ArrayList<ModelData>();
    for (int i = 0; i < size; i++) {
        JSONObject obj = (JSONObject) root.get(i);
        ModelData model = newModelInstance();
        for (int j = 0; j < myModelType.getFieldCount(); j++) {
            DataField field = myModelType.getField(j);
            String name = field.getName();
            Class type = field.getType();
            String map = field.getMap() != null ? field.getMap() : field.getName();
            JSONValue value = obj.get(map);

            if (value == null) {
                continue;
            }
            if (value.isArray() != null) {
                // nothing
            } else if (value.isBoolean() != null) {
                model.set(name, value.isBoolean().booleanValue());
            } else if (value.isNumber() != null) {
                if (type != null) {
                    Double d = value.isNumber().doubleValue();
                    if (type.equals(Integer.class)) {
                        model.set(name, d.intValue());
                    } else if (type.equals(Long.class)) {
                        model.set(name, d.longValue());
                    } else if (type.equals(Float.class)) {
                        model.set(name, d.floatValue());
                    } else {
                        model.set(name, d);
                    }
                } else {
                    // convert no type number to string.
                    model.set(name, value.isNumber().toString());
                }
            } else if (value.isObject() != null) {
                // nothing
            } else if (value.isString() != null) {
                String s = value.isString().stringValue();
                if (type != null) {
                    if (type.equals(Date.class)) {
                        if (field.getFormat().equals("timestamp")) {
                            Date d = new Date(Long.parseLong(s) * 1000);
                            model.set(name, d);
                        } else {
                            DateTimeFormat format = DateTimeFormat.getFormat(field.getFormat());
                            Date d = format.parse(s);
                            model.set(name, d);
                        }
                    }
                } else {
                    model.set(name, s);
                }
            } else if (value.isNull() != null) {
                model.set(name, null);
            }
        }
        models.add(model);
    }
    int totalCount = models.size();
    if (myModelType.getTotalName() != null) {
        totalCount = getTotalCount(jsonRoot);
    }
    return (D) createReturnData(loadConfig, models, totalCount);
}

From source file:org.ow2.proactive_grid_cloud_portal.common.client.LoginPage.java

License:Open Source License

/**
 * @return the forms and widgets for plain login/password authentication
 */// w w w .j  av  a 2s.co m
private Layout getPlainAuth() {

    /* smartGWT forms don't allow simple multipart file upload,
     * so we use a smartGWT form for login/password/checkbox,
     * a pure GWT form for file upload, and upon submission,
     * put the fields from the first form as hidden fields of the
     * pure GWT form. It's a bit convoluted but like this we get
     * the pretty widgets and the nice features       */

    TextItem loginField = new TextItem("login", "User");
    loginField.setRequired(true);

    PasswordItem passwordField = new PasswordItem("password", "Password");
    passwordField.setRequired(true);

    final CheckboxItem moreField = new CheckboxItem("useSSH", "Use SSH private key");
    moreField.setValue(false);

    // smartGWT form: only used to input the data before filling the hidden fields
    // in the other form with it
    final DynamicForm form = new DynamicForm();
    form.setFields(loginField, passwordField, moreField);
    form.hideItem("useSSH");

    // pure GWT form for uploading, will be used to contact the servlet
    // even if no ssh key is used
    final FileUpload fileUpload = new FileUpload();
    fileUpload.setName("sshkey");
    final Hidden hiddenUser = new Hidden("username");
    final Hidden hiddenPass = new Hidden("password");
    final FormPanel formPanel = new FormPanel();
    formPanel.setEncoding(FormPanel.ENCODING_MULTIPART);
    formPanel.setMethod(FormPanel.METHOD_POST);
    formPanel.setAction(GWT.getModuleBaseURL() + "login");
    final VerticalPanel vpan = new VerticalPanel();
    vpan.add(hiddenUser);
    vpan.add(hiddenPass);
    vpan.add(fileUpload);
    formPanel.setWidget(vpan);
    formPanel.setWidth("100%");
    formPanel.setHeight("30px");
    final HLayout formWrapper = new HLayout();
    formWrapper.setAlign(Alignment.CENTER);
    formWrapper.addChild(formPanel);
    formWrapper.setWidth100();
    formWrapper.addDrawHandler(new DrawHandler() {
        public void onDraw(DrawEvent event) {
            // took me half a day to find this hack:
            // if the form is added to the page in a hidden element,
            // it is never created and submission fails without callback.
            // it needs to be visible so that it is created once, then
            // we can safely hide it and still use it
            if (disableFormWrapper) {
                disableFormWrapper = false;
                formWrapper.setVisible(false);
            }
        }
    });

    // hide/show the ssh key upload input
    moreField.addChangedHandler(new ChangedHandler() {
        public void onChanged(ChangedEvent event) {
            if (moreField.getValueAsBoolean()) {
                //formWrapper.setVisible(true);
                formWrapper.animateShow(AnimationEffect.FLY);
            } else {
                //formWrapper.setVisible(false);
                formWrapper.animateHide(AnimationEffect.FLY);
                formPanel.reset();
            }
        }
    });
    // prevent form validation if no ssh key is selected
    Validator moreVal = new CustomValidator() {
        @Override
        protected boolean condition(Object value) {
            if (moreField.getValueAsBoolean()) {
                String file = fileUpload.getFilename();
                return (file != null && file.length() > 0);
            } else {
                return true;
            }
        }
    };
    moreVal.setErrorMessage("No file selected");
    moreField.setValidators(moreVal);

    final Runnable advancedVisibilityChanged = new Runnable() {
        @Override
        public void run() {
            if (!moreField.getVisible()) {
                authSelLayout.setVisible(true);
                form.showItem("useSSH");
                optsLabel.setIcon(Images.instance.close_16().getSafeUri().asString());
                optsLabel.setContents(
                        "<nobr style='color:#003168;font-size: 1.2em;" + "cursor:pointer'>less options</nobr>");
            } else {
                authTypeSelectForm.setValue("Mode", "Basic");
                switchPlainCredForm.run();
                authSelLayout.setVisible(false);
                form.hideItem("useSSH");
                formWrapper.animateHide(AnimationEffect.FLY);
                moreField.setValue(false);
                formPanel.reset();
                optsLabel.setIcon(Images.instance.expand_16().getSafeUri().asString());
                optsLabel.setContents(
                        "<nobr style='color:#003168;font-size: 1.2em;" + "cursor:pointer'>more options</nobr>");
            }
        }
    };
    optsLabel.addClickHandler(new ClickHandler() {
        @Override
        public void onClick(ClickEvent event) {
            advancedVisibilityChanged.run();
        }
    });

    String cacheLogin = Settings.get().getSetting(controller.getLoginSettingKey());
    if (cacheLogin != null) {
        form.setValue("login", cacheLogin);
    }

    final IButton okButton = new IButton();
    okButton.setShowDisabled(false);
    okButton.setIcon(Images.instance.connect_16().getSafeUri().asString());
    okButton.setTitle("Connect");
    okButton.setWidth(120);
    okButton.addClickHandler(new ClickHandler() {
        public void onClick(ClickEvent event) {
            if (!form.validate())
                return;

            String login = form.getValueAsString("login");
            String pw = form.getValueAsString("password");
            hiddenUser.setValue(login);
            hiddenPass.setValue(pw);

            okButton.setIcon("loading.gif");
            okButton.setTitle("Connecting...");
            form.disable();
            formWrapper.disable();

            authTypeSelectForm.disable();
            okButton.disable();

            // only submit once the the error message is hidden so we don't try to show it (on form response)
            // while the effect is played resulting in the message hidden staying hidden
            if (errorLabel.isDrawn() && errorLabel.isVisible()) {
                errorLabel.animateHide(AnimationEffect.FLY, new AnimationCallback() {
                    @Override
                    public void execute(boolean earlyFinish) {
                        formPanel.submit();
                    }
                });
            } else {
                formPanel.submit();
            }
        }
    });

    formPanel.addSubmitCompleteHandler(new SubmitCompleteHandler() {
        public void onSubmitComplete(SubmitCompleteEvent event) {
            String res = new HTML(event.getResults()).getText();
            boolean fail = false;
            try {
                JSONValue val = controller.parseJSON(res);
                JSONObject obj = val.isObject();
                if (obj != null && obj.containsKey("sessionId")) {
                    String sess = obj.isObject().get("sessionId").isString().stringValue();
                    controller.login(sess, form.getValueAsString("login"));
                } else {
                    fail = true;
                }
            } catch (Throwable t) {
                fail = true;
            }

            if (fail) {
                String err = JSONUtils.getJsonErrorMessage(res);
                int sta = JSONUtils.getJsonErrorCode(res);
                if (sta != -1)
                    err += " (" + sta + ")";
                errorLabel.setContents("<span style='color:red;'>Could not login: " + err + "</span>");
                errorLabel.animateShow(AnimationEffect.FLY);

                okButton.setIcon(Images.instance.connect_16().getSafeUri().asString());
                okButton.setTitle("Connect");
                formWrapper.enable();
                form.enable();
                authTypeSelectForm.enable();
                okButton.enable();
            }
        }
    });

    form.addItemKeyPressHandler(new ItemKeyPressHandler() {
        public void onItemKeyPress(ItemKeyPressEvent event) {
            if ("Enter".equals(event.getKeyName())) {
                okButton.fireEvent(new ClickEvent(null));
            }
        }
    });

    Layout formLayout = new VLayout();
    formLayout.setWidth100();
    formLayout.setMembersMargin(10);
    formLayout.addMember(form);
    formLayout.addMember(formWrapper);

    HLayout buttonBar = new HLayout();
    buttonBar.setWidth100();
    buttonBar.setAlign(Alignment.CENTER);
    buttonBar.addMember(okButton);
    formLayout.addMember(buttonBar);

    return formLayout;
}

From source file:org.ow2.proactive_grid_cloud_portal.common.client.LoginPage.java

License:Open Source License

/**
 * @return the forms and widgets for credentials authentication
 *///from   www .ja  v  a  2  s.  c  om
private Layout getCredAuth() {
    final FileUpload fileUpload = new FileUpload();
    fileUpload.setName("credential");

    // actual form      
    final FormPanel formPanel = new FormPanel();
    formPanel.setEncoding(FormPanel.ENCODING_MULTIPART);
    formPanel.setMethod(FormPanel.METHOD_POST);
    formPanel.setAction(GWT.getModuleBaseURL() + "login");
    formPanel.add(fileUpload);
    formPanel.setWidth("100%");
    formPanel.setHeight("30px");

    // wraps the GWT component so that we may show/hide it
    final VLayout formWrapper = new VLayout();
    formWrapper.setAlign(Alignment.CENTER);
    formWrapper.addMember(formPanel);
    formWrapper.setWidth100();
    formWrapper.setMargin(10);

    final IButton okButton = new IButton();
    okButton.setShowDisabled(false);
    okButton.setIcon(Images.instance.connect_16().getSafeUri().asString());
    okButton.setTitle("Connect");
    okButton.setWidth(120);
    okButton.addClickHandler(new ClickHandler() {
        public void onClick(ClickEvent event) {
            errorLabel.animateHide(AnimationEffect.FLY);

            okButton.setIcon("loading.gif");
            okButton.setTitle("Connecting...");
            formWrapper.disable();
            authTypeSelectForm.disable();
            okButton.disable();

            // submits the form to LoginServlet
            formPanel.submit();
        }
    });

    formPanel.addSubmitCompleteHandler(new SubmitCompleteHandler() {
        public void onSubmitComplete(SubmitCompleteEvent event) {
            String res = event.getResults();
            boolean fail = false;
            try {
                JSONValue val = controller.parseJSON(res);
                JSONObject obj = val.isObject();
                if (obj != null && obj.containsKey("sessionId")) {
                    String sess = obj.isObject().get("sessionId").isString().stringValue();
                    controller.login(sess, null);
                } else {
                    fail = true;
                }
            } catch (Throwable t) {
                fail = true;
            }

            if (fail) {
                String err = JSONUtils.getJsonErrorMessage(res);
                errorLabel.setContents("<span style='color:red;'>Could not login: " + err + "</span>");
                errorLabel.animateShow(AnimationEffect.FLY);

                okButton.setIcon(Images.instance.connect_16().getSafeUri().asString());
                okButton.setTitle("Connect");
                formWrapper.enable();
                authTypeSelectForm.enable();
                okButton.enable();
            }
        }
    });
    Label createCred = new Label(
            "<nobr style='color:#003168;font-size: 1.2em;cursor:pointer'>" + "Create credentials</nobr>");
    createCred.setHeight(20);
    createCred.setAlign(Alignment.CENTER);
    createCred.setIcon(Images.instance.key_16().getSafeUri().asString());
    createCred.addClickHandler(new ClickHandler() {
        @Override
        public void onClick(ClickEvent event) {
            CredentialsWindow win = new CredentialsWindow();
            win.show();
        }
    });

    formWrapper.addMember(createCred);

    Layout formLayout = new VLayout();
    formLayout.setWidth100();
    formLayout.setMembersMargin(10);
    formLayout.addMember(formWrapper);

    HLayout buttonBar = new HLayout();
    buttonBar.setWidth100();
    buttonBar.setAlign(Alignment.CENTER);
    buttonBar.addMember(okButton);
    formLayout.addMember(buttonBar);

    return formLayout;
}

From source file:org.ow2.proactive_grid_cloud_portal.rm.client.monitoring.charts.MBeanChart.java

License:Open Source License

public void processHistoryResult(String result) {

    // removing internal escaping
    result = result.replace("\\\"", "\"");
    result = result.replace("\"{", "{");
    result = result.replace("}\"", "}");

    JSONValue resultVal = controller.parseJSON(result);
    JSONObject json = resultVal.isObject();

    if (json == null) {
        return;// w  w w.j a v  a  2  s. c o  m
    }

    loadTable.removeRows(0, loadTable.getNumberOfRows());
    long now = new Date().getTime() / 1000;
    long dur = timeRange.getDuration();
    long size = getJsonInternalSize(json);
    long step = dur / size;

    for (int i = 0; i < size; i++) {

        double[] slice = getJsonSlice(json, i);
        long t = now - dur + step * i;
        DateTimeFormat.PredefinedFormat format = timeRange.getFormat();
        String timeStamp = DateTimeFormat.getFormat(format).format(new Date(t * 1000));

        loadTable.addRow();
        loadTable.setValue(i, 0, timeStamp);

        for (int sliceIndex = 0; sliceIndex < slice.length; sliceIndex++) {
            loadTable.setValue(i, sliceIndex + 1, formatValue(slice[sliceIndex]));
        }
    }

    loadChart.draw(loadTable, loadOpts);
}

From source file:org.ow2.proactive_grid_cloud_portal.rm.client.monitoring.charts.MBeanSourceDetailedView.java

License:Open Source License

public void reload() {
    DetailViewerField[] fields = new DetailViewerField[attrs.size()];

    for (int i = 0; i < fields.length; i++) {
        fields[i] = new DetailViewerField(attrs.get(i));
    }// ww  w. j av  a2  s. c o  m

    setFields(fields);

    final RMServiceAsync rm = controller.getRMService();
    final RMModel model = controller.getModel();
    final long t = System.currentTimeMillis();

    final LoginModel loginModel = LoginModel.getInstance();

    // loading runtime info
    rm.getNodeMBeanInfo(loginModel.getSessionId(), jmxServerUrl, mbean, attrs, new AsyncCallback<String>() {
        public void onSuccess(String result) {

            if (extraCallback != null) {
                extraCallback.onSuccess(result);
            }

            if (!loginModel.isLoggedIn())
                return;

            LogModel.getInstance()
                    .logMessage("Fetched JVM Runtime info in " + (System.currentTimeMillis() - t) + "ms");
            JSONArray array = controller.parseJSON(result).isArray();
            if (array != null) {
                DetailViewerRecord dv = new DetailViewerRecord();
                for (int i = 0; i < array.size(); i++) {
                    try {
                        JSONObject property = array.get(i).isObject();
                        String name = property.get("name").isString().stringValue();
                        JSONValue value = property.get("value");
                        String valueStr = "";

                        if (value.isString() != null) {
                            valueStr = value.isString().stringValue();
                        } else if (value.isNumber() != null) {
                            valueStr = value.isNumber().toString();
                        } else if (value.isArray() != null) {
                            JSONArray values = value.isArray();
                            for (int j = 0; j < values.size(); j++)
                                valueStr += values.get(j).isString().stringValue() + " ";
                        } else if (value.isObject() != null) {
                            valueStr = value.toString();
                        } else {
                            valueStr = value.toString();
                        }

                        dv.setAttribute(name, valueStr);
                    } catch (Exception e) {
                        // ignore it
                    }
                }
                setData(new DetailViewerRecord[] { dv });
            }

        }

        public void onFailure(Throwable caught) {
            if (extraCallback != null) {
                String errmessage = caught.getMessage();
                if (caught instanceof RestServerException
                        && errmessage.contains(MonitoringSourceView.NO_MONITORING_INFO_EXCEPTION_STRING)) {
                    extraCallback
                            .onFailure(new Exception("Node Source monitoring information " + "not available."));
                } else if (caught instanceof RestServerException
                        && errmessage.contains(MonitoringSourceView.ACCESS_DENIED_EXCEPTION_STRING)) {
                    extraCallback.onFailure(new Exception(
                            "The current user is not authorized to get Node Source monitoring information. "));
                } else {
                    extraCallback.onFailure(caught);
                }
            }

            if (JSONUtils.getJsonErrorCode(caught) == 401) {
                LogModel.getInstance().logMessage("You have been disconnected from the server.");
            }
        }
    });
}

From source file:org.ow2.proactive_grid_cloud_portal.rm.client.monitoring.charts.NetworkAreaChart.java

License:Open Source License

public void processHistoryResult(String result) {

    // removing internal escaping
    result = result.replace("\\\"", "\"");
    result = result.replace("\"{", "{");
    result = result.replace("}\"", "}");

    JSONValue resultVal = controller.parseJSON(result);
    JSONObject json = resultVal.isObject();

    if (json == null) {
        return;// ww w. j a v  a  2 s.  co  m
    }

    loadTable.removeRows(0, loadTable.getNumberOfRows());
    long now = new Date().getTime() / 1000;
    long dur = timeRange.getDuration();
    int size = getJsonInternalSize(json);
    long step = dur / size;

    for (int i = 1; i < size; i++) {

        double[] slice = getJsonSlice(json, i);

        if (i == 1) {
            time = new long[slice.length];
            txBytes = new long[slice.length];
        }

        long t = now - dur + step * (i - 1);
        String timeStamp = DateTimeFormat.getFormat(PredefinedFormat.HOUR24_MINUTE).format(new Date(t * 1000));

        loadTable.addRow();
        loadTable.setValue(i - 1, 0, timeStamp);

        for (int j = 0; j < slice.length; j++) {
            long value = (long) slice[j];

            if (i > 1) {
                double bytePerSec = (value - txBytes[j]) / (t - time[j]);
                double kbPerSec = bytePerSec / 1024;

                if (kbPerSec < 0) {
                    // rx counter is reset
                    kbPerSec = 0;
                }

                loadTable.setValue(i - 1, j + 1, (long) kbPerSec);
            }

            txBytes[j] = value;
            time[j] = t;
        }
    }

    loadChart.draw(loadTable, loadOpts);
}

From source file:org.ow2.proactive_grid_cloud_portal.rm.client.monitoring.charts.NetworkDetailedAreaChart.java

License:Open Source License

public void processHistoryResult(String result) {

    // removing internal escaping
    result = result.replace("\\\"", "\"");
    result = result.replace("\"{", "{");
    result = result.replace("}\"", "}");

    JSONValue resultVal = controller.parseJSON(result);
    JSONObject json = resultVal.isObject();

    if (json == null) {
        return;/*from   w  w w  .  jav a  2 s  . c o m*/
    }

    loadTable.removeRows(0, loadTable.getNumberOfRows());
    long now = new Date().getTime() / 1000;
    long dur = timeRange.getDuration();
    int size = getJsonInternalSize(json);
    long step = dur / size;

    for (int i = 1; i < size; i++) {

        double[] slice = getJsonSlice(json, i);

        if (i == 1) {
            time = new long[slice.length];
            history = new long[slice.length];
        }

        long t = now - dur + step * (i - 1);
        String timeStamp = DateTimeFormat.getFormat(PredefinedFormat.HOUR24_MINUTE).format(new Date(t * 1000));

        loadTable.addRow();
        loadTable.setValue(i - 1, 0, timeStamp);

        for (int j = 0; j < slice.length; j++) {
            long value = (long) slice[j];

            if (i > 1) {
                double bytePerSec = (value - history[j]) / (t - time[j]);
                double kbPerSec = bytePerSec / 1024;

                if (kbPerSec < 0) {
                    // rx counter is reset
                    kbPerSec = 0;
                }

                loadTable.setValue(i - 1, j + 1, (long) kbPerSec);
            }

            history[j] = value;
            time[j] = t;
        }
    }

    loadChart.draw(loadTable, loadOpts);
}