package kornell.gui.client.presentation.admin.institution.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.EntityFactory; import kornell.core.entity.Institution; import kornell.core.entity.InstitutionAdminRole; import kornell.core.entity.Role; import kornell.core.entity.RoleCategory; import kornell.core.entity.RoleType; import kornell.core.entity.Roles; import kornell.core.to.RoleTO; import kornell.core.to.RolesTO; import kornell.gui.client.util.forms.formfield.PeopleMultipleSelect; import kornell.gui.client.util.view.KornellNotification; import kornell.gui.client.util.view.LoadingPopup; public class GenericInstitutionAdminsView extends Composite { interface MyUiBinder extends UiBinder<Widget, GenericInstitutionAdminsView> { } 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 peopleMultipleSelect; @UiField Form form; @UiField FlowPanel adminsFields; @UiField Button btnOK; @UiField Button btnCancel; private Institution institution; public GenericInstitutionAdminsView(final KornellSession session, kornell.gui.client.presentation.admin.institution.AdminInstitutionView.Presenter presenter, Institution institution) { this.session = session; this.institution = institution; initWidget(uiBinder.createAndBindUi(this)); // i18n btnOK.setText("Salvar Alterações"); btnCancel.setText("Cancelar Alterações"); initData(); } public void initData() { adminsFields.clear(); FlowPanel fieldPanelWrapper = new FlowPanel(); fieldPanelWrapper.addStyleName("fieldPanelWrapper"); FlowPanel labelPanel = new FlowPanel(); labelPanel.addStyleName("labelPanel"); Label lblLabel = new Label("Administradores da Instituição"); lblLabel.addStyleName("lblLabel"); labelPanel.add(lblLabel); fieldPanelWrapper.add(labelPanel); LoadingPopup.show(); session.institution(institution.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()+")"; } peopleMultipleSelect.addItem(item, roleTO.getPerson().getUUID()); } LoadingPopup.hide(); } }); peopleMultipleSelect = new PeopleMultipleSelect(session); fieldPanelWrapper.add(peopleMultipleSelect.asWidget()); adminsFields.add(fieldPanelWrapper); } @UiHandler("btnOK") void doOK(ClickEvent e) { if(session.isInstitutionAdmin()){ Roles roles = entityFactory.newRoles().as(); List<Role> rolesList = new ArrayList<Role>(); ListBox multipleSelect = peopleMultipleSelect.getMultipleSelect(); for (int i = 0; i < multipleSelect.getItemCount(); i++) { String personUUID = multipleSelect.getValue(i); Role role = entityFactory.newRole().as(); InstitutionAdminRole institutionAdminRole = entityFactory.newInstitutionAdminRole().as(); role.setPersonUUID(personUUID); role.setRoleType(RoleType.institutionAdmin); institutionAdminRole.setInstitutionUUID(institution.getUUID()); role.setInstitutionAdminRole(institutionAdminRole); rolesList.add(role); } roles.setRoles(rolesList); session.institution(institution.getUUID()).updateAdmins(roles, new Callback<Roles>() { @Override public void ok(Roles to) { KornellNotification.show("Os administradores da instituição foram atualizados com sucesso.", AlertType.SUCCESS); } }); } } @UiHandler("btnCancel") void doCancel(ClickEvent e) { initData(); } }