bug4104: filtering of tags works but is quite buggy

This commit is contained in:
D067890
2018-08-07 10:34:27 +02:00
parent 36a0fabdb9
commit 2ce3bf48d4
4 changed files with 71 additions and 97 deletions
@@ -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<TagDTO> implements TagProvider{
private FilterSet<TagDTO, Filter<TagDTO>> tagsFilterSet;
private List<TagDTO> allTags = new ArrayList<TagDTO>();
public TagListProvider(FilterSet<TagDTO, Filter<TagDTO>> tagsFilterSet) {
this.tagsFilterSet = tagsFilterSet;
private FilterSet<TagDTO, Filter<TagDTO>> currentFilterSet;
public TagListProvider(FilterSet<TagDTO, Filter<TagDTO>> currentFilterSet) {
this.currentFilterSet = currentFilterSet;
}
@Override
public List<TagDTO> getAllTags() {
return getList();
return allTags;
}
@Override
public void addTags(final List<TagDTO> 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<TagDTO> getFilteredTags() {
return getList();
}
@Override
public void updateFilteredTags() {
List<TagDTO> currentFilteredList = new ArrayList<TagDTO>(getAllTags());
if (tagsFilterSet != null) {
for (Filter<TagDTO> filter : tagsFilterSet.getFilters()) {
for (Iterator<TagDTO> i=currentFilteredList.iterator(); i.hasNext(); ) {
TagDTO tagDTO = i.next();
if (!filter.matches(tagDTO)) {
i.remove();
if (currentFilterSet != null) {
for (TagDTO tag : currentFilteredList) {
for (Filter<TagDTO> filter : currentFilterSet.getFilters()) {
if (!filter.matches(tag)) {
currentFilteredList.remove(tag);
break;
}
}
}
}
return currentFilteredList;
setList(currentFilteredList);
}
@Override
public FilterSet<TagDTO, Filter<TagDTO>> getTagsFilterSet() {
return tagsFilterSet;
return currentFilterSet;
}
@Override
public void setTagsFilterSet(FilterSet<TagDTO, Filter<TagDTO>> tagsFilterSet) {
this.tagsFilterSet = tagsFilterSet;
this.currentFilterSet = tagsFilterSet;
}
@Override
public FilterSet<TagDTO, Filter<TagDTO>> 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<TagDTO> implements TagProv
public int getFilteredTagsListSize() {
return Util.size(getFilteredTags());
}
public void addTag(TagDTO tag) {
getAllTags().add(tag);
}
}
@@ -8,35 +8,25 @@ import com.sap.sse.common.filter.FilterSet;
public interface TagProvider {
/**
* @return all tags.
*/
void addTags(List<TagDTO> tags);
void addTag(TagDTO tag);
List<TagDTO> getFilteredTags();
int getFilteredTagsListSize();
void clearAllFilters();
boolean hasActiveFilters();
void setTagsFilterSet(FilterSet<TagDTO, Filter<TagDTO>> tagsFilterSet);
FilterSet<TagDTO, Filter<TagDTO>> getTagsFilterSet();
void updateFilteredTags();
List<TagDTO> getAllTags();
/**
* @return all tags which match current filtering criteria
*/
List<TagDTO> getFilteredTags();
public FilterSet<TagDTO, Filter<TagDTO>> getTagsFilterSet();
public void setTagsFilterSet(FilterSet<TagDTO, Filter<TagDTO>> TagsFilterSet);
FilterSet<TagDTO, Filter<TagDTO>> getOrCreateTagsFilterSet(String nameToAssignToNewFilterSet);
/**
* Returns <code>true</code> 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();
}
@@ -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<TagDTO, FilterWithUI<TagDTO>> 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<TagsFilterSets>() {
@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<TagDTO, FilterWithUI<TagDTO>> tagsFilterSet =
new FilterSet<TagDTO, FilterWithUI<TagDTO>>(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<TagDTO, FilterWithUI<TagDTO>> filterSet : filterSets.getFilterSets()) {
for (Filter<TagDTO> 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<TagDTO, FilterWithUI<TagDTO>> defaultTagFilterSet = new FilterSet<>("Default empty filter");
filterSets.addFilterSet(defaultTagFilterSet);
@@ -223,7 +223,6 @@ public class TaggingPanel extends ComponentWithoutSettings implements TimeListen
// Content (tags)
tagListProvider.addDataDisplay(tagCellList);
tagListProvider.setList(new ArrayList<TagDTO>());
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<TagDTO>() {
tagListProvider.getFilteredTags().sort(new Comparator<TagDTO>() {
@Override
public int compare(TagDTO tag1, TagDTO tag2) {
long time1 = tag1.getRaceTimepoint().asMillis();