package com.constellio.app.ui.pages.imports; import static com.constellio.app.ui.i18n.i18n.$; import java.io.File; import java.util.Arrays; import java.util.List; import com.constellio.app.ui.framework.buttons.BaseButton; import com.constellio.app.ui.framework.components.fields.enumWithSmallCode.EnumWithSmallCodeComboBox; import com.constellio.app.ui.framework.components.fields.upload.BaseUploadField; import com.constellio.app.ui.framework.components.fields.upload.TempFileUpload; import com.constellio.app.ui.pages.base.BaseViewImpl; import com.vaadin.navigator.ViewChangeListener.ViewChangeEvent; import com.vaadin.shared.ui.label.ContentMode; import com.vaadin.ui.Alignment; import com.vaadin.ui.Button; import com.vaadin.ui.Button.ClickEvent; import com.vaadin.ui.Button.ClickListener; import com.vaadin.ui.ComboBox; import com.vaadin.ui.Component; import com.vaadin.ui.Label; import com.vaadin.ui.Link; import com.vaadin.ui.Panel; import com.vaadin.ui.ProgressBar; import com.vaadin.ui.VerticalLayout; import com.vaadin.ui.themes.ValoTheme; public class ImportFileViewImpl extends BaseViewImpl implements ImportFileView { private File exampleFile; protected ImportFilePresenterInterface presenter; protected VerticalLayout mainLayout; private Link exampleFileLink; private BaseUploadField uploadField; private Button uploadButton; private ProgressBar progressBar; private Panel messagesPanel; private EnumWithSmallCodeComboBox mode; private VerticalLayout messagesLayout; private int total; public ImportFileViewImpl() { initPresenter(); } protected void initPresenter() { presenter = new ImportFilePresenter(this); } @Override protected Component buildMainComponent(ViewChangeEvent event) { mainLayout = new VerticalLayout(); mainLayout.setSizeFull(); mainLayout.setSpacing(true); uploadField = new BaseUploadField(); uploadField.setCaption(getUploadFieldCaption()); uploadButton = new BaseButton($("ImportFileView.startImport")) { @Override protected void buttonClick(ClickEvent event) { progressBar.setVisible(true); TempFileUpload upload = (TempFileUpload) uploadField.getValue(); presenter.uploadButtonClicked(upload); progressBar.setVisible(false); } }; uploadButton.addStyleName(ValoTheme.BUTTON_PRIMARY); mode = new EnumWithSmallCodeComboBox(ImportFileMode.class); mode.setImmediate(true); mode.setWidth("200px"); mode.setConvertedValue(ImportFileMode.STRICT); progressBar = new ProgressBar(); progressBar.setIndeterminate(true); progressBar.setVisible(false); messagesLayout = new VerticalLayout(); messagesLayout.setWidth("100%"); messagesLayout.setSpacing(true); messagesPanel = new Panel($("ImportFileView.errors"), messagesLayout); messagesPanel.setVisible(false); mainLayout.addComponents(mode, uploadField, uploadButton, progressBar, messagesPanel); mainLayout.setExpandRatio(messagesPanel, 1); //mainLayout.setComponentAlignment(exampleExcelFileLink, Alignment.TOP_RIGHT); mainLayout.setComponentAlignment(uploadButton, Alignment.BOTTOM_RIGHT); return mainLayout; } protected String getUploadFieldCaption() { return $("ImportFileView.excelFile"); } @Override protected String getTitle() { return $("ImportFileView.viewTitle"); } @Override protected ClickListener getBackButtonClickListener() { return new ClickListener() { @Override public void buttonClick(ClickEvent event) { presenter.backButtonClicked(); } }; } @Override public void setExampleFile(File exampleFile) { this.exampleFile = exampleFile; } @Override public List<String> getSelectedCollections() { return Arrays.asList(getCollection()); } @Override public ImportFileMode getImportFileMode() { return (ImportFileMode) mode.getConvertedValue(); } @Override public void setTotal(int total) { this.total = total; } @Override public void setProgress(int progress) { float progressFloat; if (total > 0) { progressFloat = (float) progress / total; } else { progressFloat = 0; } progressBar.setValue(progressFloat); } @Override public void showImportCompleteMessage() { showMessage($("ImportFileView.importComplete")); } @Override public void showErrorMessage(String errorMessage) { Label messageLabel = new Label(errorMessage); messageLabel.setContentMode(ContentMode.HTML); messagesPanel.setVisible(true); messagesLayout.addComponentAsFirst(messageLabel); } }