diff options
| author | Stephan Schwaer | 2015-07-13 18:03:49 +0200 |
|---|---|---|
| committer | Stephan Schwaer | 2015-07-13 18:03:49 +0200 |
| commit | a5b80f89e023e35d4f75db7d705131ed2e7eeda6 (patch) | |
| tree | a6c87548bcd31db876e3856f2c907fb4eb59c29e | |
| parent | [client] fix IDP combo not beeing enabled when TEST_ACCOUNT auth method is saved (diff) | |
| download | tutor-module-a5b80f89e023e35d4f75db7d705131ed2e7eeda6.tar.gz tutor-module-a5b80f89e023e35d4f75db7d705131ed2e7eeda6.tar.xz tutor-module-a5b80f89e023e35d4f75db7d705131ed2e7eeda6.zip | |
[client] Added filter and column sorting for the imageList.
5 files changed, 217 insertions, 16 deletions
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/helper/ImageListComparator.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/helper/ImageListComparator.java new file mode 100644 index 00000000..8b8106de --- /dev/null +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/helper/ImageListComparator.java @@ -0,0 +1,85 @@ +package org.openslx.dozmod.gui.helper; + +import org.eclipse.jface.viewers.Viewer; +import org.eclipse.jface.viewers.ViewerComparator; +import org.eclipse.swt.SWT; +import org.openslx.bwlp.thrift.iface.ImageSummaryRead; +import org.openslx.bwlp.thrift.iface.OperatingSystem; +import org.openslx.dozmod.thrift.MetaDataCache; + +public class ImageListComparator extends ViewerComparator{ + private int propertyIndex; + private static final int DESCENDING = 1; + private int direction = DESCENDING; + + public ImageListComparator() { + this.propertyIndex = 0; + direction = DESCENDING; + } + + public int getDirection() { + return direction == 1 ? SWT.DOWN : SWT.UP; + } + + + public void setColumn(int column) { + if (column == this.propertyIndex) { + // Same column as last sort; toggle the direction + direction = 1 - direction; + } else { + // New column; do an ascending sort + this.propertyIndex = column; + direction = DESCENDING; + } + } + + + // for ordering the columns + @Override + public int compare(Viewer viewer, Object e1, Object e2) { + ImageSummaryRead i1 = (ImageSummaryRead) e1; + ImageSummaryRead i2 = (ImageSummaryRead) e2; + + int rc = 0; + switch (propertyIndex) { + case 0: + rc = i1.getImageName().compareTo(i2.getImageName()); + break; + case 1: + OperatingSystem os1 = MetaDataCache.getOsById(i1.getOsId()); + OperatingSystem os2 = MetaDataCache.getOsById(i2.getOsId()); + rc = os1.getOsName().compareTo(os2.getOsName()); + break; + case 2: + rc = i1.getOwnerId().compareTo(i2.getOwnerId()); + break; + case 3: + long time1 = i1.getUpdateTime(); + long time2 = i2.getUpdateTime(); + if ( time1 < time2) { + rc = -1; + } else if (time1 == time2){ + rc = 0; + } else rc = 1; + break; + case 4: + long size1 = i1.getFileSize(); + long size2 = i2.getFileSize(); + if ( size1 < size2) { + rc = -1; + } else if (size1 == size2){ + rc = 0; + } else rc = 1; + break; + default: + rc = 0; + } + // If descending order, flip the direction + if (direction == DESCENDING) { + rc = -rc; + } + return rc; + } + + +} diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/helper/ImageListFilter.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/helper/ImageListFilter.java new file mode 100644 index 00000000..7ccce840 --- /dev/null +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/helper/ImageListFilter.java @@ -0,0 +1,46 @@ +package org.openslx.dozmod.gui.helper; + +import org.eclipse.jface.viewers.Viewer; +import org.eclipse.jface.viewers.ViewerFilter; +import org.openslx.bwlp.thrift.iface.ImageSummaryRead; +import org.openslx.bwlp.thrift.iface.OperatingSystem; +import org.openslx.dozmod.thrift.MetaDataCache; + + +/** + * Filter for the imageList + */ +public class ImageListFilter extends ViewerFilter { + + private String searchString; + + public void setSearchText(String s) { + // ensure that the value can be used for matching + this.searchString = ".*" + s + ".*"; + } + + @Override + public boolean select(Viewer viewer, Object parentElement, Object element) { + if (searchString == null || searchString.length() == 0) { + return true; + } + ImageSummaryRead i = (ImageSummaryRead) element; + if (i.getImageName().matches(searchString)) { + return true; + } + + // TODO fix when resolving owner id in table + if (i.getOwnerId().matches(searchString)) { + return true; + } + + OperatingSystem os = MetaDataCache.getOsById(i.getOsId()); + if (os.getOsName().matches(searchString)) { + return true; + } + + return false; + } +} + + diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/helper/TableHelper.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/helper/TableHelper.java index 5a8ca579..94c6e5ea 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/helper/TableHelper.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/helper/TableHelper.java @@ -1,9 +1,14 @@ package org.openslx.dozmod.gui.helper; +import java.text.SimpleDateFormat; +import java.util.Date; import org.eclipse.jface.viewers.ColumnLabelProvider; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.TableViewerColumn; import org.eclipse.swt.SWT; +import org.eclipse.swt.events.SelectionAdapter; +import org.eclipse.swt.events.SelectionEvent; +import org.eclipse.swt.events.SelectionListener; import org.openslx.bwlp.thrift.iface.ImageSummaryRead; import org.openslx.bwlp.thrift.iface.OperatingSystem; import org.openslx.dozmod.thrift.MetaDataCache; @@ -12,22 +17,41 @@ public final class TableHelper { private TableHelper() { } - private static void createColumn(TableViewer table, String colName, int width, + private static void createColumn(TableViewer table, String colName, int width, int colNumber, ColumnLabelProvider provider) { TableViewerColumn col = new TableViewerColumn(table, SWT.NONE); col.getColumn().setWidth(width); col.getColumn().setText(colName); col.setLabelProvider(provider); + // for column sorting + col.getColumn().addSelectionListener(getSelectionAdapter(col, colNumber, table)); + } + // selection listener for column sorting + private static SelectionListener getSelectionAdapter(final TableViewerColumn col, + final int colNumber, final TableViewer table) { + SelectionAdapter selectionAdapter = new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent e) { + ImageListComparator comparator = (ImageListComparator) table.getComparator(); + comparator.setColumn(colNumber); + int dir = comparator.getDirection(); + table.getTable().setSortDirection(dir); + table.getTable().setSortColumn(col.getColumn()); + table.refresh(); + } + }; + return selectionAdapter; } /** - * create the columns for the table in the VM mainwindow + * Create the columns for the table in the VM main window. + * Comparator has to be set beforehand. * * @param table the tableViewer */ public static void createImageTableColumns(TableViewer table) { - createColumn(table, "Name", 150, new ColumnLabelProvider() { + createColumn(table, "Name", 150, 0, new ColumnLabelProvider() { @Override public String getText(Object element) { ImageSummaryRead image = (ImageSummaryRead) element; @@ -35,12 +59,11 @@ public final class TableHelper { } }); - createColumn(table, "OS", 90, new ColumnLabelProvider() { + createColumn(table, "OS", 90, 1, new ColumnLabelProvider() { @Override public String getText(Object element) { ImageSummaryRead image = (ImageSummaryRead) element; OperatingSystem os = MetaDataCache.getOsById(image.getOsId()); - if (os == null) { return "Unknown"; } else { @@ -49,7 +72,7 @@ public final class TableHelper { } }); - createColumn(table, "Verantwortlicher", 130, new ColumnLabelProvider() { + createColumn(table, "Verantwortlicher", 130, 2, new ColumnLabelProvider() { @Override public String getText(Object element) { ImageSummaryRead image = (ImageSummaryRead) element; @@ -57,15 +80,18 @@ public final class TableHelper { } }); - createColumn(table, "Letztes Update", 110, new ColumnLabelProvider() { + createColumn(table, "Letztes Update", 110, 3, new ColumnLabelProvider() { @Override public String getText(Object element) { ImageSummaryRead image = (ImageSummaryRead) element; - return String.valueOf(image.getUpdateTime()); + Date date = new Date(image.getUpdateTime() * 1000L); + SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy"); + + return String.valueOf(sdf.format(date)); } }); - createColumn(table, "Größe", 80, new ColumnLabelProvider() { + createColumn(table, "Größe", 80, 4, new ColumnLabelProvider() { @Override public String getText(Object element) { ImageSummaryRead image = (ImageSummaryRead) element; diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/ImageListWindow.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/ImageListWindow.java index 9a8de0c4..db1855d5 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/ImageListWindow.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/ImageListWindow.java @@ -4,27 +4,48 @@ import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; -import org.apache.thrift.TException; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.SelectionChangedEvent; 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.openslx.bwlp.thrift.iface.ImagePermissions; import org.openslx.bwlp.thrift.iface.ImageSummaryRead; +import org.openslx.dozmod.gui.helper.ImageListComparator; +import org.openslx.dozmod.gui.helper.ImageListFilter; +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.thrifthelper.ThriftManager; public class ImageListWindow extends ImageListWindowLayout { 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 @@ -61,7 +82,7 @@ public class ImageListWindow extends ImageListWindowLayout { lastUpdateInfo.setText("Unknown"); } else { Date date = new Date(unixTimestamp * 1000L); - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy"); String formattedDate = sdf.format(date); lastUpdateInfo.setText(formattedDate); } @@ -117,6 +138,7 @@ public class ImageListWindow extends ImageListWindowLayout { private boolean refreshList() { List<ImageSummaryRead> imageList = ImageCache.get(false); + tableViewer.setInput(imageList); tableViewer.refresh(); return true; diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/ImageListWindowLayout.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/ImageListWindowLayout.java index 9defdb34..bccbb509 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/ImageListWindowLayout.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/ImageListWindowLayout.java @@ -16,7 +16,7 @@ import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.Text; import org.openslx.dozmod.gui.helper.CompositePage; import org.openslx.dozmod.gui.helper.Gui; -import org.openslx.dozmod.gui.helper.TableHelper; +import org.openslx.dozmod.gui.helper.ImageListFilter; public abstract class ImageListWindowLayout extends CompositePage { @@ -27,12 +27,14 @@ public abstract class ImageListWindowLayout extends CompositePage { protected String downloadButtonLabel = "Download"; protected String tableGroupLabel = "Images"; protected String vmInfoGroupLabel = "Detailinformationen"; + protected String filterGroupLabel = "Filter"; // buttons protected Button newButton; protected Button deleteButton; protected Button editButton; protected Button downloadButton; + // imageDetail texts protected Text imageSelectedNameLabel; @@ -42,8 +44,11 @@ public abstract class ImageListWindowLayout extends CompositePage { protected Text permissionInfo; protected Text ownerInfo; protected Text templateInfo; + + protected final Text searchTextField; protected final TableViewer tableViewer; + protected ImageListFilter filter; protected String infoTextString = "Hier können Sie Virtuelle Maschinen hochladen, herunterladen, bearbeiten und löschen."; @@ -74,6 +79,7 @@ public abstract class ImageListWindowLayout extends CompositePage { infoText.setText(infoTextString); // -- end group of title -- + // -- group for the table -- Group tableGroup = new Group(this, SWT.BORDER); tableGroup.setText(tableGroupLabel); @@ -82,7 +88,22 @@ public abstract class ImageListWindowLayout extends CompositePage { tgLayoutData.widthHint = 800; tableGroup.setLayoutData(tgLayoutData); tableGroup.setLayout(new GridLayout()); - + + // -- group for the filter -- + Group filterGroup = new Group(tableGroup, SWT.BORDER); + filterGroup.setText(filterGroupLabel); + GridData fgGridData = new GridData(SWT.FILL, SWT.TOP, true, false); + fgGridData.minimumWidth = 400; + fgGridData.widthHint = 800; + fgGridData.horizontalSpan = 2; + filterGroup.setLayoutData(fgGridData); + filterGroup.setLayout(new GridLayout()); + + // filter text field + searchTextField = new Text(filterGroup, SWT.BORDER); + searchTextField.setMessage("Name, Verantwortlicher, OS"); + // -- end group of filter -- + // table Table vmTable = new Table(tableGroup, SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL); GridData tableGridData = new GridData(SWT.FILL, SWT.FILL, true, true); @@ -93,7 +114,8 @@ public abstract class ImageListWindowLayout extends CompositePage { // TableViewer on the table tableViewer = new TableViewer(vmTable); tableViewer.setContentProvider(ArrayContentProvider.getInstance()); - TableHelper.createImageTableColumns(tableViewer); + + // create, modify, download and delete buttons Composite buttonComposite = new Composite(tableGroup, SWT.NONE); |
