merge from trunk
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / view / derivateSearch / DerivateSearchCompositeController.java
index 877391038a6e8db6335d812d9f2b538ded29fa63..ea5a9ccf9a9f664a6b38a62d4ef9fb3cea53ef0b 100644 (file)
@@ -9,6 +9,7 @@
 */
 package eu.etaxonomy.taxeditor.view.derivateSearch;
 
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.LinkedHashMap;
 import java.util.List;
@@ -28,12 +29,15 @@ import org.eclipse.swt.widgets.Listener;
 import org.eclipse.swt.widgets.Widget;
 import org.eclipse.ui.handlers.IHandlerService;
 
+import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
 import eu.etaxonomy.cdm.api.facade.DerivedUnitFacadeCacheStrategy;
+import eu.etaxonomy.cdm.api.service.IOccurrenceService;
 import eu.etaxonomy.cdm.api.service.config.IIdentifiableEntityServiceConfigurator;
 import eu.etaxonomy.cdm.api.service.config.IdentifiableServiceConfiguratorImpl;
 import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
 import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationType;
 import eu.etaxonomy.taxeditor.model.AbstractUtility;
+import eu.etaxonomy.taxeditor.model.MessagingUtils;
 import eu.etaxonomy.taxeditor.store.CdmStore;
 import eu.etaxonomy.taxeditor.ui.mvc.combo.EnumTermComboController;
 
@@ -48,12 +52,15 @@ public class DerivateSearchCompositeController implements Listener{
     private final DerivateSearchComposite derivateSearchComposite;
     private IIdentifiableEntityServiceConfigurator<SpecimenOrObservationBase<DerivedUnitFacadeCacheStrategy>> configurator;
     private EnumTermComboController<SpecimenOrObservationType> enumTermComboController;
-
+    private final DerivateSearchView derivateSearchView;
+       private DerivateLabelProvider labelProvider;
     /**
      * @param parent
+     * @param derivateSearchView
      */
-    public DerivateSearchCompositeController(Composite parent) {
+    public DerivateSearchCompositeController(Composite parent, DerivateSearchView derivateSearchView) {
         this.derivateSearchComposite = new DerivateSearchComposite(parent, SWT.NONE);
+        this.derivateSearchView = derivateSearchView;
         init();
     }
 
@@ -67,13 +74,15 @@ public class DerivateSearchCompositeController implements Listener{
         }
 
         enumTermComboController = new EnumTermComboController<SpecimenOrObservationType>(derivateSearchComposite.getComboDerivateType(), null, null, SpecimenOrObservationType.class, 0);
+        enumTermComboController.setSelection(SpecimenOrObservationType.Unknown);
 
         derivateSearchComposite.getSearchField().addListener(SWT.KeyDown, this);
         derivateSearchComposite.getButtonSearch().addListener(SWT.Selection, this);
 
         TableViewer resultViewer = derivateSearchComposite.getResultViewer();
         resultViewer.setContentProvider(new ArrayContentProvider());
-        resultViewer.setLabelProvider(new DerivateLabelProvider());
+        labelProvider = new DerivateLabelProvider();
+        resultViewer.setLabelProvider(labelProvider);
         resultViewer.addDoubleClickListener(new IDoubleClickListener() {
             @Override
             public void doubleClick(DoubleClickEvent event) {
@@ -83,13 +92,13 @@ public class DerivateSearchCompositeController implements Listener{
                 try {
                     handlerService.executeCommand(commandId, null);
                 } catch (ExecutionException e) {
-                    AbstractUtility.error(DerivateSearchCompositeController.class, e);
+                    MessagingUtils.error(DerivateSearchCompositeController.class, e);
                 } catch (NotDefinedException e) {
-                    AbstractUtility.error(DerivateSearchCompositeController.class, e);
+                    MessagingUtils.error(DerivateSearchCompositeController.class, e);
                 } catch (NotEnabledException e) {
-                    AbstractUtility.error(DerivateSearchCompositeController.class, e);
+                    MessagingUtils.error(DerivateSearchCompositeController.class, e);
                 } catch (NotHandledException e) {
-                    AbstractUtility.error(DerivateSearchCompositeController.class, e);
+                    MessagingUtils.error(DerivateSearchCompositeController.class, e);
                 }
 
             }
@@ -99,9 +108,24 @@ public class DerivateSearchCompositeController implements Listener{
     }
 
     private void searchDerivates(){
+        if(!derivateSearchView.getConversationHolder().isBound()){
+            derivateSearchView.setFocus(); //rebind the conversation
+        }
+
         configurator.setTitleSearchString(derivateSearchComposite.getSearchField().getText());
         SpecimenOrObservationType type = enumTermComboController.getSelection();
+        //filter by specimen type
         List<SpecimenOrObservationBase> results = CdmStore.getSearchManager().findOccurrencesByType(configurator, type);
+        //filter out assigned specimens
+        if(derivateSearchComposite.getBtnFilterUndeterminedSpecimen().getSelection()){
+            List<SpecimenOrObservationBase> specimensWithNoDetermination = new ArrayList<SpecimenOrObservationBase>();
+            for(SpecimenOrObservationBase<?> result:results){
+                if(CdmStore.getService(IOccurrenceService.class).countDeterminations(result, null)==0){
+                    specimensWithNoDetermination.add(result);
+                }
+            }
+            results = specimensWithNoDetermination;
+        }
         derivateSearchComposite.getResultViewer().setInput(results);
     }
 
@@ -133,6 +157,7 @@ public class DerivateSearchCompositeController implements Listener{
     public void reset(){
         derivateSearchComposite.getResultViewer().setInput(null);
         derivateSearchComposite.getSearchField().setText("");
+        enumTermComboController.setSelection(SpecimenOrObservationType.Unknown);
         derivateSearchComposite.getComboDerivateType().deselectAll();
     }
 
@@ -144,4 +169,11 @@ public class DerivateSearchCompositeController implements Listener{
         derivateSearchComposite.getResultViewer().getControl().setFocus();
     }
 
+    /**
+     * @param conversationHolder
+     */
+    public void setConversation(ConversationHolder conversationHolder) {
+        labelProvider.setConversation(conversationHolder);
+    }
+
 }