package edu.ualberta.med.biobank.mvp.presenter.impl; import java.util.Collection; import com.google.inject.Inject; import com.google.web.bindery.event.shared.EventBus; import edu.ualberta.med.biobank.common.action.Dispatcher; import edu.ualberta.med.biobank.common.action.info.SiteContainerTypeInfo; import edu.ualberta.med.biobank.common.action.info.SiteInfo; import edu.ualberta.med.biobank.common.action.info.StudyCountInfo; import edu.ualberta.med.biobank.common.action.site.SiteGetInfoAction; import edu.ualberta.med.biobank.model.ActivityStatus; import edu.ualberta.med.biobank.model.Address; import edu.ualberta.med.biobank.model.Comment; import edu.ualberta.med.biobank.model.Container; import edu.ualberta.med.biobank.model.Site; import edu.ualberta.med.biobank.mvp.exception.InitPresenterException; import edu.ualberta.med.biobank.mvp.presenter.impl.SiteViewPresenter.View; import edu.ualberta.med.biobank.mvp.user.ui.ValueField; import edu.ualberta.med.biobank.mvp.view.IViewFormView; public class SiteViewPresenter extends AbstractViewFormPresenter<View> { private final Dispatcher dispatcher; private Integer siteId; public interface View extends IViewFormView { ValueField<String> getName(); ValueField<String> getNameShort(); ValueField<Long> getStudyCount(); ValueField<Long> getContainerTypeCount(); ValueField<Long> getTopContainerCount(); ValueField<Long> getPatientCount(); ValueField<Long> getCollectionEventCount(); ValueField<Long> getAliquotedSpecimenCount(); ValueField<ActivityStatus> getActivityStatus(); ValueField<Address> getAddress(); ValueField<Collection<Comment>> getCommentCollection(); ValueField<Collection<StudyCountInfo>> getStudyCollection(); ValueField<Collection<SiteContainerTypeInfo>> getContainerTypeCollection(); ValueField<Collection<Container>> getTopContainerCollection(); } @Inject public SiteViewPresenter(View view, EventBus eventBus, Dispatcher dispatcher) { super(view, eventBus); this.dispatcher = dispatcher; } @Override protected void onUnbind() { } public View viewSite(Integer siteId) throws InitPresenterException { return load(new SiteView(siteId)); } private void viewSite(SiteInfo siteInfo) { Site site = siteInfo.getSite(); view.getName().setValue(site.getName()); view.getNameShort().setValue(site.getNameShort()); view.getActivityStatus().setValue(site.getActivityStatus()); view.getAddress().setValue(site.getAddress()); view.getStudyCount() .setValue(siteInfo.getStudyCount()); view.getContainerTypeCount() .setValue(siteInfo.getContainerTypeCount()); view.getTopContainerCount() .setValue(siteInfo.getTopContainerCount()); view.getPatientCount() .setValue(siteInfo.getPatientCount()); view.getAliquotedSpecimenCount() .setValue(siteInfo.getSpecimenCount()); view.getCollectionEventCount() .setValue(siteInfo.getProcessingEventCount()); // TODO: set comment collection // view.getCommentCollection() view.getStudyCollection() .setValue(siteInfo.getStudyCountInfos()); view.getContainerTypeCollection() .setValue(siteInfo.getContainerTypeInfos()); view.getTopContainerCollection() .setValue(siteInfo.getTopContainers()); } private class SiteView implements Loadable { private final Integer newSiteId; public SiteView(Integer newSiteId) { this.newSiteId = newSiteId; } @Override public void run() throws Exception { siteId = newSiteId; SiteInfo siteInfo = dispatcher.exec(new SiteGetInfoAction(siteId)); viewSite(siteInfo); } } }