summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJonathan Bauer2015-07-13 18:28:40 +0200
committerJonathan Bauer2015-07-13 18:28:40 +0200
commit58cc5931e1947ced9fcf290f0fdd3419868cd7b7 (patch)
tree444696cff36b1347b04813b686d6424f223c7e29
parent[client] first steps with uploadWizwardStates [WIP] (diff)
parent[client] Added filter and column sorting for the imageList. (diff)
downloadtutor-module-58cc5931e1947ced9fcf290f0fdd3419868cd7b7.tar.gz
tutor-module-58cc5931e1947ced9fcf290f0fdd3419868cd7b7.tar.xz
tutor-module-58cc5931e1947ced9fcf290f0fdd3419868cd7b7.zip
Merge branch 'v1.1' of git.openslx.org:openslx-ng/tutor-module into v1.1
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/helper/ImageListComparator.java85
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/helper/ImageListFilter.java46
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/helper/TableHelper.java44
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/ImageListWindow.java30
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/ImageListWindowLayout.java28
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);