package edu.washington.cs.oneswarm.ui.gwt.client.newui.settings; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.Button; import com.google.gwt.user.client.ui.Grid; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.TextBox; import edu.washington.cs.oneswarm.ui.gwt.client.OneSwarmDialogBox; import edu.washington.cs.oneswarm.ui.gwt.client.OneSwarmRPCClient; import edu.washington.cs.oneswarm.ui.gwt.client.newui.OneSwarmCss; import edu.washington.cs.oneswarm.ui.gwt.client.newui.settings.SpeedTestPanel.SpeedTestCallback; class SpeedLimitsPanel extends SettingsPanel { TextBox ul_speed_box = new TextBox(); TextBox dl_speed_box = new TextBox(); final Label warning = new Label(""); private static final String WARNING_STYLE = "limit_exceeded_warning"; public SpeedLimitsPanel() { super(); Grid g = new Grid(2, 4); ul_speed_box.setText("..."); dl_speed_box.setText("..."); Label l = new Label(msg.settings_net_upload_limit()); g.setWidget(0, 0, l); g.setWidget(0, 1, ul_speed_box); Button speedTestBotton = new Button(msg.speed_test_button()); speedTestBotton.addStyleName(OneSwarmCss.SMALL_BUTTON); speedTestBotton.addClickHandler(new ClickHandler() { public void onClick(ClickEvent event) { final OneSwarmDialogBox dlg = new OneSwarmDialogBox(false, true, false); dlg.setText(msg.speed_test_window_title()); dlg.setWidget(new SpeedTestPanel(new SpeedTestCallback() { public void speedTestCompleted(double rate) { if (rate > 1000) { int rateInKb = (int) Math.round(rate / 1000); ul_speed_box.setText(rateInKb + ""); } dlg.hide(); } public void speedTestCanceled() { dlg.hide(); } })); dlg.center(); dlg.show(); } }); g.setWidget(0, 3, speedTestBotton); ul_speed_box.setWidth("55px"); l = new Label(msg.settings_net_download_limit()); g.setWidget(1, 0, l); g.setWidget(1, 1, dl_speed_box); dl_speed_box.setWidth("55px"); g.setWidget(0, 2, new Label(msg.settings_net_zero_unlimited())); g.setWidget(1, 2, new Label(msg.settings_net_zero_unlimited())); this.add(g); this.add(warning); this.setWidth("100%"); OneSwarmRPCClient.getService().getIntegerParameterValue(OneSwarmRPCClient.getSessionID(), "Max Download Speed KBs", new AsyncCallback<Integer>() { public void onFailure(Throwable caught) { caught.printStackTrace(); } public void onSuccess(Integer result) { dl_speed_box.setText(result.toString()); if (ul_speed_box.getText().equals("...") == false) { loadNotify(); } } }); OneSwarmRPCClient.getService().getIntegerParameterValue(OneSwarmRPCClient.getSessionID(), "Max Upload Speed KBs", new AsyncCallback<Integer>() { public void onFailure(Throwable caught) { caught.printStackTrace(); } public void onSuccess(Integer result) { ul_speed_box.setText(result.toString()); if (dl_speed_box.getText().equals("...") == false) { loadNotify(); } } }); OneSwarmRPCClient.getService().getStopped(OneSwarmRPCClient.getSessionID(), new AsyncCallback<Boolean>() { public void onFailure(Throwable caught) { caught.printStackTrace(); } public void onSuccess(Boolean result) { if (result) { warning.setText("Transfer Limit Exceeded! Reset your usage limits to reset data rates"); warning.setStyleName(WARNING_STYLE); ul_speed_box.setEnabled(false); dl_speed_box.setEnabled(false); } else { warning.setText(""); ul_speed_box.setEnabled(true); dl_speed_box.setEnabled(true); } } }); } public void sync() { System.out.println("attempting to sync ul/dl speeds"); OneSwarmRPCClient.getService().setIntegerParameterValue(OneSwarmRPCClient.getSessionID(), "Max Upload Speed KBs", Integer.parseInt(ul_speed_box.getText()), new AsyncCallback<Void>() { public void onFailure(Throwable caught) { caught.printStackTrace(); } public void onSuccess(Void result) { System.out.println("success for UL sync"); } }); OneSwarmRPCClient.getService().setIntegerParameterValue(OneSwarmRPCClient.getSessionID(), "Max Download Speed KBs", Integer.parseInt(dl_speed_box.getText()), new AsyncCallback<Void>() { public void onFailure(Throwable caught) { caught.printStackTrace(); } public void onSuccess(Void result) { System.out.println("success for DL sync"); } }); } final String RANGE = msg.settings_net_limit_range_error(); String validData() { try { int ul = Integer.parseInt(ul_speed_box.getText()); int dl = Integer.parseInt(dl_speed_box.getText()); if (dl < 0 || ul < 0) { throw new Exception(RANGE); } } catch (NumberFormatException e) { return RANGE; } catch (Exception e) { return e.toString(); } return null; } }