package com.constellio.app.modules.rm.ui.components.content; import static com.constellio.app.ui.i18n.i18n.$; 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.RecordVO; import com.constellio.app.ui.framework.components.BaseWindow; import com.constellio.app.ui.framework.components.content.DownloadContentVersionLink; import com.constellio.app.ui.pages.base.SessionContext; import com.constellio.app.ui.util.FileIconUtils; import com.vaadin.server.Resource; import com.vaadin.ui.Button; import com.vaadin.ui.Button.ClickEvent; import com.vaadin.ui.Button.ClickListener; import com.vaadin.ui.Component; import com.vaadin.ui.JavaScript; import com.vaadin.ui.Label; import com.vaadin.ui.UI; import com.vaadin.ui.VerticalLayout; import com.vaadin.ui.Window; import com.vaadin.ui.themes.ValoTheme; public class DocumentContentVersionWindowImpl extends VerticalLayout implements DocumentContentVersionWindow { private RecordVO recordVO; private ContentVersionVO contentVersionVO; private String readOnlyMessage; private String agentURL; private Label readOnlyLabel; private Button displayDocumentLink; private Component openOrDownloadLink; private Button checkOutLink; private boolean checkOutLinkVisible; private DocumentContentVersionPresenter presenter; public DocumentContentVersionWindowImpl(RecordVO recordVO, ContentVersionVO contentVersionVO) { this.recordVO = recordVO; this.contentVersionVO = contentVersionVO; this.presenter = new DocumentContentVersionPresenter(this); setSpacing(true); setWidth("90%"); addStyleName("document-window-content"); readOnlyLabel = new Label(readOnlyMessage); readOnlyLabel.addStyleName(ValoTheme.LABEL_H2); readOnlyLabel.setVisible(readOnlyMessage != null); displayDocumentLink = new Button($("DocumentContentVersionWindow.displayDocumentLinkCaption"), new ClickListener() { @Override public void buttonClick(ClickEvent event) { presenter.displayDocumentLinkClicked(); } }); displayDocumentLink.addStyleName(ValoTheme.BUTTON_LINK); if (agentURL != null) { Resource icon = FileIconUtils.getIcon(recordVO); openOrDownloadLink = new Button($("DocumentContentVersionWindow.openLinkCaption"), new ClickListener() { @Override public void buttonClick(ClickEvent event) { presenter.openWithAgentLinkClicked(); } }); openOrDownloadLink.setIcon(icon); openOrDownloadLink.addStyleName(ValoTheme.BUTTON_LINK); } else { openOrDownloadLink = new DownloadContentVersionLink(contentVersionVO, $("DocumentContentVersionWindow.downloadLinkCaption")); } checkOutLink = new Button($("DocumentContentVersionWindow.checkOutLinkCaption"), new ClickListener() { @Override public void buttonClick(ClickEvent event) { presenter.checkOutLinkClicked(); } }); checkOutLink.addStyleName(ValoTheme.BUTTON_LINK); checkOutLink.setVisible(checkOutLinkVisible); addComponents(readOnlyLabel, displayDocumentLink, openOrDownloadLink, checkOutLink); } @Override public RecordVO getRecordVO() { return recordVO; } @Override public ContentVersionVO getContentVersionVO() { return contentVersionVO; } @Override public void setReadOnlyMessage(String message) { this.readOnlyMessage = message; } @Override public void setCheckOutLinkVisible(boolean visible) { this.checkOutLinkVisible = visible; } @Override public void setAgentURL(String agentURL) { this.agentURL = agentURL; } public Window openWindow() { Window warningWindow = new BaseWindow($("DocumentContentVersionWindow.windowTitle"), this); warningWindow.center(); warningWindow.setModal(true); UI.getCurrent().addWindow(warningWindow); return warningWindow; } @Override public void closeWindow() { Window window = (Window) getParent(); window.close(); } @Override public void open(String url) { StringBuilder js = new StringBuilder(); js.append("setTimeout(function(){ window.location.href=\"" + url + "\"; }, 100)"); JavaScript.getCurrent().execute(js.toString()); // Page.getCurrent().open(url, null); } @Override public SessionContext getSessionContext() { return ConstellioUI.getCurrentSessionContext(); } @Override public ConstellioFactories getConstellioFactories() { return ConstellioUI.getCurrent().getConstellioFactories(); } @Override public CoreViews navigateTo() { return ConstellioUI.getCurrent().navigateTo(); } @Override public Navigation navigate() { return ConstellioUI.getCurrent().navigate(); } }