/** * */ package edu.washington.cs.oneswarm.ui.gwt.client.newui.friends.wizard; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.event.dom.client.KeyCodes; import com.google.gwt.event.dom.client.KeyUpEvent; import com.google.gwt.event.dom.client.KeyUpHandler; import com.google.gwt.user.client.Window; 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.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.VerticalPanel; import edu.washington.cs.oneswarm.ui.gwt.client.OneSwarmGWT; 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.i18n.OSMessages; import edu.washington.cs.oneswarm.ui.gwt.rpc.FriendInfoLite; import edu.washington.cs.oneswarm.ui.gwt.rpc.OneSwarmUIServiceAsync; class FriendsImportGtalk extends VerticalPanel implements Updateable { private static OSMessages msg = OneSwarmGWT.msg; public final static String FRIEND_NETWORK_GTALK_NAME = "XMPP (Google)"; private final TextBox computerNameBox = new TextBox(); Button connectButton; private final KeyUpHandler enterListener = new KeyUpHandler() { boolean enabled = true; public void onKeyUp(KeyUpEvent event) { if (event.getNativeKeyCode() == KeyCodes.KEY_ENTER) { if (enabled) { connect(); enabled = false; } } else { enabled = true; } } }; private final FriendsImportCallback fwcallback; private final PasswordTextBox passwordBox = new PasswordTextBox(); private final TextBox usernameBox = new TextBox(); private final Label statusLabel = new Label(); boolean connecting = false; public FriendsImportGtalk(FriendsImportCallback _callback) { super.add(getUserNamePasswordPage()); this.fwcallback = _callback; HorizontalPanel buttonPanel = new HorizontalPanel(); buttonPanel.setSpacing(5); Button cancelButton = new Button(msg.button_cancel()); cancelButton.addClickHandler(new ClickHandler() { public void onClick(ClickEvent event) { fwcallback.cancel(); } }); buttonPanel.add(cancelButton); connectButton = new Button(msg.button_connect()); connectButton.addClickHandler(new ClickHandler() { public void onClick(ClickEvent event) { connect(); } }); buttonPanel.add(connectButton); super.add(statusLabel); statusLabel.setVisible(false); super.add(buttonPanel); super.setCellHorizontalAlignment(buttonPanel, ALIGN_RIGHT); } public void onDetach() { OneSwarmGWT.removeFromUpdateTask(this); super.onDetach(); } private void connect() { OneSwarmGWT.addToUpdateTask(this); connectButton.setEnabled(false); connectButton.setText(msg.add_friends_gtalk_connecting()); connecting = true; String session = OneSwarmRPCClient.getSessionID(); OneSwarmUIServiceAsync service = OneSwarmRPCClient.getService(); AsyncCallback<FriendInfoLite[]> callback = new AsyncCallback<FriendInfoLite[]>() { public void onFailure(Throwable caught) { Window.alert(msg.add_friends_gtalk_error_unable_to_connect(caught.getMessage())); connectButton.setEnabled(true); connectButton.setText(msg.button_next()); connecting = false; } public void onSuccess(FriendInfoLite[] result) { // set the permissions to default FriendInfoLite[] newFriends = result; for (FriendInfoLite f : newFriends) { f.setBlocked(false); f.setCanSeeFileList(true); f.setRequestFileList(true); } fwcallback.connectSuccesful(newFriends, true); } }; service.getNewUsersFromXMPP(session, FRIEND_NETWORK_GTALK_NAME, usernameBox.getText(), passwordBox.getText().toCharArray(), computerNameBox.getText(), callback); } private VerticalPanel getUserNamePasswordPage() { VerticalPanel userPassPanel = new VerticalPanel(); userPassPanel.setWidth("395px"); Grid g = new Grid(3, 2); g.setWidget(0, 0, new Label(msg.add_friends_gtalk_computer_nick_label())); g.setWidget(0, 1, computerNameBox); g.setWidget(1, 0, new Label(msg.add_friends_gtalk_username_label())); g.setWidget(1, 1, usernameBox); g.setWidget(2, 0, new Label(msg.add_friends_gtalk_password_label())); g.setWidget(2, 1, passwordBox); usernameBox.setText("@gmail.com"); passwordBox.addKeyUpHandler(enterListener); userPassPanel.add(g); String session = OneSwarmRPCClient.getSessionID(); OneSwarmUIServiceAsync service = OneSwarmRPCClient.getService(); AsyncCallback<String> callback = new AsyncCallback<String>() { public void onFailure(Throwable caught) { System.out.println("error getting computer name " + caught.getMessage()); } public void onSuccess(String result) { if (result != null) { if (computerNameBox.getText().equals("")) { computerNameBox.setText(result); } System.out.println("computer name=" + result); } } }; service.getComputerName(session, callback); return userPassPanel; } public void update(int count) { if (connecting) { OneSwarmRPCClient.getService().getGtalkStatus(OneSwarmRPCClient.getSessionID(), new AsyncCallback<String>() { public void onFailure(Throwable caught) { } public void onSuccess(String result) { // OneSwarmGWT.log("got result: " + result); if (result != null) { String newStatus = msg.add_friends_gtalk_status(result); if (!statusLabel.getText().equals(newStatus)) { statusLabel.setText(newStatus); } statusLabel.setVisible(true); } else { statusLabel.setText(""); statusLabel.setVisible(false); } } }); } else { statusLabel.setVisible(false); } } }