package com.retailwave.fce.client.presenter; /** * $Id: AddUserPresenter.java 5 2010-06-03 11:07:35Z muthu $ * $HeadURL: svn://10.10.200.111:3691/Finance/tags/framework-snapshot1/fce/src/main/java/com/retailwave/fce/client/presenter/AddUserPresenter.java $ */ 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.event.dom.client.HasClickHandlers; import com.google.gwt.event.shared.HandlerManager; import com.google.gwt.event.shared.HandlerRegistration; import com.google.gwt.user.client.Timer; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.CheckBox; import com.google.gwt.user.client.ui.HasWidgets; import com.google.gwt.user.client.ui.ListBox; import com.google.gwt.user.client.ui.TextBox; import com.retailwave.fce.client.content.i18n.AddUserConstants; import com.retailwave.fce.client.content.i18n.UIConstants; import com.retailwave.fce.client.content.user.AddUser; import com.retailwave.fce.shared.dto.UserDTO; import com.retailwave.fce.shared.rpc.UserServiceRemoteAsync; import com.retailwave.fce.client.util.UIHelper; /** * AddUser * <p/> * Screen to add a user */ public class AddUserPresenter implements Presenter.ContentPresenter { public interface Display { HasClickHandlers getSaveButton(); } private final UserServiceRemoteAsync rpcService; private final HandlerManager eventBus; // ideally the type should be Display as defined above, but content widget dependency is an issue // todo: remove content widget dependency and refactor to 'Display' interface type private final AddUser display; static final UIConstants uiConstants = UIHelper.getUiConstants(); static final AddUserConstants myConstants = GWT.create(AddUserConstants.class); public static final String ID_PREFIX = myConstants.idPrefix(); Timer programTimer; Timer rolesTimer; Timer countriesTimer; private HandlerRegistration handlerRegistration; /** * Constructor. * * @param userServiceAsync * @param eventBus * @param display */ public AddUserPresenter(UserServiceRemoteAsync userServiceAsync, HandlerManager eventBus, AddUser display) { this.eventBus = eventBus; this.display = display; this.rpcService = userServiceAsync; } @Override public void go(HasWidgets container) { // called every time this view is shown // initialize the display as required // bind handlers and events // do the registration only once if (null == handlerRegistration) { // code to be called only once goes here // todo: handle once execution logic outside this condition and remove dependency on null check // scheduleTimers(); handlerRegistration = display.getSaveButton().addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { doSave(); } }); } } @Override public String getDescription() { return myConstants.description(); } @Override public String getName() { return myConstants.title(); } @Override public String[] getHistoryTokens() { return new String[]{myConstants.title()}; } @Override public AddUser getContentView() { return display; } private void closeStatus() { UIHelper.cancelProgress(); /* if (VSCHelper.isUserDataLoadSuccess()) { // hide the rpc status, since data have been loaded successfully now UIHelper.hideStatus(); } */ } private UserDTO fillUserFromDisplay() { UserDTO userDTO = new UserDTO(); userDTO.setName(((TextBox) UIHelper.getFromInputCache(AddUser.shortNameId, ID_PREFIX)).getText()); userDTO.setFullName(((TextBox) UIHelper.getFromInputCache(AddUser.fullNameId, ID_PREFIX)).getText()); userDTO.setEmailAddress(((TextBox) UIHelper.getFromInputCache(AddUser.emailId, ID_PREFIX)).getText()); userDTO.setActive(((CheckBox) UIHelper.getFromInputCache(AddUser.activeId, ID_PREFIX)).getValue()); ListBox listBox = (ListBox) UIHelper.getFromInputCache(AddUser.roleId, ID_PREFIX); userDTO.setRole(listBox.getItemText(listBox.getSelectedIndex())); ListBox listBox1 = (ListBox) UIHelper.getFromInputCache(AddUser.programId, ID_PREFIX); userDTO.setProgram(listBox1.getItemText(listBox1.getSelectedIndex())); ListBox listBox2 = (ListBox) UIHelper.getFromInputCache(AddUser.countryId, ID_PREFIX); userDTO.setCountry(listBox2.getItemText(listBox2.getSelectedIndex())); return userDTO; } private void doSave() { UIHelper.scheduleProgress(uiConstants.saveProgressWait()); final UserDTO modifiedUserDTO = fillUserFromDisplay(); rpcService.saveUser(modifiedUserDTO, new AsyncCallback<Void>() { @Override public void onFailure(Throwable throwable) { UIHelper.cancelProgress(); // UIHelper.showStatus(myConstants.saveUserFailed() + throwable.getMessage() + " == " + throwable); UIHelper.showStatus(UIHelper.getUiConstants().saveFail()); } @Override public void onSuccess(Void aVoid) { UIHelper.cancelProgress(); UIHelper.showStatus(myConstants.saveUserSuccess() + modifiedUserDTO.getName()); } }); } }