summaryrefslogblamecommitdiffstats
path: root/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/ImagePublishedWindow.java
blob: 0d4ea2e9e46785b96666ebec1bb896df6f84b2df (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11
12











                                      
                               






















































































                                                                                                    






                                                                                                                                           





















                                                                 
 


                                             

                                                          











                                                                     
 
































































                                                                                                      
package org.openslx.dozmod.gui.window;

import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.List;

import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.SwingUtilities;

import org.apache.log4j.Logger;
import org.apache.thrift.TException;
import org.openslx.bwlp.thrift.iface.ImageSummaryRead;
import org.openslx.dozmod.gui.Gui;
import org.openslx.dozmod.gui.MainWindow;
import org.openslx.dozmod.gui.helper.UiFeedback;
import org.openslx.dozmod.gui.window.layout.ImagePublishedWindowLayout;
import org.openslx.dozmod.thrift.ImagePublishedDetailsActions;
import org.openslx.dozmod.thrift.Session;
import org.openslx.dozmod.thrift.ThriftActions;
import org.openslx.dozmod.thrift.ThriftActions.DownloadCallback;
import org.openslx.dozmod.thrift.ThriftError;
import org.openslx.dozmod.thrift.cache.ImagePublishedCache;
import org.openslx.thrifthelper.ThriftManager;
import org.openslx.util.QuickTimer;
import org.openslx.util.QuickTimer.Task;

public class ImagePublishedWindow extends ImagePublishedWindowLayout implements
		UiFeedback, DownloadCallback {

	private final static Logger LOGGER = Logger
			.getLogger(ImagePublishedWindow.class);
	private final ImagePublishedWindow me = this;

	public ImagePublishedWindow(Frame modalParent) {
		super(modalParent);
		// Hook when user presses X (top right)
		setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
		addWindowListener(new WindowAdapter() {
			@Override
			public void windowClosing(WindowEvent e) {
				dispose();
			}
		});
		btnClose.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				dispose();
			}
		});
		btnSatDownload.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				ImageSummaryRead item = imagePublishedTable.getSelectedItem();
				if (item == null)
					return;
				String transferToken = null;
				try {
					transferToken = ThriftManager.getSatClient()
							.requestImageReplication(
									Session.getSatelliteToken(),
									item.latestVersionId);
				} catch (TException ex) {
					ThriftError.showMessage(me, LOGGER, ex,
							"Could not start download");
				}
				MainWindow.addPassiveTransfer(transferToken, item.imageName,
						false);
			}
		});
		btnDownload.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				final ImageSummaryRead item = imagePublishedTable
						.getSelectedItem();
				if (item == null)
					return;
				btnDownload.setEnabled(false);
				ThriftActions.initDownload(
						(JFrame) SwingUtilities.getWindowAncestor(me),
						item.latestVersionId, item.imageName, item.virtId,
						item.osId, item.fileSize, null);
			}
		});

		imagePublishedTable.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				if (SwingUtilities.isLeftMouseButton(e)
						&& e.getClickCount() == 2) {
					ImageSummaryRead item = imagePublishedTable
							.getSelectedItem();
					if (item == null || item.getImageBaseId() == null)
						return;
					ImageDetailsWindow.open(
							JOptionPane
									.getFrameForComponent(ImagePublishedWindow.this),
							item.getImageBaseId(),
							null,
							new ImagePublishedDetailsActions(
									JOptionPane
											.getFrameForComponent(ImagePublishedWindow.this)));
				}
				processClick(e);
			}

			@Override
			public void mousePressed(MouseEvent e) {
				processClick(e);
			}

			@Override
			public void mouseReleased(MouseEvent e) {
				processClick(e);
			}

			private void processClick(MouseEvent e) {
				// TODO popup menu?
			}
		});

		// init data
		refreshList(true, 0);
	}

	/**
	 * Callback when download initialized
	 * 
	 * @param success
	 *            true if downloading, false otherwise
	 */
	@Override
	public void downloadInitialized(boolean success) {
		if (!success) {
			Gui.asyncExec(new Runnable() {
				@Override
				public void run() {
					btnDownload.setEnabled(true);
				}
			});
		}
	}

	/**
	 * Refreshes the image list in the table
	 * 
	 * @param forceRefresh
	 *            true to force a refresh, false to use the cached list
	 */
	public void refreshList(final boolean forceRefresh, int delay) {
		QuickTimer.scheduleOnce(new Task() {
			@Override
			public void fire() {
				final List<ImageSummaryRead> imagePublishedList = ImagePublishedCache
						.get(forceRefresh);
				if (imagePublishedList == null)
					return;
				Gui.asyncExec(new Runnable() {
					@Override
					public void run() {
						imagePublishedTable.setData(imagePublishedList, true);
					}
				});
			}
		}, delay);
	}

	/**
	 * Opens a new ImageDetailsWindow showing the details of the image with ID =
	 * imageBaseId
	 * 
	 * @param modalParent
	 *            parent of this window
	 * @param imageBaseId
	 *            id of the image to set the details of
	 */
	public static void open(Frame modalParent) {
		ImagePublishedWindow win = new ImagePublishedWindow(modalParent);
		win.setVisible(true);
	}

	/* *******************************************************************************
	 * 
	 * Dialog class overrides
	 * 
	 * **************************************************************************
	 * *****
	 */
	@SuppressWarnings("deprecation")
	@Override
	public void show() {
		if (!isVisible()) {
			pack();
			MainWindow.centerShell(this);
		}
		super.show();
	}

	@Override
	public boolean wantConfirmQuit() {
		return false;
	}

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