-// $Id$
/**
* Copyright (C) 2014 EDIT
* European Distributed Institute of Taxonomy
*/
package eu.etaxonomy.taxeditor.ui.section.occurrence.association;
+import java.util.ArrayList;
import java.util.Collection;
+import java.util.Set;
-import org.eclipse.core.commands.ExecutionException;
-import org.eclipse.core.commands.NotEnabledException;
-import org.eclipse.core.commands.NotHandledException;
-import org.eclipse.core.commands.common.NotDefinedException;
-import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IDoubleClickListener;
-import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.StyledText;
+import org.eclipse.swt.dnd.Clipboard;
+import org.eclipse.swt.dnd.TextTransfer;
+import org.eclipse.swt.dnd.Transfer;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.widgets.Label;
-import org.eclipse.ui.handlers.IHandlerService;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.MenuItem;
+import org.eclipse.ui.forms.widgets.TableWrapLayout;
-import eu.etaxonomy.cdm.api.facade.DerivedUnitFacade;
import eu.etaxonomy.cdm.api.service.IOccurrenceService;
+import eu.etaxonomy.cdm.facade.DerivedUnitFacade;
+import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
+import eu.etaxonomy.cdm.model.common.CdmBase;
+import eu.etaxonomy.cdm.model.name.SpecimenTypeDesignation;
+import eu.etaxonomy.cdm.model.name.TaxonName;
+import eu.etaxonomy.cdm.model.occurrence.DeterminationEvent;
import eu.etaxonomy.cdm.model.taxon.TaxonBase;
-import eu.etaxonomy.taxeditor.model.AbstractUtility;
+import eu.etaxonomy.taxeditor.model.MessagingUtils;
import eu.etaxonomy.taxeditor.store.CdmStore;
import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
import eu.etaxonomy.taxeditor.ui.element.LayoutConstants;
import eu.etaxonomy.taxeditor.ui.section.AbstractCdmDetailElement;
+import eu.etaxonomy.taxeditor.view.CdmViewerChooser;
/**
* @author pplitzner
* @date Dec 1, 2014
- *
*/
public class TaxonAssociationDetailElement extends AbstractCdmDetailElement<DerivedUnitFacade> implements IDoubleClickListener{
-
public TaxonAssociationDetailElement(CdmFormFactory formFactory, ICdmFormElement formElement) {
super(formFactory, formElement);
}
- /** {@inheritDoc} */
@Override
protected void createControls(ICdmFormElement formElement, DerivedUnitFacade entity, int style) {
+ boolean includeUnpublished = true;
+ Collection<TaxonBase<?>> associatedTaxa = CdmStore.getService(IOccurrenceService.class).listIndividualsAssociationTaxa(entity.innerDerivedUnit(), includeUnpublished, null, null, null, null);
+ Collection<SpecimenTypeDesignation> typeDesignations = CdmStore.getService(IOccurrenceService.class).listTypeDesignations(entity.innerDerivedUnit(), null, null, null, null);
+ Collection<DeterminationEvent> determinationEvents = CdmStore.getService(IOccurrenceService.class).listDeterminationEvents(entity.innerDerivedUnit(), null, null, null, null);
+
+ Collection<CdmBase> associations = new ArrayList<>();
+ associations.addAll(associatedTaxa);
+ associations.addAll(typeDesignations);
+ associations.addAll(determinationEvents);
+
+ TableWrapLayout layout = (TableWrapLayout) getLayoutComposite().getLayout();
+ layout.bottomMargin = 0;
+ layout.topMargin = 0;
+
+ if(associatedTaxa.isEmpty() && typeDesignations.isEmpty() && determinationEvents.isEmpty()){
+ Label label = formFactory.createLabel(getLayoutComposite(), "No associations");
+ label.setLayoutData(LayoutConstants.FILL_HORIZONTALLY(2, 1));
+ return;
+ }
+ for (CdmBase cdmBase : associations) {
+ final StyledText styledTextWidget = new StyledText(getLayoutComposite(), SWT.WRAP);
+ styledTextWidget.setLayoutData(LayoutConstants.FILL_HORIZONTALLY(2, 1));
+ styledTextWidget.setText(getLabelText(cdmBase));
+ styledTextWidget.setBackground(getLayoutComposite().getBackground());
+ styledTextWidget.setEditable(false);
+ //Set caret null this will hide caret
+ styledTextWidget.setCaret(null);
+
+ //TODO add context menu for deleting associations
+ //context menu
+ Menu menu = new Menu(styledTextWidget);
+ //copy menu
+ MenuItem copyItem = new MenuItem(menu, SWT.PUSH);
+ copyItem.setText("Copy");
+ copyItem.addSelectionListener(new SelectionListener() {
+
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ Object[] data = new Object[]{styledTextWidget.getText()};
+ Clipboard clipboard = new Clipboard(styledTextWidget.getDisplay());
+ clipboard.setContents(data, new Transfer[]{TextTransfer.getInstance()});
+ }
+ @Override
+ public void widgetDefaultSelected(SelectionEvent e) {
+ }
+ });
+ //"Open in..." menu
+ MenuItem openInItem = new MenuItem(menu, SWT.PUSH);
+ openInItem.setText("Open");
+ if(cdmBase.isInstanceOf(SpecimenTypeDesignation.class)){
+ openInItem.setData(HibernateProxyHelper.deproxy(cdmBase, SpecimenTypeDesignation.class));
+ }
+ openInItem.setData(cdmBase);
+ openInItem.addSelectionListener(new SelectionListener() {
+
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ new CdmViewerChooser(TaxonAssociationDetailElement.this.getLayoutComposite().getShell()).chooseViewer(e.widget.getData());
+ }
+ @Override
+ public void widgetDefaultSelected(SelectionEvent e) {
+ }
+ });
+ styledTextWidget.setMenu(menu);
+ }
+ }
- Label associationsLabel = formFactory.createLabel(getLayoutComposite(), "Individuals Associations");
- associationsLabel.setLayoutData(LayoutConstants.FILL_HORIZONTALLY(2, 1));
-
- TableViewer associationsViewer = new TableViewer(getLayoutComposite(), SWT.FULL_SELECTION);
- associationsViewer.getTable().setLayoutData(LayoutConstants.FILL_HORIZONTALLY(2, 1));
- associationsViewer.setContentProvider(new ArrayContentProvider());
- Collection<TaxonBase<?>> associatedTaxa = CdmStore.getService(IOccurrenceService.class).listAssociatedTaxa(entity.innerDerivedUnit(), null, null, null, null);
- associationsViewer.setInput(associatedTaxa);
- associationsViewer.addDoubleClickListener(this);
-
- Label typeLabel = formFactory.createLabel(getLayoutComposite(), "Type Designations");
- typeLabel.setLayoutData(LayoutConstants.FILL_HORIZONTALLY(2, 1));
-
- TableViewer typeDesignationViewer = new TableViewer(getLayoutComposite(), SWT.FULL_SELECTION);
- typeDesignationViewer.getTable().setLayoutData(LayoutConstants.FILL_HORIZONTALLY(2, 1));
- typeDesignationViewer.setContentProvider(new ArrayContentProvider());
- Collection<TaxonBase<?>> typedTaxa = CdmStore.getService(IOccurrenceService.class).listTypedTaxa(entity.innerDerivedUnit(), null, null, null, null);
- typeDesignationViewer.setInput(typedTaxa);
- typeDesignationViewer.addDoubleClickListener(this);
+ private String getLabelText(Object element) {
+ if(element instanceof TaxonBase){
+ return "Associated with "+element.toString();
+ }
+ else if(element instanceof DeterminationEvent){
+ DeterminationEvent determinationEvent = (DeterminationEvent)element;
+ if(determinationEvent.getTaxon()!=null){
+ return "Determined as taxon "+determinationEvent.getTaxon();
+ }
+ if(determinationEvent.getTaxonName()!=null){
+ return "Determined as name "+determinationEvent.getTaxonName();
+ }
+ }
+ else if(element instanceof SpecimenTypeDesignation){
+ SpecimenTypeDesignation typeDesignation = (SpecimenTypeDesignation)element;
+ String label = typeDesignation.getTypeStatus()!=null?typeDesignation.getTypeStatus().getLabel()+" of ":"Type of ";
+ Set<TaxonName> typifiedNames = typeDesignation.getTypifiedNames();
+ for (TaxonName taxonNameBase : typifiedNames) {
+ label += taxonNameBase+", ";
+ }
+ if(label.endsWith(", ")){
+ label = label.substring(0, label.length()-2);
+ }
+ return label;
+ }
+ return "";
}
/** {@inheritDoc} */
@Override
public void handleEvent(Object eventSource) {
-
+ //empty
}
- /* (non-Javadoc)
- * @see org.eclipse.jface.viewers.IDoubleClickListener#doubleClick(org.eclipse.jface.viewers.DoubleClickEvent)
- */
@Override
public void doubleClick(DoubleClickEvent event) {
- String commandId = "eu.etaxonomy.taxeditor.navigation.command.update.editSelection";
-
- IHandlerService handlerService = (IHandlerService) AbstractUtility.getService(IHandlerService.class);
- try {
- handlerService.executeCommand(commandId, null);
- } catch (ExecutionException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (NotDefinedException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (NotEnabledException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (NotHandledException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
+ if(event.getSelection() instanceof IStructuredSelection){
+ Object firstElement = ((IStructuredSelection) event.getSelection()).getFirstElement();
+ if(firstElement instanceof SpecimenTypeDesignation){
+ SpecimenTypeDesignation typeDesignation = (SpecimenTypeDesignation)firstElement;
+ Set<TaxonName> typifiedNames = typeDesignation.getTypifiedNames();
+ if(typifiedNames.size()==1){
+ firstElement = typifiedNames.iterator().next();
+ }
+ if(typifiedNames.size()==0 || typifiedNames.size()>=2){
+ MessagingUtils.informationDialog("Could not open name", "Type designation has either 0 or more than 1 names associated");
+ }
+ }
+ else if(firstElement instanceof DeterminationEvent){
+ if(((DeterminationEvent) firstElement).getTaxon()!=null){
+ firstElement = ((DeterminationEvent) firstElement).getTaxon();
+ }
+ else if(((DeterminationEvent) firstElement).getTaxonName()!=null){
+ firstElement = ((DeterminationEvent) firstElement).getTaxonName();
+ }
+ }
+ new CdmViewerChooser(event.getViewer().getControl().getShell()).chooseViewer(firstElement);
}
-
-
-// if(event.getSelection() instanceof StructuredSelection){
-// StructuredSelection selection = (StructuredSelection)event.getSelection();
-// if(selection.getFirstElement() instanceof TaxonBase<?>){
-// UUID taxonBaseUUID = ((TaxonBase<?>) selection.getFirstElement()).getUuid();
-// }
-// }
}
+ @Override
+ public void fillFields() {
+ // TODO Auto-generated method stub
+
+ }
}