mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-09-26 15:36:40 +00:00
bug4104: filtering of tags works but is quite buggy
This commit is contained in:
+41
-29
@@ -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);
|
||||
}
|
||||
}
|
||||
+18
-28
@@ -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();
|
||||
}
|
||||
|
||||
+10
-38
@@ -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);
|
||||
|
||||
+2
-2
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user