Revision 3dd178b8
Added by Patrick Plitzner about 4 years ago
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/search/term/Facet.java | ||
---|---|---|
1 |
/** |
|
2 |
* Copyright (C) 2019 EDIT |
|
3 |
* European Distributed Institute of Taxonomy |
|
4 |
* http://www.e-taxonomy.eu |
|
5 |
* |
|
6 |
* The contents of this file are subject to the Mozilla Public License Version 1.1 |
|
7 |
* See LICENSE.TXT at the top of this package for the full license terms. |
|
8 |
*/ |
|
9 |
package eu.etaxonomy.taxeditor.view.search.term; |
|
10 |
|
|
11 |
/** |
|
12 |
* @author pplitzner |
|
13 |
* @since Jan 24, 2019 |
|
14 |
* |
|
15 |
*/ |
|
16 |
public class Facet { |
|
17 |
|
|
18 |
private String category; |
|
19 |
private String facet; |
|
20 |
|
|
21 |
public Facet(String facet) { |
|
22 |
this(facet, null); |
|
23 |
} |
|
24 |
|
|
25 |
public Facet(String facet, String category) { |
|
26 |
this.category = category; |
|
27 |
this.facet = facet; |
|
28 |
} |
|
29 |
|
|
30 |
public String getCategory() { |
|
31 |
return category; |
|
32 |
} |
|
33 |
|
|
34 |
public String getFacet() { |
|
35 |
return facet; |
|
36 |
} |
|
37 |
|
|
38 |
@Override |
|
39 |
public int hashCode() { |
|
40 |
final int prime = 31; |
|
41 |
int result = 1; |
|
42 |
result = prime * result + ((category == null) ? 0 : category.hashCode()); |
|
43 |
result = prime * result + ((facet == null) ? 0 : facet.hashCode()); |
|
44 |
return result; |
|
45 |
} |
|
46 |
|
|
47 |
@Override |
|
48 |
public boolean equals(Object obj) { |
|
49 |
if (this == obj) { |
|
50 |
return true; |
|
51 |
} |
|
52 |
if (obj == null) { |
|
53 |
return false; |
|
54 |
} |
|
55 |
if (getClass() != obj.getClass()) { |
|
56 |
return false; |
|
57 |
} |
|
58 |
Facet other = (Facet) obj; |
|
59 |
if (category == null) { |
|
60 |
if (other.category != null) { |
|
61 |
return false; |
|
62 |
} |
|
63 |
} else if (!category.equals(other.category)) { |
|
64 |
return false; |
|
65 |
} |
|
66 |
if (facet == null) { |
|
67 |
if (other.facet != null) { |
|
68 |
return false; |
|
69 |
} |
|
70 |
} else if (!facet.equals(other.facet)) { |
|
71 |
return false; |
|
72 |
} |
|
73 |
return true; |
|
74 |
} |
|
75 |
|
|
76 |
} |
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/search/term/FilterComposite.java | ||
---|---|---|
24 | 24 |
*/ |
25 | 25 |
public class FilterComposite extends Composite{ |
26 | 26 |
private Button btnCheck; |
27 |
private String facet;
|
|
27 |
private Facet facet;
|
|
28 | 28 |
|
29 |
public FilterComposite(String facet, TermSearchController controller, Composite parent, int style) {
|
|
29 |
public FilterComposite(Facet facet, TermSearchController controller, Composite parent, int style) {
|
|
30 | 30 |
super(parent, style); |
31 | 31 |
this.facet = facet; |
32 | 32 |
GridDataFactory.fillDefaults().applyTo(this); |
33 | 33 |
setLayout(new GridLayout(2, false)); |
34 | 34 |
|
35 |
Composite content = new Composite(this, SWT.NONE); |
|
36 |
GridDataFactory.fillDefaults().applyTo(content); |
|
37 |
content.setLayout(new GridLayout()); |
|
38 |
|
|
39 |
Label label = new Label(content, SWT.NONE); |
|
40 |
label.setText(facet); |
|
41 |
GridDataFactory.fillDefaults().applyTo(label); |
|
42 |
|
|
43 | 35 |
btnCheck = new Button(this, SWT.CHECK); |
44 | 36 |
btnCheck.addSelectionListener(new SelectionAdapter() { |
45 | 37 |
@Override |
... | ... | |
47 | 39 |
controller.applyFilter(FilterComposite.this); |
48 | 40 |
} |
49 | 41 |
}); |
42 |
|
|
43 |
Composite content = new Composite(this, SWT.NONE); |
|
44 |
GridDataFactory.fillDefaults().applyTo(content); |
|
45 |
content.setLayout(new GridLayout()); |
|
46 |
|
|
47 |
Label label = new Label(content, SWT.NONE); |
|
48 |
label.setText(facet.getFacet()); |
|
49 |
GridDataFactory.fillDefaults().applyTo(label); |
|
50 |
|
|
50 | 51 |
} |
51 | 52 |
|
52 |
public Button getBtnCheck() {
|
|
53 |
return btnCheck; |
|
53 |
public boolean isFilterActive() {
|
|
54 |
return btnCheck.getSelection();
|
|
54 | 55 |
} |
55 | 56 |
|
56 |
public String getFacet() {
|
|
57 |
public Facet getFacet() {
|
|
57 | 58 |
return facet; |
58 | 59 |
} |
59 | 60 |
|
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/search/term/SearchResult.java | ||
---|---|---|
18 | 18 |
*/ |
19 | 19 |
public class SearchResult { |
20 | 20 |
|
21 |
private Set<String> facets = new HashSet<>();
|
|
21 |
private Set<Facet> facets = new HashSet<>();
|
|
22 | 22 |
private Object content; |
23 | 23 |
|
24 | 24 |
public SearchResult(Object content) { |
... | ... | |
28 | 28 |
} |
29 | 29 |
|
30 | 30 |
private void initFacets(Object content){ |
31 |
facets.add(content.toString().substring(0, 3));
|
|
31 |
facets.add(new Facet(content.toString()));
|
|
32 | 32 |
} |
33 | 33 |
|
34 |
public boolean hasFacet(String facet){
|
|
34 |
public boolean hasFacet(Facet facet){
|
|
35 | 35 |
return facets.contains(facet); |
36 | 36 |
} |
37 | 37 |
|
38 |
public boolean hasAnyFacet(Set<Facet> facets){ |
|
39 |
return facets.stream().anyMatch(facet->this.facets.contains(facet)); |
|
40 |
} |
|
41 |
|
|
38 | 42 |
public Object getContent() { |
39 | 43 |
return content; |
40 | 44 |
} |
41 | 45 |
|
42 |
public Set<String> getFacets() {
|
|
46 |
public Set<Facet> getFacets() {
|
|
43 | 47 |
return facets; |
44 | 48 |
} |
45 | 49 |
|
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/search/term/TermSearchComposite.java | ||
---|---|---|
39 | 39 |
|
40 | 40 |
Composite filterComposite = new Composite(this, SWT.NONE); |
41 | 41 |
filterComposite.setLayout(new GridLayout(1, false)); |
42 |
filterComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false, 1, 1)); |
|
42 |
GridData gd_filterComposite = new GridData(SWT.FILL, SWT.FILL, false, false, 1, 1); |
|
43 |
gd_filterComposite.widthHint = 134; |
|
44 |
filterComposite.setLayoutData(gd_filterComposite); |
|
43 | 45 |
|
44 | 46 |
txtSearch = new Text(filterComposite, SWT.BORDER); |
45 | 47 |
txtSearch.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1)); |
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/search/term/TermSearchController.java | ||
---|---|---|
25 | 25 |
public class TermSearchController implements KeyListener{ |
26 | 26 |
|
27 | 27 |
private TermSearchComposite composite; |
28 |
private List<SearchResult> searchResults = new ArrayList<>(); |
|
29 |
private Set<Facet> appliedFacets = new HashSet<>(); |
|
28 | 30 |
|
29 | 31 |
public TermSearchController(TermSearchComposite composite) { |
30 | 32 |
this.composite = composite; |
... | ... | |
32 | 34 |
} |
33 | 35 |
|
34 | 36 |
private void search(String searchString){ |
35 |
List<SearchResult> results = new ArrayList<>(); |
|
36 |
results.add(new SearchResult("Res2")); |
|
37 |
results.add(new SearchResult("Res3")); |
|
38 |
results.add(new SearchResult("Cas2")); |
|
37 |
searchResults.clear(); |
|
39 | 38 |
|
40 |
Set<String> facets = createResultsAndFilters(results); |
|
39 |
searchResults.add(new SearchResult("Refffffffffffffffffffffffffffffffffffffffffffffffs2")); |
|
40 |
searchResults.add(new SearchResult("Res3")); |
|
41 |
searchResults.add(new SearchResult("Cas2")); |
|
42 |
|
|
43 |
Set<Facet> facets = createResults(searchResults); |
|
41 | 44 |
|
42 | 45 |
createFilterButtons(facets); |
43 | 46 |
|
44 | 47 |
composite.refresh(); |
45 | 48 |
} |
46 | 49 |
|
47 |
private void createFilterButtons(Set<String> facets) {
|
|
48 |
for (String facet : facets) {
|
|
50 |
private void createFilterButtons(Set<Facet> facets) {
|
|
51 |
for (Facet facet : facets) {
|
|
49 | 52 |
FilterComposite filterComposite = new FilterComposite(facet, this, composite.getFilterListComposite(), SWT.NONE); |
50 | 53 |
} |
51 | 54 |
} |
52 | 55 |
|
53 |
private Set<String> createResultsAndFilters(List<SearchResult> results) {
|
|
54 |
Set<String> facets = new HashSet<>();
|
|
56 |
private Set<Facet> createResults(List<SearchResult> results) {
|
|
57 |
Set<Facet> facets = new HashSet<>();
|
|
55 | 58 |
for (SearchResult result : results) { |
56 | 59 |
createResultComposite(result); |
57 | 60 |
facets.addAll(result.getFacets()); |
... | ... | |
79 | 82 |
|
80 | 83 |
composite.clearResults(); |
81 | 84 |
|
82 |
List<SearchResult> results = new ArrayList<>(); |
|
83 |
results.add(new SearchResult("Des2")); |
|
84 |
results.add(new SearchResult("PPs3")); |
|
85 |
results.add(new SearchResult("PPs2")); |
|
85 |
Facet facet = filterComposite.getFacet(); |
|
86 |
if(filterComposite.isFilterActive()){ |
|
87 |
appliedFacets.add(facet); |
|
88 |
} |
|
89 |
else{ |
|
90 |
appliedFacets.remove(facet); |
|
91 |
} |
|
86 | 92 |
|
87 |
createResultsAndFilters(results); |
|
93 |
for (SearchResult searchResult : searchResults) { |
|
94 |
if(!searchResult.hasAnyFacet(appliedFacets)){ |
|
95 |
createResultComposite(searchResult); |
|
96 |
} |
|
97 |
} |
|
88 | 98 |
|
89 | 99 |
composite.refresh(); |
90 | 100 |
} |
Also available in: Unified diff
ref #8011 Implement filter by facets