package kornell.gui.client.presentation.classroom.generic; import java.util.logging.Logger; import com.google.gwt.core.client.GWT; 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.ui.Composite; import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.Widget; import com.google.web.bindery.event.shared.EventBus; import kornell.api.client.KornellSession; import kornell.core.entity.Enrollment; import kornell.core.entity.EnrollmentCategory; import kornell.core.to.CourseClassTO; import kornell.gui.client.ViewFactory; import kornell.gui.client.event.ShowChatDockEvent; import kornell.gui.client.event.ShowChatDockEventHandler; import kornell.gui.client.event.ShowDetailsEvent; import kornell.gui.client.event.ShowDetailsEventHandler; import kornell.gui.client.presentation.admin.institution.AdminInstitutionPresenter; import kornell.gui.client.presentation.classroom.ClassroomView; import kornell.gui.client.presentation.classroom.generic.details.GenericCourseDetailsView; public class GenericClassroomView extends Composite implements ClassroomView, ShowDetailsEventHandler, ShowChatDockEventHandler { interface MyUiBinder extends UiBinder<Widget, GenericClassroomView> { } private PlaceController placeCtrl; private KornellSession session; private EventBus bus; private ViewFactory viewFactory; Logger logger = Logger.getLogger(AdminInstitutionPresenter.class.getName()); private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class); @UiField FlowPanel contentPanel; @UiField FlowPanel detailsPanel; @UiField FlowPanel dockChatPanel; private boolean showCourseClassContent; private GenericCourseDetailsView detailsView; private Presenter presenter; boolean chatDockWasShown = false; public GenericClassroomView(PlaceController placeCtrl, KornellSession session, EventBus bus, ViewFactory viewFactory) { this.placeCtrl = placeCtrl; this.session = session; this.bus = bus; this.bus.addHandler(ShowChatDockEvent.TYPE,this); this.viewFactory = viewFactory; bus.addHandler(ShowDetailsEvent.TYPE,this); initWidget(uiBinder.createAndBindUi(this)); detailsPanel.setVisible(true); contentPanel.setVisible(false); dockChatPanel.setVisible(false); } @Override public void display(boolean showCourseClassContent) { presenter.stopSequencer(); this.showCourseClassContent = showCourseClassContent; if(this.showCourseClassContent){ presenter.startSequencer(); } detailsView = new GenericCourseDetailsView(bus, session, placeCtrl, viewFactory); detailsView.setPresenter(presenter); detailsView.initData(); detailsPanel.clear(); detailsPanel.add(detailsView); CourseClassTO courseClassTO = session.getCurrentCourseClass(); Enrollment enrollment = courseClassTO!= null ? courseClassTO.getEnrollment() : null; boolean showDetails = !showCourseClassContent || EnrollmentCategory.isFinished(enrollment); bus.fireEvent(new ShowDetailsEvent(showDetails)); bus.fireEvent(new ShowChatDockEvent(!showDetails && session.getCurrentCourseClass() != null && session.getCurrentCourseClass().getCourseClass().isChatDockEnabled())); } @Override public void setPresenter(Presenter presenter) { this.presenter = presenter; } @Override public FlowPanel getContentPanel() { return contentPanel; } @Override public void onShowDetails(ShowDetailsEvent event) { boolean showDetails = event.isShowDetails(); contentPanel.setVisible(!showDetails); detailsPanel.setVisible(showDetails); if(showDetails) { if(dockChatPanel != null){ dockChatPanel.clear(); } presenter.fireProgressEvent(); } } @Override public void onShowChatDock(ShowChatDockEvent event) { dockChatPanel.setVisible(event.isShowChatDock()); if(event.isShowChatDock()){ if(!chatDockWasShown){ dockChatPanel.clear(); viewFactory.getMessagePresenterClassroomGlobalChat().threadClicked(null); chatDockWasShown = true; } else { viewFactory.getMessagePresenterClassroomGlobalChat().getChatThreadMessagesSinceLast(); } dockChatPanel.add(viewFactory.getMessagePresenterClassroomGlobalChat().asWidget()); } else if(dockChatPanel != null){ dockChatPanel.clear(); } } }