package org.visico.utilitydss.client;
import java.util.ArrayList;
import org.visico.utilitydss.shared.Project;
import org.visico.utilitydss.shared.User;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
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.CheckBox;
import com.google.gwt.user.client.ui.DialogBox;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.PasswordTextBox;
import com.google.gwt.user.client.ui.TextBox;
public class UserPanel extends HorizontalPanel implements ClickHandler
{
public UserPanel()
{
refresh();
}
private void refresh()
{
this.clear();
drawLoginTable();
drawProjectTable();
}
private void drawLoginTable()
{
loginTable = new FlexTable();
User u = MainPanel.getInstance().getUser();
if (u == null)
{
loginTable = new FlexTable();
loginTable.setText(0, 0, "Username:");
userNameTB = new TextBox();
loginTable.setWidget(0, 1, userNameTB);
loginTable.setText(1, 0, "Password:");
passwordTB = new PasswordTextBox();
loginTable.setWidget(1, 1, passwordTB);
//rememberMeCB = new CheckBox("remember me");
//loginTable.setWidget(2, 1, rememberMeCB);
final Button loginBtn = new Button("Login");
loginBtn.addClickHandler(this);
loginTable.setWidget(2, 1, loginBtn);
}
else
{
loginTable.setText(0,0, "loged in as");
loginTable.setText(1,0, u.getName());
Button logout_btn = new Button("Log out");
logout_btn.addClickHandler(new ClickHandler()
{
public void onClick(ClickEvent event)
{
MainPanel.getInstance().setUser(null);
refresh();
}
});
loginTable.setWidget(2,0, logout_btn);
}
add(loginTable);
}
private void drawProjectTable()
{
User u = MainPanel.getInstance().getUser();
if (u != null)
{
projectTable = new FlexTable();
UtilityDSSServiceAsync service = GWT.create(UtilityDSSService.class);
try
{
service.getProjects(MainPanel.getInstance().getUser(), new AsyncCallback<ArrayList<Project>>()
{
public void onFailure(Throwable caught)
{
// Show the RPC error message to the user
DialogBox dialogBox = new DialogBox();
dialogBox.setText("Remote Procedure Call - Failure");
dialogBox.center();
}
public void onSuccess(ArrayList<Project> result)
{
for (int i=0; i<result.size(); i++)
{
Project p = result.get(i);
projectTable.setText(i,0, p.getName());
projectTable.setText(i,1, p.getLocation());
projectTable.setText(i,2, p.getDescription());
projectTable.setWidget(i,3, new Button("Open"));
}
}
});
add(projectTable);
}
catch (IllegalArgumentException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
private TextBox userNameTB;
private PasswordTextBox passwordTB;
private CheckBox rememberMeCB;
private FlexTable loginTable;
private FlexTable projectTable;
@Override
public void onClick(ClickEvent event)
{
UtilityDSSServiceAsync service = GWT.create(UtilityDSSService.class);
try
{
service.login(userNameTB.getText(), passwordTB.getText(), new AsyncCallback<User>()
{
public void onFailure(Throwable caught)
{
// Show the RPC error message to the user
DialogBox dialogBox = new DialogBox();
dialogBox.setText("Remote Procedure Call - Failure");
dialogBox.center();
}
public void onSuccess(User result)
{
if (result == null)
Window.alert("Login failed. Please verify your user name and password!");
else
{
MainPanel.getInstance().setUser(result);
refresh();
}
}
});
}
catch (IllegalArgumentException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}