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();
}
}