merge from trunk
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / view / derivateSearch / 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.view.derivateSearch;
11
12 import java.util.Arrays;
13 import java.util.LinkedHashMap;
14 import java.util.List;
15
16 import org.eclipse.core.commands.ExecutionException;
17 import org.eclipse.core.commands.NotEnabledException;
18 import org.eclipse.core.commands.NotHandledException;
19 import org.eclipse.core.commands.common.NotDefinedException;
20 import org.eclipse.jface.viewers.ArrayContentProvider;
21 import org.eclipse.jface.viewers.DoubleClickEvent;
22 import org.eclipse.jface.viewers.IDoubleClickListener;
23 import org.eclipse.jface.viewers.TableViewer;
24 import org.eclipse.swt.SWT;
25 import org.eclipse.swt.events.KeyAdapter;
26 import org.eclipse.swt.events.KeyEvent;
27 import org.eclipse.swt.widgets.Composite;
28 import org.eclipse.ui.handlers.IHandlerService;
29
30 import eu.etaxonomy.cdm.api.facade.DerivedUnitFacadeCacheStrategy;
31 import eu.etaxonomy.cdm.api.service.config.IIdentifiableEntityServiceConfigurator;
32 import eu.etaxonomy.cdm.api.service.config.IdentifiableServiceConfiguratorImpl;
33 import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
34 import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationType;
35 import eu.etaxonomy.taxeditor.model.AbstractUtility;
36 import eu.etaxonomy.taxeditor.store.CdmStore;
37 import eu.etaxonomy.taxeditor.ui.mvc.combo.EnumTermComboController;
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 {
46
47 private final DerivateSearchComposite derivateSearchComposite;
48 private IIdentifiableEntityServiceConfigurator<SpecimenOrObservationBase<DerivedUnitFacadeCacheStrategy>> configurator;
49 private EnumTermComboController<SpecimenOrObservationType> enumTermComboController;
50
51 /**
52 * @param parent
53 */
54 public DerivateSearchCompositeController(Composite parent) {
55 this.derivateSearchComposite = new DerivateSearchComposite(parent, SWT.NONE);
56 init();
57 }
58
59 private void init(){
60 LinkedHashMap<SpecimenOrObservationType, String> orderedTerms = AbstractUtility.orderTerms(Arrays.asList(SpecimenOrObservationType.values()));
61 String[] comboItems = new String[orderedTerms.size()];
62 int count = 0;
63 for(String termMessage:orderedTerms.values()){
64 comboItems[count] = termMessage;
65 count++;
66 }
67
68 // derivateSearchComposite.getComboDerivateType().setItems(comboItems);
69 enumTermComboController = new EnumTermComboController<SpecimenOrObservationType>(derivateSearchComposite.getComboDerivateType(), null, null, SpecimenOrObservationType.class, 0);
70
71 derivateSearchComposite.getSearchField().addKeyListener(new KeyAdapter() {
72 /*
73 * (non-Javadoc)
74 * @see org.eclipse.swt.events.KeyAdapter#keyPressed(org.eclipse.swt.events.KeyEvent)
75 */
76 @Override
77 public void keyPressed(KeyEvent e) {
78 if (e.keyCode == SWT.CR) {
79 String searchString = derivateSearchComposite.getSearchField().getText();
80 searchDerivates(searchString);
81 }
82 }
83 });
84
85 TableViewer resultViewer = derivateSearchComposite.getResultViewer();
86 resultViewer.setContentProvider(new ArrayContentProvider());
87 resultViewer.setLabelProvider(new DerivateLabelProvider());
88 resultViewer.addDoubleClickListener(new IDoubleClickListener() {
89 @Override
90 public void doubleClick(DoubleClickEvent event) {
91 String commandId = "eu.etaxonomy.taxeditor.editor.handler.openDerivateView";
92
93 IHandlerService handlerService = (IHandlerService) AbstractUtility.getService(IHandlerService.class);
94 try {
95 handlerService.executeCommand(commandId, null);
96 } catch (ExecutionException e) {
97 AbstractUtility.error(DerivateSearchCompositeController.class, e);
98 } catch (NotDefinedException e) {
99 AbstractUtility.error(DerivateSearchCompositeController.class, e);
100 } catch (NotEnabledException e) {
101 AbstractUtility.error(DerivateSearchCompositeController.class, e);
102 } catch (NotHandledException e) {
103 AbstractUtility.error(DerivateSearchCompositeController.class, e);
104 }
105
106 }
107 });
108 configurator = new IdentifiableServiceConfiguratorImpl<SpecimenOrObservationBase<DerivedUnitFacadeCacheStrategy>>();
109
110 }
111
112 private void searchDerivates(String searchString){
113 configurator.setTitleSearchString(searchString);
114 List<SpecimenOrObservationBase> results = CdmStore.getSearchManager().findOccurrences(configurator, true);
115 derivateSearchComposite.getResultViewer().setInput(results);
116 }
117
118
119 /**
120 * @return the derivateSearchComposite
121 */
122 public DerivateSearchComposite getDerivateSearchComposite() {
123 return derivateSearchComposite;
124 }
125
126 private void setEnable(boolean enabled){
127 derivateSearchComposite.setEnabled(enabled);
128 derivateSearchComposite.getResultViewer().getTable().setEnabled(enabled);
129 derivateSearchComposite.getSearchField().setEnabled(enabled);
130 }
131
132 }