Project

General

Profile

Download (8.89 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
* Copyright (C) 2013 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.editor.view.derivate.searchFilter;
10

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

    
14
import org.eclipse.core.runtime.NullProgressMonitor;
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.hibernate.HibernateProxyHelper;
26
import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
27
import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationType;
28
import eu.etaxonomy.cdm.model.taxon.Taxon;
29
import eu.etaxonomy.cdm.model.taxon.TaxonBase;
30
import eu.etaxonomy.cdm.persistence.query.AssignmentStatus;
31
import eu.etaxonomy.taxeditor.editor.view.derivate.DerivateView;
32
import eu.etaxonomy.taxeditor.model.MessagingUtils;
33
import eu.etaxonomy.taxeditor.store.CdmStore;
34
import eu.etaxonomy.taxeditor.store.SearchManager;
35
import eu.etaxonomy.taxeditor.ui.dialog.selection.SelectionDialogFactory;
36
import eu.etaxonomy.taxeditor.ui.mvc.combo.EnumTermComboController;
37
import eu.etaxonomy.taxeditor.view.search.derivative.DerivateLabelProvider;
38

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

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

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

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

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

    
70
    }
71

    
72
    private void searchDerivates(){
73
        if(derivativeEditor.isDirty()){
74
            boolean confirm = MessagingUtils.confirmDialog("Unsaved changes", "You have to save before performing this action. Save now?");
75
            if(confirm){
76
                derivativeEditor.save(new NullProgressMonitor());
77
            }
78
            else{
79
                return;
80
            }
81
        }
82
        String queryString = derivateSearchComposite.getSearchField().getText();
83
        SpecimenOrObservationType specimenType = comboSpecimenTypeController.getSelection();
84

    
85
        FindOccurrencesConfigurator config = new FindOccurrencesConfigurator();
86
        config.setAssociatedTaxonUuid(selectedTaxon!=null?selectedTaxon.getUuid():null);
87
        config.setSpecimenType(specimenType.equals(SpecimenOrObservationType.Unknown)?null:specimenType);//unknown := all types
88
        config.setTitleSearchString(queryString);
89
        if(selectedTaxon!=null){
90
            config.setSpecimenType(null);
91
        }
92
        switch (derivateSearchComposite.getComboTaxonAssignment().getSelectionIndex()) {
93
        case DerivateSearchComposite.ALL_SPECIMENS:
94
            config.setAssignmentStatus(AssignmentStatus.ALL_SPECIMENS);
95
            break;
96
        case DerivateSearchComposite.ASSIGNED_SPECIMENS:
97
            config.setAssignmentStatus(AssignmentStatus.ASSIGNED_SPECIMENS);
98
            break;
99
        case DerivateSearchComposite.UNASSIGNED_SPECIMENS:
100
            config.setAssignmentStatus(AssignmentStatus.UNASSIGNED_SPECIMENS);
101
            break;
102
        default:
103
            break;
104
        }
105
        if(derivativeEditor.getCdmEntitySession()!=null){
106
            derivativeEditor.getCdmEntitySession().dispose();
107
            derivativeEditor.getCdmEntitySession().bind();
108
        }
109

    
110
        SearchManager searchManager = new SearchManager();
111
        List<SpecimenOrObservationBase> occurrences = searchManager.findOccurrences(config, true);
112
        derivativeEditor.updateRootEntities(occurrences);
113
    }
114

    
115
    @Override
116
    public void handleEvent(Event event) {
117
        Widget eventSource = event.widget;
118
        if(eventSource == derivateSearchComposite.getButtonSearch()
119
                || (eventSource == derivateSearchComposite.getSearchField() && event.keyCode == SWT.CR)){
120
            searchDerivates();
121
        }
122
        else if(eventSource==derivateSearchComposite.getBtnBrowseTaxa()){
123
            selectedTaxon = SelectionDialogFactory.getSelectionFromDialog(Taxon.class, this.derivateSearchComposite.getShell(), //derivativeEditor.getConversationHolder(),
124
                    null);
125
            if(selectedTaxon!=null){
126
                derivateSearchComposite.getTextTaxonName().setText(selectedTaxon.getTitleCache());
127
            }
128
            derivateSearchComposite.getComboTaxonAssignment().select(DerivateSearchComposite.ASSIGNED_SPECIMENS);
129
            derivateSearchComposite.getComboTaxonAssignment().setEnabled(false);
130
            derivateSearchComposite.getLbltaxonAssignment().setEnabled(false);
131
        }
132
        else if(eventSource==derivateSearchComposite.getBtnClearTaxon()){
133
            selectedTaxon = null;
134
            derivateSearchComposite.getTextTaxonName().setText(""); //$NON-NLS-1$
135
            derivateSearchComposite.getComboTaxonAssignment().select(DerivateSearchComposite.ALL_SPECIMENS);
136
            derivateSearchComposite.getComboTaxonAssignment().setEnabled(true);
137
            derivateSearchComposite.getLbltaxonAssignment().setEnabled(true);
138
        }
139
    }
140

    
141
    /**
142
     * Sets enable status of all input fields
143
     * @param enabled
144
     */
145
    public void setEnabled(boolean enabled) {
146
        if(!derivateSearchComposite.isDisposed()){
147
            GridData layoutData = (GridData) derivateSearchComposite.getLayoutData();
148
            layoutData.exclude = !enabled;
149
            derivateSearchComposite.setVisible(enabled);
150
            derivateSearchComposite.getParent().layout(true);
151
        }
152
    }
153

    
154
    public void setLayoutData(Object layoutData){
155
        derivateSearchComposite.setLayoutData(layoutData);
156
    }
157

    
158
    /**
159
     * Checks whether or not the search criteria are set to their default value.<br>
160
     * This does not consider the title search field.
161
     * @return <code>true</code> if search criteria are set to default.
162
     */
163
    public boolean isDefaultSearch(){
164
        boolean isDefault = true;
165
        isDefault &= comboSpecimenTypeController.getSelection()==SpecimenOrObservationType.Unknown;
166
        isDefault &= derivateSearchComposite.getComboTaxonAssignment().getSelectionIndex()==DerivateSearchComposite.ALL_SPECIMENS;
167
        isDefault &= selectedTaxon==null;
168
        return isDefault;
169
    }
170
    /**
171
     * Resets all input fields
172
     */
173
    public void reset(){
174
        if(!derivateSearchComposite.isDisposed()){
175
            derivateSearchComposite.getSearchField().setText(""); //$NON-NLS-1$
176
            derivateSearchComposite.getComboDerivateType().deselectAll();
177
            comboSpecimenTypeController.setSelection(SpecimenOrObservationType.Unknown);
178
        }
179
        selectedTaxon = null;
180
    }
181

    
182
    public void setConversation(ConversationHolder conversationHolder) {
183
        labelProvider.setConversation(conversationHolder);
184
    }
185

    
186
    public void setTaxonFilter(UUID taxonUuid) {
187
        TaxonBase taxonBase = CdmStore.getService(ITaxonService.class).load(taxonUuid);
188
        if(taxonBase!=null && taxonBase.isInstanceOf(Taxon.class)){
189
            selectedTaxon = HibernateProxyHelper.deproxy(taxonBase, Taxon.class);
190
            derivateSearchComposite.getTextTaxonName().setText(taxonBase.getTitleCache());
191
            derivateSearchComposite.getLbltaxonAssignment().setEnabled(false);
192
            derivateSearchComposite.getComboTaxonAssignment().select(DerivateSearchComposite.ASSIGNED_SPECIMENS);
193
            derivateSearchComposite.getComboTaxonAssignment().setEnabled(false);
194
        }
195
    }
196

    
197
    public void setFocusOnSearchField(){
198
    	derivateSearchComposite.getSearchField().setFocus();
199
    }
200

    
201
}
(2-2/2)