package org.openslx.dozmod.gui.wizard.page; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.SwingUtilities; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import org.openslx.bwlp.thrift.iface.ImageSummaryRead; import org.openslx.dozmod.gui.control.table.ImageTable; import org.openslx.dozmod.gui.helper.I18n; import org.openslx.dozmod.gui.wizard.Wizard; import org.openslx.dozmod.gui.wizard.layout.LectureImageListPageLayout; import org.openslx.dozmod.permissions.ImagePerms; import org.openslx.dozmod.state.LectureWizardState; import org.openslx.dozmod.thrift.cache.ImageCache; import org.openslx.dozmod.util.ContainerUtils; import org.openslx.util.QuickTimer; import org.openslx.util.QuickTimer.Task; /** * Page for choosing the linked image for the lecture to be created */ public class LectureImageListPage extends LectureImageListPageLayout { /** * Version for serialization. */ private static final long serialVersionUID = 4934345495859750609L; private LectureWizardState state = null; /** * The image table held by the ImageListViewer */ private final ImageTable imageTable = ctlImageList.getImageTable(); /** * Page for setting custom permissions of a lecture */ public LectureImageListPage(final Wizard wizard, LectureWizardState state) { super(wizard); this.state = state; setPageComplete(false); imageTable.setColumnVisible(ImageTable.COL_OS, false); imageTable.setColumnVisible(ImageTable.COL_TEMPLATE, false); imageTable.setColumnVisible(ImageTable.COL_SIZE, false); imageTable.getSelectionModel().addListSelectionListener(new ListSelectionListener() { @Override public void valueChanged(ListSelectionEvent e) { reactToUserInput(); } }); QuickTimer.scheduleOnce(new Task() { @Override public void fire() { ImageCache.get(true); } }); imageTable.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { if (SwingUtilities.isLeftMouseButton(e) && e.getClickCount() == 2) { wizard.doNext(); } } }); } @Override protected void onPageEnter() { ctlImageList.refreshList(false, 1); } /** * Called by event listeners. This will set guidance message or error * message and call setPageComplete(bool) accordingly. The state will be * updated if the fields are valid. */ private boolean reactToUserInput() { boolean b = isPageValid(); setPageComplete(b); return b; } @Override protected boolean wantNextOrFinish() { return reactToUserInput(); } private boolean isPageValid() { ImageSummaryRead selected = imageTable.getSelectedItem(); if (ContainerUtils.isContainerImageLinked(selected)) { setErrorMessage(I18n.PAGE.getString("LectureImageList.WizardPage.errorMessage.containerLinkedWithLecture")); return false; } else if (selected != null && selected.isValid && ImagePerms.canLink(selected)) { state.image = selected; state.imageVersionId = selected.getLatestVersionId(); setDescription(I18n.PAGE.getString("LectureImageList.WizardPage.description")); return true; } if (selected != null && ImagePerms.canLink(selected)) { setErrorMessage(I18n.PAGE.getString("LectureImageList.WizardPage.errorMessage.noPerms")); } else { setErrorMessage(I18n.PAGE.getString("LectureImageList.WizardPage.errorMessage.invalidVM")); } return false; } }