package org.openslx.dozmod.gui.wizard.page; import java.awt.KeyboardFocusManager; import java.awt.Window; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.openslx.bwlp.thrift.iface.ImageSummaryRead; import org.openslx.bwlp.thrift.iface.TransferState; import org.openslx.dozmod.Branding; import org.openslx.dozmod.filetransfer.TransferEvent; import org.openslx.dozmod.filetransfer.TransferEventListener; import org.openslx.dozmod.gui.Gui; import org.openslx.dozmod.gui.MainWindow; import org.openslx.dozmod.gui.helper.I18n; import org.openslx.dozmod.gui.wizard.LectureWizard; import org.openslx.dozmod.gui.wizard.Wizard; import org.openslx.dozmod.gui.wizard.layout.ImageUploadSummaryPageLayout; import org.openslx.dozmod.state.UploadWizardState; import org.openslx.dozmod.thrift.UploadInitiator.UploadInitState; import org.openslx.dozmod.thrift.cache.ImageCache; import org.openslx.util.QuickTimer; public class ImageUploadSummaryPage extends ImageUploadSummaryPageLayout { /** * Version for serialization. */ private static final long serialVersionUID = -319910198640112507L; private static final Logger LOGGER = LogManager.getLogger(ImageUploadSummaryPage.class); private boolean pageIsVisible = false; private boolean uploadListenerAdded = false; private boolean allowCreateLecture = false; private final UploadWizardState state; private final TransferEventListener uploadListener = new TransferEventListener() { @Override public void update(TransferEvent event) { if (!pageIsVisible) return; if (event.progress != null) { ctlUploadProgressBar.setStatus(event.progress); } if (event.state == TransferState.FINISHED) { updateInfoText(null); state.upload.getUploadTask().removeListener(uploadListener); } } }; private final QuickTimer.Task updateHelpText = new QuickTimer.Task() { private UploadInitState lastInitState = null; @Override public void fire() { LOGGER.debug("update help text"); if (!pageIsVisible) { this.cancel(); return; } if (!uploadListenerAdded && state.upload.getUploadTask() != null) { uploadListenerAdded = true; state.upload.getUploadTask().addListener(uploadListener); } UploadInitState initState = state.upload.getState(); if (initState != lastInitState) { lastInitState = initState; updateInfoText(initState); } if (lastInitState == UploadInitState.UPLOAD_STARTED || lastInitState == UploadInitState.ERROR) { this.cancel(); } } }; private void updateInfoText(final UploadInitState initState) { String text; if (state.upload.getUploadTask() != null && state.upload.getUploadTask().isComplete()) { text = I18n.PAGE.getString("ImageUploadSummary.UploadInitState.completed"); } else if (initState == null) { return; } else { switch (initState) { case REQUESTING: text = I18n.PAGE.getString("ImageUploadSummary.UploadInitState.requesting"); break; case WAITING_FOR_SLOT: text = I18n.PAGE.getString("ImageUploadSummary.UploadInitState.waitingForSlot"); break; case UPLOAD_STARTING: text = I18n.PAGE.getString("ImageUploadSummary.UploadInitState.uploadStarting"); break; case UPLOAD_STARTED: text = I18n.PAGE.getString("ImageUploadSummary.UploadInitState.uploadStarted"); break; case ERROR: text = I18n.PAGE.getString("ImageUploadSummary.UploadInitState.error", Branding.getServiceName()); if (state.upload.getErrorMessage() != null) { text += I18n.PAGE.getString("ImageUploadSummary.UploadInitState.errorMoreInfo", state.upload.getErrorMessage()); } break; default: return; } } final String t = text; Gui.asyncExec(new Runnable() { @Override public void run() { lblHelpText.setText("" + t + ""); if (initState == UploadInitState.UPLOAD_STARTED) { setPageComplete(true); } if (state.upload.getUploadTask() != null && state.upload.getUploadTask().isComplete()) { chkCreateLecture.setVisible(allowCreateLecture); } } }); } public ImageUploadSummaryPage(Wizard wizard, UploadWizardState state, boolean allowCreateLecture) { super(wizard); this.state = state; this.allowCreateLecture = allowCreateLecture; setPageComplete(false); } @Override protected void onPageEnter() { if (pageIsVisible) return; pageIsVisible = true; updateInfoText(UploadInitState.REQUESTING); QuickTimer.scheduleAtFixedDelay(updateHelpText, 500, 3000); } @Override protected void onPageLeave() { if (!pageIsVisible) return; pageIsVisible = false; if (state == null) return; // optional lectureWizard if (state.upload != null && state.upload.getUploadTask() != null) { state.upload.getUploadTask().removeListener(uploadListener); } if (!wizard.isCancelled() && !state.upload.getUploadTask().isCanceled()) { MainWindow.addUpload(state); } if (!wizard.isCancelled() && chkCreateLecture.isSelected()) { wizard.setVisible(false); Window parent = KeyboardFocusManager.getCurrentKeyboardFocusManager().getActiveWindow(); ImageSummaryRead image = null; for (ImageSummaryRead tmpImage : ImageCache.get(true)) { if (tmpImage.imageBaseId.equals(state.uuid)) { image = tmpImage; break; } } if (image != null) { new LectureWizard(parent, image, state.upload.getToken()).setVisible(true); } else { LOGGER.error("Couldn't find the new image in the image cache."); //TODO could this happen? Show messagebox then? } } } }