package org.openslx.dozmod.gui.window;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import javax.swing.RowFilter;
import javax.swing.RowSorter;
import javax.swing.RowSorter.SortKey;
import javax.swing.SortOrder;
import javax.swing.SwingUtilities;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.TableRowSorter;
import org.apache.log4j.Logger;
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.ImageTableModel;
import org.openslx.dozmod.gui.helper.MessageType;
import org.openslx.dozmod.gui.helper.TableColumnAdjuster;
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.UserCache;
import org.openslx.dozmod.util.FormatHelper;
public class ImageListWindow extends ImageListWindowLayout {
private final static Logger LOGGER = Logger.getLogger(ImageListWindow.class);
TableRowSorter<ImageTableModel> sorter = new TableRowSorter<ImageTableModel>();
public ImageListWindow() {
super();
ImageTableModel itm = new ImageTableModel();
sorter.setSortsOnUpdates(true);
sorter.setModel(itm);
ArrayList<SortKey> list = new ArrayList<SortKey>();
list.add( new RowSorter.SortKey(0, SortOrder.ASCENDING) );
sorter.setSortKeys(list);
jtable.setRowSorter(sorter);
jtable.setModel(itm);
// SWING TABLE STUFF
jtable.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent e) {
int rowIndex = jtable.getSelectedRow();
if (rowIndex == -1)
return;
ImageTableModel model = (ImageTableModel) jtable.getModel();
final ImageSummaryRead image = model.get(jtable.convertRowIndexToModel(rowIndex));
LOGGER.debug(image);
if (image == null)
return;
Gui.asyncExec(new Runnable() {
public void run() {
updateDetailPane(image);
}
});
}
});
jtable.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent me) {
if (me.getClickCount() == 2) {
int rowIndex = jtable.getSelectedRow();
if (rowIndex == -1)
return;
ImageTableModel model = (ImageTableModel) jtable.getModel();
final ImageSummaryRead image = model.get(jtable.convertRowIndexToModel(rowIndex));
LOGGER.debug(image);
if (image == null)
return;
Gui.asyncExec(new Runnable() {
public void run() {
ImageDetailsWindow popup = MainWindow.openPopup(ImageDetailsWindow.class, true, false);
if (popup != null)
popup.setImage(image.getImageBaseId());
}
});
}
}
});
// filter the objects in the table depending on the search field
searchTextField.addKeyListener(new KeyAdapter() {
@Override
public void keyReleased(KeyEvent ke) {
final String term = searchTextField.getText();
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
RowFilter<ImageTableModel, Object> filter = null;
try {
filter = RowFilter.regexFilter(".*" + term + ".*");
} catch (java.util.regex.PatternSyntaxException e) {
return;
}
sorter.setRowFilter(filter);
}});
}
});
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);
// }
// });
// return to mainMenu
backButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
// MainWindow.showPage(MainMenuWindow.class);
refreshList(true);
}
});
}
private void refreshList(final boolean forceRefresh) {
if (isDisposed())
return;
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
ImageTableModel itm = (ImageTableModel) jtable.getModel();
itm.setItems(ImageCache.get(forceRefresh));
itm.fireTableDataChanged();
if (sorter.getSortKeys().isEmpty()) {
ArrayList<SortKey> list = new ArrayList<SortKey>();
list.add( new RowSorter.SortKey(0, SortOrder.ASCENDING) );
sorter.setSortKeys(list);
LOGGER.debug("Sortkeys: " + sorter.getSortKeys().get(0).getColumn());
} else {
LOGGER.debug("Existing: " + sorter.getSortKeys().get(0).getColumn());
}
sorter.sort();
TableColumnAdjuster tca = new TableColumnAdjuster(jtable);
tca.adjustColumns();
}
});
}
@Override
public boolean requestHide() {
return true;
}
@Override
public void requestShow() {
refreshList(false);
}
private void deleteCallback(ImageSummaryRead image, Throwable t) {
if (t == null) {
Gui.showMessageBox("Deleted image with UUID '" + image + "'.", MessageType.INFO,
LOGGER, t);
} else {
Gui.showMessageBox("Failed to delete image!", MessageType.ERROR, LOGGER, t);
}
}
private void updateDetailPane(ImageSummaryRead image) {
// -- 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);
}
}
}