package org.openslx.dozmod.gui.window;
import java.util.List;
import org.apache.log4j.Logger;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.window.Window;
import org.eclipse.jface.wizard.WizardDialog;
import org.eclipse.swt.events.KeyAdapter;
import org.eclipse.swt.events.KeyEvent;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import org.openslx.bwlp.thrift.iface.ImagePermissions;
import org.openslx.bwlp.thrift.iface.ImageSummaryRead;
import org.openslx.bwlp.thrift.iface.UserInfo;
import org.openslx.dozmod.gui.Gui;
import org.openslx.dozmod.gui.MainWindow;
import org.openslx.dozmod.gui.helper.ImageListComparator;
import org.openslx.dozmod.gui.helper.ImageListFilter;
import org.openslx.dozmod.gui.helper.MessageType;
import org.openslx.dozmod.gui.helper.TableHelper;
import org.openslx.dozmod.gui.window.layout.ImageListWindowLayout;
import org.openslx.dozmod.gui.wizard.ImageWizard;
import org.openslx.dozmod.thrift.ImageCache;
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 ImageListWindow extends ImageListWindowLayout {
private final static Logger LOGGER = Logger.getLogger(ImageListWindow.class);
public ImageListWindow(final Shell mainShell) {
super(mainShell);
// Comparator for column sorting
ImageListComparator comparator = new ImageListComparator();
tableViewer.setComparator(comparator);
// creating the columns with sorting functionality through comparator
TableHelper.createImageTableColumns(tableViewer);
// filter the objects in the table depending on the search field
searchTextField.addKeyListener(new KeyAdapter() {
public void keyReleased(KeyEvent ke) {
filter.setSearchText(searchTextField.getText());
tableViewer.refresh();
}
});
// apply object filtering
filter = new ImageListFilter();
tableViewer.addFilter(filter);
// the listeners to set the detailed info of the selected image
tableViewer.addSelectionChangedListener(new ISelectionChangedListener() {
@Override
public void selectionChanged(SelectionChangedEvent event) {
IStructuredSelection selection = (IStructuredSelection) event.getSelection();
ImageSummaryRead image = (ImageSummaryRead) selection.getFirstElement();
if (image == null)
return;
// -- Set details --
// set the image name
setFieldText(imageSelectedNameLabel, image.getImageName());
// set the image
setFieldText(idInfo, image.getImageBaseId());
// set the current version of the image
setFieldText(versionInfo, image.getCurrentVersionId());
// set the time, the image has last been updated
lastUpdateInfo.setText(FormatHelper.shortDate(image.getUpdateTime()));
// info about the image permissions
ImagePermissions perms = image.getUserPermissions();
if (perms == null)
perms = image.getDefaultPermissions();
if (perms != null)
setFieldText(permissionInfo, perms.toString());
// the owner id of the selected image
UserInfo user = UserCache.find(image.getOwnerId());
setFieldText(ownerInfo, FormatHelper.userName(user));
// set the template info
if (image.isTemplate) {
templateInfo.setText("ja");
} else {
templateInfo.setText("Nein");
}
}
private void setFieldText(Text control, String content) {
if (content == null) {
control.setText("<null>");
} else {
control.setText(content);
}
}
});
// Double click entry -> open details window
tableViewer.addDoubleClickListener(new IDoubleClickListener() {
@Override
public void doubleClick(DoubleClickEvent event) {
IStructuredSelection selection = (IStructuredSelection) event.getSelection();
ImageSummaryRead image = (ImageSummaryRead) selection.getFirstElement();
if (image == null)
return;
ImageDetailsWindow popup = MainWindow.openPopup(ImageDetailsWindow.class, true, false);
if (popup != null)
popup.setImage(image.getImageBaseId());
}
});
newButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
ImageWizard wizard = new ImageWizard(false);
WizardDialog wd = new WizardDialog(getShell(), wizard);
refreshList(wd.open() == Window.OK);
}
});
editButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
ImageWizard wizard = new ImageWizard(true);
WizardDialog wd = new WizardDialog(getShell(), wizard);
refreshList(wd.open() == Window.OK);
}
});
//deleteImageVersion
deleteButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(final SelectionEvent e) {
IStructuredSelection selection = (IStructuredSelection) tableViewer.getSelection();
if (selection == null) {
MainWindow.showMessageBox("SELECIT ONULL!", MessageType.ERROR, LOGGER, null);
return;
}
final ImageSummaryRead image = (ImageSummaryRead) selection.getFirstElement();
if (image == null) {
MainWindow.showMessageBox("IMAGE ONULL!", MessageType.ERROR, LOGGER, null);
return;
}
LOGGER.debug("Trying to delete: " + image);
QuickTimer.scheduleOnce(new Task() {
@Override
public void fire() {
Throwable t = null;
try {
ThriftManager.getSatClient().deleteImageVersion(Session.getSatelliteToken(),
image.getCurrentVersionId());
} catch (Exception e) {
t = e;
}
final Throwable t2 = t;
Gui.display.asyncExec(new Runnable() {
@Override
public void run() {
deleteCallback(image, t2);
}
});
}
});
}
});
// return to mainMenu
backButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
MainWindow.showPage(MainMenuWindow.class);
}
});
}
private void refreshList(final boolean forceRefresh) {
if (isDisposed())
return;
tableViewer.getTable().setEnabled(false);
QuickTimer.scheduleOnce(new Task() {
@Override
public void fire() {
final List<ImageSummaryRead> imageList = ImageCache.get(forceRefresh);
Gui.asyncExec(new Runnable() {
@Override
public void run() {
if (isDisposed())
return;
tableViewer.setInput(imageList);
tableViewer.refresh();
tableViewer.getTable().setEnabled(true);
newButton.setFocus();
}
});
}
});
}
@Override
public boolean hide() {
return true;
}
@Override
public void show() {
refreshList(false);
}
public void deleteCallback(ImageSummaryRead image, Throwable t) {
if (t == null) {
Gui.showMessageBox(getShell(), "Deleted image with UUID '" + image + "'.", MessageType.INFO,
LOGGER, t);
} else {
Gui.showMessageBox(getShell(), "Failed to delete image!", MessageType.ERROR, LOGGER, t);
}
}
public ImageSummaryRead getCurrentImageSummaryRead() {
IStructuredSelection selection = (IStructuredSelection) tableViewer.getSelection();
return (ImageSummaryRead) selection.getFirstElement();
}
}