summaryrefslogtreecommitdiffstats
path: root/rba.tool.core/src/rba/tool/core/ui/BasicTableViewerColumnFilter.java
diff options
context:
space:
mode:
Diffstat (limited to 'rba.tool.core/src/rba/tool/core/ui/BasicTableViewerColumnFilter.java')
-rw-r--r--rba.tool.core/src/rba/tool/core/ui/BasicTableViewerColumnFilter.java72
1 files changed, 72 insertions, 0 deletions
diff --git a/rba.tool.core/src/rba/tool/core/ui/BasicTableViewerColumnFilter.java b/rba.tool.core/src/rba/tool/core/ui/BasicTableViewerColumnFilter.java
new file mode 100644
index 0000000..4eb07a5
--- /dev/null
+++ b/rba.tool.core/src/rba/tool/core/ui/BasicTableViewerColumnFilter.java
@@ -0,0 +1,72 @@
+package rba.tool.core.ui;
+
+import java.util.regex.Pattern;
+
+import org.apache.commons.lang3.StringUtils;
+import org.eclipse.jface.viewers.ITableLabelProvider;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerFilter;
+
+public class BasicTableViewerColumnFilter extends ViewerFilter {
+
+ private String filterString;
+
+ private final int[] filterColumns;
+
+ public BasicTableViewerColumnFilter(String filterString, int[] filterColumns) {
+ this.filterString = filterString;
+ this.filterColumns = filterColumns;
+ }
+
+ @Override
+ public boolean select(Viewer viewer, Object parentElement, Object element) {
+ if ((null == filterString) || (StringUtils.isEmpty(filterString))) {
+ return true;
+ }
+
+ Pattern pattern = Pattern.compile(createRegexFromGlob(filterString), Pattern.CASE_INSENSITIVE);
+
+ for (int i : this.filterColumns) {
+
+ ITableLabelProvider labelProvider = (ITableLabelProvider) ((TableViewer) viewer).getLabelProvider();
+
+ String cellLabel = labelProvider.getColumnText(element, i);
+
+ if (pattern.matcher(cellLabel).find()) {
+ return true;
+ } else if (cellLabel.toLowerCase().contains(filterString.toLowerCase())) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Create Regular Expression for filter string
+ * @param glob
+ * @return
+ */
+ private String createRegexFromGlob(String glob) {
+ String out = "^";
+ for (int i = 0; i < glob.length(); ++i) {
+ final char c = glob.charAt(i);
+ switch (c) {
+ case '*':
+ out += ".*";
+ break;
+ case '?':
+ out += '.';
+ break;
+ default:
+ out += c;
+ }
+ }
+ out += '$';
+ return out;
+ }
+
+ public void setFilterString(String filterString) {
+ this.filterString = filterString;
+ }
+}