From f8651f499bb17257d4cc5379e2bdd9d082c513bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mikko=20Niemel=C3=A4?= Date: Tue, 29 Aug 2017 15:11:12 +0300 Subject: [PATCH 1/3] Fixes github issue #125 - 'visibleComponents' is not set by Table constructor --- .../org/tepi/filtertable/FilterTable.java | 21 ++++++++++++++++--- .../org/tepi/filtertable/FilterTreeTable.java | 21 ++++++++++++++++--- 2 files changed, 36 insertions(+), 6 deletions(-) diff --git a/filteringtable-addon/src/main/java/org/tepi/filtertable/FilterTable.java b/filteringtable-addon/src/main/java/org/tepi/filtertable/FilterTable.java index a7d7924..27748cb 100644 --- a/filteringtable-addon/src/main/java/org/tepi/filtertable/FilterTable.java +++ b/filteringtable-addon/src/main/java/org/tepi/filtertable/FilterTable.java @@ -75,9 +75,9 @@ public FilterTable(String caption) { java.lang.reflect.Field field = com.vaadin.v7.ui.Table.class.getDeclaredField("columnIdMap"); field.setAccessible(true); _columnIdMap = (KeyMapper) field.get(this); - field = com.vaadin.v7.ui.Table.class.getDeclaredField("visibleComponents"); - field.setAccessible(true); - _visibleComponents = (HashSet) field.get(this); + //field = Table.class.getDeclaredField("visibleComponents"); // In Table constructor "visibleComponents" is always null ! + //field.setAccessible(true); + //_visibleComponents = (HashSet) field.get(this); } catch (Exception exception) { throw new IllegalArgumentException("Unable to get columnIdMap or visibleComponents", exception); } @@ -85,6 +85,21 @@ public FilterTable(String caption) { initDone = true; } + @Override + protected void refreshRenderedCells() { + super.refreshRenderedCells(); + + // NOTE: 'visibleComponents' HashSet is (re)created by method getVisibleCellsNoCache(...) + // But only when method refreshRenderedCells() calls it. + try { + java.lang.reflect.Field field = com.vaadin.v7.ui.Table.class.getDeclaredField("visibleComponents"); + field.setAccessible(true); + _visibleComponents = (HashSet) field.get(this); + } catch (Exception exception) { + throw new IllegalArgumentException("Unable to get visibleComponents", exception); + } + } + @Override public void paintContent(PaintTarget target) throws PaintException { super.paintContent(target); diff --git a/filteringtable-addon/src/main/java/org/tepi/filtertable/FilterTreeTable.java b/filteringtable-addon/src/main/java/org/tepi/filtertable/FilterTreeTable.java index 6e95392..4e2c12c 100644 --- a/filteringtable-addon/src/main/java/org/tepi/filtertable/FilterTreeTable.java +++ b/filteringtable-addon/src/main/java/org/tepi/filtertable/FilterTreeTable.java @@ -79,9 +79,9 @@ public FilterTreeTable(String caption) { java.lang.reflect.Field field = com.vaadin.v7.ui.Table.class.getDeclaredField("columnIdMap"); field.setAccessible(true); _columnIdMap = (KeyMapper) field.get(this); - field = com.vaadin.v7.ui.Table.class.getDeclaredField("visibleComponents"); - field.setAccessible(true); - _visibleComponents = (HashSet) field.get(this); + //field = Table.class.getDeclaredField("visibleComponents"); // In Table constructor "visibleComponents" is always null ! + //field.setAccessible(true); + //_visibleComponents = (HashSet) field.get(this); } catch (Exception exception) { throw new IllegalArgumentException("Unable to get columnIdMap or visibleComponents", exception); } @@ -89,6 +89,21 @@ public FilterTreeTable(String caption) { initDone = true; } + @Override + protected void refreshRenderedCells() { + super.refreshRenderedCells(); + + // NOTE: 'visibleComponents' HashSet is (re)created by method getVisibleCellsNoCache(...) + // But only when method refreshRenderedCells() calls it. + try { + java.lang.reflect.Field field = com.vaadin.v7.ui.Table.class.getDeclaredField("visibleComponents"); + field.setAccessible(true); + _visibleComponents = (HashSet) field.get(this); + } catch (Exception exception) { + throw new IllegalArgumentException("Unable to get visibleComponents", exception); + } + } + @Override public void paintContent(PaintTarget target) throws PaintException { super.paintContent(target); From f226240aebc11aa28e62f5463512701f1df58f41 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mikko=20Niemel=C3=A4?= Date: Tue, 29 Aug 2017 15:32:17 +0300 Subject: [PATCH 2/3] Fixes github issue #125 - Filter components will break, if filter bar is not visible during table initialization. - Still getting connector errors in client side console --- .../src/main/java/org/tepi/filtertable/FilterTable.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/filteringtable-addon/src/main/java/org/tepi/filtertable/FilterTable.java b/filteringtable-addon/src/main/java/org/tepi/filtertable/FilterTable.java index 27748cb..09e2db1 100644 --- a/filteringtable-addon/src/main/java/org/tepi/filtertable/FilterTable.java +++ b/filteringtable-addon/src/main/java/org/tepi/filtertable/FilterTable.java @@ -378,7 +378,7 @@ public void setVisibleColumns(Object... visibleColumns) { /* Set this as parent to visible columns */ for (Object key : visibleColumns) { Component filter = columnIdToFilterMap.get(key); - if (filter != null) { + if (filter != null && isFilterBarVisible()) { filter.setParent(this); } } From 7684c9b7fadc645a8a7b201b926e445ab7ca4cd8 Mon Sep 17 00:00:00 2001 From: Juha Pyy Date: Mon, 25 Sep 2017 17:45:32 +0300 Subject: [PATCH 3/3] Removed totally unnecessary semicolon. --- .../src/main/java/org/tepi/filtertable/FilterFieldGenerator.java | 1 - 1 file changed, 1 deletion(-) diff --git a/filteringtable-addon/src/main/java/org/tepi/filtertable/FilterFieldGenerator.java b/filteringtable-addon/src/main/java/org/tepi/filtertable/FilterFieldGenerator.java index 191e071..ebc7619 100644 --- a/filteringtable-addon/src/main/java/org/tepi/filtertable/FilterFieldGenerator.java +++ b/filteringtable-addon/src/main/java/org/tepi/filtertable/FilterFieldGenerator.java @@ -260,7 +260,6 @@ private Filter generateNumberFilter(Property field, Object propertyId, Object String gtValue = interval.getGreaterThanValue(); String eqValue = interval.getEqualsValue(); Class typeClass = owner.getContainerDataSource().getType(propertyId); - ; if (!eqValue.isEmpty()) { return new Compare.Equal(propertyId, parseNumberValue(typeClass, eqValue));