package com.constellio.app.modules.rm.ui.components.menuBar; import static com.constellio.app.ui.i18n.i18n.$; import java.util.Arrays; import java.util.HashMap; import java.util.Map; import org.apache.commons.lang3.StringUtils; import org.vaadin.dialogs.ConfirmDialog; import com.constellio.app.modules.rm.navigation.RMNavigationConfiguration; import com.constellio.app.modules.rm.ui.entities.DocumentVO; import com.constellio.app.modules.rm.ui.util.ConstellioAgentUtils; import com.constellio.app.modules.rm.wrappers.Document; import com.constellio.app.services.factories.ConstellioFactories; import com.constellio.app.ui.application.ConstellioUI; import com.constellio.app.ui.application.CoreViews; import com.constellio.app.ui.application.Navigation; import com.constellio.app.ui.entities.ContentVersionVO; import com.constellio.app.ui.entities.MetadataVO; import com.constellio.app.ui.entities.RecordVO; import com.constellio.app.ui.framework.buttons.ConfirmDialogButton.DialogMode; import com.constellio.app.ui.framework.buttons.DownloadLink; import com.constellio.app.ui.framework.components.ComponentState; import com.constellio.app.ui.framework.components.content.ContentVersionVOResource; import com.constellio.app.ui.framework.components.content.UpdateContentVersionWindowImpl; import com.constellio.app.ui.framework.components.menuBar.ConfirmDialogMenuBarItemCommand; import com.constellio.app.ui.pages.base.SessionContext; import com.constellio.app.ui.pages.home.HomeViewImpl; import com.constellio.app.ui.util.FileIconUtils; import com.vaadin.navigator.View; import com.vaadin.server.FontAwesome; import com.vaadin.server.Page; import com.vaadin.server.Resource; import com.vaadin.ui.MenuBar; import com.vaadin.ui.Notification; import com.vaadin.ui.Notification.Type; public class DocumentMenuBarImpl extends MenuBar implements DocumentMenuBar { private boolean visible = true; private RecordVO recordVO; private ContentVersionVO contentVersionVO; private UpdateContentVersionWindowImpl updateWindow; private String borrowedMessage; private boolean openDocumentButtonVisible; private boolean downloadDocumentButtonVisible; private boolean editDocumentButtonVisible; private boolean deleteDocumentButtonVisible; private boolean addAuthorizationButtonVisible; private boolean shareDocumentButtonVisible; private boolean createPDFAButtonVisible; private boolean uploadButtonVisible; private boolean checkInButtonVisible; private boolean alertWhenAvailableButtonVisible; private boolean checkOutButtonVisible; //private boolean cancelCheckOutButtonVisible; private boolean finalizeButtonVisible; protected DocumentMenuBarPresenter presenter; public DocumentMenuBarImpl(DocumentVO documentVO) { presenter = newPresenter(); setDocumentVO(documentVO); if (documentVO != null) { presenter.setRecordVO(documentVO); } } protected DocumentMenuBarPresenter newPresenter() { return new DocumentMenuBarPresenter(this); } public final boolean isVisible() { return visible; } public final void setVisible(boolean visible) { if (this.visible && !visible) { removeItems(); } this.visible = visible; } @Override public void buildMenuItems() { removeItems(); MenuItem rootItem = addItem("", FontAwesome.BARS, null); rootItem.setIcon(FontAwesome.BARS); if (StringUtils.isNotBlank(borrowedMessage)) { rootItem.addItem(borrowedMessage, null); } MenuItem displayDocumentItem = rootItem.addItem($("DocumentContextMenu.displayDocument"), null); displayDocumentItem.setCommand(new Command() { @Override public void menuSelected(MenuItem selectedItem) { presenter.displayDocumentButtonClicked(); } }); if (openDocumentButtonVisible) { String fileName = contentVersionVO.getFileName(); Resource icon = FileIconUtils.getIcon(fileName); MenuItem openDocumentItem = rootItem.addItem($("DocumentContextMenu.openDocument"), icon, null); openDocumentItem.setCommand(new Command() { @Override public void menuSelected(MenuItem selectedItem) { String agentURL = ConstellioAgentUtils.getAgentURL(recordVO, contentVersionVO); openAgentURL(agentURL); } }); } if (downloadDocumentButtonVisible) { MenuItem downloadDocumentItem = rootItem.addItem($("DocumentContextMenu.downloadDocument"), null); downloadDocumentItem.setCommand(new Command() { @SuppressWarnings("deprecation") @Override public void menuSelected(MenuItem selectedItem) { ContentVersionVOResource contentVersionResource = new ContentVersionVOResource(contentVersionVO); Resource downloadedResource = DownloadLink.wrapForDownload(contentVersionResource); Page.getCurrent().open(downloadedResource, null, false); } }); } if (editDocumentButtonVisible) { MenuItem editDocumentItem = rootItem.addItem($("DocumentContextMenu.editDocument"), null); editDocumentItem.setCommand(new Command() { @Override public void menuSelected(MenuItem selectedItem) { presenter.editDocumentButtonClicked(); } }); } if (deleteDocumentButtonVisible) { MenuItem deleteDocumentItem = rootItem.addItem($("DocumentContextMenu.deleteDocument"), null); deleteDocumentItem.setCommand(new ConfirmDialogMenuBarItemCommand(DialogMode.WARNING) { @Override protected String getConfirmDialogMessage() { return $("ConfirmDialog.confirmDelete"); } @Override protected void confirmButtonClick(ConfirmDialog dialog) { presenter.deleteDocumentButtonClicked(); } }); } if (addAuthorizationButtonVisible) { MenuItem addAuthorizationItem = rootItem.addItem($("DocumentActionsComponent.addAuthorization"), null); addAuthorizationItem.setCommand(new Command() { @Override public void menuSelected(MenuItem selectedItem) { presenter.addAuthorizationButtonClicked(); } }); } if (createPDFAButtonVisible) { MenuItem createPDFAItem = rootItem.addItem($("DocumentActionsComponent.createPDFA"), null); createPDFAItem.setCommand(new ConfirmDialogMenuBarItemCommand(DialogMode.WARNING) { @Override protected String getConfirmDialogMessage() { return $("ConfirmDialog.confirmCreatePDFA"); } @Override protected void confirmButtonClick(ConfirmDialog dialog) { presenter.createPDFA(); } }); } if (shareDocumentButtonVisible) { MenuItem shareDocumentItem = rootItem.addItem($("DocumentActionsComponent.shareDocument"), null); shareDocumentItem.setCommand(new Command() { @Override public void menuSelected(MenuItem selectedItem) { presenter.shareDocumentButtonClicked(); } }); } if (uploadButtonVisible) { MenuItem uploadItem = rootItem.addItem($("DocumentActionsComponent.upload"), null); uploadItem.setCommand(new Command() { @Override public void menuSelected(MenuItem selectedItem) { presenter.uploadButtonClicked(); } }); } if (checkInButtonVisible) { MenuItem checkInItem = rootItem.addItem($("DocumentActionsComponent.checkIn"), null); checkInItem.setCommand(new Command() { @Override public void menuSelected(MenuItem selectedItem) { presenter.checkInButtonClicked(); } }); } if (alertWhenAvailableButtonVisible) { MenuItem alertWhenAvailableItem = rootItem.addItem($("RMObject.alertWhenAvailable"), null); alertWhenAvailableItem.setCommand(new Command() { @Override public void menuSelected(MenuItem selectedItem) { presenter.alertWhenAvailable(); } }); } if (checkOutButtonVisible) { MenuItem checkOutItem = rootItem.addItem($("DocumentActionsComponent.checkOut"), null); checkOutItem.setCommand(new Command() { @Override public void menuSelected(MenuItem selectedItem) { presenter.checkOutButtonClicked(getSessionContext()); refreshParent(); } }); } if (finalizeButtonVisible) { MenuItem finalizeItem = rootItem.addItem($("DocumentActionsComponent.finalize"), null); finalizeItem.setCommand(new ConfirmDialogMenuBarItemCommand(DialogMode.WARNING) { @Override protected String getConfirmDialogMessage() { return $("DocumentActionsComponent.finalize.confirm"); } @Override protected void confirmButtonClick(ConfirmDialog dialog) { presenter.finalizeButtonClicked(); } }); } } @Override public ConstellioFactories getConstellioFactories() { return ConstellioFactories.getInstance(); } @Override public CoreViews navigateTo() { return ConstellioUI.getCurrent().navigateTo(); } @Override public Navigation navigate() { return ConstellioUI.getCurrent().navigate(); } @Override public void showMessage(String message) { Notification.show(message, Type.WARNING_MESSAGE); } @Override public void showErrorMessage(String errorMessage) { Notification.show(errorMessage, Type.ERROR_MESSAGE); } @Override public SessionContext getSessionContext() { return ConstellioUI.getCurrentSessionContext(); } @Override public void setDocumentVO(DocumentVO documentVO) { this.recordVO = documentVO; } private void initUploadWindow() { Map<RecordVO, MetadataVO> record = new HashMap<>(); record.put(recordVO, recordVO.getMetadata(Document.CONTENT)); updateWindow = new UpdateContentVersionWindowImpl(record) { @Override public void close() { super.close(); presenter.updateWindowClosed(); postClose(); } }; } public void postClose() { refreshParent(); } @Override public void openUploadWindow(boolean checkingIn) { initUploadWindow(); updateWindow.open(checkingIn); } @Override public void setStartWorkflowButtonState(ComponentState state) { } @Override public void setEditDocumentButtonState(ComponentState state) { editDocumentButtonVisible = state.isEnabled(); } @Override public void setAddDocumentButtonState(ComponentState state) { //not supported } @Override public void setDeleteDocumentButtonState(ComponentState state) { deleteDocumentButtonVisible = state.isEnabled(); } @Override public void setAddAuthorizationButtonState(ComponentState state) { addAuthorizationButtonVisible = state.isEnabled(); } @Override public void setCreatePDFAButtonState(ComponentState state) { createPDFAButtonVisible = state.isEnabled(); } @Override public void setShareDocumentButtonState(ComponentState state) { shareDocumentButtonVisible = state.isEnabled(); } @Override public void setUploadButtonState(ComponentState state) { uploadButtonVisible = state.isEnabled(); } @Override public void setCheckInButtonState(ComponentState state) { checkInButtonVisible = state.isEnabled(); } @Override public void setAlertWhenAvailableButtonState(ComponentState state) { alertWhenAvailableButtonVisible = state.isEnabled(); } @Override public void setCheckOutButtonState(ComponentState state) { checkOutButtonVisible = state.isEnabled(); } @Override public void setFinalizeButtonVisible(boolean visible) { finalizeButtonVisible = visible; } @Override public void setContentVersionVO(ContentVersionVO contentVersionVO) { this.contentVersionVO = contentVersionVO; } @Override public void setBorrowedMessage(String borrowedMessageKey, String... args) { if (StringUtils.isNotBlank(borrowedMessageKey)) { borrowedMessage = $(borrowedMessageKey, (Object[]) args); } else { borrowedMessage = null; } } @Override public void setOpenDocumentButtonVisible(boolean visible) { this.openDocumentButtonVisible = visible; } @Override public void setDownloadDocumentButtonVisible(boolean visible) { this.downloadDocumentButtonVisible = visible; } @Override public void openAgentURL(String agentURL) { Page.getCurrent().open(agentURL, "_top"); } @Override public void refreshParent() { View parentView = ConstellioUI.getCurrent().getCurrentView(); if (parentView instanceof HomeViewImpl) { HomeViewImpl homeView = (HomeViewImpl) parentView; String selectedTabCode = homeView.getSelectedTabCode(); if (Arrays.asList( RMNavigationConfiguration.CHECKED_OUT_DOCUMENTS, RMNavigationConfiguration.LAST_VIEWED_DOCUMENTS).contains(selectedTabCode)) { navigateTo().home(selectedTabCode); } } } }