adapt to cdmlib changes
[taxeditor.git] / eu.etaxonomy.taxeditor.editor / src / main / java / eu / etaxonomy / taxeditor / editor / view / derivate / searchFilter / DerivateSearchCompositeController.java
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.derivateSearch.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 }