summaryrefslogblamecommitdiffstats
path: root/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/VirtDropDownConfigEditorWindow.java
blob: fd58debdf15b3ca152b581f13fea2e602bc95ef5 (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
















                                                                                 
                                                          
































































                                                                                                               

                                                                                                            

























































                                                                                                                                                                         
                                                               










































                                                                                                                          
package org.openslx.dozmod.gui.window;

import java.awt.Window;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.nio.ByteBuffer;

import org.openslx.dozmod.gui.Gui;
import org.openslx.dozmod.gui.helper.MessageType;
import org.openslx.dozmod.gui.helper.UiFeedback;
import org.openslx.dozmod.gui.window.layout.VirtDropDownConfigEditorWindowLayout;
import org.openslx.dozmod.thrift.ImageDetailsActions;
import org.openslx.dozmod.thrift.ImageDetailsActions.VirtConfCallback;
import org.openslx.dozmod.thrift.cache.MetaDataCache;
import org.openslx.util.ThriftUtil;
import org.openslx.util.vm.VmwareMetaData;
import org.openslx.util.vm.VmwareMetaData.DDAcceleration;
import org.openslx.util.vm.VmwareMetaData.EthernetDevType;
import org.openslx.util.vm.VmwareMetaData.HWVersion;
import org.openslx.util.vm.VmwareMetaData.SoundCardType;

@SuppressWarnings("serial")
public class VirtDropDownConfigEditorWindow extends VirtDropDownConfigEditorWindowLayout
		implements UiFeedback {

	public interface VirtConfigChanged {
		public void virtConfigChanged(String newVmx);
	}

	private final String imageVersionId;
	private final String originalMachineDescription;
	private final VirtDropDownConfigEditorWindow me = this;
	private final VmwareMetaData meta;
	private final ImageDetailsActions actionHandler;

	protected VirtDropDownConfigEditorWindow(Window modalParent, final ImageDetailsActions actionHandler,
			final String imageVersionId, final ByteBuffer machineDescription) {
		super(modalParent);

		this.actionHandler = actionHandler;
		this.imageVersionId = imageVersionId;

		// and now for the meta data
		meta = new VmwareMetaData(MetaDataCache.getOperatingSystems(), machineDescription.array(),
				machineDescription.array().length);

		//set the initial state of the buttons
		setTheBoxes(meta);

		// listener for the sound card drop box
		cboSound.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				SoundCardType selected = (SoundCardType) cboSound.getSelectedItem();
				meta.setSoundCard(selected);
				checkForChange();
			}
		});

		// listener for the 3Dacceleration drop box
		cbo3DAcceleration.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				DDAcceleration selected = (DDAcceleration) cbo3DAcceleration.getSelectedItem();
				meta.setDDAcceleration(selected);
				checkForChange();
			}
		});

		// listener for the Hardware version drop box
		cboHWVersion.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				HWVersion selected = (HWVersion) cboHWVersion.getSelectedItem();
				meta.setHWVersion(selected);
				checkForChange();
			}
		});

		// listener for the Virtual Ethernet device drop box
		cboE0VirtDev.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				EthernetDevType selected = (EthernetDevType) cboE0VirtDev.getSelectedItem();
				meta.setEthernetDevType(0, selected);
				checkForChange();
			}
		});

		// listener for the save button
		btnSave.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				saveClicked();
			}
		});

		// listener for the cancel button
		btnCancel.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				safeClose();
			}
		});

		//listener for the profi button
		btnMore.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				if (Gui.showMessageBox(me,
						"Bitte beachten Sie: dieser Modus ist für erfahrene Nutzer geeignet. \n Möchten Sie wirklich diesen Modus fortsetzen?",
						MessageType.QUESTION_YESNO, null, null))
					me.dispose();
				VirtConfigEditorWindow.open(me, actionHandler, imageVersionId,
						ByteBuffer.wrap(meta.getDefinitionArray()), originalMachineDescription);

			}
		});

		this.originalMachineDescription = ThriftUtil.byteBufferToString(machineDescription);
		btnSave.setEnabled(false);
	}

	protected void checkForChange() {
		if (!originalMachineDescription
				.equals(ThriftUtil.byteBufferToString(ByteBuffer.wrap(meta.getDefinitionArray())))) {
			btnSave.setEnabled(true);
		} else {
			btnSave.setEnabled(false);
		}

	}

	/* setting the boxes to their initial value...value is read from the given metaData
	 * @param: given VmwareMetaData
	 */
	private void setTheBoxes(VmwareMetaData m) {
		SoundCardType SCT = m.getSoundCard();
		cboSound.setSelectedItem(SCT);
		DDAcceleration DDA = m.getDDAcceleration();
		cbo3DAcceleration.setSelectedItem(DDA);
		HWVersion HWV = m.getHWVersion();
		cboHWVersion.setSelectedItem(HWV);
		EthernetDevType E0VD = m.getEthernetDevType(0);
		cboE0VirtDev.setSelectedItem(E0VD);
	}

	private void saveClicked() {
		// we have a valid vmx or the user accepted to push the filtered input
		actionHandler.setVirtualizerConfig(imageVersionId, ByteBuffer.wrap(meta.getDefinitionArray()),
				new VirtConfCallback() {
					@Override
					public void virtConfCallback(boolean success) {
						if (success) {
							dispose();
						}
					}
				});
	}

	public static void open(Window modalParent, final ImageDetailsActions handler,
			final String imageVersionId, final ByteBuffer machineDescription) {
		VirtDropDownConfigEditorWindow win = new VirtDropDownConfigEditorWindow(modalParent, handler,
				imageVersionId, machineDescription);
		win.setVisible(true);
	}

	private void safeClose() {
		if (originalMachineDescription
				.equals(ThriftUtil.byteBufferToString(ByteBuffer.wrap(meta.getDefinitionArray())))
				|| Gui.showMessageBox(me,
						"Wollen Sie wirklich abbrechen?\n" + "Ihre Änderungen werden verworfen.",
						MessageType.QUESTION_YESNO, null, null))
			dispose();
	}

	@Override
	public boolean wantConfirmQuit() {
		return !originalMachineDescription
				.equals(ThriftUtil.byteBufferToString(ByteBuffer.wrap(meta.getDefinitionArray())));
	}

	@Override
	public void escapePressed() {
		safeClose();
	}
}