Project

General

Profile

« Previous | Next » 

Revision 3dd178b8

Added by Patrick Plitzner over 5 years ago

ref #8011 Implement filter by facets

View differences:

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