minor
[taxeditor.git] / eu.etaxonomy.taxeditor.editor / src / main / java / eu / etaxonomy / taxeditor / editor / view / derivate / searchFilter / DerivateSearchCompositeController.java
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
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;
20
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;
32
33 /**
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.
37 *
38 */
39 public class DerivateSearchCompositeController implements Listener{
40
41 private final DerivateSearchComposite derivateSearchComposite;
42 private EnumTermComboController<SpecimenOrObservationType> comboSpecimenTypeController;
43 private DerivateLabelProvider labelProvider;
44 private Taxon selectedTaxon;
45 private DerivateView derivativeEditor;
46
47 public DerivateSearchCompositeController(Composite parent, DerivateView derivativeEditor) {
48 this.derivateSearchComposite = new DerivateSearchComposite(parent, SWT.NONE);
49 this.derivativeEditor = derivativeEditor;
50 init();
51 }
52
53 private void init(){
54 //derivate type combo
55 comboSpecimenTypeController = new EnumTermComboController<SpecimenOrObservationType>(derivateSearchComposite.getComboDerivateType(), null, null, SpecimenOrObservationType.class, 0);
56 comboSpecimenTypeController.setSelection(SpecimenOrObservationType.Unknown);
57
58 //add listeners
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);
63
64 }
65
66 private void searchDerivates(){
67 String queryString = derivateSearchComposite.getSearchField().getText();
68 SpecimenOrObservationType specimenType = comboSpecimenTypeController.getSelection();
69
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);
76 }
77 switch (derivateSearchComposite.getComboTaxonAssignment().getSelectionIndex()) {
78 case DerivateSearchComposite.ALL_SPECIMENS:
79 config.setAssignmentStatus(AssignmentStatus.ALL_SPECIMENS);
80 break;
81 case DerivateSearchComposite.ASSIGNED_SPECIMENS:
82 config.setAssignmentStatus(AssignmentStatus.ASSIGNED_SPECIMENS);
83 break;
84 case DerivateSearchComposite.UNASSIGNED_SPECIMENS:
85 config.setAssignmentStatus(AssignmentStatus.UNASSIGNED_SPECIMENS);
86 break;
87 default:
88 break;
89 }
90
91 SearchManager searchManager = new SearchManager();
92 List<SpecimenOrObservationBase> occurrences = searchManager.findOccurrences(config, true);
93 derivativeEditor.updateRootEntities(occurrences);
94 }
95
96 @Override
97 public void handleEvent(Event event) {
98 Widget eventSource = event.widget;
99 if(eventSource == derivateSearchComposite.getButtonSearch()
100 || (eventSource == derivateSearchComposite.getSearchField() && event.keyCode == SWT.CR)){
101 searchDerivates();
102 }
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());
107 }
108 derivateSearchComposite.getComboTaxonAssignment().select(DerivateSearchComposite.ASSIGNED_SPECIMENS);
109 derivateSearchComposite.getComboTaxonAssignment().setEnabled(false);
110 derivateSearchComposite.getLbltaxonAssignment().setEnabled(false);
111 }
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);
118 }
119 }
120
121 /**
122 * Sets enable status of all input fields
123 * @param enabled
124 */
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);
131 }
132 }
133
134 public void setLayoutData(Object layoutData){
135 derivateSearchComposite.setLayoutData(layoutData);
136 }
137
138 /**
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.
142 */
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;
148 return isDefault;
149 }
150 /**
151 * Resets all input fields
152 */
153 public void reset(){
154 if(!derivateSearchComposite.isDisposed()){
155 derivateSearchComposite.getSearchField().setText("");
156 derivateSearchComposite.getComboDerivateType().deselectAll();
157 comboSpecimenTypeController.setSelection(SpecimenOrObservationType.Unknown);
158 }
159 selectedTaxon = null;
160 }
161
162 public void setConversation(ConversationHolder conversationHolder) {
163 labelProvider.setConversation(conversationHolder);
164 }
165
166 }