mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-24 21:13:50 +00:00
Extended AbstractFilterablePanel to be able to add Filter instances and
removed that part from CustomizableFilterablePanel
This commit is contained in:
1 parent
d622f1e350
commit
9612f71832
3 files changed
+33
-68
No files matched your search
+11
-15
@@ -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);
|
||||
|
||||
+21
-19
@@ -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
-34
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user