package kornell.gui.client;
import static kornell.core.util.StringUtils.mkurl;
import com.google.gwt.dom.client.StyleInjector;
import com.google.gwt.place.shared.PlaceChangeEvent;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.ScrollPanel;
import com.google.gwt.user.client.ui.SimplePanel;
import kornell.core.entity.CourseVersion;
import kornell.core.to.CourseClassesTO;
import kornell.gui.client.event.CourseClassesFetchedEvent;
import kornell.gui.client.event.CourseClassesFetchedEventHandler;
import kornell.gui.client.event.ShowDetailsEvent;
import kornell.gui.client.event.ShowDetailsEventHandler;
import kornell.gui.client.presentation.admin.audit.AdminAuditView;
import kornell.gui.client.presentation.admin.audit.generic.GenericAdminAuditView;
import kornell.gui.client.presentation.admin.course.course.AdminCoursePresenter;
import kornell.gui.client.presentation.admin.course.course.AdminCourseView;
import kornell.gui.client.presentation.admin.course.course.generic.GenericAdminCourseView;
import kornell.gui.client.presentation.admin.course.courses.AdminCoursesView;
import kornell.gui.client.presentation.admin.course.courses.generic.GenericAdminCoursesView;
import kornell.gui.client.presentation.admin.courseclass.courseclass.AdminCourseClassPresenter;
import kornell.gui.client.presentation.admin.courseclass.courseclass.AdminCourseClassView;
import kornell.gui.client.presentation.admin.courseclass.courseclass.generic.GenericAdminCourseClassView;
import kornell.gui.client.presentation.admin.courseclass.courseclasses.AdminCourseClassesView;
import kornell.gui.client.presentation.admin.courseclass.courseclasses.generic.GenericAdminCourseClassesView;
import kornell.gui.client.presentation.admin.courseversion.courseversion.AdminCourseVersionContentView;
import kornell.gui.client.presentation.admin.courseversion.courseversion.AdminCourseVersionPresenter;
import kornell.gui.client.presentation.admin.courseversion.courseversion.AdminCourseVersionView;
import kornell.gui.client.presentation.admin.courseversion.courseversion.generic.GenericAdminCourseVersionContentView;
import kornell.gui.client.presentation.admin.courseversion.courseversion.generic.GenericAdminCourseVersionView;
import kornell.gui.client.presentation.admin.courseversion.courseversions.AdminCourseVersionsView;
import kornell.gui.client.presentation.admin.courseversion.courseversions.generic.GenericAdminCourseVersionsView;
import kornell.gui.client.presentation.admin.institution.AdminInstitutionView;
import kornell.gui.client.presentation.admin.institution.generic.GenericAdminInstitutionView;
import kornell.gui.client.presentation.bar.MenuBarView;
import kornell.gui.client.presentation.bar.SouthBarView;
import kornell.gui.client.presentation.bar.generic.GenericMenuBarView;
//github.com/Craftware/Kornell.git
import kornell.gui.client.presentation.bar.generic.GenericSouthBarView;
import kornell.gui.client.presentation.classroom.ClassroomPlace;
import kornell.gui.client.presentation.classroom.ClassroomPresenter;
import kornell.gui.client.presentation.classroom.ClassroomView;
import kornell.gui.client.presentation.classroom.generic.GenericClassroomView;
import kornell.gui.client.presentation.home.HomeView;
import kornell.gui.client.presentation.home.generic.GenericHomeView;
import kornell.gui.client.presentation.message.MessagePanelType;
import kornell.gui.client.presentation.message.MessagePresenter;
import kornell.gui.client.presentation.message.MessageView;
import kornell.gui.client.presentation.message.compose.GenericMessageComposeView;
import kornell.gui.client.presentation.message.compose.MessageComposeView;
import kornell.gui.client.presentation.message.generic.GenericMessageView;
import kornell.gui.client.presentation.profile.ProfileView;
import kornell.gui.client.presentation.profile.generic.GenericProfileView;
import kornell.gui.client.presentation.sandbox.SandboxPresenter;
import kornell.gui.client.presentation.sandbox.SandboxView;
import kornell.gui.client.presentation.sandbox.generic.GenericSandboxView;
import kornell.gui.client.presentation.terms.TermsView;
import kornell.gui.client.presentation.terms.generic.GenericTermsView;
import kornell.gui.client.presentation.vitrine.VitrinePlace;
import kornell.gui.client.presentation.vitrine.VitrineView;
import kornell.gui.client.presentation.vitrine.generic.GenericVitrineView;
import kornell.gui.client.presentation.welcome.WelcomeView;
import kornell.gui.client.presentation.welcome.generic.GenericWelcomeView;
import kornell.gui.client.sequence.SequencerFactory;
import kornell.gui.client.sequence.SequencerFactoryImpl;
public class GenericViewFactoryImpl implements ViewFactory, ShowDetailsEventHandler, CourseClassesFetchedEventHandler {
private ClientFactory clientFactory;
/* Views */
private ScrollPanel scrollPanel;
private GenericMenuBarView menuBarView;
private SouthBarView southBarView;
private GenericHomeView genericHomeView;
private GenericAdminCourseClassView genericAdminHomeView;
private AdminCourseClassPresenter genericAdminCourseClassPresenter;
private AdminCourseVersionPresenter genericAdminCourseVersionPresenter;
private GenericAdminCourseClassesView genericAdminCourseClassesView;
private GenericAdminInstitutionView genericAdminInstitutionView;
private GenericAdminCoursesView genericAdminCoursesView;
private GenericAdminCourseView genericAdminCourseView;
private AdminCoursePresenter genericAdminCoursePresenter;
private GenericAdminCourseVersionsView genericAdminCourseVersionsView;
private GenericAdminCourseVersionView genericAdminCourseVersionView;
private GenericAdminCourseVersionContentView genericAdminCourseVersionContentView;
private GenericAdminAuditView genericAdminAuditView;
private ClassroomPresenter coursePresenter;
private SandboxPresenter sandboxPresenter;
private MessagePresenter messagePresenter, messagePresenterCourseClass, messagePresenterClassroomGlobalChat, messagePresenterClassroomTutorChat;
private boolean isMantleShown = false;
private CourseClassesTO courseClassesTO;
private SimplePanel shell = new SimplePanel();
public GenericViewFactoryImpl(ClientFactory clientFactory, CourseClassesTO courseClassesTO) {
this.clientFactory = clientFactory;
this.courseClassesTO = courseClassesTO;
clientFactory.getEventBus().addHandler(ShowDetailsEvent.TYPE,this);
clientFactory.getEventBus().addHandler(CourseClassesFetchedEvent.TYPE, this);
}
@Override
public void initGUI() {
shell.addStyleName("wrapper");
scrollPanel = new ScrollPanel();
scrollPanel.add(shell);
scrollPanel.addStyleName("vScrollBar");
final RootPanel rootPanel = RootPanel.get();
rootPanel.add(scrollPanel);
setBackgroundImage(true);
clientFactory.getEventBus().addHandler(PlaceChangeEvent.TYPE, new PlaceChangeEvent.Handler() {
@Override
public void onPlaceChange(PlaceChangeEvent event) {
setPlaceNameAsBodyStyle(event);
setBackgroundImage(event.getNewPlace() instanceof VitrinePlace);
checkMenuBars(event.getNewPlace() instanceof VitrinePlace);
changeOverflow(event.getNewPlace() instanceof ClassroomPlace && clientFactory.getKornellSession().getCurrentCourseClass() != null);
}
private void checkMenuBars(boolean removePanels) {
if (!removePanels && rootPanel.getWidgetCount() < 3) {
rootPanel.add(getMenuBarView());
rootPanel.add(getSouthBarView());
}
}
private void setPlaceNameAsBodyStyle(PlaceChangeEvent event) {
String styleName = rootPanel.getStyleName();
if (!styleName.isEmpty())
rootPanel.removeStyleName(styleName);
String[] split = event.getNewPlace().getClass().getName().split("\\.");
String newStyle = split[split.length - 1];
rootPanel.addStyleName(newStyle);
}
});
}
@Override
public void onShowDetails(ShowDetailsEvent event) {
changeOverflow(event.isShowDetails());
}
private void changeOverflow(boolean removeOverflow) {
if(removeOverflow){
scrollPanel.removeStyleName("overflow");
} else {
scrollPanel.addStyleName("overflow");
}
}
private void setBackgroundImage(boolean showMantle) {
if (showMantle == isMantleShown)
return;
String style = "position: relative; " + "zoom: 1; " + "-webkit-background-size: cover; "
+ "-moz-background-size: cover; " + "-o-background-size: cover; " + "background-size: cover;" + "overflow:auto;";
if (showMantle){
style = "background: url('"
+ mkurl(clientFactory.getKornellSession().getAssetsURL(), "bgVitrine.jpg")
+ "') no-repeat center center fixed; " + style;
} else {
style = "background: transparent; " + style;
}
style = ".vScrollBar {" + style+ "}";
StyleInjector.inject(style);
//DOM.setElementAttribute(scrollPanel.getElement(), "style", style);
isMantleShown = showMantle;
}
@Override
public MenuBarView getMenuBarView() {
if (menuBarView == null)
menuBarView = new GenericMenuBarView(clientFactory, scrollPanel, courseClassesTO);
return menuBarView;
}
@Override
public SouthBarView getSouthBarView() {
if (southBarView == null)
southBarView = new GenericSouthBarView(clientFactory, scrollPanel);
return southBarView;
}
@Override
public HomeView getHomeView() {
if (genericHomeView == null) {
genericHomeView = new GenericHomeView(clientFactory, clientFactory.getEventBus(),
clientFactory.getKornellSession());
}
return genericHomeView;
}
@Override
public VitrineView getVitrineView() {
return new GenericVitrineView();
}
@Override
public WelcomeView getWelcomeView() {
return new GenericWelcomeView(clientFactory);
}
@Override
public ProfileView getProfileView() {
return new GenericProfileView(clientFactory);
}
@Override
public MessageView getMessageView() {
return new GenericMessageView(clientFactory.getEventBus(), clientFactory.getKornellSession());
}
@Override
public MessageComposeView getMessageComposeView() {
return new GenericMessageComposeView(clientFactory.getKornellSession());
}
@Override
public ClassroomView getClassroomView() {
return new GenericClassroomView(clientFactory.getPlaceController(), clientFactory.getKornellSession(),
clientFactory.getEventBus(), this);
}
@Override
public TermsView getTermsView() {
return new GenericTermsView(clientFactory);
}
@Override
public ClassroomPresenter getClassroomPresenter() {
if (coursePresenter == null) {
SequencerFactory rendererFactory = new SequencerFactoryImpl(clientFactory.getEventBus(),
clientFactory.getPlaceController(), clientFactory.getKornellSession());
ClassroomView activityView = getClassroomView();
coursePresenter = new ClassroomPresenter(clientFactory.getEventBus() ,activityView, clientFactory.getPlaceController(), rendererFactory,
clientFactory.getKornellSession());
}
return coursePresenter;
}
@Override
public SandboxView getSandboxView() {
return new GenericSandboxView(clientFactory.getKornellSession());
}
@Override
public SandboxPresenter getSandboxPresenter() {
if (sandboxPresenter == null) {
SandboxView sandboxView = getSandboxView();
sandboxPresenter = new SandboxPresenter(sandboxView);
}
return sandboxPresenter;
}
@Override
public AdminCourseClassView getAdminCourseClassView() {
if (genericAdminHomeView == null)
genericAdminHomeView = new GenericAdminCourseClassView(clientFactory.getKornellSession(),
clientFactory.getEventBus(), clientFactory.getPlaceController(), clientFactory.getViewFactory());
return genericAdminHomeView;
}
@Override
public MessagePresenter getMessagePresenter() {
if (messagePresenter == null)
messagePresenter = new MessagePresenter(clientFactory.getKornellSession(), clientFactory.getEventBus(),
clientFactory.getPlaceController(), clientFactory.getViewFactory(), MessagePanelType.inbox);
return messagePresenter;
}
@Override
public MessagePresenter getMessagePresenterCourseClass() {
if (messagePresenterCourseClass == null)
messagePresenterCourseClass = new MessagePresenter(clientFactory.getKornellSession(),
clientFactory.getEventBus(), clientFactory.getPlaceController(), clientFactory.getViewFactory(),
MessagePanelType.courseClassSupport);
return messagePresenterCourseClass;
}
@Override
public MessagePresenter getMessagePresenterClassroomGlobalChat() {
if (messagePresenterClassroomGlobalChat == null)
messagePresenterClassroomGlobalChat = new MessagePresenter(clientFactory.getKornellSession(),
clientFactory.getEventBus(), clientFactory.getPlaceController(), clientFactory.getViewFactory(),
MessagePanelType.courseClassGlobal);
return messagePresenterClassroomGlobalChat;
}
@Override
public MessagePresenter getMessagePresenterClassroomTutorChat() {
if (messagePresenterClassroomTutorChat == null)
messagePresenterClassroomTutorChat = new MessagePresenter(clientFactory.getKornellSession(),
clientFactory.getEventBus(), clientFactory.getPlaceController(), clientFactory.getViewFactory(),
MessagePanelType.courseClassTutor);
return messagePresenterClassroomTutorChat;
}
@Override
public SimplePanel getShell() {
return shell;
}
@Override
public ScrollPanel getScrollPanel() {
return scrollPanel;
}
@Override
public AdminInstitutionView getAdminInstitutionView() {
if (genericAdminInstitutionView == null)
genericAdminInstitutionView = new GenericAdminInstitutionView(clientFactory.getKornellSession(),
clientFactory.getEventBus(), clientFactory.getPlaceController(), clientFactory.getViewFactory());
return genericAdminInstitutionView;
}
@Override
public AdminCourseView getAdminCourseView() {
if (genericAdminCourseView == null)
genericAdminCourseView = new GenericAdminCourseView(clientFactory.getKornellSession(),
clientFactory.getEventBus(), clientFactory.getPlaceController());
return genericAdminCourseView;
}
@Override
public AdminCoursePresenter getAdminCoursePresenter() {
if (genericAdminCoursePresenter == null)
genericAdminCoursePresenter = new AdminCoursePresenter(clientFactory.getKornellSession(),
clientFactory.getPlaceController(), clientFactory.getEventBus(), clientFactory.getDefaultPlace(), this);
return genericAdminCoursePresenter;
}
@Override
public AdminCourseVersionView getAdminCourseVersionView() {
if (genericAdminCourseVersionView == null)
genericAdminCourseVersionView = new GenericAdminCourseVersionView(clientFactory.getKornellSession(),
clientFactory.getEventBus(), clientFactory.getPlaceController());
return genericAdminCourseVersionView;
}
@Override
public AdminCourseVersionContentView getAdminCourseVersionContentView() {
if (genericAdminCourseVersionContentView == null)
genericAdminCourseVersionContentView = new GenericAdminCourseVersionContentView(clientFactory.getKornellSession(),
clientFactory.getEventBus(), clientFactory.getPlaceController());
return genericAdminCourseVersionContentView;
}
@Override
public AdminCoursesView getAdminCoursesView() {
if (genericAdminCoursesView == null)
genericAdminCoursesView = new GenericAdminCoursesView(clientFactory.getKornellSession(),
clientFactory.getEventBus(), clientFactory.getPlaceController(), clientFactory.getViewFactory());
return genericAdminCoursesView;
}
@Override
public AdminCourseVersionsView getAdminCourseVersionsView() {
if (genericAdminCourseVersionsView == null)
genericAdminCourseVersionsView = new GenericAdminCourseVersionsView(clientFactory.getKornellSession(),
clientFactory.getEventBus(), clientFactory.getPlaceController(), clientFactory.getViewFactory());
return genericAdminCourseVersionsView;
}
@Override
public AdminCourseVersionPresenter getAdminCourseVersionPresenter() {
if (genericAdminCourseVersionPresenter == null)
genericAdminCourseVersionPresenter = new AdminCourseVersionPresenter(clientFactory.getKornellSession(),
clientFactory.getPlaceController(), clientFactory.getEventBus(), clientFactory.getDefaultPlace(), this);
return genericAdminCourseVersionPresenter;
}
@Override
public AdminCourseClassesView getAdminCourseClassesView() {
if (genericAdminCourseClassesView == null)
genericAdminCourseClassesView = new GenericAdminCourseClassesView(clientFactory.getKornellSession(),
clientFactory.getEventBus(), clientFactory.getPlaceController(), clientFactory.getViewFactory());
return genericAdminCourseClassesView;
}
@Override
public AdminCourseClassPresenter getAdminCourseClassPresenter() {
if (genericAdminCourseClassPresenter == null)
genericAdminCourseClassPresenter = new AdminCourseClassPresenter(clientFactory.getKornellSession(),
clientFactory.getEventBus(), clientFactory.getPlaceController(), clientFactory.getDefaultPlace(),
GenericClientFactoryImpl.TO_FACTORY, this);
return genericAdminCourseClassPresenter;
}
@Override
public AdminAuditView getAdminAuditView() {
if (genericAdminAuditView == null)
genericAdminAuditView = new GenericAdminAuditView(clientFactory.getKornellSession(),
clientFactory.getEventBus(), clientFactory.getPlaceController(), clientFactory.getViewFactory());
return genericAdminAuditView;
}
@Override
public void onCourseClassesFetched(CourseClassesFetchedEvent event) {
this.courseClassesTO = event.getCourseClassesTO();
}
}