From 2ce3bf48d40bf3ce2f17612cf5d8509beb228494 Mon Sep 17 00:00:00 2001 From: D067890 Date: Tue, 7 Aug 2018 10:34:27 +0200 Subject: [PATCH] bug4104: filtering of tags works but is quite buggy --- .../gwt/ui/client/TagListProvider.java | 70 +++++++++++-------- .../sailing/gwt/ui/client/TagProvider.java | 46 +++++------- .../gwt/ui/raceboard/TagFilterPanel.java | 48 +++---------- .../gwt/ui/raceboard/TaggingPanel.java | 4 +- 4 files changed, 71 insertions(+), 97 deletions(-) diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/TagListProvider.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/TagListProvider.java index 2ee4793a6ec..f1ccc4876fe 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/TagListProvider.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/TagListProvider.java @@ -2,8 +2,8 @@ package com.sap.sailing.gwt.ui.client; import java.util.ArrayList; -import java.util.Iterator; import java.util.List; + import com.google.gwt.view.client.ListDataProvider; import com.sap.sailing.gwt.ui.shared.TagDTO; import com.sap.sse.common.Util; @@ -12,61 +12,77 @@ import com.sap.sse.common.filter.FilterSet; public class TagListProvider extends ListDataProvider implements TagProvider{ - private FilterSet> tagsFilterSet; + private List allTags = new ArrayList(); - - public TagListProvider(FilterSet> tagsFilterSet) { - this.tagsFilterSet = tagsFilterSet; + private FilterSet> currentFilterSet; + + public TagListProvider(FilterSet> currentFilterSet) { + this.currentFilterSet = currentFilterSet; } @Override public List getAllTags() { - return getList(); + return allTags; } - + + @Override + public void addTags(final List tags) { + if(tags != null) { + for(TagDTO tag: tags) { + addTag(tag); + } + } + } + + @Override + public void addTag(final TagDTO tag) { + if(tag != null) { + allTags.add(tag); + } + } + @Override public List getFilteredTags() { + return getList(); + } + + @Override + public void updateFilteredTags() { List currentFilteredList = new ArrayList(getAllTags()); - - if (tagsFilterSet != null) { - for (Filter filter : tagsFilterSet.getFilters()) { - for (Iterator i=currentFilteredList.iterator(); i.hasNext(); ) { - TagDTO tagDTO = i.next(); - if (!filter.matches(tagDTO)) { - i.remove(); + + if (currentFilterSet != null) { + for (TagDTO tag : currentFilteredList) { + for (Filter filter : currentFilterSet.getFilters()) { + if (!filter.matches(tag)) { + currentFilteredList.remove(tag); + break; } } } } - return currentFilteredList; + setList(currentFilteredList); } @Override public FilterSet> getTagsFilterSet() { - return tagsFilterSet; + return currentFilterSet; } @Override public void setTagsFilterSet(FilterSet> tagsFilterSet) { - this.tagsFilterSet = tagsFilterSet; + this.currentFilterSet = tagsFilterSet; } - @Override - public FilterSet> getOrCreateTagsFilterSet(String nameToAssignToNewFilterSet) { - // TODO Auto-generated method stub - return null; - } - @Override public boolean hasActiveFilters() { - return (tagsFilterSet != null && !tagsFilterSet.getFilters().isEmpty() + return (currentFilterSet != null && !currentFilterSet.getFilters().isEmpty() && Util.size(getFilteredTags()) != getAllTags().size()); } @Override public void clearAllFilters() { - tagsFilterSet = null; + currentFilterSet = null; } @@ -74,8 +90,4 @@ public class TagListProvider extends ListDataProvider implements TagProv public int getFilteredTagsListSize() { return Util.size(getFilteredTags()); } - - public void addTag(TagDTO tag) { - getAllTags().add(tag); - } } \ No newline at end of file diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/TagProvider.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/TagProvider.java index 8b1643d3674..e2d9282dc3e 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/TagProvider.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/TagProvider.java @@ -8,35 +8,25 @@ import com.sap.sse.common.filter.FilterSet; public interface TagProvider { - /** - * @return all tags. - */ + void addTags(List tags); + + void addTag(TagDTO tag); + + List getFilteredTags(); + + int getFilteredTagsListSize(); + + void clearAllFilters(); + + boolean hasActiveFilters(); + + void setTagsFilterSet(FilterSet> tagsFilterSet); + + FilterSet> getTagsFilterSet(); + + void updateFilteredTags(); + List getAllTags(); - /** - * @return all tags which match current filtering criteria - */ - List getFilteredTags(); - - - public FilterSet> getTagsFilterSet(); - public void setTagsFilterSet(FilterSet> TagsFilterSet); - - FilterSet> getOrCreateTagsFilterSet(String nameToAssignToNewFilterSet); - - /** - * Returns true if the provider has any filters that will restrain the selection. - */ - public boolean hasActiveFilters(); - - /** - * Removes all filters and notifies listeners about the change. - */ - public void clearAllFilters(); - - /** - * @return the size of all filtered Tags - */ - public int getFilteredTagsListSize(); } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/TagFilterPanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/TagFilterPanel.java index 242750f090d..c59f7d114cd 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/TagFilterPanel.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/TagFilterPanel.java @@ -16,15 +16,12 @@ import com.sap.sailing.gwt.ui.client.StringMessages; import com.sap.sailing.gwt.ui.client.TagListProvider; import com.sap.sailing.gwt.ui.client.shared.filter.FilterUIFactory; import com.sap.sailing.gwt.ui.client.shared.filter.FilterWithUI; -import com.sap.sailing.gwt.ui.client.shared.filter.SelectedTagsFilter; -import com.sap.sailing.gwt.ui.client.shared.filter.TagSelectionProviderFilterContext; import com.sap.sailing.gwt.ui.client.shared.filter.TagsFilterSets; import com.sap.sailing.gwt.ui.client.shared.filter.TagsFilterSetsDialog; import com.sap.sailing.gwt.ui.client.shared.filter.TagsFilterSetsJsonDeSerializer; import com.sap.sailing.gwt.ui.leaderboard.CompetitorFilterResources; import com.sap.sailing.gwt.ui.leaderboard.CompetitorFilterResources.CompetitorFilterCss; import com.sap.sailing.gwt.ui.shared.TagDTO; -import com.sap.sse.common.filter.Filter; import com.sap.sse.common.filter.FilterSet; import com.sap.sse.gwt.client.dialog.DataEntryDialog.DialogCallback; @@ -43,9 +40,9 @@ public class TagFilterPanel extends FlowPanel implements KeyUpHandler, FilterWit private final Button settingsButton; private final Button filterSettingsButton; private final RaceIdentifier selectedRaceIdentifier; + private final TagsFilterSets tagFilterSets; private final FlowPanel searchBoxPanel; private final StringMessages stringMessages; - private final TagsFilterSets tagsFilterSets; private final TagListProvider tagProvider; private FilterSet> lastActiveTagFilterSet; @@ -59,11 +56,10 @@ public class TagFilterPanel extends FlowPanel implements KeyUpHandler, FilterWit TagsFilterSets loadedTagsFilterSets = loadTagsFilterSets(); if (loadedTagsFilterSets != null) { - tagsFilterSets = loadedTagsFilterSets; - insertSelectedTagsFilter(tagsFilterSets); + tagFilterSets = loadedTagsFilterSets; } else { - tagsFilterSets = createAndAddDefaultTagsFilter(); - storeTagsFilterSets(tagsFilterSets); + tagFilterSets = createAndAddDefaultTagsFilter(); + storeTagsFilterSets(tagFilterSets); } @@ -120,16 +116,17 @@ public class TagFilterPanel extends FlowPanel implements KeyUpHandler, FilterWit } private void showEditTagsFiltersDialog() { - TagsFilterSetsDialog tagsFilterSetsDialog = new TagsFilterSetsDialog(tagsFilterSets, + TagsFilterSetsDialog tagsFilterSetsDialog = new TagsFilterSetsDialog(tagFilterSets, stringMessages, new DialogCallback() { @Override public void ok(final TagsFilterSets newTagsFilterSets) { - tagsFilterSets.getFilterSets().clear(); - tagsFilterSets.getFilterSets().addAll(newTagsFilterSets.getFilterSets()); - tagsFilterSets.setActiveFilterSet(newTagsFilterSets.getActiveFilterSet()); + tagFilterSets.getFilterSets().clear(); + tagFilterSets.getFilterSets().addAll(newTagsFilterSets.getFilterSets()); + tagFilterSets.setActiveFilterSet(newTagsFilterSets.getActiveFilterSet()); - updateTagsFilterContexts(newTagsFilterSets); tagProvider.setTagsFilterSet(newTagsFilterSets.getActiveFilterSetWithGeneralizedType()); + tagProvider.updateFilteredTags(); + tagProvider.refresh(); updateTagsFilterControlState(newTagsFilterSets); storeTagsFilterSets(newTagsFilterSets); } @@ -142,29 +139,6 @@ public class TagFilterPanel extends FlowPanel implements KeyUpHandler, FilterWit tagsFilterSetsDialog .show(); } - - private void insertSelectedTagsFilter(TagsFilterSets filterSet) { - // selected tags filter - FilterSet> tagsFilterSet = - new FilterSet>(stringMessages.selectedCompetitors()); - tagsFilterSet.setEditable(false); - - SelectedTagsFilter selectedTagsFilter = new SelectedTagsFilter(); - selectedTagsFilter.setTagSelectionProvider(tagProvider); - tagsFilterSet.addFilter(selectedTagsFilter); - filterSet.addFilterSet(0, tagsFilterSet); - } - - private void updateTagsFilterContexts(TagsFilterSets filterSets) { - for (FilterSet> filterSet : filterSets.getFilterSets()) { - for (Filter filter : filterSet.getFilters()) { - if (filter instanceof TagSelectionProviderFilterContext) { - ((TagSelectionProviderFilterContext) filter) - .setTagSelectionProvider(tagProvider); - } - } - } - } /** * Updates the tags filter checkbox state by setting its check mark and updating its label according to the @@ -228,8 +202,6 @@ public class TagFilterPanel extends FlowPanel implements KeyUpHandler, FilterWit private TagsFilterSets createAndAddDefaultTagsFilter() { TagsFilterSets filterSets = new TagsFilterSets(); - // 1. selected tags filter - insertSelectedTagsFilter(filterSets); FilterSet> defaultTagFilterSet = new FilterSet<>("Default empty filter"); filterSets.addFilterSet(defaultTagFilterSet); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/TaggingPanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/TaggingPanel.java index 66a322b6e2b..813e11e0949 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/TaggingPanel.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/TaggingPanel.java @@ -223,7 +223,6 @@ public class TaggingPanel extends ComponentWithoutSettings implements TimeListen // Content (tags) tagListProvider.addDataDisplay(tagCellList); - tagListProvider.setList(new ArrayList()); tagCellList.setEmptyListWidget(new Label(stringMessages.tagNoTagsFound())); tagCellList.setSelectionModel(tagSelectionModel); @@ -294,8 +293,9 @@ public class TaggingPanel extends ComponentWithoutSettings implements TimeListen } private void updateContent() { + tagListProvider.updateFilteredTags(); tagCellList.setVisibleRange(0, tagListProvider.getFilteredTagsListSize()); - tagListProvider.getAllTags().sort(new Comparator() { + tagListProvider.getFilteredTags().sort(new Comparator() { @Override public int compare(TagDTO tag1, TagDTO tag2) { long time1 = tag1.getRaceTimepoint().asMillis();