2 * Copyright (C) 2013 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
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.
9 package eu
.etaxonomy
.taxeditor
.editor
.view
.derivate
.searchFilter
;
11 import java
.util
.List
;
12 import java
.util
.UUID
;
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
;
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
.derivateSearch
.DerivateLabelProvider
;
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.
45 public class DerivateSearchCompositeController
implements Listener
{
47 private final DerivateSearchComposite derivateSearchComposite
;
48 private EnumTermComboController
<SpecimenOrObservationType
> comboSpecimenTypeController
;
49 private DerivateLabelProvider labelProvider
;
50 private Taxon selectedTaxon
;
51 private DerivateView derivativeEditor
;
53 public DerivateSearchCompositeController(Composite parent
, DerivateView derivativeEditor
) {
54 this.derivateSearchComposite
= new DerivateSearchComposite(parent
, SWT
.NONE
);
55 this.derivativeEditor
= derivativeEditor
;
61 comboSpecimenTypeController
= new EnumTermComboController
<SpecimenOrObservationType
>(derivateSearchComposite
.getComboDerivateType(), null, null, SpecimenOrObservationType
.class, 0);
62 comboSpecimenTypeController
.setSelection(SpecimenOrObservationType
.Unknown
);
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);
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?");
76 derivativeEditor
.save(new NullProgressMonitor());
82 String queryString
= derivateSearchComposite
.getSearchField().getText();
83 SpecimenOrObservationType specimenType
= comboSpecimenTypeController
.getSelection();
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);
92 switch (derivateSearchComposite
.getComboTaxonAssignment().getSelectionIndex()) {
93 case DerivateSearchComposite
.ALL_SPECIMENS
:
94 config
.setAssignmentStatus(AssignmentStatus
.ALL_SPECIMENS
);
96 case DerivateSearchComposite
.ASSIGNED_SPECIMENS
:
97 config
.setAssignmentStatus(AssignmentStatus
.ASSIGNED_SPECIMENS
);
99 case DerivateSearchComposite
.UNASSIGNED_SPECIMENS
:
100 config
.setAssignmentStatus(AssignmentStatus
.UNASSIGNED_SPECIMENS
);
105 if(derivativeEditor
.getCdmEntitySession()!=null){
106 derivativeEditor
.getCdmEntitySession().dispose();
107 derivativeEditor
.getCdmEntitySession().bind();
110 SearchManager searchManager
= new SearchManager();
111 List
<SpecimenOrObservationBase
> occurrences
= searchManager
.findOccurrences(config
, true);
112 derivativeEditor
.updateRootEntities(occurrences
);
116 public void handleEvent(Event event
) {
117 Widget eventSource
= event
.widget
;
118 if(eventSource
== derivateSearchComposite
.getButtonSearch()
119 || (eventSource
== derivateSearchComposite
.getSearchField() && event
.keyCode
== SWT
.CR
)){
122 else if(eventSource
==derivateSearchComposite
.getBtnBrowseTaxa()){
123 selectedTaxon
= SelectionDialogFactory
.getSelectionFromDialog(Taxon
.class, this.derivateSearchComposite
.getShell(), //derivativeEditor.getConversationHolder(),
125 if(selectedTaxon
!=null){
126 derivateSearchComposite
.getTextTaxonName().setText(selectedTaxon
.getTitleCache());
128 derivateSearchComposite
.getComboTaxonAssignment().select(DerivateSearchComposite
.ASSIGNED_SPECIMENS
);
129 derivateSearchComposite
.getComboTaxonAssignment().setEnabled(false);
130 derivateSearchComposite
.getLbltaxonAssignment().setEnabled(false);
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);
142 * Sets enable status of all input fields
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);
154 public void setLayoutData(Object layoutData
){
155 derivateSearchComposite
.setLayoutData(layoutData
);
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.
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;
171 * Resets all input fields
174 if(!derivateSearchComposite
.isDisposed()){
175 derivateSearchComposite
.getSearchField().setText(""); //$NON-NLS-1$
176 derivateSearchComposite
.getComboDerivateType().deselectAll();
177 comboSpecimenTypeController
.setSelection(SpecimenOrObservationType
.Unknown
);
179 selectedTaxon
= null;
182 public void setConversation(ConversationHolder conversationHolder
) {
183 labelProvider
.setConversation(conversationHolder
);
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);
197 public void setFocusOnSearchField(){
198 derivateSearchComposite
.getSearchField().setFocus();