*/
package eu.etaxonomy.taxeditor.view.derivateSearch;
+import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedHashMap;
import java.util.List;
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;
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();
}
}
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) {
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);
}
}
}
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);
}
public void reset(){
derivateSearchComposite.getResultViewer().setInput(null);
derivateSearchComposite.getSearchField().setText("");
+ enumTermComboController.setSelection(SpecimenOrObservationType.Unknown);
derivateSearchComposite.getComboDerivateType().deselectAll();
}
derivateSearchComposite.getResultViewer().getControl().setFocus();
}
+ /**
+ * @param conversationHolder
+ */
+ public void setConversation(ConversationHolder conversationHolder) {
+ labelProvider.setConversation(conversationHolder);
+ }
+
}