package com.constellio.app.modules.rm.ui.components.userDocument;
import static com.constellio.app.ui.i18n.i18n.$;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.lang3.StringUtils;
import com.constellio.app.ui.application.ConstellioUI;
import com.constellio.app.ui.entities.RecordVO;
import com.constellio.app.ui.entities.UserDocumentVO;
import com.constellio.app.ui.entities.UserFolderVO;
import com.constellio.app.ui.framework.buttons.BaseButton;
import com.constellio.app.ui.framework.buttons.WindowButton;
import com.constellio.app.ui.framework.buttons.WindowButton.WindowConfiguration;
import com.constellio.app.ui.framework.components.mouseover.NiceTitle;
import com.constellio.app.ui.framework.containers.ButtonsContainer;
import com.constellio.app.ui.framework.containers.ButtonsContainer.ContainerButton;
import com.constellio.app.ui.framework.items.RecordVOItem;
import com.constellio.app.ui.pages.base.BaseView;
import com.vaadin.server.Resource;
import com.vaadin.server.ThemeResource;
import com.vaadin.ui.Alignment;
import com.vaadin.ui.Button;
import com.vaadin.ui.Component;
import com.vaadin.ui.CustomComponent;
import com.vaadin.ui.VerticalLayout;
import com.vaadin.ui.Window;
import com.vaadin.ui.themes.ValoTheme;
public class DeclareUserContentContainerButton extends ContainerButton {
private BaseView view;
public DeclareUserContentContainerButton(BaseView view) {
this.view = view;
}
@Override
protected Button newButtonInstance(final Object itemId, ButtonsContainer<?> container) {
Button declareUserContentButton;
RecordVO recordVO = (RecordVO) ((RecordVOItem) container.getItem(itemId)).getRecord();
if (recordVO instanceof UserDocumentVO) {
final UserDocumentVO userDocumentVO = (UserDocumentVO) recordVO;
String fileName = userDocumentVO.getFileName();
String extension = StringUtils.lowerCase(FilenameUtils.getExtension(fileName));
Resource icon = new ThemeResource("images/icons/folder/folder_into.png");
if ("eml".equals(extension) || "msg".equals(extension)) {
declareUserContentButton = new WindowButton(icon, $("ListUserDocumentsView.declareDocument"),
$("ListUserDocumentsView.declareEmailWindowTitle"), true, WindowConfiguration.modalDialog("50%", "50%")) {
@Override
protected Component buildWindowContent() {
return new DeclareEmailWindowContent(userDocumentVO);
}
};
} else {
declareUserContentButton = newDefaultClassifyUserDocumentButton(icon, userDocumentVO);
boolean enabled = !view.getSessionContext().getSelectedRecordIds().contains(recordVO.getId());
declareUserContentButton.setEnabled(enabled);
}
} else if (recordVO instanceof UserFolderVO) {
UserFolderVO userFolderVO = (UserFolderVO) recordVO;
Resource icon = new ThemeResource("images/icons/folder/folder_into.png");
declareUserContentButton = newDefaultClassifyUserFolderButton(icon, userFolderVO);
boolean enabled = !view.getSessionContext().getSelectedRecordIds().contains(recordVO.getId());
declareUserContentButton.setEnabled(enabled);
} else {
declareUserContentButton = new Button();
declareUserContentButton.setVisible(false);
}
return declareUserContentButton;
}
private static class DeclareEmailWindowContent extends CustomComponent {
public DeclareEmailWindowContent(final UserDocumentVO userDocumentVO) {
super();
setHeight("100%");
VerticalLayout mainLayout = new VerticalLayout();
mainLayout.setSpacing(true);
mainLayout.setDefaultComponentAlignment(Alignment.MIDDLE_CENTER);
Button declareEmailButton = new BaseButton($("ListUserDocumentsView.declareEmail")) {
@Override
protected void buttonClick(ClickEvent event) {
String userDocumentId = userDocumentVO.getId();
ConstellioUI.getCurrent().navigateTo().declareUserDocument(userDocumentId);
for (Window window : ConstellioUI.getCurrent().getWindows()) {
window.close();
}
}
};
declareEmailButton.addStyleName(ValoTheme.BUTTON_PRIMARY);
Button declareEmailAttachmentsButton = new BaseButton($("ListUserDocumentsView.declareEmailAttachments")) {
@Override
protected void buttonClick(ClickEvent event) {
String userDocumentId = userDocumentVO.getId();
ConstellioUI.getCurrent().navigateTo().addEmailAttachmentsToFolder(userDocumentId);
for (Window window : ConstellioUI.getCurrent().getWindows()) {
window.close();
}
}
};
mainLayout.addComponents(declareEmailButton, declareEmailAttachmentsButton);
setCompositionRoot(mainLayout);
}
}
protected Button newDefaultClassifyUserDocumentButton(Resource icon, final UserDocumentVO userDocumentVO) {
BaseButton button = new BaseButton($("ListUserDocumentsView.declareDocument"), icon, true) {
@Override
protected void buttonClick(ClickEvent event) {
String userDocumentId = userDocumentVO.getId();
ConstellioUI.getCurrent().navigateTo().declareUserDocument(userDocumentId);
for (Window window : ConstellioUI.getCurrent().getWindows()) {
window.close();
}
}
};
button.addExtension(new NiceTitle(button, $("ListUserDocumentsView.declareDocument"), false));
return button;
}
protected Button newDefaultClassifyUserFolderButton(Resource icon, final UserFolderVO userFolderVO) {
BaseButton button = new BaseButton($("ListUserDocumentsView.declareFolder"), icon, true) {
@Override
protected void buttonClick(ClickEvent event) {
String userFolderId = userFolderVO.getId();
ConstellioUI.getCurrent().navigateTo().declareUserFolder(userFolderId);
for (Window window : ConstellioUI.getCurrent().getWindows()) {
window.close();
}
}
};
button.addExtension(new NiceTitle(button, $("ListUserDocumentsView.declareFolder"), false));
return button;
}
}