package edu.washington.cs.oneswarm.ui.gwt.client.newui.settings;
import java.util.HashMap;
import java.util.Map;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.ClickListener;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.Grid;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.PasswordTextBox;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.Widget;
import com.google.gwt.user.client.ui.Button;
import edu.washington.cs.oneswarm.ui.gwt.client.OneSwarmRPCClient;
import edu.washington.cs.oneswarm.ui.gwt.client.Updateable;
import edu.washington.cs.oneswarm.ui.gwt.client.newui.Strings;
import edu.washington.cs.oneswarm.ui.gwt.rpc.OneSwarmConstants;
import edu.washington.cs.oneswarm.ui.gwt.rpc.StringTools;
import edu.washington.cs.oneswarm.ui.gwt.client.OneSwarmGWT;
public class DataUsage extends SettingsPanel implements Updateable {
private final Label thisday = new Label(": 0 B");
private final Label thisweek = new Label(": 0 B");
private final Label thismonth = new Label(": 0 B");
private final Label thisyear = new Label(": 0 B");
private final TextBox monthlylimit = new TextBox();
private final TextBox dailylimit = new TextBox();
private final TextBox weeklylimit = new TextBox();
private final TextBox yearlylimit = new TextBox();
private long mNextUpdate = 0;
DataUsage() {
loadNotify();
HorizontalPanel panel = new HorizontalPanel();
panel.setWidth("340px");
Grid g = new Grid(5, 5);
g.setWidget(0, 3, new Label("Daily Limit* :"));
g.setWidget(1, 3, new Label("Weekly Limit* :"));
g.setWidget(2, 3, new Label("Monthly Limit*:"));
g.setWidget(3, 3, new Label("Yearly Limit* :"));
g.setWidget(0, 0, new Label("Today"));
g.setWidget(1, 0, new Label("This Week"));
g.setWidget(2, 0, new Label("This Month"));
g.setWidget(3, 0, new Label("This Year"));
g.setWidget(0, 1, thisday);
g.setWidget(1, 1, thisweek);
g.setWidget(2, 1, thismonth);
g.setWidget(3, 1, thisyear);
g.setWidget(0, 4, dailylimit);
g.setWidget(1, 4, weeklylimit);
g.setWidget(2, 4, monthlylimit);
g.setWidget(3, 4, yearlylimit);
Label subinfo = new Label("*In Gigabytes, set 0 for unlimited");
subinfo.setHorizontalAlignment(ALIGN_CENTER);
dailylimit.setWidth("30px");
weeklylimit.setWidth("30px");
monthlylimit.setWidth("30px");
yearlylimit.setWidth("30px");
dailylimit.setMaxLength(8);
weeklylimit.setMaxLength(8);
monthlylimit.setMaxLength(8);
yearlylimit.setMaxLength(8);
OneSwarmRPCClient.getService().getLimits(OneSwarmRPCClient.getSessionID(),
new AsyncCallback<HashMap<String, String>>() {
public void onFailure(Throwable caught) {
caught.printStackTrace();
}
public void onSuccess(HashMap<String, String> result) {
if (!(result.get(Strings.SIDEBAR_DAILYLIMIT).equals("")
&& result.get(Strings.SIDEBAR_WEEKLYLIMIT).equals("")
&& result.get(Strings.SIDEBAR_MONTHLYLIMIT).equals("") && result
.get(Strings.SIDEBAR_YEARLYLIMIT).equals(""))) {
dailylimit.setText(result.get(Strings.SIDEBAR_DAILYLIMIT) + "");
weeklylimit.setText(result.get(Strings.SIDEBAR_WEEKLYLIMIT) + "");
monthlylimit.setText(result.get(Strings.SIDEBAR_MONTHLYLIMIT) + "");
yearlylimit.setText(result.get(Strings.SIDEBAR_YEARLYLIMIT) + "");
}
}
});
super.add(panel);
super.add(g);
super.add(subinfo);
}
@Override
public void sync() {
if (!dailylimit.getText().matches("([0-9]+\\Q.\\E?[0-9]+)|([0-9]*)")) {
dailylimit.setText("0.0");
}
if (!weeklylimit.getText().matches("([0-9]+\\Q.\\E?[0-9]+)|([0-9]*)")) {
weeklylimit.setText("0.0");
}
if (!monthlylimit.getText().matches("([0-9]+\\Q.\\E?[0-9]+)|([0-9]*)")) {
monthlylimit.setText("0.0");
}
if (!yearlylimit.getText().matches("([0-9]+\\Q.\\E?[0-9]+)|([0-9]*)")) {
yearlylimit.setText("0.0");
}
OneSwarmRPCClient.getService().setLimits(OneSwarmRPCClient.getSessionID(),
dailylimit.getText(), weeklylimit.getText(), monthlylimit.getText(),
yearlylimit.getText(), new AsyncCallback<String>() {
public void onFailure(Throwable caught) {
caught.printStackTrace();
}
public void onSuccess(String result) {
System.out.println("Updated Limits to following: day: "
+ dailylimit.getText() + " week: " + weeklylimit.getText()
+ " month: " + monthlylimit.getText() + " year: "
+ yearlylimit.getText());
}
});
}
@Override
String validData() {
return null;
}
public void onDetach() {
super.onDetach();
OneSwarmGWT.removeFromUpdateTask(this);
}
public void onAttach() {
super.onAttach();
OneSwarmGWT.addToUpdateTask(this);
}
public void update(int count) {
if (mNextUpdate < System.currentTimeMillis()) {
mNextUpdate = Long.MAX_VALUE;
OneSwarmRPCClient.getService().getCounts(OneSwarmRPCClient.getSessionID(),
new AsyncCallback<HashMap<String, String>>() {
public void onFailure(Throwable caught) {
caught.printStackTrace();
mNextUpdate = System.currentTimeMillis() + 5000;
}
public void onSuccess(HashMap<String, String> result) {
// System.out.println("result has: " +
// result.size());
if (result != null) {
if (!(result.get(Strings.SIDEBAR_DAYCOUNT).equals("0")
&& result.get(Strings.SIDEBAR_WEEKCOUNT).equals("0")
&& result.get(Strings.SIDEBAR_MONTHCOUNT).equals("0") && result
.get(Strings.SIDEBAR_YEARCOUNT).equals("0"))) {
thisday.setText(": "
+ StringTools.formatRate(result
.get(Strings.SIDEBAR_DAYCOUNT)));
thisweek.setText(": "
+ StringTools.formatRate(result
.get(Strings.SIDEBAR_WEEKCOUNT)));
thismonth.setText(": "
+ StringTools.formatRate(result
.get(Strings.SIDEBAR_MONTHCOUNT)));
thisyear.setText(": "
+ StringTools.formatRate(result
.get(Strings.SIDEBAR_YEARCOUNT)));
}
}
mNextUpdate = System.currentTimeMillis() + 1000;
}
});
}
}
}