Project

General

Profile

Download (8.25 KB) Statistics
| Branch: | Tag: | Revision:
1
// $Id$
2
/**
3
* Copyright (C) 2013 EDIT
4
* European Distributed Institute of Taxonomy
5
* http://www.e-taxonomy.eu
6
*
7
* The contents of this file are subject to the Mozilla Public License Version 1.1
8
* See LICENSE.TXT at the top of this package for the full license terms.
9
*/
10
package eu.etaxonomy.taxeditor.editor.view.derivate.searchFilter;
11

    
12
import java.util.List;
13
import java.util.UUID;
14

    
15
import org.eclipse.swt.SWT;
16
import org.eclipse.swt.layout.GridData;
17
import org.eclipse.swt.widgets.Composite;
18
import org.eclipse.swt.widgets.Event;
19
import org.eclipse.swt.widgets.Listener;
20
import org.eclipse.swt.widgets.Widget;
21

    
22
import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
23
import eu.etaxonomy.cdm.api.service.ITaxonService;
24
import eu.etaxonomy.cdm.api.service.config.FindOccurrencesConfigurator;
25
import eu.etaxonomy.cdm.api.service.config.FindOccurrencesConfigurator.AssignmentStatus;
26
import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
27
import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
28
import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationType;
29
import eu.etaxonomy.cdm.model.taxon.Taxon;
30
import eu.etaxonomy.cdm.model.taxon.TaxonBase;
31
import eu.etaxonomy.taxeditor.editor.view.derivate.DerivateView;
32
import eu.etaxonomy.taxeditor.store.CdmStore;
33
import eu.etaxonomy.taxeditor.store.SearchManager;
34
import eu.etaxonomy.taxeditor.ui.dialog.selection.SelectionDialogFactory;
35
import eu.etaxonomy.taxeditor.ui.mvc.combo.EnumTermComboController;
36
import eu.etaxonomy.taxeditor.view.derivateSearch.DerivateLabelProvider;
37

    
38
/**
39
 * Controller class for the {@link DerivateSearchComposite}.<br>
40
 * This controller contains the logic to search the data base for {@link SpecimenOrObservationBase}s
41
 * and handles GUI events.
42
 *
43
 */
44
public class DerivateSearchCompositeController implements Listener{
45

    
46
    private final DerivateSearchComposite derivateSearchComposite;
47
    private EnumTermComboController<SpecimenOrObservationType> comboSpecimenTypeController;
48
	private DerivateLabelProvider labelProvider;
49
	private Taxon selectedTaxon;
50
    private DerivateView derivativeEditor;
51

    
52
    public DerivateSearchCompositeController(Composite parent, DerivateView derivativeEditor) {
53
        this.derivateSearchComposite = new DerivateSearchComposite(parent, SWT.NONE);
54
        this.derivativeEditor = derivativeEditor;
55
        init();
56
    }
57

    
58
    private void init(){
59
        //derivate type combo
60
        comboSpecimenTypeController = new EnumTermComboController<SpecimenOrObservationType>(derivateSearchComposite.getComboDerivateType(), null, null, SpecimenOrObservationType.class, 0);
61
        comboSpecimenTypeController.setSelection(SpecimenOrObservationType.Unknown);
62

    
63
        //add listeners
64
        derivateSearchComposite.getSearchField().addListener(SWT.KeyDown, this);
65
        derivateSearchComposite.getButtonSearch().addListener(SWT.Selection, this);
66
        derivateSearchComposite.getBtnBrowseTaxa().addListener(SWT.Selection, this);
67
        derivateSearchComposite.getBtnClearTaxon().addListener(SWT.Selection, this);
68

    
69
    }
70

    
71
    private void searchDerivates(){
72
        String queryString = derivateSearchComposite.getSearchField().getText();
73
        SpecimenOrObservationType specimenType = comboSpecimenTypeController.getSelection();
74

    
75
        FindOccurrencesConfigurator config = new FindOccurrencesConfigurator();
76
        config.setAssociatedTaxonUuid(selectedTaxon!=null?selectedTaxon.getUuid():null);
77
        config.setSpecimenType(specimenType.equals(SpecimenOrObservationType.Unknown)?null:specimenType);//unknown := all types
78
        config.setTitleSearchString(queryString);
79
        if(selectedTaxon!=null){
80
            config.setSpecimenType(null);
81
        }
82
        switch (derivateSearchComposite.getComboTaxonAssignment().getSelectionIndex()) {
83
        case DerivateSearchComposite.ALL_SPECIMENS:
84
            config.setAssignmentStatus(AssignmentStatus.ALL_SPECIMENS);
85
            break;
86
        case DerivateSearchComposite.ASSIGNED_SPECIMENS:
87
            config.setAssignmentStatus(AssignmentStatus.ASSIGNED_SPECIMENS);
88
            break;
89
        case DerivateSearchComposite.UNASSIGNED_SPECIMENS:
90
            config.setAssignmentStatus(AssignmentStatus.UNASSIGNED_SPECIMENS);
91
            break;
92
        default:
93
            break;
94
        }
95

    
96
        SearchManager searchManager = new SearchManager();
97
        List<SpecimenOrObservationBase> occurrences = searchManager.findOccurrences(config, true);
98
        derivativeEditor.updateRootEntities(occurrences);
99
    }
100

    
101
    @Override
102
    public void handleEvent(Event event) {
103
        Widget eventSource = event.widget;
104
        if(eventSource == derivateSearchComposite.getButtonSearch()
105
                || (eventSource == derivateSearchComposite.getSearchField() && event.keyCode == SWT.CR)){
106
            searchDerivates();
107
        }
108
        else if(eventSource==derivateSearchComposite.getBtnBrowseTaxa()){
109
            selectedTaxon = SelectionDialogFactory.getSelectionFromDialog(Taxon.class, this.derivateSearchComposite.getShell(), derivativeEditor.getConversationHolder(), null);
110
            if(selectedTaxon!=null){
111
                derivateSearchComposite.getTextTaxonName().setText(selectedTaxon.getTitleCache());
112
            }
113
            derivateSearchComposite.getComboTaxonAssignment().select(DerivateSearchComposite.ASSIGNED_SPECIMENS);
114
            derivateSearchComposite.getComboTaxonAssignment().setEnabled(false);
115
            derivateSearchComposite.getLbltaxonAssignment().setEnabled(false);
116
        }
117
        else if(eventSource==derivateSearchComposite.getBtnClearTaxon()){
118
            selectedTaxon = null;
119
            derivateSearchComposite.getTextTaxonName().setText("");
120
            derivateSearchComposite.getComboTaxonAssignment().select(DerivateSearchComposite.ALL_SPECIMENS);
121
            derivateSearchComposite.getComboTaxonAssignment().setEnabled(true);
122
            derivateSearchComposite.getLbltaxonAssignment().setEnabled(true);
123
        }
124
    }
125

    
126
    /**
127
     * Sets enable status of all input fields
128
     * @param enabled
129
     */
130
    public void setEnabled(boolean enabled) {
131
        if(!derivateSearchComposite.isDisposed()){
132
            GridData layoutData = (GridData) derivateSearchComposite.getLayoutData();
133
            layoutData.exclude = !enabled;
134
            derivateSearchComposite.setVisible(enabled);
135
            derivateSearchComposite.getParent().layout(true);
136
        }
137
    }
138

    
139
    public void setLayoutData(Object layoutData){
140
        derivateSearchComposite.setLayoutData(layoutData);
141
    }
142

    
143
    /**
144
     * Checks whether or not the search criteria are set to their default value.<br>
145
     * This does not consider the title search field.
146
     * @return <code>true</code> if search criteria are set to default.
147
     */
148
    public boolean isDefaultSearch(){
149
        boolean isDefault = true;
150
        isDefault &= comboSpecimenTypeController.getSelection()==SpecimenOrObservationType.Unknown;
151
        isDefault &= derivateSearchComposite.getComboTaxonAssignment().getSelectionIndex()==DerivateSearchComposite.ALL_SPECIMENS;
152
        isDefault &= selectedTaxon==null;
153
        return isDefault;
154
    }
155
    /**
156
     * Resets all input fields
157
     */
158
    public void reset(){
159
        if(!derivateSearchComposite.isDisposed()){
160
            derivateSearchComposite.getSearchField().setText("");
161
            derivateSearchComposite.getComboDerivateType().deselectAll();
162
            comboSpecimenTypeController.setSelection(SpecimenOrObservationType.Unknown);
163
        }
164
        selectedTaxon = null;
165
    }
166

    
167
    public void setConversation(ConversationHolder conversationHolder) {
168
        labelProvider.setConversation(conversationHolder);
169
    }
170

    
171
    public void setTaxonFilter(UUID taxonUuid) {
172
        TaxonBase taxonBase = CdmStore.getService(ITaxonService.class).load(taxonUuid);
173
        if(taxonBase!=null && taxonBase.isInstanceOf(Taxon.class)){
174
            selectedTaxon = HibernateProxyHelper.deproxy(taxonBase, Taxon.class);
175
            derivateSearchComposite.getTextTaxonName().setText(taxonBase.getTitleCache());
176
            derivateSearchComposite.getLbltaxonAssignment().setEnabled(false);
177
            derivateSearchComposite.getComboTaxonAssignment().select(DerivateSearchComposite.ASSIGNED_SPECIMENS);
178
            derivateSearchComposite.getComboTaxonAssignment().setEnabled(false);
179
        }
180
    }
181
    
182
    public void setFocusOnSearchField(){
183
    	derivateSearchComposite.getSearchField().setFocus();
184
    }
185

    
186
}
(2-2/2)