From: Patric Plitzner Date: Mon, 22 Sep 2014 06:49:28 +0000 (+0000) Subject: - added support for image gallery creation for FieldUnits (#4389) X-Git-Tag: 3.6.0~436 X-Git-Url: https://dev.e-taxonomy.eu/gitweb/taxeditor.git/commitdiff_plain/3429c5db6660f3c9c6ad38700f984c9b5b0fe1df - added support for image gallery creation for FieldUnits (#4389) - added support for DerivateView to MediaView --- diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/DerivateView.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/DerivateView.java index 8949898d7..1cc320d33 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/DerivateView.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/DerivateView.java @@ -9,6 +9,9 @@ import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.util.LocalSelectionTransfer; import org.eclipse.jface.viewers.AbstractTreeViewer; +import org.eclipse.jface.viewers.ISelection; +import org.eclipse.jface.viewers.ISelectionChangedListener; +import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.jface.viewers.TreeNode; import org.eclipse.jface.viewers.TreeViewer; @@ -31,23 +34,24 @@ import eu.etaxonomy.cdm.api.conversation.IConversationEnabled; import eu.etaxonomy.cdm.api.service.molecular.ISequenceService; import eu.etaxonomy.cdm.model.molecular.Sequence; import eu.etaxonomy.cdm.model.molecular.SingleRead; -import eu.etaxonomy.cdm.model.occurrence.FieldUnit; import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase; import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap; import eu.etaxonomy.taxeditor.model.IContextListener; import eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider; import eu.etaxonomy.taxeditor.model.IPartContentHasDetails; import eu.etaxonomy.taxeditor.model.IPartContentHasFactualData; +import eu.etaxonomy.taxeditor.model.IPartContentHasMedia; import eu.etaxonomy.taxeditor.model.IPartContentHasSupplementalData; import eu.etaxonomy.taxeditor.store.CdmStore; import eu.etaxonomy.taxeditor.view.derivateSearch.DerivateLabelProvider; /** - * Displays the derivate hierarchy of all derivates having one single {@link FieldUnit} as root. + * Displays the derivate hierarchy of the specimen specified in the editor input. * */ public class DerivateView extends EditorPart implements IPartContentHasFactualData, IDirtyMarkableSelectionProvider, - IConversationEnabled, IPartContentHasDetails, IPartContentHasSupplementalData, IContextListener { + IConversationEnabled, IPartContentHasDetails, IPartContentHasMedia, IPartContentHasSupplementalData, + IContextListener, ISelectionChangedListener { /** * Key used for storing a single DerivateView in a memento @@ -73,6 +77,8 @@ public class DerivateView extends EditorPart implements IPartContentHasFactualDa private Set multiLinkSingleReads; + private ISelection selection = null; + /** * Default constructor */ @@ -93,6 +99,8 @@ public class DerivateView extends EditorPart implements IPartContentHasFactualDa viewer.setAutoExpandLevel(AbstractTreeViewer.ALL_LEVELS); // Propagate selection from viewer getSite().setSelectionProvider(viewer); + //listen to selection changes + viewer.addSelectionChangedListener(this); //create context menu MenuManager menuManager = new MenuManager(); @@ -319,4 +327,19 @@ public class DerivateView extends EditorPart implements IPartContentHasFactualDa // } } + /* (non-Javadoc) + * @see org.eclipse.jface.viewers.ISelectionChangedListener#selectionChanged(org.eclipse.jface.viewers.SelectionChangedEvent) + */ + @Override + public void selectionChanged(SelectionChangedEvent event) { + this.selection = event.getSelection(); + } + + /** + * @return the selection + */ + public ISelection getSelection() { + return selection; + } + } diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/operation/AddDerivedUnitFacadeMediaOperation.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/operation/AddDerivedUnitFacadeMediaOperation.java index f0522ba8b..e99964df3 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/operation/AddDerivedUnitFacadeMediaOperation.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/operation/AddDerivedUnitFacadeMediaOperation.java @@ -15,6 +15,7 @@ import org.eclipse.core.commands.operations.IUndoContext; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Status; import eu.etaxonomy.cdm.api.facade.DerivedUnitFacade; import eu.etaxonomy.cdm.api.facade.DerivedUnitFacadeNotSupportedException; @@ -56,11 +57,23 @@ public class AddDerivedUnitFacadeMediaOperation extends AbstractPostTaxonOperati try { if(specimen instanceof FieldUnit){ facade = DerivedUnitFacade.NewInstance(SpecimenOrObservationType.FieldUnit, (FieldUnit) specimen); - facade.getFieldObjectImageGallery(true); + if(facade.hasFieldObjectImageGallery()){ + MessagingUtils.informationDialog("Image gallery creation failed", "Only one image gallery is possible."); + return Status.CANCEL_STATUS; + } + else{ + facade.getFieldObjectImageGallery(true); + } } else if(specimen instanceof DerivedUnit){ facade = DerivedUnitFacade.NewInstance((DerivedUnit)specimen); - facade.getDerivedUnitImageGallery(true); + if(facade.hasDerivedUnitImageGallery()){ + MessagingUtils.informationDialog("Image gallery creation failed", "Only one image gallery is possible."); + return Status.CANCEL_STATUS; + } + else{ + facade.getDerivedUnitImageGallery(true); + } } } catch (DerivedUnitFacadeNotSupportedException e) { MessagingUtils.error(getClass(), e); diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/media/MediaContentProvider.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/media/MediaContentProvider.java index 751b34545..9fda8be48 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/media/MediaContentProvider.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/media/MediaContentProvider.java @@ -1,16 +1,16 @@ // $Id$ /** * Copyright (C) 2007 EDIT -* European Distributed Institute of Taxonomy +* European Distributed Institute of Taxonomy * http://www.e-taxonomy.eu -* +* * The contents of this file are subject to the Mozilla Public License Version 1.1 * See LICENSE.TXT at the top of this package for the full license terms. */ package eu.etaxonomy.taxeditor.editor.view.media; -import java.util.ArrayList; +import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Set; @@ -26,6 +26,8 @@ import eu.etaxonomy.cdm.model.description.DescriptionElementBase; import eu.etaxonomy.cdm.model.description.SpecimenDescription; import eu.etaxonomy.cdm.model.media.Media; import eu.etaxonomy.cdm.model.occurrence.DerivedUnit; +import eu.etaxonomy.cdm.model.occurrence.FieldUnit; +import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationType; import eu.etaxonomy.cdm.model.taxon.Taxon; import eu.etaxonomy.taxeditor.editor.TaxonEditorInput; import eu.etaxonomy.taxeditor.model.MessagingUtils; @@ -40,10 +42,11 @@ import eu.etaxonomy.taxeditor.model.MessagingUtils; public class MediaContentProvider implements ITreeContentProvider{ private static final Object[] NO_CHILDREN = new Object[0]; - + /** {@inheritDoc} */ - public Object[] getChildren(Object parentElement) { - + @Override + public Object[] getChildren(Object parentElement) { + if (parentElement instanceof TaxonEditorInput) { Taxon taxon = ((TaxonEditorInput) parentElement).getTaxon(); if(taxon == null){ @@ -55,90 +58,92 @@ public class MediaContentProvider implements ITreeContentProvider{ if(description.isImageGallery()){ imageGalleries.add(description); } - } - return imageGalleries.toArray(); + } + return imageGalleries.toArray(); } else if (parentElement instanceof DescriptionBase) { if (((DescriptionBase) parentElement).isImageGallery()) { return getImages((DescriptionBase) parentElement).toArray(); - } + } } else if (parentElement instanceof DerivedUnit){ try { DerivedUnitFacade facade = DerivedUnitFacade.NewInstance((DerivedUnit) parentElement); - - // TODO at the moment we always create image galleries because the facade is like so. - // this should definitely change and we want to use normal getters and setters here - List derivedUnitFacadeImageGalleries = new ArrayList(2); - + SpecimenDescription derivedUnitImageGallery = facade.getDerivedUnitImageGallery(false); - SpecimenDescription fieldObjectImageGallery = facade.getFieldObjectImageGallery(false); - + if(derivedUnitImageGallery != null){ - derivedUnitFacadeImageGalleries.add(derivedUnitImageGallery); - } - - if(fieldObjectImageGallery != null){ - derivedUnitFacadeImageGalleries.add(fieldObjectImageGallery); + return Collections.singleton(derivedUnitImageGallery).toArray(); } - - return derivedUnitFacadeImageGalleries.toArray(); - + } catch (DerivedUnitFacadeNotSupportedException e) { MessagingUtils.error(this.getClass(), "DerivedUnitFacadeNotSupportedException when trying to instantiate DerivedUnitFacade", e); } } - + else if (parentElement instanceof FieldUnit){ + DerivedUnitFacade facade = DerivedUnitFacade.NewInstance(SpecimenOrObservationType.FieldUnit, (FieldUnit) parentElement); + + SpecimenDescription fieldObjectImageGallery = facade.getFieldObjectImageGallery(false); + + if(fieldObjectImageGallery != null){ + return Collections.singleton(fieldObjectImageGallery).toArray(); + } + } return NO_CHILDREN; } /** {@inheritDoc} */ - public Object getParent(Object element) { + @Override + public Object getParent(Object element) { // TODO Auto-generated method stub return null; } /** {@inheritDoc} */ - public boolean hasChildren(Object element) { + @Override + public boolean hasChildren(Object element) { return (getChildren(element).length > 0); } /** {@inheritDoc} */ - public Object[] getElements(Object inputElement) { + @Override + public Object[] getElements(Object inputElement) { return getChildren(inputElement); } /** *

dispose

*/ - public void dispose() {} + @Override + public void dispose() {} /** {@inheritDoc} */ - public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {} - + @Override + public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {} + private List getImages(DescriptionBase description){ Assert.isTrue(description.isImageGallery(), "Description should have the imageGallery flag set."); - + Set elements = description.getElements(); if (elements != null) { // by definition, image galleries have only one description element if(elements.size() > 1){ MessagingUtils.error(this.getClass(), "There should be one and only one description element to hold the images. Found: " + elements.size() + " InDescription ID: " + description.getUuid(), null); } - + DescriptionElementBase element = elements.iterator().next(); - + return element.getMedia(); } return null; } - + private SpecimenDescription createDerivedUnitFacadeImageGallery(DerivedUnitFacade facade){ SpecimenDescription description = SpecimenDescription.NewInstance(); description.setImageGallery(true); - - - + + + return description; } } diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/media/MediaViewPart.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/media/MediaViewPart.java index 43bf658bf..0ae94206a 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/media/MediaViewPart.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/media/MediaViewPart.java @@ -15,6 +15,7 @@ import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.StructuredSelection; +import org.eclipse.jface.viewers.TreeNode; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.swt.SWT; @@ -35,6 +36,8 @@ import eu.etaxonomy.taxeditor.model.IPartContentHasDetails; import eu.etaxonomy.taxeditor.model.IPartContentHasMedia; import eu.etaxonomy.taxeditor.model.IPartContentHasSupplementalData; import eu.etaxonomy.taxeditor.view.AbstractCdmEditorViewPart; +import eu.etaxonomy.taxeditor.view.detail.DetailsViewPart; +import eu.etaxonomy.taxeditor.view.supplementaldata.SupplementalDataViewPart; /** *

MediaViewPart class.

@@ -100,13 +103,28 @@ public class MediaViewPart extends AbstractCdmEditorViewPart implements IPartCon return; } - if(part instanceof MultiPageTaxonEditor){ - IEditorInput input = ((IEditorPart) part).getEditorInput(); - showViewer(part, new StructuredSelection(input)); + if(part instanceof DetailsViewPart || part instanceof SupplementalDataViewPart){ + // do not show empty page as these views are also used to edit the description selected in this view + return; + } + + if(part instanceof IPartContentHasMedia){ + if(part instanceof MultiPageTaxonEditor){ + IEditorInput input = ((IEditorPart) part).getEditorInput(); + showViewer(part, new StructuredSelection(input)); + } + else if(selection instanceof IStructuredSelection){ + Object firstElement = ((IStructuredSelection) selection).getFirstElement(); + if(firstElement instanceof TreeNode){ + showViewer(part, new StructuredSelection(((TreeNode) firstElement).getValue())); + } + else{ + showViewer(part, (IStructuredSelection) selection); + } + } } - - else if(part instanceof IPartContentHasMedia && selection instanceof IStructuredSelection){ - showViewer(part, (IStructuredSelection) selection); + else{ + showEmptyPage(); } } diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/media/handler/AddExistingMediaHandler.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/media/handler/AddExistingMediaHandler.java index 67910e1f8..097849cf0 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/media/handler/AddExistingMediaHandler.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/media/handler/AddExistingMediaHandler.java @@ -25,13 +25,14 @@ public class AddExistingMediaHandler extends CreateMediaHandler { DescriptionBase description) { AbstractPostOperation operation = null; try { - //select media Media media = MediaSelectionDialog.select(AbstractUtility.getShell(), null, null); - // TODO use undo context specific to editor - operation = new AddExistingMediaToImageGalleryOperation(media, event.getCommand().getName(), - EditorUtil.getUndoContext(), description, postOperationEnabled); - AbstractUtility.executeOperation(operation); + if(media!=null){ + // TODO use undo context specific to editor + operation = new AddExistingMediaToImageGalleryOperation(media, event.getCommand().getName(), + EditorUtil.getUndoContext(), description, postOperationEnabled); + AbstractUtility.executeOperation(operation); + } } catch (NotDefinedException e) { MessagingUtils.warn(getClass(), "Command name not set."); } diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/media/handler/AddImageGalleryHandler.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/media/handler/AddImageGalleryHandler.java index a1e79087d..00ec54f6e 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/media/handler/AddImageGalleryHandler.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/media/handler/AddImageGalleryHandler.java @@ -9,6 +9,7 @@ import org.eclipse.core.commands.ExecutionException; import org.eclipse.core.commands.common.NotDefinedException; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.jface.viewers.TreeNode; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IWorkbenchPart; @@ -21,6 +22,8 @@ import eu.etaxonomy.taxeditor.bulkeditor.BulkEditorUtil; import eu.etaxonomy.taxeditor.bulkeditor.input.OccurrenceEditorInput; import eu.etaxonomy.taxeditor.editor.EditorUtil; import eu.etaxonomy.taxeditor.editor.TaxonEditorInput; +import eu.etaxonomy.taxeditor.editor.view.derivate.DerivateView; +import eu.etaxonomy.taxeditor.editor.view.derivate.DerivateViewEditorInput; import eu.etaxonomy.taxeditor.editor.view.descriptive.operation.AddDerivedUnitFacadeMediaOperation; import eu.etaxonomy.taxeditor.editor.view.descriptive.operation.CreateTaxonDescriptionOperation; import eu.etaxonomy.taxeditor.model.AbstractUtility; @@ -65,21 +68,36 @@ public class AddImageGalleryHandler extends AbstractHandler { else if(input instanceof OccurrenceEditorInput){ BulkEditor bulkEditor = (BulkEditor) editor; ISelection selection = bulkEditor.getSelectionProvider().getSelection(); - - if(selection instanceof IStructuredSelection){ - Object element = ((IStructuredSelection) selection).getFirstElement(); - if(element instanceof SpecimenOrObservationBase){ - try { - AbstractPostOperation operation = new AddDerivedUnitFacadeMediaOperation(event.getCommand().getName(), - BulkEditorUtil.getUndoContext(), (SpecimenOrObservationBase)element, postOperationEnabled); - AbstractUtility.executeOperation(operation); - } catch (NotDefinedException e) { - MessagingUtils.warn(getClass(), "Command name not set."); - } - } - } + invokeOperation(event, postOperationEnabled, selection); + } + else if(input instanceof DerivateViewEditorInput){ + ISelection selection = ((DerivateView)editor).getSelection(); + invokeOperation(event, postOperationEnabled, selection); } return null; } + /** + * @param event + * @param postOperationEnabled + * @param selection + */ + private void invokeOperation(ExecutionEvent event, IPostOperationEnabled postOperationEnabled, ISelection selection) { + if(selection instanceof IStructuredSelection){ + Object element = ((IStructuredSelection) selection).getFirstElement(); + if(element instanceof TreeNode){ + element = ((TreeNode) element).getValue(); + } + if(element instanceof SpecimenOrObservationBase){ + try { + AbstractPostOperation operation = new AddDerivedUnitFacadeMediaOperation(event.getCommand().getName(), + BulkEditorUtil.getUndoContext(), (SpecimenOrObservationBase)element, postOperationEnabled); + AbstractUtility.executeOperation(operation); + } catch (NotDefinedException e) { + MessagingUtils.warn(getClass(), "Command name not set."); + } + } + } + } + }