package com.constellio.app.ui.pages.management.app; import java.io.IOException; import java.io.OutputStream; import com.constellio.app.ui.pages.base.BaseViewImpl; import com.constellio.app.ui.pages.viewGroups.AdminViewGroup; import com.constellio.data.io.streamFactories.StreamFactory; import com.vaadin.navigator.ViewChangeListener.ViewChangeEvent; 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.HorizontalLayout; import com.vaadin.ui.Label; import com.vaadin.ui.Upload; import com.vaadin.ui.Upload.Receiver; import com.vaadin.ui.Upload.SucceededEvent; import com.vaadin.ui.Upload.SucceededListener; import com.vaadin.ui.themes.ValoTheme; @SuppressWarnings("serial") public class AppManagementView extends BaseViewImpl implements AdminViewGroup { public static final String UPLOAD_FIELD_ID = "uploadField"; public static final String RESTART_BUTTON_ID = "restartButton"; public static final String UPDATE_BUTTON_ID = "updateButton"; AppManagementPresenter presenter; private StreamFactory<OutputStream> warFileDestination; private HorizontalLayout mainLayout; private Button restartButton; private Button updateButton; private Upload upload; public AppManagementView() { presenter = new AppManagementPresenter(this); } @Override protected String getTitle() { return "App management view"; } @Override protected Component buildMainComponent(ViewChangeEvent events) { buildMainLayout(); presenter.enterView(); updateButton.setCaption("Mettre à jour"); updateButton.setStyleName(ValoTheme.BUTTON_PRIMARY); updateButton.setId(UPDATE_BUTTON_ID); updateButton.addClickListener(new ClickListener() { @Override public void buttonClick(ClickEvent event) { presenter.updateApplicationButtonClicked(); } }); restartButton.setCaption("Redémarrer"); restartButton.setStyleName(ValoTheme.BUTTON_PRIMARY); restartButton.setId(RESTART_BUTTON_ID); restartButton.addClickListener(new ClickListener() { @Override public void buttonClick(ClickEvent event) { presenter.restartApplicationButtonClicked(); } }); upload.setId(UPLOAD_FIELD_ID); upload.setReceiver(new Receiver() { @Override public OutputStream receiveUpload(String filename, String mimeType) { try { return warFileDestination.create("AppManagementView"); } catch (IOException e) { throw new RuntimeException(e); } } }); upload.addSucceededListener(new SucceededListener() { @Override public void uploadSucceeded(SucceededEvent event) { presenter.onSuccessfullUpload(); } }); return mainLayout; } public void setWebappName(String webappFolderName) { mainLayout.addComponent(new Label("Webapp running in '" + webappFolderName + "'")); } public void setDataVersion(String version) { mainLayout.addComponent(new Label("Data version : '" + version + "'")); } public void setWarVersion(String version) { mainLayout.addComponent(new Label("War version : '" + version + "'")); } private void buildMainLayout() { mainLayout = new HorizontalLayout(); mainLayout.setImmediate(false); mainLayout.setWidth("-1px"); mainLayout.setHeight("100%"); mainLayout.setMargin(false); // setWidth("-1px"); // setHeight("100.0%"); upload = new Upload(); upload.setStyleName(ValoTheme.BUTTON_PRIMARY); upload.setCaption("[Upload war file]"); upload.setImmediate(false); upload.setWidth("-1px"); upload.setHeight("-1px"); mainLayout.addComponent(upload); updateButton = new Button(); updateButton.setStyleName(ValoTheme.BUTTON_PRIMARY); updateButton.setCaption("[Update application]"); updateButton.setImmediate(true); updateButton.setWidth("-1px"); updateButton.setHeight("-1px"); mainLayout.addComponent(updateButton); restartButton = new Button(); restartButton.setCaption("[Restart application]"); restartButton.setStyleName(ValoTheme.BUTTON_PRIMARY); restartButton.setImmediate(true); restartButton.setWidth("-1px"); restartButton.setHeight("-1px"); mainLayout.addComponent(restartButton); } public void setUpdateButtonVisible(boolean visible) { updateButton.setVisible(visible); } public void setWarFileDestination(StreamFactory<OutputStream> warFileDestination) { this.warFileDestination = warFileDestination; } }