Project

General

Profile

Download (7.89 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.view.derivateSearch;
11

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

    
15
import org.eclipse.core.commands.ExecutionException;
16
import org.eclipse.core.commands.NotEnabledException;
17
import org.eclipse.core.commands.NotHandledException;
18
import org.eclipse.core.commands.common.NotDefinedException;
19
import org.eclipse.jface.viewers.ArrayContentProvider;
20
import org.eclipse.jface.viewers.DoubleClickEvent;
21
import org.eclipse.jface.viewers.IDoubleClickListener;
22
import org.eclipse.jface.viewers.TableViewer;
23
import org.eclipse.swt.SWT;
24
import org.eclipse.swt.widgets.Composite;
25
import org.eclipse.swt.widgets.Event;
26
import org.eclipse.swt.widgets.Listener;
27
import org.eclipse.swt.widgets.Widget;
28
import org.eclipse.ui.handlers.IHandlerService;
29

    
30
import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
31
import eu.etaxonomy.cdm.api.facade.DerivedUnitFacadeCacheStrategy;
32
import eu.etaxonomy.cdm.api.service.IOccurrenceService;
33
import eu.etaxonomy.cdm.api.service.config.IIdentifiableEntityServiceConfigurator;
34
import eu.etaxonomy.cdm.api.service.config.IdentifiableServiceConfiguratorImpl;
35
import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
36
import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationType;
37
import eu.etaxonomy.cdm.model.taxon.Taxon;
38
import eu.etaxonomy.taxeditor.model.AbstractUtility;
39
import eu.etaxonomy.taxeditor.model.MessagingUtils;
40
import eu.etaxonomy.taxeditor.store.CdmStore;
41
import eu.etaxonomy.taxeditor.ui.dialog.selection.SelectionDialogFactory;
42
import eu.etaxonomy.taxeditor.ui.mvc.combo.EnumTermComboController;
43

    
44
/**
45
 * Controller class for the {@link DerivateSearchComposite}.<br>
46
 * This controller contains the logic to search the data base for {@link SpecimenOrObservationBase}s
47
 * and handles GUI events.
48
 *
49
 */
50
public class DerivateSearchCompositeController implements Listener{
51

    
52
    private final DerivateSearchComposite derivateSearchComposite;
53
    private IIdentifiableEntityServiceConfigurator<SpecimenOrObservationBase<DerivedUnitFacadeCacheStrategy>> configurator;
54
    private EnumTermComboController<SpecimenOrObservationType> enumTermComboController;
55
    private final DerivateSearchView derivateSearchView;
56
	private DerivateLabelProvider labelProvider;
57
	private Taxon selectedTaxon;
58

    
59
    /**
60
     * @param parent
61
     * @param derivateSearchView
62
     */
63
    public DerivateSearchCompositeController(Composite parent, DerivateSearchView derivateSearchView) {
64
        this.derivateSearchComposite = new DerivateSearchComposite(parent, SWT.NONE);
65
        this.derivateSearchView = derivateSearchView;
66
        init();
67
    }
68

    
69
    private void init(){
70
        //derivate type combo
71
        enumTermComboController = new EnumTermComboController<SpecimenOrObservationType>(derivateSearchComposite.getComboDerivateType(), null, null, SpecimenOrObservationType.class, 0);
72
        enumTermComboController.setSelection(SpecimenOrObservationType.Unknown);
73

    
74
        //add listeners
75
        derivateSearchComposite.getSearchField().addListener(SWT.KeyDown, this);
76
        derivateSearchComposite.getButtonSearch().addListener(SWT.Selection, this);
77
        derivateSearchComposite.getBtnBrowseTaxa().addListener(SWT.Selection, this);
78

    
79

    
80
        //result table
81
        TableViewer resultViewer = derivateSearchComposite.getResultViewer();
82
        resultViewer.setContentProvider(new ArrayContentProvider());
83
        labelProvider = new DerivateLabelProvider();
84
        resultViewer.setLabelProvider(labelProvider);
85
        resultViewer.addDoubleClickListener(new IDoubleClickListener() {
86
            @Override
87
            public void doubleClick(DoubleClickEvent event) {
88
                String commandId = "eu.etaxonomy.taxeditor.editor.handler.openDerivateView";
89

    
90
                IHandlerService handlerService = (IHandlerService) AbstractUtility.getService(IHandlerService.class);
91
                try {
92
                    handlerService.executeCommand(commandId, null);
93
                } catch (ExecutionException e) {
94
                    MessagingUtils.error(DerivateSearchCompositeController.class, e);
95
                } catch (NotDefinedException e) {
96
                    MessagingUtils.error(DerivateSearchCompositeController.class, e);
97
                } catch (NotEnabledException e) {
98
                    MessagingUtils.error(DerivateSearchCompositeController.class, e);
99
                } catch (NotHandledException e) {
100
                    MessagingUtils.error(DerivateSearchCompositeController.class, e);
101
                }
102

    
103
            }
104
        });
105
        configurator = new IdentifiableServiceConfiguratorImpl<SpecimenOrObservationBase<DerivedUnitFacadeCacheStrategy>>();
106

    
107
    }
108

    
109
    private void searchDerivates(){
110
        if(!derivateSearchView.getConversationHolder().isBound()){
111
            derivateSearchView.setFocus(); //rebind the conversation
112
        }
113

    
114
        configurator.setTitleSearchString(derivateSearchComposite.getSearchField().getText());
115
        SpecimenOrObservationType type = enumTermComboController.getSelection();
116

    
117
        //filter by taxon
118
        //TODO implement findOccurrencesByTaxon()
119

    
120
        //filter by specimen type
121
        List<SpecimenOrObservationBase> results = CdmStore.getSearchManager().findOccurrencesByType(configurator, type);
122

    
123
        //filter out assigned specimens
124
        if(derivateSearchComposite.getBtnFilterUndeterminedSpecimen().getSelection()){
125
            List<SpecimenOrObservationBase> specimensWithNoDetermination = new ArrayList<SpecimenOrObservationBase>();
126
            for(SpecimenOrObservationBase<?> result:results){
127
                if(CdmStore.getService(IOccurrenceService.class).countDeterminations(result, null)==0){
128
                    specimensWithNoDetermination.add(result);
129
                }
130
            }
131
            results = specimensWithNoDetermination;
132
        }
133
        derivateSearchComposite.getResultViewer().setInput(results);
134
    }
135

    
136
    /* (non-Javadoc)
137
     * @see org.eclipse.swt.widgets.Listener#handleEvent(org.eclipse.swt.widgets.Event)
138
     */
139
    @Override
140
    public void handleEvent(Event event) {
141
        Widget eventSource = event.widget;
142
        if(eventSource == derivateSearchComposite.getButtonSearch()
143
                || (eventSource == derivateSearchComposite.getSearchField() && event.keyCode == SWT.CR)){
144
            searchDerivates();
145
        }
146
        else if(eventSource==derivateSearchComposite.getBtnBrowseTaxa()){
147
            selectedTaxon = SelectionDialogFactory.getSelectionFromDialog(Taxon.class, derivateSearchView.getSite().getShell(), derivateSearchView.getConversationHolder(), null);
148
            if(selectedTaxon!=null){
149
                derivateSearchComposite.getTextTaxonName().setText(selectedTaxon.getTitleCache());
150
            }
151
        }
152
    }
153

    
154
    /**
155
     * Sets enable status of all input fields
156
     * @param enabled
157
     */
158
    public void setEnabled(boolean enabled) {
159
        if(!derivateSearchComposite.isDisposed()){
160
            derivateSearchComposite.setEnabled(enabled);
161
        }
162
    }
163

    
164
    /**
165
     * Resets all input fields
166
     */
167
    public void reset(){
168
        derivateSearchComposite.getResultViewer().setInput(null);
169
        derivateSearchComposite.getSearchField().setText("");
170
        enumTermComboController.setSelection(SpecimenOrObservationType.Unknown);
171
        derivateSearchComposite.getComboDerivateType().deselectAll();
172
        selectedTaxon = null;
173
    }
174

    
175
    public TableViewer getResultViewer() {
176
        return derivateSearchComposite.getResultViewer();
177
    }
178

    
179
    public void setFocus() {
180
        derivateSearchComposite.getResultViewer().getControl().setFocus();
181
    }
182

    
183
    /**
184
     * @param conversationHolder
185
     */
186
    public void setConversation(ConversationHolder conversationHolder) {
187
        labelProvider.setConversation(conversationHolder);
188
    }
189

    
190
}
(3-3/4)