package kornell.gui.client.mvp;
import com.google.gwt.core.client.GWT;
import com.google.gwt.core.client.RunAsyncCallback;
import com.google.gwt.place.shared.Place;
import com.google.gwt.user.client.Window;
import kornell.gui.client.ClientFactory;
import kornell.gui.client.presentation.admin.audit.AdminAuditActivity;
import kornell.gui.client.presentation.admin.audit.AdminAuditPlace;
import kornell.gui.client.presentation.admin.course.course.AdminCourseActivity;
import kornell.gui.client.presentation.admin.course.course.AdminCoursePlace;
import kornell.gui.client.presentation.admin.course.courses.AdminCoursesActivity;
import kornell.gui.client.presentation.admin.course.courses.AdminCoursesPlace;
import kornell.gui.client.presentation.admin.courseclass.courseclass.AdminCourseClassActivity;
import kornell.gui.client.presentation.admin.courseclass.courseclass.AdminCourseClassPlace;
import kornell.gui.client.presentation.admin.courseclass.courseclasses.AdminCourseClassesActivity;
import kornell.gui.client.presentation.admin.courseclass.courseclasses.AdminCourseClassesPlace;
import kornell.gui.client.presentation.admin.courseversion.courseversion.AdminCourseVersionActivity;
import kornell.gui.client.presentation.admin.courseversion.courseversion.AdminCourseVersionPlace;
import kornell.gui.client.presentation.admin.courseversion.courseversions.AdminCourseVersionsActivity;
import kornell.gui.client.presentation.admin.courseversion.courseversions.AdminCourseVersionsPlace;
import kornell.gui.client.presentation.admin.institution.AdminInstitutionActivity;
import kornell.gui.client.presentation.admin.institution.AdminInstitutionPlace;
import kornell.gui.client.presentation.classroom.ClassroomActivity;
import kornell.gui.client.presentation.classroom.ClassroomPlace;
import kornell.gui.client.presentation.classroom.ClassroomPresenter;
import kornell.gui.client.presentation.home.HomeActivity;
import kornell.gui.client.presentation.home.HomePlace;
import kornell.gui.client.presentation.message.MessageActivity;
import kornell.gui.client.presentation.message.MessagePlace;
import kornell.gui.client.presentation.profile.ProfileActivity;
import kornell.gui.client.presentation.profile.ProfilePlace;
import kornell.gui.client.presentation.sandbox.SandboxActivity;
import kornell.gui.client.presentation.sandbox.SandboxPlace;
import kornell.gui.client.presentation.sandbox.SandboxPresenter;
import kornell.gui.client.presentation.terms.TermsActivity;
import kornell.gui.client.presentation.terms.TermsPlace;
import kornell.gui.client.presentation.vitrine.VitrineActivity;
import kornell.gui.client.presentation.vitrine.VitrinePlace;
import kornell.gui.client.presentation.welcome.WelcomeActivity;
import kornell.gui.client.presentation.welcome.WelcomePlace;
/**
* A mapping of places to activities used by this application.
*/
public class GlobalActivityMapper implements AsyncActivityMapper {
private ClientFactory clientFactory;
public GlobalActivityMapper(ClientFactory clientFactory) {
this.clientFactory = clientFactory;
}
/** TODO: This may suck fast */
public void getActivity(final Place place, final ActivityCallbackHandler activityCallbackHandler) {
if(!clientFactory.getKornellSession().isAuthenticated() || place instanceof VitrinePlace){
activityCallbackHandler.onReceiveActivity(new VitrineActivity((VitrinePlace) place, clientFactory));
} else if (place instanceof HomePlace) {
GWT.runAsync(new RunAsyncCallback() {
public void onFailure(Throwable err) {
Window.Location.reload();
}
public void onSuccess() {
activityCallbackHandler.onReceiveActivity(new HomeActivity((HomePlace) place, clientFactory));
}
});
} else if (place instanceof TermsPlace) {
GWT.runAsync(new RunAsyncCallback() {
public void onFailure(Throwable err) {
Window.Location.reload();
}
public void onSuccess() {
activityCallbackHandler.onReceiveActivity(new TermsActivity(clientFactory));
}
});
} else if (place instanceof WelcomePlace) {
GWT.runAsync(new RunAsyncCallback() {
public void onFailure(Throwable err) {
Window.Location.reload();
}
public void onSuccess() {
activityCallbackHandler.onReceiveActivity(new WelcomeActivity(clientFactory));
}
});
} else if (place instanceof ProfilePlace) {
GWT.runAsync(new RunAsyncCallback() {
public void onFailure(Throwable err) {
Window.Location.reload();
}
public void onSuccess() {
activityCallbackHandler.onReceiveActivity(new ProfileActivity(clientFactory));
}
});
} else if (place instanceof MessagePlace) {
GWT.runAsync(new RunAsyncCallback() {
public void onFailure(Throwable err) {
Window.Location.reload();
}
public void onSuccess() {
activityCallbackHandler.onReceiveActivity(new MessageActivity(clientFactory));
}
});
} else if (place instanceof ClassroomPlace) {
GWT.runAsync(new RunAsyncCallback() {
public void onFailure(Throwable err) {
Window.Location.reload();
}
public void onSuccess() {
ClassroomPresenter coursePresenter = clientFactory.getViewFactory().getClassroomPresenter();
coursePresenter.setPlace((ClassroomPlace) place);
activityCallbackHandler.onReceiveActivity(new ClassroomActivity(coursePresenter));
}
});
} else if (place instanceof SandboxPlace) {
GWT.runAsync(new RunAsyncCallback() {
public void onFailure(Throwable err) {
Window.Location.reload();
}
public void onSuccess() {
SandboxPresenter sandboxPresenter = clientFactory.getViewFactory().getSandboxPresenter();
sandboxPresenter.setPlace((SandboxPlace) place);
activityCallbackHandler.onReceiveActivity(new SandboxActivity(sandboxPresenter));
}
});
} else if (place instanceof AdminInstitutionPlace) {
GWT.runAsync(new RunAsyncCallback() {
public void onFailure(Throwable err) {
Window.Location.reload();
}
public void onSuccess() {
activityCallbackHandler.onReceiveActivity(new AdminInstitutionActivity(clientFactory));
}
});
} else if (place instanceof AdminCoursesPlace) {
GWT.runAsync(new RunAsyncCallback() {
public void onFailure(Throwable err) {
Window.Location.reload();
}
public void onSuccess() {
activityCallbackHandler.onReceiveActivity(new AdminCoursesActivity(clientFactory));
}
});
} else if (place instanceof AdminCoursePlace) {
GWT.runAsync(new RunAsyncCallback() {
public void onFailure(Throwable err) {
Window.Location.reload();
}
public void onSuccess() {
activityCallbackHandler.onReceiveActivity(new AdminCourseActivity(clientFactory));
}
});
} else if (place instanceof AdminCourseVersionsPlace) {
GWT.runAsync(new RunAsyncCallback() {
public void onFailure(Throwable err) {
Window.Location.reload();
}
public void onSuccess() {
activityCallbackHandler.onReceiveActivity(new AdminCourseVersionsActivity(clientFactory));
}
});
} else if (place instanceof AdminCourseVersionPlace) {
GWT.runAsync(new RunAsyncCallback() {
public void onFailure(Throwable err) {
Window.Location.reload();
}
public void onSuccess() {
activityCallbackHandler.onReceiveActivity(new AdminCourseVersionActivity(clientFactory));
}
});
} else if (place instanceof AdminCourseClassesPlace) {
GWT.runAsync(new RunAsyncCallback() {
public void onFailure(Throwable err) {
Window.Location.reload();
}
public void onSuccess() {
activityCallbackHandler.onReceiveActivity(new AdminCourseClassesActivity(clientFactory));
}
});
} else if (place instanceof AdminCourseClassPlace) {
GWT.runAsync(new RunAsyncCallback() {
public void onFailure(Throwable err) {
Window.Location.reload();
}
public void onSuccess() {
activityCallbackHandler.onReceiveActivity(new AdminCourseClassActivity(clientFactory));
}
});
} else if (place instanceof AdminAuditPlace) {
GWT.runAsync(new RunAsyncCallback() {
public void onFailure(Throwable err) {
Window.Location.reload();
}
public void onSuccess() {
activityCallbackHandler.onReceiveActivity(new AdminAuditActivity(clientFactory));
}
});
} else {
activityCallbackHandler.onReceiveActivity(null);
}
}
}