package kornell.gui.client.presentation.profile.generic; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.ListIterator; import java.util.logging.Logger; import com.github.gwtbootstrap.client.ui.CheckBox; import com.github.gwtbootstrap.client.ui.Form; import com.github.gwtbootstrap.client.ui.ListBox; import com.github.gwtbootstrap.client.ui.TextBox; import com.github.gwtbootstrap.client.ui.constants.AlertType; import com.github.gwtbootstrap.client.ui.constants.IconType; import com.google.gwt.core.client.GWT; import com.google.gwt.event.dom.client.ChangeEvent; import com.google.gwt.event.dom.client.ChangeHandler; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.event.logical.shared.ValueChangeEvent; import com.google.gwt.event.logical.shared.ValueChangeHandler; import com.google.gwt.i18n.client.DateTimeFormat; import com.google.gwt.place.shared.PlaceChangeEvent; import com.google.gwt.place.shared.PlaceController; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.user.client.History; import com.google.gwt.user.client.ui.Button; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.FocusWidget; import com.google.gwt.user.client.ui.Image; import com.google.gwt.user.client.ui.IsWidget; import com.google.gwt.user.client.ui.Widget; import com.google.web.bindery.autobean.shared.AutoBeanCodex; import com.google.web.bindery.autobean.shared.AutoBeanUtils; import com.google.web.bindery.event.shared.EventBus; import kornell.api.client.Callback; import kornell.api.client.KornellSession; import kornell.core.entity.InstitutionRegistrationPrefix; import kornell.core.entity.InstitutionType; import kornell.core.entity.Person; import kornell.core.entity.RegistrationType; import kornell.core.entity.RoleCategory; import kornell.core.entity.RoleType; import kornell.core.error.KornellErrorTO; import kornell.core.to.UserHelloTO; import kornell.core.to.UserInfoTO; import kornell.core.util.StringUtils; import kornell.gui.client.ClientFactory; import kornell.gui.client.GenericClientFactoryImpl; import kornell.gui.client.KornellConstants; import kornell.gui.client.ViewFactory; import kornell.gui.client.event.LogoutEvent; import kornell.gui.client.presentation.profile.ProfilePlace; import kornell.gui.client.presentation.profile.ProfileView; import kornell.gui.client.util.forms.FormHelper; import kornell.gui.client.util.forms.formfield.KornellFormFieldWrapper; import kornell.gui.client.util.forms.formfield.ListBoxFormField; import kornell.gui.client.util.forms.formfield.SimpleDatePicker; import kornell.gui.client.util.forms.formfield.SimpleDatePickerFormField; import kornell.gui.client.util.forms.formfield.TextBoxFormField; import kornell.gui.client.util.validation.CPFValidator; import kornell.gui.client.util.validation.EmailValidator; import kornell.gui.client.util.validation.ValidationChangedHandler; import kornell.gui.client.util.view.KornellNotification; import kornell.gui.client.util.view.LoadingPopup; public class GenericProfileView extends Composite implements ProfileView,ValidationChangedHandler { interface MyUiBinder extends UiBinder<Widget, GenericProfileView> { } private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class); private static final Logger logger = Logger.getLogger(GenericProfileView.class.getName()); private static KornellConstants constants = GWT.create(KornellConstants.class); private KornellSession session; private ViewFactory viewFactory; private PlaceController placeCtrl; private final EventBus bus; private FormHelper formHelper; private boolean isEditMode, isCurrentUser, isAdmin, hasPowerOver, showEmail = true, showCPF = true, showContactDetails, validateContactDetails; private String DISABLED_CLASS = "btnNotSelected"; private String ENABLED_CLASS = "btnAction"; private String CURSOR_DEFAULT_CLASS = "cursorDefault"; private String CURSOR_POINTER_CLASS = "cursorPointer"; @UiField Form form; @UiField FlowPanel profileFields; @UiField FlowPanel btnPanelBottom; @UiField GenericPasswordChangeView passwordChangeWidget; @UiField GenericSendMessageView sendMessageWidget; private UserInfoTO user; private KornellFormFieldWrapper cpf, email, username, fullName, telephone, country, state, city, addressLine1, addressLine2, postalCode, company, position, sex, birthDate, receiveEmailCommunication; private List<KornellFormFieldWrapper> fields; private Button btnChangePassword, btnSendMessage, btnEdit, btnClose, btnOK, btnCancel; private Button btnChangePassword2, btnSendMessage2, btnEdit2, btnClose2, btnOK2, btnCancel2; private ClientFactory clientFactory; private String profileUserUUID; public GenericProfileView(ClientFactory clientFactory) { this.clientFactory = clientFactory; this.viewFactory = clientFactory.getViewFactory(); this.bus = clientFactory.getEventBus(); this.session = clientFactory.getKornellSession(); this.user = session.getCurrentUser(); this.placeCtrl = clientFactory.getPlaceController(); this.fields = new ArrayList<KornellFormFieldWrapper>(); formHelper = new FormHelper(); initWidget(uiBinder.createAndBindUi(this)); // i18n btnEdit = createButton(constants.editButton(), "btnAction btnPlaceBar", false, new ClickHandler() { @Override public void onClick(ClickEvent e) {doEdit(e);} }); btnEdit2 = createButton(constants.editButton(), "btnAction btnBottom", false, new ClickHandler() { @Override public void onClick(ClickEvent e) {doEdit(e);} }); btnClose = createButton(constants.closeButton(), "btnNotSelected btnPlaceBar", false, new ClickHandler() { @Override public void onClick(ClickEvent e) {doClose(e);} }); btnClose2 = createButton(constants.closeButton(), "btnNotSelected btnBottom", false, new ClickHandler() { @Override public void onClick(ClickEvent e) {doClose(e);} }); btnOK = createButton(constants.saveButton(), "btnAction btnPlaceBar", false, new ClickHandler() { @Override public void onClick(ClickEvent e) {doOK(e);} }); btnOK2 = createButton(constants.saveButton(), "btnAction btnBottom", false, new ClickHandler() { @Override public void onClick(ClickEvent e) {doOK(e);} }); btnCancel = createButton(constants.cancelButton(), "btnNotSelected btnPlaceBar", false, new ClickHandler() { @Override public void onClick(ClickEvent e) {doCancel(e);} }); btnCancel2 = createButton(constants.cancelButton(), "btnNotSelected btnBottom", false, new ClickHandler() { @Override public void onClick(ClickEvent e) {doCancel(e);} }); btnChangePassword = createButton(constants.changePasswordButton(), "btnSelected btnPlaceBar", false, new ClickHandler() { @Override public void onClick(ClickEvent e) {passwordChangeWidget.show();} }); btnChangePassword2 = createButton(constants.changePasswordButton(), "btnSelected btnBottom", false, new ClickHandler() { @Override public void onClick(ClickEvent e) {passwordChangeWidget.show();} }); btnSendMessage = createButton(constants.sendMessageButton(), "btnNotSelected btnPlaceBar", true, new ClickHandler() { @Override public void onClick(ClickEvent e) {sendMessageWidget.show();} }); btnSendMessage2 = createButton(constants.sendMessageButton(), "btnNotSelected btnBottom", true, new ClickHandler() { @Override public void onClick(ClickEvent e) {sendMessageWidget.show();} }); initData(); bus.addHandler(PlaceChangeEvent.TYPE, new PlaceChangeEvent.Handler() { @Override public void onPlaceChange(PlaceChangeEvent event) { if(event.getNewPlace() instanceof ProfilePlace){ initData(); } }}); } private Button createButton(String text, String className, boolean visible, ClickHandler clickHandler) { Button btn = new Button(); btn.setVisible(visible); btn.setText(text); btn.addStyleName(className); btn.addStyleName("btnStandard"); btn.addClickHandler(clickHandler); return btn; } private void initData() { viewFactory.getMenuBarView().initPlaceBar(IconType.USER, constants.profileTitle(), constants.profileDescription()); isCurrentUser = session.getCurrentUser().getPerson().getUUID().equals(((ProfilePlace) placeCtrl.getWhere()).getPersonUUID()); isEditMode = ((ProfilePlace)placeCtrl.getWhere()).isEdit() && isCurrentUser; isAdmin = RoleCategory.hasRole(session.getCurrentUser().getRoles(),RoleType.courseClassAdmin) || session.isInstitutionAdmin() || session.isPlatformAdmin(); form.addStyleName("shy"); profileUserUUID = ((ProfilePlace) placeCtrl.getWhere()).getPersonUUID(); session.user().hasPowerOver(profileUserUUID, new Callback<Boolean>() { @Override public void ok(Boolean hasPowerOverTargetUser) { List<IsWidget> widgets = new ArrayList<IsWidget>(); List<IsWidget> widgets2 = new ArrayList<IsWidget>(); if(!isCurrentUser){ widgets.add(btnSendMessage); widgets2.add(btnSendMessage2); } if(hasPowerOverTargetUser){ widgets.add(btnChangePassword); widgets2.add(btnChangePassword2); } widgets.add(btnCancel); widgets2.add(btnCancel2); //widgets.add(btnClose); //widgets2.add(btnClose2); widgets.add(btnEdit); widgets2.add(btnEdit2); widgets.add(btnOK); widgets2.add(btnOK2); viewFactory.getMenuBarView().setPlaceBarWidgets(widgets); buildButtonBar(widgets2); hasPowerOver = hasPowerOverTargetUser; session.user().getUser(profileUserUUID, new Callback<UserInfoTO>() { @Override public void ok(UserInfoTO to) { user = to; display(); } @Override public void notFound(KornellErrorTO kornellErrorTO) { logger.severe(this.getClass().getName() + " - not found"); user = null; display(); } }); } }); } private void buildButtonBar(List<IsWidget> widgets) { btnPanelBottom.clear(); ListIterator<IsWidget> li = widgets.listIterator(widgets.size()); // Iterate in reverse. while(li.hasPrevious()) { btnPanelBottom.add(li.previous()); } } private boolean validateFields() { if(!formHelper.isLengthValid(fullName.getFieldPersistText(), 5, 50)){ fullName.setError(constants.missingNameMessage()); } if(showContactDetails && validateContactDetails){ if(!formHelper.isLengthValid(telephone.getFieldPersistText(), 7, 20)){ telephone.setError(constants.missingTelephoneMessage()); } else telephone.setError(""); if(!formHelper.isLengthValid(country.getFieldPersistText(), 0, 2)){ country.setError(constants.missingCountryMessage()); } else country.setError(""); if("BR".equals(country.getFieldPersistText())){ if(!formHelper.isListBoxSelected(((ListBox) state.getFieldWidget()))){ state.setError(constants.selectStateMessage()); } else state.setError(""); } else { if(!formHelper.isLengthValid(state.getFieldPersistText(), 2, 100)){ state.setError(constants.missingStateMessage()); } else state.setError(""); } if(!formHelper.isLengthValid(city.getFieldPersistText(), 2, 100)){ city.setError(constants.missingCityMessage()); } else city.setError(""); if(!formHelper.isLengthValid(addressLine1.getFieldPersistText(), 2, 100)){ addressLine1.setError(constants.missingAddressMessage()); } else addressLine1.setError(""); if(!formHelper.isLengthValid(postalCode.getFieldPersistText(), 2, 100)){ postalCode.setError(constants.missingPostalCodeMessage()); } else postalCode.setError(""); } return !checkErrors(); } void doOK(ClickEvent e) { formHelper.clearErrors(fields); if(isEditMode && validateFields()){ LoadingPopup.show(); session.user().updateUser(getUserInfoFromForm(), new Callback<UserInfoTO>(){ @Override public void ok(UserInfoTO userInfo){ LoadingPopup.hide(); user = userInfo; KornellNotification.show(constants.confirmSaveProfile()); btnOK.setEnabled(true); btnOK2.setEnabled(true); isEditMode = false; display(); session.fetchUser(new Callback<UserHelloTO>() { @Override public void ok(UserHelloTO to) { user = to.getUserInfoTO(); } }); if(!InstitutionType.DASHBOARD.equals(session.getInstitution().getInstitutionType())){ if(isCurrentUser){ placeCtrl.goTo(clientFactory.getDefaultPlace()); } else { History.back(); } } } @Override public void unauthorized(KornellErrorTO kornellErrorTO){ LoadingPopup.hide(); KornellNotification.show(constants.errorSaveProfile(), AlertType.ERROR); } }); } } private UserInfoTO getUserInfoFromForm() { //"clone" user String userPayload = AutoBeanCodex.encode(AutoBeanUtils.getAutoBean(user)).getPayload(); UserInfoTO userTmp = AutoBeanCodex.decode(GenericClientFactoryImpl.TO_FACTORY, kornell.core.to.UserInfoTO.class, userPayload).as(); Person person = userTmp.getPerson(); if(showCPF){ person.setCPF(FormHelper.stripCPF(cpf.getFieldPersistText())); } if(showEmail){ person.setEmail(email.getFieldPersistText()); } person.setFullName(fullName.getFieldPersistText()); person.setCompany(company.getFieldPersistText()); person.setTitle(position.getFieldPersistText()); person.setSex(sex.getFieldPersistText()); if (StringUtils.isSome(birthDate.getFieldPersistText())) { person.setBirthDate(DateTimeFormat.getFormat("yyyy-MM-dd").parse(birthDate.getFieldPersistText())); } if(showContactDetails){ person.setTelephone(telephone.getFieldPersistText()); person.setCountry(country.getFieldPersistText()); person.setState(state.getFieldPersistText()); person.setCity(city.getFieldPersistText()); person.setAddressLine1(addressLine1.getFieldPersistText()); person.setAddressLine2(addressLine2.getFieldPersistText()); person.setPostalCode(postalCode.getFieldPersistText()); } person.setReceiveEmailCommunication(receiveEmailCommunication.getFieldPersistText().equals("true")); if("".equals(person.getCPF())) person.setCPF(null); if("".equals(person.getEmail())) person.setEmail(null); userTmp.setPerson(person); return userTmp; } void doCancel(ClickEvent e) { if(showContactDetails && validateContactDetails && session.getCurrentUser().getPerson().getCity() == null){ bus.fireEvent(new LogoutEvent()); } else { isEditMode = false; formHelper.clearErrors(fields); display(); } } void doEdit(ClickEvent e) { isEditMode = true; formHelper.clearErrors(fields); display(); } void doClose(ClickEvent e) { form.addStyleName("shy"); History.back(); //placeCtrl.goTo(clientFactory.getDefaultPlace()); } private boolean checkErrors() { for (KornellFormFieldWrapper field : fields) if(!"".equals(field.getError())){ KornellNotification.show(constants.formContainsErrors(), AlertType.WARNING); if(field.getFieldWidget() instanceof FocusWidget) ((FocusWidget)field.getFieldWidget()).setFocus(true); return true; } return false; } private void display() { showContactDetails = session.getInstitution().isDemandsPersonContactDetails(); validateContactDetails = session.getInstitution().isValidatePersonContactDetails() && isCurrentUser; form.addStyleName("shy"); btnOK.setVisible(isEditMode); btnOK2.setVisible(isEditMode); btnCancel.setVisible(isEditMode); btnCancel2.setVisible(isEditMode); btnClose.setVisible(!isEditMode); btnClose2.setVisible(!isEditMode); btnChangePassword.setVisible(isEditMode && (isCurrentUser || hasPowerOver)); btnChangePassword2.setVisible(isEditMode && (isCurrentUser || hasPowerOver)); btnEdit.setVisible(!isEditMode && (isCurrentUser || hasPowerOver)); btnEdit2.setVisible(!isEditMode && (isCurrentUser || hasPowerOver)); profileFields.clear(); if(user == null){ KornellNotification.show(constants.userNotFound(), AlertType.ERROR); return; } if(RegistrationType.username.equals(user.getPerson().getRegistrationType())){ InstitutionRegistrationPrefix institutionRegistrationPrefix = user.getInstitutionRegistrationPrefix(); showEmail = institutionRegistrationPrefix.isShowEmailOnProfile(); showCPF = institutionRegistrationPrefix.isShowCPFOnProfile(); showContactDetails = showContactDetails && institutionRegistrationPrefix.isShowContactInformationOnProfile(); } if(isEditMode && showContactDetails && validateContactDetails && session.getCurrentUser().getPerson().getCity() == null){ KornellNotification.show(constants.pleaseCompleteRegistrationMessage(), AlertType.WARNING, 5000); } //profileFields.add(getPictureUploadFormPanel()); username = new KornellFormFieldWrapper(constants.usernameLabel(), formHelper.createTextBoxFormField(user.getUsername()), false); fields.add(username); profileFields.add(username); fullName = new KornellFormFieldWrapper(constants.fullnameLabel(), formHelper.createTextBoxFormField(user.getPerson().getFullName()), isEditMode); fields.add(fullName); profileFields.add(fullName); KornellSession session = clientFactory.getKornellSession(); if(showEmail){ email = new KornellFormFieldWrapper(constants.emailLabel(), formHelper.createTextBoxFormField(user.getPerson().getEmail()), isEditMode, EmailValidator.unregisteredEmailValidator(profileUserUUID, session)); requireValid(email); fields.add(email); profileFields.add(email); } if(showCPF && (isCurrentUser || isAdmin)){ cpf = new KornellFormFieldWrapper (constants.cpfLabel(), formHelper.createTextBoxFormField(user.getPerson().getCPF()), isEditMode, CPFValidator.unregisteredCPFValidator(profileUserUUID, session)); requireValid(cpf); fields.add(cpf); profileFields.add(cpf); } company = new KornellFormFieldWrapper(constants.companyLabel(), formHelper.createTextBoxFormField(user.getPerson().getCompany()), isEditMode); fields.add(company); profileFields.add(company); position = new KornellFormFieldWrapper(constants.posititonLabel(), formHelper.createTextBoxFormField(user.getPerson().getTitle()), isEditMode); fields.add(position); profileFields.add(position); if(isCurrentUser || isAdmin){ final ListBox sexes = formHelper.getSexList(); sexes.setSelectedValue(user.getPerson().getSex()); sex = new KornellFormFieldWrapper(constants.genderLabel(), new ListBoxFormField(sexes), isEditMode); fields.add(sex); profileFields.add(sex); SimpleDatePicker datePicker = new SimpleDatePicker(); if((isEditMode || isCurrentUser || isAdmin) && user.getPerson().getBirthDate() != null){ datePicker.setFields(user.getPerson().getBirthDate()); } birthDate = new KornellFormFieldWrapper(constants.birthDateLabel(), new SimpleDatePickerFormField(datePicker), isEditMode); fields.add(birthDate); profileFields.add(birthDate); } receiveEmailCommunication = new KornellFormFieldWrapper(constants.receiveEmailCommunicationLabel(), formHelper.createCheckBoxFormField(user.getPerson().isReceiveEmailCommunication()), isEditMode); fields.add(receiveEmailCommunication); profileFields.add(receiveEmailCommunication); ((CheckBox)receiveEmailCommunication.getFieldWidget()).addValueChangeHandler(new ValueChangeHandler<Boolean>() { @Override public void onValueChange(ValueChangeEvent<Boolean> event) { if(event.getValue()){ } } }); if((isCurrentUser || isAdmin)&& showContactDetails){ displayContactDetails(); } form.removeStyleName("shy"); setValidity(true); passwordChangeWidget.initData(session, user); sendMessageWidget.initData(session, user, isCurrentUser); } /*private FormPanel getPictureUploadFormPanel() { final FormPanel formPanel = new FormPanel(); formPanel.setEncoding(FormPanel.ENCODING_MULTIPART); formPanel.setMethod(FormPanel.METHOD_POST); formPanel.setAction("http://"+ s3Policy.getBucketName() +".s3.amazonaws.com/"); FlowPanel fileUploadWrapper = new FlowPanel(); fileUploadWrapper.addStyleName("fileUploadWrapper"); fileUploadWrapper.add(new Image(IMAGE_PATH + "profilePic.png")); fileUploadWrapper.add(new Hidden("key", s3Policy.getKey()+"${filename}")); fileUploadWrapper.add(new Hidden("acl", "public-read")); fileUploadWrapper.add(new Hidden("success_action_redirect", s3Policy.getSuccessActionRedirect())); fileUploadWrapper.add(new Hidden("Content-Type", "image/jpeg")); fileUploadWrapper.add(new Hidden("x-amz-meta-uuid", "14365123651275")); fileUploadWrapper.add(new Hidden("x-amz-meta-tag", "")); fileUploadWrapper.add(new Hidden("AWSAccessKeyId", s3Policy.getAWSAccessKeyId())); fileUploadWrapper.add(new Hidden("Policy", s3Policy.getPolicy())); fileUploadWrapper.add(new Hidden("Signature", s3Policy.getSignature())); fileUpload = new FileUpload(); fileUpload.setName("file"); fileUploadWrapper.add(fileUpload); SubmitButton changeImageButton = new SubmitButton(); changeImageButton.setName("submit"); changeImageButton.setText("TROCAR IMAGEM"); changeImageButton.setStyleName("btnAction btnStandard"); fileUploadWrapper.add(changeImageButton); formPanel.addSubmitHandler(new FormPanel.SubmitHandler() { public void onSubmit(SubmitEvent event) { if("".equals(fileUpload.getFilename())){ event.cancel(); } } }); formPanel.addSubmitCompleteHandler(new FormPanel.SubmitCompleteHandler() { public void onSubmitComplete(SubmitCompleteEvent event) { KornellNotification.show(event.getResults()); } }); formPanel.setWidget(fileUploadWrapper); return formPanel; }*/ List<KornellFormFieldWrapper> requiredFields = new ArrayList<KornellFormFieldWrapper>(); private void requireValid(KornellFormFieldWrapper field) { requiredFields.add(field); field.addValidationListener(this); } @Override public void onValidationChanged() { boolean isValid = true; for (Iterator<KornellFormFieldWrapper> it = requiredFields.iterator(); it.hasNext();) { KornellFormFieldWrapper field = (KornellFormFieldWrapper) it.next(); isValid = isValid && field.isValid(); } checkErrors(); setValidity(isValid); } void setValidity(boolean isValid){ btnOK.setEnabled(isValid); btnOK2.setEnabled(isValid); if(isValid){ btnOK.removeStyleName(DISABLED_CLASS); btnOK.addStyleName(ENABLED_CLASS); btnOK.removeStyleName(CURSOR_DEFAULT_CLASS); btnOK.addStyleName(CURSOR_POINTER_CLASS); btnOK2.removeStyleName(DISABLED_CLASS); btnOK2.addStyleName(ENABLED_CLASS); btnOK2.removeStyleName(CURSOR_DEFAULT_CLASS); btnOK2.addStyleName(CURSOR_POINTER_CLASS); }else{ btnOK.addStyleName(DISABLED_CLASS); btnOK.removeStyleName(ENABLED_CLASS); btnOK.removeStyleName(CURSOR_POINTER_CLASS); btnOK.addStyleName(CURSOR_DEFAULT_CLASS); btnOK2.addStyleName(DISABLED_CLASS); btnOK2.removeStyleName(ENABLED_CLASS); btnOK2.removeStyleName(CURSOR_POINTER_CLASS); btnOK2.addStyleName(CURSOR_DEFAULT_CLASS); KornellNotification.show(constants.formContainsErrors(), AlertType.WARNING); } } private void displayContactDetails() { profileFields.add(getImageSeparator()); telephone = new KornellFormFieldWrapper(constants.telephoneLabel(), formHelper.createTextBoxFormField(user.getPerson().getTelephone()), isEditMode); fields.add(telephone); profileFields.add(telephone); final ListBox countries = formHelper.getCountriesList(); if(isEditMode && user.getPerson().getCountry() == null){ countries.setSelectedValue("BR"); } else { countries.setSelectedValue(user.getPerson().getCountry()); } countries.addChangeHandler(new ChangeHandler() { @Override public void onChange(ChangeEvent event) { if("BR".equals(countries.getValue())){ state.initData(new ListBoxFormField(formHelper.getBrazilianStatesList())); } else { if(!(state.getFieldWidget() instanceof TextBox)) state.initData(new TextBoxFormField(new TextBox())); } } }); country = new KornellFormFieldWrapper(constants.countryLabel(), new ListBoxFormField(countries), isEditMode); fields.add(country); profileFields.add(country); if("BR".equals(countries.getValue())){ //state.getFormField().clear(); final ListBox states = formHelper.getBrazilianStatesList(); if(user.getPerson().getState() != null){ states.setSelectedValue(user.getPerson().getState()); } state = new KornellFormFieldWrapper(constants.stateLabel(), new ListBoxFormField(states), isEditMode); } else { state = new KornellFormFieldWrapper(constants.stateLabel(), formHelper.createTextBoxFormField(user.getPerson().getState()), isEditMode); } fields.add(state); profileFields.add(state); city = new KornellFormFieldWrapper(constants.cityLabel(), formHelper.createTextBoxFormField(user.getPerson().getCity()), isEditMode); fields.add(city); profileFields.add(city); addressLine1 = new KornellFormFieldWrapper(constants.address1Label(), formHelper.createTextBoxFormField(user.getPerson().getAddressLine1()), isEditMode); fields.add(addressLine1); profileFields.add(addressLine1); addressLine2 = new KornellFormFieldWrapper(constants.address2Label(), formHelper.createTextBoxFormField(user.getPerson().getAddressLine2()), isEditMode); fields.add(addressLine2); profileFields.add(addressLine2); postalCode = new KornellFormFieldWrapper(constants.postalCodeLabel(), formHelper.createTextBoxFormField(user.getPerson().getPostalCode()), isEditMode); fields.add(postalCode); profileFields.add(postalCode); } @Override public void setPresenter(Presenter presenter) { } private Image getImageSeparator(){ Image image = new Image(FormHelper.SEPARATOR_BAR_IMG_PATH); image.addStyleName(FormHelper.SEPARATOR_BAR_CLASS); return image; } }