Extended AbstractFilterablePanel to be able to add Filter instances and

removed that part from CustomizableFilterablePanel
This commit is contained in:
Steffen Schaefer committed 2016-10-26 09:31:04 +02:00
1 parent d622f1e350
commit 9612f71832
3 files changed
+33 -68

No files matched your search

@@ -41,7 +41,7 @@ import com.sap.sailing.gwt.ui.common.client.DateAndTimeFormatterUtil;
import com.sap.sailing.gwt.ui.shared.DeviceMappingDTO;
import com.sap.sailing.gwt.ui.shared.MarkDTO;
import com.sap.sailing.gwt.ui.shared.TypedDeviceMappingDTO;
import com.sap.sse.common.filter.AbstractKeywordFilter;
import com.sap.sse.common.filter.Filter;
import com.sap.sse.gwt.client.ErrorReporter;
import com.sap.sse.gwt.client.dialog.DataEntryDialog;
import com.sap.sse.gwt.client.panels.LabeledAbstractFilterablePanel;
@@ -179,23 +179,19 @@ public class RegattaLogTrackingDeviceMappingsDialog extends DataEntryDialog<Void
string.add(t.deviceIdentifier.deviceId);
return string;
}
};
filterField.addFilter(new Filter<DeviceMappingDTO>() {
@Override
public boolean matches(DeviceMappingDTO dm) {
return showPingMappingsCb.getValue() || !"PING".equals(dm.deviceIdentifier.deviceType);
}
@Override
protected AbstractKeywordFilter<DeviceMappingDTO> getFilterer() {
final AbstractKeywordFilter<DeviceMappingDTO> baseFilterer = super.getFilterer();
return new AbstractKeywordFilter<DeviceMappingDTO>() {
@Override
public Iterable<String> getStrings(DeviceMappingDTO t) {
return baseFilterer.getStrings(t);
}
@Override
public boolean matches(DeviceMappingDTO dm) {
return super.matches(dm) && showPingMappingsCb.getValue() || !"PING".equals(dm.deviceIdentifier.deviceType);
}
};
public String getName() {
return "ShowPingMappingsFilter";
}
};
});
deviceMappingTable.registerSelectionModelOnNewDataProvider(filterField.getAllListDataProvider());
final VerticalPanel vp = new VerticalPanel();
deviceMappingPanel.add(vp);
@@ -2,7 +2,9 @@ package com.sap.sse.gwt.client.panels;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import com.google.gwt.event.dom.client.KeyUpEvent;
import com.google.gwt.event.dom.client.KeyUpHandler;
@@ -46,6 +48,8 @@ public abstract class AbstractFilterablePanel<T> extends HorizontalPanel {
protected AbstractCellTable<T> display;
protected final ListDataProvider<T> filtered;
protected final TextBox textBox;
private final Set<Filter<T>> filters = new HashSet<>();
protected final AbstractKeywordFilter<T> filterer = new AbstractKeywordFilter<T>() {
@Override
@@ -68,6 +72,8 @@ public abstract class AbstractFilterablePanel<T> extends HorizontalPanel {
*/
public AbstractFilterablePanel(Iterable<T> all, AbstractCellTable<T> display, final ListDataProvider<T> filtered,
boolean drawTextBox) {
filters.add(filterer);
setSpacing(5);
this.all = new ListDataProvider<>();
this.display = display;
@@ -93,6 +99,10 @@ public abstract class AbstractFilterablePanel<T> extends HorizontalPanel {
}
}
}
public void addFilter(Filter<T> filterToAdd) {
filters.add(filterToAdd);
}
/**
* Subclasses must implement this to extract the strings from an object of type <code>T</code> based on which the
@@ -174,13 +184,22 @@ public abstract class AbstractFilterablePanel<T> extends HorizontalPanel {
protected void retainElementsInFilteredThatPassFilter() {
List<T> filteredElements = new ArrayList<>();
for (T t : all.getList()) {
if (getFilter().matches(t)) {
if (matches(t)) {
filteredElements.add(t);
}
}
Util.addAll(filteredElements, filtered.getList());
}
private boolean matches(T t) {
for(Filter<T> filter : filters) {
if(!filter.matches(t)) {
return false;
}
}
return true;
}
protected void sort() {
if (display != null) {
ColumnSortEvent.fire(display, display.getColumnSortList());
@@ -192,7 +211,7 @@ public abstract class AbstractFilterablePanel<T> extends HorizontalPanel {
getTextBox().addKeyUpHandler(new KeyUpHandler() {
@Override
public void onKeyUp(KeyUpEvent event) {
getFilterer().setKeywords(Arrays.asList(getTextBox().getText().split(" ")));
filterer.setKeywords(Arrays.asList(getTextBox().getText().split(" ")));
filter();
}
});
@@ -250,21 +269,4 @@ public abstract class AbstractFilterablePanel<T> extends HorizontalPanel {
public void setTable(AbstractCellTable<T> table) {
display = table;
}
/**
* @return the AbstractKeywordFilter to use for keyword-based filtering
*/
protected AbstractKeywordFilter<T> getFilterer() {
return filterer;
}
/**
* Returns the {@link Filter} to be used for filtering the result list. By default, this is just the keyword filter
* returned by {@link #getFilterer()}.
*
* May be overwritten by subclasses to e.g. define a composite filter or completely exchange the filter.
*/
protected Filter<T> getFilter() {
return getFilterer();
}
}
@@ -1,8 +1,5 @@
package com.sap.sse.gwt.client.panels;
import java.util.HashSet;
import java.util.Set;
import com.google.gwt.user.cellview.client.AbstractCellTable;
import com.google.gwt.user.client.ui.HasVerticalAlignment;
import com.google.gwt.user.client.ui.Label;
@@ -20,44 +17,14 @@ import com.sap.sse.common.filter.Filter;
*/
public abstract class CustomizableFilterablePanel<T> extends AbstractFilterablePanel<T> {
private final Set<Filter<T>> filters;
private final Filter<T> compositeFilter = new CompositeFilter();
public CustomizableFilterablePanel(Iterable<T> all, AbstractCellTable<T> display, ListDataProvider<T> filtered) {
super(all, display, filtered, /* show default filter text box */ false);
this.filters = new HashSet<>();
}
public void add(Label label, Widget widget, Filter<T> filter) {
add(label);
add(widget);
filters.add(filter);
addFilter(filter);
setCellVerticalAlignment(label, HasVerticalAlignment.ALIGN_MIDDLE);
}
@Override
protected Filter<T> getFilter() {
return compositeFilter;
}
public boolean matches(T t) {
boolean matches = super.getFilter().matches(t);
for (final Filter<T> filter : filters) {
matches &= filter.matches(t);
}
return matches;
}
private class CompositeFilter implements Filter<T> {
@Override
public boolean matches(T object) {
return CustomizableFilterablePanel.this.matches(object);
}
@Override
public String getName() {
return getClass().getSimpleName();
}
}
}