package kornell.gui.client.presentation.admin.course.course; 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.Course; import kornell.core.error.KornellErrorTO; import kornell.gui.client.GenericClientFactoryImpl; import kornell.gui.client.KornellConstantsHelper; import kornell.gui.client.ViewFactory; import kornell.gui.client.mvp.PlaceUtils; import kornell.gui.client.presentation.admin.course.courses.AdminCoursesPlace; import kornell.gui.client.util.view.KornellNotification; import kornell.gui.client.util.view.LoadingPopup; public class AdminCoursePresenter implements AdminCourseView.Presenter { Logger logger = Logger.getLogger(AdminCoursePresenter.class.getName()); private AdminCourseView view; private KornellSession session; private PlaceController placeController; private EventBus bus; Place defaultPlace; private ViewFactory viewFactory; public AdminCoursePresenter(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 = getView(); view.setPresenter(this); view.init(); } else { logger.warning("Hey, only admins are allowed to see this! " + this.getClass().getName()); placeController.goTo(defaultPlace); } } @Override public Course getNewCourse() { return GenericClientFactoryImpl.ENTITY_FACTORY.newCourse().as(); } @Override public Widget asWidget() { return view.asWidget(); } private AdminCourseView getView() { return viewFactory.getAdminCourseView(); } @Override public void upsertCourse(Course course) { LoadingPopup.show(); if(course.getUUID() == null){ session.courses().create(course, new Callback<Course>() { @Override public void ok(Course course) { LoadingPopup.hide(); KornellNotification.show("Curso criado com sucesso!"); PlaceUtils.reloadCurrentPlace(bus, placeController); } @Override public void unauthorized(KornellErrorTO kornellErrorTO){ LoadingPopup.hide(); KornellNotification.show(KornellConstantsHelper.getErrorMessage(kornellErrorTO), AlertType.ERROR, 2500); } }); } else { session.course(course.getUUID()).update(course, new Callback<Course>() { @Override public void ok(Course course) { LoadingPopup.hide(); KornellNotification.show("Alterações salvas com sucesso!"); placeController.goTo(new AdminCoursesPlace()); } @Override public void unauthorized(KornellErrorTO kornellErrorTO){ LoadingPopup.hide(); KornellNotification.show(KornellConstantsHelper.getErrorMessage(kornellErrorTO), AlertType.ERROR, 2500); } }); } } }