summaryrefslogblamecommitdiffstats
path: root/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/ImageDetailsWindow.java
blob: 66a1a32160b1e03565bbb2719edd22a26087f491 (plain) (tree)
1
2
3
4
5
6

                                      
                       


                               







                                                                     
                                                 















                                                                                        
                                                  


                                             
                                                                      



                                                                      








































                                                                                                                                 

                                                                                         












                                                                                           





                                                             
                                                        
                                              


                                                   
 
                                               
                                                    

                                                    
                                                                   
                                             

                                                   
 
package org.openslx.dozmod.gui.window;

import java.awt.Window;
import java.util.List;

import org.apache.log4j.Logger;
import org.openslx.bwlp.thrift.iface.ImageDetailsRead;
import org.openslx.bwlp.thrift.iface.OperatingSystem;
import org.openslx.bwlp.thrift.iface.Virtualizer;
import org.openslx.dozmod.gui.Gui;
import org.openslx.dozmod.gui.MainWindow;
import org.openslx.dozmod.gui.helper.MessageType;
import org.openslx.dozmod.gui.helper.SwtUtil;
import org.openslx.dozmod.gui.window.layout.ImageDetailsWindowLayout;
import org.openslx.dozmod.permissions.ImagePerms;
import org.openslx.dozmod.thrift.MetaDataCache;
import org.openslx.dozmod.thrift.Session;
import org.openslx.dozmod.thrift.UserCache;
import org.openslx.dozmod.util.FormatHelper;
import org.openslx.thrifthelper.ThriftManager;
import org.openslx.util.QuickTimer;
import org.openslx.util.QuickTimer.Task;

public class ImageDetailsWindow extends ImageDetailsWindowLayout {

	private static final Logger LOGGER = Logger.getLogger(ImageDetailsWindow.class);

	private final ImageDetailsWindow me = this;

	private ImageDetailsRead image = null;

	public ImageDetailsWindow(Window parent) {
		super(parent);

		// Close button closes window
		btnClose.addSelectionListener(new SelectionAdapter() {
			@Override
			public void widgetSelected(SelectionEvent e) {
				getShell().dispose();
			}
		});
	}

	public void setImage(final String imageBaseId) {
		QuickTimer.scheduleOnce(new Task() {
			@Override
			public void fire() {
				Exception error = null;
				try {
					synchronized (me) {
						if (image != null)
							return;
						image = ThriftManager.getSatClient().getImageDetails(Session.getSatelliteToken(),
								imageBaseId);
					}
				} catch (Exception e) {
					error = e;
				}
				// Just prime the cache...
				MetaDataCache.getOperatingSystems();
				MetaDataCache.getVirtualizers();
				final Exception e = error;
				Gui.asyncExec(new Runnable() {
					@Override
					public void run() {
						if (e != null || image == null) {
							MainWindow.showMessageBox("Konnte Daten des Images nicht abrufen",
									MessageType.ERROR, LOGGER, e);
							getShell().dispose();
						} else {
							fill();
						}
					}
				});
			}
		});
	}

	private void fill() {
		if (isDisposed() || image == null)
			return;
		txtTitle.setText(SwtUtil.replaceMnemonics(image.getImageName()));
		txtDescription.setText(SwtUtil.replaceMnemonics(image.getDescription()));
		lblOwner.setUser(UserCache.find(image.getOwnerId()));
		lblUpdater.setUser(UserCache.find(image.getUpdaterId()));
		lblCreateTime.setText(FormatHelper.longDate(image.getCreateTime()));
		lblUpdateTime.setText(FormatHelper.longDate(image.getUpdateTime()));
		List<OperatingSystem> osList = MetaDataCache.getOperatingSystems();
		cboOperatingSystem.setInput(osList);
		OperatingSystem os = MetaDataCache.getOsById(image.getOsId());
		if (os != null) {
			cboOperatingSystem.setSelection(new StructuredSelection(os), true);
		}
		Virtualizer virt = MetaDataCache.getVirtualizerById(image.getVirtId());
		if (virt != null)
			lblVirtualizer.setText(virt.getVirtName());
		String tagsString = "";
		for (String tag : image.getTags()) {
			tagsString = tagsString + ", " + tag;
		}
		txtTags.setText(tagsString);
		btnIsTemplate.setSelection(image.isTemplate);
		makeEditable(ImagePerms.canEdit(image));
		getShell().layout(true, true);
		MainWindow.centerShell(getShell());
	}


	// make text fields editable if allowed
	private void makeEditable(boolean editable){
		txtTitle.setEnabled(editable);
		txtDescription.setEnabled(editable);
		cboOperatingSystem.getCombo().setEnabled(editable);
		txtTags.setEnabled(editable);
		btnIsTemplate.setEnabled(editable);
	}
}