package com.constellio.app.ui.pages.management.authorizations; import static com.constellio.app.ui.framework.components.BaseForm.BUTTONS_LAYOUT; import static com.constellio.app.ui.framework.components.BaseForm.CANCEL_BUTTON; import static com.constellio.app.ui.framework.components.BaseForm.SAVE_BUTTON; import static com.constellio.app.ui.i18n.i18n.$; import static com.vaadin.ui.themes.ValoTheme.BUTTON_PRIMARY; import java.util.ArrayList; import java.util.List; import java.util.Set; import com.constellio.app.modules.rm.wrappers.AdministrativeUnit; import com.constellio.app.ui.entities.AuthorizationVO; import com.constellio.app.ui.framework.buttons.WindowButton; import com.constellio.app.ui.framework.components.BaseForm; import com.constellio.app.ui.framework.components.fields.ListOptionGroup; import com.constellio.app.ui.framework.components.fields.lookup.LookupRecordField; import com.constellio.model.frameworks.validation.ValidationException; import com.vaadin.data.fieldgroup.PropertyId; import com.vaadin.ui.Alignment; import com.vaadin.ui.Button; import com.vaadin.ui.Component; import com.vaadin.ui.HorizontalLayout; import com.vaadin.ui.Label; import com.vaadin.ui.VerticalLayout; import com.vaadin.ui.themes.ValoTheme; public class ListPrincipalAccessAuthorizationsViewImpl extends ListAuthorizationsViewImpl implements ListPrincipalAccessAuthorizationsView { public ListPrincipalAccessAuthorizationsViewImpl() { presenter = new ListPrincipalAccessAuthorizationsPresenter(this); } @Override protected String getTitle() { return $("ListPrincipalAccessAuthorizationsView.viewTitle", record.getTitle()); } @Override protected Button buildAddButton() { return new AddPrincipalAuthorizationButton(); } @Override protected Button buildAddAccessButton() { return new AddPrincipalAccessButton(); } @Override protected DisplayMode getDisplayMode() { return DisplayMode.CONTENT; } @Override protected void buildGlobalAccess(VerticalLayout layout) { ListPrincipalAccessAuthorizationsPresenter accessPresenter = (ListPrincipalAccessAuthorizationsPresenter) presenter; List<String> globalAccesses = accessPresenter.getUserGlobalAccess(); if (!globalAccesses.isEmpty()) { Label label = new Label(); if (presenter.seeAccessField()) { label.setValue($("ListAccessAuthorizationsView.globalAccesses")); } label.addStyleName(ValoTheme.LABEL_H2); layout.addComponent(label); StringBuilder accesses = new StringBuilder(); for (String access : globalAccesses) { if (accesses.length() > 0) { accesses.append(", "); } accesses.append($("AuthorizationsView." + access)); } if (accesses.length() > 0) { layout.addComponent(new Label(accesses.toString())); } } } public class AddPrincipalAuthorizationButton extends AddAuthorizationButton { @PropertyId("record") protected LookupRecordField content; @Override protected Component buildWindowContent() { buildRecordField(); buildAccessField(); buildRolesField(); buildDateFields(); return new BaseForm<AuthorizationVO>( AuthorizationVO.forUsers(record.getId()), this, content, accessRoles, userRoles, startDate, endDate) { @Override protected void saveButtonClick(AuthorizationVO authorization) throws ValidationException { getWindow().close(); presenter.authorizationCreationRequested(authorization); } @Override protected void cancelButtonClick(AuthorizationVO authorization) { getWindow().close(); } }; } protected void buildRecordField() { content = new LookupRecordField(AdministrativeUnit.SCHEMA_TYPE); content.setCaption($("AuthorizationsView.content")); content.setRequired(true); content.setId("content"); } } public class AddPrincipalAccessButton extends WindowButton { @PropertyId("accessRoles") protected ListOptionGroup accessRoles; public AddPrincipalAccessButton() { super("", "", WindowConfiguration.modalDialog("40%", "30%")); String caption = $("ListPrincipalAccessAuthorizationsView.addAccess"); super.setCaption(caption); super.setWindowCaption(caption); ListPrincipalAccessAuthorizationsPresenter accessPresenter = (ListPrincipalAccessAuthorizationsPresenter) presenter; setVisible(accessPresenter.seeCollectionAccessField()); } protected void buildAccessField() { accessRoles = new ListOptionGroup($("AuthorizationsView.access")); ListPrincipalAccessAuthorizationsPresenter accessPresenter = (ListPrincipalAccessAuthorizationsPresenter) presenter; for (String accessCode : accessPresenter.getCollectionAccessChoicesModifiableByCurrentUser()) { accessRoles.addItem(accessCode); accessRoles.setValue(presenter.hasUserAccess(accessCode)); accessRoles.setItemCaption(accessCode, $("AuthorizationsView." + accessCode)); } accessRoles.setMultiSelect(true); accessRoles.setValue(accessPresenter.getUserGlobalAccess()); accessRoles.setId("accessRoles"); } @Override protected Component buildWindowContent() { VerticalLayout vLayout = new VerticalLayout(); vLayout.setSizeFull(); buildAccessField(); vLayout.addComponent(accessRoles); Button saveButton = new Button($("save")); saveButton.addStyleName(SAVE_BUTTON); saveButton.addStyleName(BUTTON_PRIMARY); saveButton.addClickListener(new ClickListener() { @Override public void buttonClick(ClickEvent event) { ListPrincipalAccessAuthorizationsPresenter accessPresenter = (ListPrincipalAccessAuthorizationsPresenter) presenter; Object accessModified = accessRoles.getValue(); getWindow().close(); accessPresenter.accessCreationRequested(new ArrayList<>((Set<String>) accessModified)); } }); Button cancelButton = new Button($("cancel")); cancelButton.addClickListener(new ClickListener() { @Override public void buttonClick(ClickEvent event) { getWindow().close(); } }); cancelButton.addStyleName(CANCEL_BUTTON); HorizontalLayout buttonsLayout = new HorizontalLayout(); buttonsLayout.addStyleName(BUTTONS_LAYOUT); buttonsLayout.setSpacing(true); buttonsLayout.addComponents(saveButton, cancelButton); vLayout.addComponent(buttonsLayout); vLayout.setComponentAlignment(buttonsLayout, Alignment.MIDDLE_RIGHT); return vLayout; } } }