package edu.ualberta.med.biobank.mvp.presenter.impl;
import com.google.inject.Inject;
import com.google.web.bindery.event.shared.EventBus;
import com.pietschy.gwt.pectin.client.form.validation.HasValidation;
import com.pietschy.gwt.pectin.client.form.validation.validator.NotEmptyValidator;
import edu.ualberta.med.biobank.model.Address;
import edu.ualberta.med.biobank.mvp.presenter.HasState;
import edu.ualberta.med.biobank.mvp.presenter.IStatefulPresenter;
import edu.ualberta.med.biobank.mvp.presenter.IValidatablePresenter;
import edu.ualberta.med.biobank.mvp.presenter.impl.AddressEntryPresenter.View;
import edu.ualberta.med.biobank.mvp.presenter.state.ModelState;
import edu.ualberta.med.biobank.mvp.presenter.validation.ValidationTree;
import edu.ualberta.med.biobank.mvp.user.ui.ValueField;
import edu.ualberta.med.biobank.mvp.view.IView;
public class AddressEntryPresenter extends AbstractPresenter<View>
implements IStatefulPresenter, IValidatablePresenter {
private final ValidationTree validation = new ValidationTree();
private final ModelState state = new ModelState();
private Integer addressId;
public interface View extends IView {
ValueField<String> getStreet1();
ValueField<String> getStreet2();
ValueField<String> getCity();
ValueField<String> getProvince();
ValueField<String> getPostalCode();
ValueField<String> getPhoneNumber();
ValueField<String> getFaxNumber();
ValueField<String> getCountry();
}
@Inject
public AddressEntryPresenter(View view, EventBus eventBus) {
super(view, eventBus);
}
@Override
protected void onBind() {
state.add(view);
validation.validate(view.getCity())
.using(new NotEmptyValidator("city"));
}
@Override
protected void onUnbind() {
validation.dispose();
}
public void setAddress(Address address) {
this.addressId = address.getId();
view.getStreet1().setValue(address.getStreet1());
view.getStreet2().setValue(address.getStreet2());
view.getCity().setValue(address.getCity());
view.getProvince().setValue(address.getProvince());
view.getPostalCode().setValue(address.getPostalCode());
view.getPhoneNumber().setValue(address.getPhoneNumber());
view.getFaxNumber().setValue(address.getFaxNumber());
view.getCountry().setValue(address.getCountry());
}
public Address getAddress() {
Address address = new Address();
address.setId(addressId);
address.setStreet1(view.getStreet1().getValue());
address.setStreet2(view.getStreet2().getValue());
address.setCity(view.getCity().getValue());
address.setProvince(view.getProvince().getValue());
address.setPostalCode(view.getPostalCode().getValue());
address.setPhoneNumber(view.getPhoneNumber().getValue());
address.setFaxNumber(view.getFaxNumber().getValue());
address.setCountry(view.getCountry().getValue());
return address;
}
@Override
public HasValidation getValidation() {
return validation;
}
@Override
public HasState getState() {
return state;
}
}