package kornell.gui.client.presentation.admin.courseversion.courseversion; import java.util.logging.Logger; import com.github.gwtbootstrap.client.ui.constants.AlertType; import com.google.gwt.place.shared.Place; import com.google.gwt.place.shared.PlaceController; import com.google.gwt.user.client.ui.Widget; import com.google.web.bindery.event.shared.EventBus; import kornell.api.client.Callback; import kornell.api.client.KornellSession; import kornell.core.entity.CourseVersion; import kornell.core.error.KornellErrorTO; import kornell.gui.client.KornellConstantsHelper; import kornell.gui.client.ViewFactory; import kornell.gui.client.mvp.PlaceUtils; import kornell.gui.client.presentation.admin.courseversion.courseversions.AdminCourseVersionsPlace; import kornell.gui.client.util.view.KornellNotification; import kornell.gui.client.util.view.LoadingPopup; public class AdminCourseVersionPresenter implements AdminCourseVersionView.Presenter { Logger logger = Logger.getLogger(AdminCourseVersionPresenter.class.getName()); private AdminCourseVersionView view; private KornellSession session; private PlaceController placeController; private EventBus bus; Place defaultPlace; private ViewFactory viewFactory; private AdminCourseVersionContentPresenter courseVersionContentPresenter; public AdminCourseVersionPresenter(KornellSession session, PlaceController placeController, EventBus bus, Place defaultPlace, ViewFactory viewFactory) { this.session = session; this.placeController = placeController; this.bus = bus; this.defaultPlace = defaultPlace; this.viewFactory = viewFactory; init(); } private void init() { if (session.isInstitutionAdmin()) { view = viewFactory.getAdminCourseVersionView(); if (view.getPresenter() == null) { view.setPresenter(this); } } else { logger.warning("Hey, only admins are allowed to see this! " + this.getClass().getName()); placeController.goTo(defaultPlace); } } @Override public Widget asWidget() { return view.asWidget(); } public AdminCourseVersionView getView() { return view; } @Override public void upsertCourseVersion(CourseVersion courseVersion) { if (courseVersion.getUUID() == null) { session.courseVersions().create(courseVersion, new Callback<CourseVersion>() { @Override public void ok(CourseVersion courseVersion) { LoadingPopup.hide(); KornellNotification.show("Versão de curso criada com sucesso!"); PlaceUtils.reloadCurrentPlace(bus, placeController); } @Override public void conflict(KornellErrorTO kornellErrorTO) { LoadingPopup.hide(); KornellNotification.show(KornellConstantsHelper.getErrorMessage(kornellErrorTO), AlertType.ERROR, 2500); } }); } else { session.courseVersion(courseVersion.getUUID()).update(courseVersion, new Callback<CourseVersion>() { @Override public void ok(CourseVersion courseVersion) { LoadingPopup.hide(); KornellNotification.show("Alterações salvas com sucesso!"); placeController.goTo(new AdminCourseVersionsPlace()); } @Override public void conflict(KornellErrorTO kornellErrorTO) { LoadingPopup.hide(); KornellNotification.show(KornellConstantsHelper.getErrorMessage(kornellErrorTO), AlertType.ERROR, 2500); } }); } } @Override public void buildContentView(CourseVersion courseVersion) { courseVersionContentPresenter = new AdminCourseVersionContentPresenter(session, placeController, bus, defaultPlace, viewFactory); courseVersionContentPresenter.init(courseVersion); view.addContentPanel((AdminCourseVersionContentView) courseVersionContentPresenter.asWidget()); } }