package org.visico.neighborhoodpss.gwt.client; import java.util.ArrayList; import org.visico.neighborhoodpss.domain.project.ProjectDTO; import org.visico.neighborhoodpss.domain.project.UserDTO; import org.visico.neighborhoodpss.gwt.shared.patterns.ProjectMediator; 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.DialogBox; import com.google.gwt.user.client.ui.FlexTable; import com.google.gwt.user.client.ui.HorizontalPanel; import com.google.gwt.user.client.ui.ListBox; import com.google.gwt.user.client.ui.PasswordTextBox; import com.google.gwt.user.client.ui.TextBox; public class UserPanel extends HorizontalPanel implements ClickHandler { private TextBox userNameTB; private PasswordTextBox passwordTB; //private CheckBox rememberMeCB; private FlexTable loginTable; private ListBox projectList; private UserDTO u; private ArrayList<ProjectDTO> projects; ProjectMediator projectMed; public UserPanel(ProjectMediator projectMed) { this.projectMed = projectMed; refresh(); } private void refresh() { this.clear(); drawLoginTable(); drawProjectTable(); } private void drawLoginTable() { loginTable = new FlexTable(); 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); final Button loginBtn = new Button("Login"); loginBtn.addClickHandler(this); loginTable.setWidget(2, 1, loginBtn); } else { loginTable.setText(0,0, "Logged 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() { if (u != null) { projectList = new ListBox(); projectList.setVisibleItemCount(1); ScenarioServiceAsync service = GWT.create(ScenarioService.class); try { service.getProjects(u, new AsyncCallback<ArrayList<ProjectDTO>>() { public void onFailure(Throwable caught) { Window.alert("Could not connect to server, please contact the system administrator"); } public void onSuccess(ArrayList<ProjectDTO> result) { if (result == null) { Window.alert("Failed to load projects from server!"); } else { projects = new ArrayList<ProjectDTO>(); for (int i=0; i<result.size(); i++) { ProjectDTO p = result.get(i); projects.add(p); projectList.addItem(p.getName(), Integer.toString(i)); } } } }); add(projectList); Button selectProject = new Button("Open Project"); add(selectProject); selectProject.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { int selection = Integer.parseInt(projectList.getValue(projectList.getSelectedIndex())); projectMed.setProject(projects.get(selection)); } }); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } @Override public void onClick(ClickEvent event) { ScenarioServiceAsync service = GWT.create(ScenarioService.class); try { service.login(userNameTB.getText(), passwordTB.getText(), new AsyncCallback<UserDTO>() { 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(UserDTO result) { if (result == null) Window.alert("Login failed. Please verify your user name and password!"); else { u = result; refresh(); } } }); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }