package kornell.gui.client.presentation.admin.courseclass.courseclass.generic;
import java.util.ArrayList;
import java.util.List;
import com.github.gwtbootstrap.client.ui.Form;
import com.github.gwtbootstrap.client.ui.ListBox;
import com.github.gwtbootstrap.client.ui.constants.AlertType;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.uibinder.client.UiHandler;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.Widget;
import kornell.api.client.Callback;
import kornell.api.client.KornellSession;
import kornell.core.entity.CourseClassAdminRole;
import kornell.core.entity.EntityFactory;
import kornell.core.entity.ObserverRole;
import kornell.core.entity.Role;
import kornell.core.entity.RoleCategory;
import kornell.core.entity.RoleType;
import kornell.core.entity.Roles;
import kornell.core.entity.TutorRole;
import kornell.core.to.CourseClassTO;
import kornell.core.to.RoleTO;
import kornell.core.to.RolesTO;
import kornell.gui.client.presentation.admin.courseclass.courseclass.AdminCourseClassView.Presenter;
import kornell.gui.client.util.forms.formfield.PeopleMultipleSelect;
import kornell.gui.client.util.view.KornellNotification;
import kornell.gui.client.util.view.LoadingPopup;
public class GenericCourseClassAdminsView extends Composite {
interface MyUiBinder extends UiBinder<Widget, GenericCourseClassAdminsView> {
}
private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class);
public static final EntityFactory entityFactory = GWT.create(EntityFactory.class);
private KornellSession session;
boolean isCurrentUser, showContactDetails, isRegisteredWithCPF;
PeopleMultipleSelect courseClassAdminsMultipleSelect;
PeopleMultipleSelect tutorsMultipleSelect;
PeopleMultipleSelect observersMultipleSelect;
@UiField
Form courseClassAdminsForm;
@UiField
FlowPanel courseClassAdminsFields;
@UiField
Button courseClassAdminsBtnOK;
@UiField
Button courseClassAdminsBtnCancel;
@UiField
Form tutorsForm;
@UiField
FlowPanel tutorsFields;
@UiField
Button tutorsBtnOK;
@UiField
Button tutorsBtnCancel;
@UiField
Form observersForm;
@UiField
FlowPanel observersFields;
@UiField
Button observersBtnOK;
@UiField
Button observersBtnCancel;
private CourseClassTO courseClassTO;
public GenericCourseClassAdminsView(final KornellSession session,
Presenter presenter, CourseClassTO courseClassTO) {
this.session = session;
this.courseClassTO = courseClassTO;
initWidget(uiBinder.createAndBindUi(this));
// i18n
courseClassAdminsBtnOK.setText("Salvar Alterações");
courseClassAdminsBtnCancel.setText("Cancelar Alterações");
tutorsBtnOK.setText("Salvar Alterações");
tutorsBtnCancel.setText("Cancelar Alterações");
observersBtnOK.setText("Salvar Alterações");
observersBtnCancel.setText("Cancelar Alterações");
this.courseClassTO = courseClassTO;
initCourseClassAdminsData();
initTutorsData();
initObserversData();
}
public void initCourseClassAdminsData() {
courseClassAdminsFields.clear();
FlowPanel fieldPanelWrapper = new FlowPanel();
fieldPanelWrapper.addStyleName("fieldPanelWrapper");
FlowPanel labelPanel = new FlowPanel();
labelPanel.addStyleName("labelPanel");
Label lblLabel = new Label("Administradores da Turma");
lblLabel.addStyleName("lblLabel");
labelPanel.add(lblLabel);
fieldPanelWrapper.add(labelPanel);
LoadingPopup.show();
session.courseClass(courseClassTO.getCourseClass().getUUID()).getAdmins(RoleCategory.BIND_WITH_PERSON,
new Callback<RolesTO>() {
@Override
public void ok(RolesTO to) {
for (RoleTO roleTO : to.getRoleTOs()) {
String item = roleTO.getUsername();
if(roleTO.getPerson().getFullName() != null && !"".equals(roleTO.getPerson().getFullName())){
item += " (" +roleTO.getPerson().getFullName()+")";
}
courseClassAdminsMultipleSelect.addItem(item, roleTO.getPerson().getUUID());
}
LoadingPopup.hide();
}
});
courseClassAdminsMultipleSelect = new PeopleMultipleSelect(session);
fieldPanelWrapper.add(courseClassAdminsMultipleSelect.asWidget());
courseClassAdminsFields.add(fieldPanelWrapper);
}
public void initTutorsData() {
tutorsFields.clear();
FlowPanel fieldPanelWrapper = new FlowPanel();
fieldPanelWrapper.addStyleName("fieldPanelWrapper");
FlowPanel labelPanel = new FlowPanel();
labelPanel.addStyleName("labelPanel");
Label lblLabel = new Label("Tutores da Turma");
lblLabel.addStyleName("lblLabel");
labelPanel.add(lblLabel);
fieldPanelWrapper.add(labelPanel);
LoadingPopup.show();
session.courseClass(courseClassTO.getCourseClass().getUUID()).getTutors(RoleCategory.BIND_WITH_PERSON,
new Callback<RolesTO>() {
@Override
public void ok(RolesTO to) {
for (RoleTO roleTO : to.getRoleTOs()) {
String item = roleTO.getUsername();
if(roleTO.getPerson().getFullName() != null && !"".equals(roleTO.getPerson().getFullName())){
item += " (" +roleTO.getPerson().getFullName()+")";
}
tutorsMultipleSelect.addItem(item, roleTO.getPerson().getUUID());
}
LoadingPopup.hide();
}
});
tutorsMultipleSelect = new PeopleMultipleSelect(session);
fieldPanelWrapper.add(tutorsMultipleSelect.asWidget());
tutorsFields.add(fieldPanelWrapper);
}
public void initObserversData() {
observersFields.clear();
FlowPanel fieldPanelWrapper = new FlowPanel();
fieldPanelWrapper.addStyleName("fieldPanelWrapper");
FlowPanel labelPanel = new FlowPanel();
labelPanel.addStyleName("labelPanel");
Label lblLabel = new Label("Observadores da Turma");
lblLabel.addStyleName("lblLabel");
labelPanel.add(lblLabel);
fieldPanelWrapper.add(labelPanel);
LoadingPopup.show();
session.courseClass(courseClassTO.getCourseClass().getUUID()).getObservers(RoleCategory.BIND_WITH_PERSON,
new Callback<RolesTO>() {
@Override
public void ok(RolesTO to) {
for (RoleTO roleTO : to.getRoleTOs()) {
String item = roleTO.getUsername();
if(roleTO.getPerson().getFullName() != null && !"".equals(roleTO.getPerson().getFullName())){
item += " (" +roleTO.getPerson().getFullName()+")";
}
observersMultipleSelect.addItem(item, roleTO.getPerson().getUUID());
}
LoadingPopup.hide();
}
});
observersMultipleSelect = new PeopleMultipleSelect(session);
fieldPanelWrapper.add(observersMultipleSelect.asWidget());
observersFields.add(fieldPanelWrapper);
}
@UiHandler("courseClassAdminsBtnOK")
void doOKCourseClassAdmins(ClickEvent e) {
if(session.isInstitutionAdmin()){
Roles roles = entityFactory.newRoles().as();
List<Role> rolesList = new ArrayList<Role>();
ListBox multipleSelect = courseClassAdminsMultipleSelect.getMultipleSelect();
for (int i = 0; i < multipleSelect.getItemCount(); i++) {
String personUUID = multipleSelect.getValue(i);
Role role = entityFactory.newRole().as();
CourseClassAdminRole courseClassAdminRole = entityFactory.newCourseClassAdminRole().as();
role.setPersonUUID(personUUID);
role.setRoleType(RoleType.courseClassAdmin);
courseClassAdminRole.setCourseClassUUID(courseClassTO.getCourseClass().getUUID());
role.setCourseClassAdminRole(courseClassAdminRole);
rolesList.add(role);
}
roles.setRoles(rolesList);
session.courseClass(courseClassTO.getCourseClass().getUUID()).updateAdmins(roles, new Callback<Roles>() {
@Override
public void ok(Roles to) {
KornellNotification.show("Os administradores da turma foram atualizados com sucesso.", AlertType.SUCCESS);
}
});
}
}
@UiHandler("tutorsBtnOK")
void doOKTutors(ClickEvent e) {
if(session.isInstitutionAdmin()){
Roles roles = entityFactory.newRoles().as();
List<Role> rolesList = new ArrayList<Role>();
ListBox multipleSelect = tutorsMultipleSelect.getMultipleSelect();
if(multipleSelect.getItemCount() == 0 && courseClassTO.getCourseClass().isTutorChatEnabled()){
KornellNotification.show("Você não pode remover todos os tutores desta turma. Desabilite a opção \"Permitir tutoria da turma\" na aba Configurações.", AlertType.WARNING, 4000);
return;
}
for (int i = 0; i < multipleSelect.getItemCount(); i++) {
String personUUID = multipleSelect.getValue(i);
Role role = entityFactory.newRole().as();
TutorRole tutorRole = entityFactory.newTutorRole().as();
role.setPersonUUID(personUUID);
role.setRoleType(RoleType.tutor);
tutorRole.setCourseClassUUID(courseClassTO.getCourseClass().getUUID());
role.setTutorRole(tutorRole);
rolesList.add(role);
}
roles.setRoles(rolesList);
session.courseClass(courseClassTO.getCourseClass().getUUID()).updateTutors(roles, new Callback<Roles>() {
@Override
public void ok(Roles to) {
KornellNotification.show("Os tutores da turma foram atualizados com sucesso.", AlertType.SUCCESS);
}
});
}
}
@UiHandler("observersBtnOK")
void doOKObservers(ClickEvent e) {
if(session.isInstitutionAdmin()){
Roles roles = entityFactory.newRoles().as();
List<Role> rolesList = new ArrayList<Role>();
ListBox multipleSelect = observersMultipleSelect.getMultipleSelect();
for (int i = 0; i < multipleSelect.getItemCount(); i++) {
String personUUID = multipleSelect.getValue(i);
Role role = entityFactory.newRole().as();
ObserverRole observerRole = entityFactory.newObserverRole().as();
role.setPersonUUID(personUUID);
role.setRoleType(RoleType.observer);
observerRole.setCourseClassUUID(courseClassTO.getCourseClass().getUUID());
role.setObserverRole(observerRole);
rolesList.add(role);
}
roles.setRoles(rolesList);
session.courseClass(courseClassTO.getCourseClass().getUUID()).updateObservers(roles, new Callback<Roles>() {
@Override
public void ok(Roles to) {
KornellNotification.show("Os observadores da turma foram atualizados com sucesso.", AlertType.SUCCESS);
}
});
}
}
@UiHandler("courseClassAdminsBtnCancel")
void doCancelCourseClassAdmins(ClickEvent e) {
initCourseClassAdminsData();
}
@UiHandler("tutorsBtnCancel")
void doCancelTutors(ClickEvent e) {
initTutorsData();
}
@UiHandler("observersBtnCancel")
void doCancelObservers(ClickEvent e) {
initObserversData();
}
}