3 * Copyright (C) 2013 EDIT
4 * European Distributed Institute of Taxonomy
5 * http://www.e-taxonomy.eu
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.
10 package eu
.etaxonomy
.taxeditor
.editor
.view
.derivate
.searchFilter
;
12 import java
.util
.List
;
14 import org
.eclipse
.swt
.SWT
;
15 import org
.eclipse
.swt
.layout
.GridData
;
16 import org
.eclipse
.swt
.widgets
.Composite
;
17 import org
.eclipse
.swt
.widgets
.Event
;
18 import org
.eclipse
.swt
.widgets
.Listener
;
19 import org
.eclipse
.swt
.widgets
.Widget
;
21 import eu
.etaxonomy
.cdm
.api
.conversation
.ConversationHolder
;
22 import eu
.etaxonomy
.cdm
.api
.service
.config
.FindOccurrencesConfigurator
;
23 import eu
.etaxonomy
.cdm
.api
.service
.config
.FindOccurrencesConfigurator
.AssignmentStatus
;
24 import eu
.etaxonomy
.cdm
.model
.occurrence
.SpecimenOrObservationBase
;
25 import eu
.etaxonomy
.cdm
.model
.occurrence
.SpecimenOrObservationType
;
26 import eu
.etaxonomy
.cdm
.model
.taxon
.Taxon
;
27 import eu
.etaxonomy
.taxeditor
.editor
.view
.derivate
.DerivateView
;
28 import eu
.etaxonomy
.taxeditor
.store
.SearchManager
;
29 import eu
.etaxonomy
.taxeditor
.ui
.dialog
.selection
.SelectionDialogFactory
;
30 import eu
.etaxonomy
.taxeditor
.ui
.mvc
.combo
.EnumTermComboController
;
31 import eu
.etaxonomy
.taxeditor
.view
.derivateSearch
.DerivateLabelProvider
;
34 * Controller class for the {@link DerivateSearchComposite}.<br>
35 * This controller contains the logic to search the data base for {@link SpecimenOrObservationBase}s
36 * and handles GUI events.
39 public class DerivateSearchCompositeController
implements Listener
{
41 private final DerivateSearchComposite derivateSearchComposite
;
42 private EnumTermComboController
<SpecimenOrObservationType
> comboSpecimenTypeController
;
43 private DerivateLabelProvider labelProvider
;
44 private Taxon selectedTaxon
;
45 private DerivateView derivativeEditor
;
47 public DerivateSearchCompositeController(Composite parent
, DerivateView derivativeEditor
) {
48 this.derivateSearchComposite
= new DerivateSearchComposite(parent
, SWT
.NONE
);
49 this.derivativeEditor
= derivativeEditor
;
55 comboSpecimenTypeController
= new EnumTermComboController
<SpecimenOrObservationType
>(derivateSearchComposite
.getComboDerivateType(), null, null, SpecimenOrObservationType
.class, 0);
56 comboSpecimenTypeController
.setSelection(SpecimenOrObservationType
.Unknown
);
59 derivateSearchComposite
.getSearchField().addListener(SWT
.KeyDown
, this);
60 derivateSearchComposite
.getButtonSearch().addListener(SWT
.Selection
, this);
61 derivateSearchComposite
.getBtnBrowseTaxa().addListener(SWT
.Selection
, this);
62 derivateSearchComposite
.getBtnClearTaxon().addListener(SWT
.Selection
, this);
66 private void searchDerivates(){
67 String queryString
= derivateSearchComposite
.getSearchField().getText();
68 SpecimenOrObservationType specimenType
= comboSpecimenTypeController
.getSelection();
70 FindOccurrencesConfigurator config
= new FindOccurrencesConfigurator();
71 config
.setAssociatedTaxonUuid(selectedTaxon
!=null?selectedTaxon
.getUuid():null);
72 config
.setSpecimenType(specimenType
.equals(SpecimenOrObservationType
.Unknown
)?
null:specimenType
);//unknown := all types
73 config
.setTitleSearchString(queryString
);
74 if(selectedTaxon
!=null){
75 config
.setSpecimenType(null);
77 switch (derivateSearchComposite
.getComboTaxonAssignment().getSelectionIndex()) {
78 case DerivateSearchComposite
.ALL_SPECIMENS
:
79 config
.setAssignmentStatus(AssignmentStatus
.ALL_SPECIMENS
);
81 case DerivateSearchComposite
.ASSIGNED_SPECIMENS
:
82 config
.setAssignmentStatus(AssignmentStatus
.ASSIGNED_SPECIMENS
);
84 case DerivateSearchComposite
.UNASSIGNED_SPECIMENS
:
85 config
.setAssignmentStatus(AssignmentStatus
.UNASSIGNED_SPECIMENS
);
91 SearchManager searchManager
= new SearchManager();
92 List
<SpecimenOrObservationBase
> occurrences
= searchManager
.findOccurrences(config
, true);
93 derivativeEditor
.updateRootEntities(occurrences
);
97 public void handleEvent(Event event
) {
98 Widget eventSource
= event
.widget
;
99 if(eventSource
== derivateSearchComposite
.getButtonSearch()
100 || (eventSource
== derivateSearchComposite
.getSearchField() && event
.keyCode
== SWT
.CR
)){
103 else if(eventSource
==derivateSearchComposite
.getBtnBrowseTaxa()){
104 selectedTaxon
= SelectionDialogFactory
.getSelectionFromDialog(Taxon
.class, this.derivateSearchComposite
.getShell(), derivativeEditor
.getConversationHolder(), null);
105 if(selectedTaxon
!=null){
106 derivateSearchComposite
.getTextTaxonName().setText(selectedTaxon
.getTitleCache());
108 derivateSearchComposite
.getComboTaxonAssignment().select(DerivateSearchComposite
.ASSIGNED_SPECIMENS
);
109 derivateSearchComposite
.getComboTaxonAssignment().setEnabled(false);
110 derivateSearchComposite
.getLbltaxonAssignment().setEnabled(false);
112 else if(eventSource
==derivateSearchComposite
.getBtnClearTaxon()){
113 selectedTaxon
= null;
114 derivateSearchComposite
.getTextTaxonName().setText("");
115 derivateSearchComposite
.getComboTaxonAssignment().select(DerivateSearchComposite
.ALL_SPECIMENS
);
116 derivateSearchComposite
.getComboTaxonAssignment().setEnabled(true);
117 derivateSearchComposite
.getLbltaxonAssignment().setEnabled(true);
122 * Sets enable status of all input fields
125 public void setEnabled(boolean enabled
) {
126 if(!derivateSearchComposite
.isDisposed()){
127 GridData layoutData
= (GridData
) derivateSearchComposite
.getLayoutData();
128 layoutData
.exclude
= !enabled
;
129 derivateSearchComposite
.setVisible(enabled
);
130 derivateSearchComposite
.getParent().layout(true);
134 public void setLayoutData(Object layoutData
){
135 derivateSearchComposite
.setLayoutData(layoutData
);
139 * Checks whether or not the search criteria are set to their default value.<br>
140 * This does not consider the title search field.
141 * @return <code>true</code> if search criteria are set to default.
143 public boolean isDefaultSearch(){
144 boolean isDefault
= true;
145 isDefault
&= comboSpecimenTypeController
.getSelection()==SpecimenOrObservationType
.Unknown
;
146 isDefault
&= derivateSearchComposite
.getComboTaxonAssignment().getSelectionIndex()==DerivateSearchComposite
.ALL_SPECIMENS
;
147 isDefault
&= selectedTaxon
==null;
151 * Resets all input fields
154 if(!derivateSearchComposite
.isDisposed()){
155 derivateSearchComposite
.getSearchField().setText("");
156 derivateSearchComposite
.getComboDerivateType().deselectAll();
157 comboSpecimenTypeController
.setSelection(SpecimenOrObservationType
.Unknown
);
159 selectedTaxon
= null;
162 public void setConversation(ConversationHolder conversationHolder
) {
163 labelProvider
.setConversation(conversationHolder
);