summaryrefslogtreecommitdiffstats
path: root/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/LectureImageListPage.java
blob: b00bfbd7d686fe6ec7d945a7ba75e9127a260923 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
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 (ContainerUtils.isDataContainer(selected)) {
			setErrorMessage(I18n.PAGE.getString("LectureImageList.WizardPage.errorMessage.imageIsDataContainer"));
			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;
	}

}