Project

General

Profile

« Previous | Next » 

Revision 3429c5db

Added by Patrick Plitzner over 9 years ago

  • added support for image gallery creation for FieldUnits (#4389)
    • added support for DerivateView to MediaView

View differences:

eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/DerivateView.java
9 9
import org.eclipse.jface.action.MenuManager;
10 10
import org.eclipse.jface.util.LocalSelectionTransfer;
11 11
import org.eclipse.jface.viewers.AbstractTreeViewer;
12
import org.eclipse.jface.viewers.ISelection;
13
import org.eclipse.jface.viewers.ISelectionChangedListener;
14
import org.eclipse.jface.viewers.SelectionChangedEvent;
12 15
import org.eclipse.jface.viewers.StructuredSelection;
13 16
import org.eclipse.jface.viewers.TreeNode;
14 17
import org.eclipse.jface.viewers.TreeViewer;
......
31 34
import eu.etaxonomy.cdm.api.service.molecular.ISequenceService;
32 35
import eu.etaxonomy.cdm.model.molecular.Sequence;
33 36
import eu.etaxonomy.cdm.model.molecular.SingleRead;
34
import eu.etaxonomy.cdm.model.occurrence.FieldUnit;
35 37
import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
36 38
import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
37 39
import eu.etaxonomy.taxeditor.model.IContextListener;
38 40
import eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider;
39 41
import eu.etaxonomy.taxeditor.model.IPartContentHasDetails;
40 42
import eu.etaxonomy.taxeditor.model.IPartContentHasFactualData;
43
import eu.etaxonomy.taxeditor.model.IPartContentHasMedia;
41 44
import eu.etaxonomy.taxeditor.model.IPartContentHasSupplementalData;
42 45
import eu.etaxonomy.taxeditor.store.CdmStore;
43 46
import eu.etaxonomy.taxeditor.view.derivateSearch.DerivateLabelProvider;
44 47

  
45 48
/**
46
 * Displays the derivate hierarchy of all derivates having one single {@link FieldUnit} as root.
49
 * Displays the derivate hierarchy of the specimen specified in the editor input.
47 50
 *
48 51
 */
49 52
public class DerivateView extends EditorPart implements IPartContentHasFactualData, IDirtyMarkableSelectionProvider,
50
        IConversationEnabled, IPartContentHasDetails, IPartContentHasSupplementalData, IContextListener {
53
        IConversationEnabled, IPartContentHasDetails, IPartContentHasMedia, IPartContentHasSupplementalData,
54
        IContextListener, ISelectionChangedListener {
51 55

  
52 56
	/**
53 57
     * Key used for storing a single DerivateView in a memento
......
73 77

  
74 78
    private Set<SingleRead> multiLinkSingleReads;
75 79

  
80
    private ISelection selection = null;
81

  
76 82
    /**
77 83
     * Default constructor
78 84
     */
......
93 99
        viewer.setAutoExpandLevel(AbstractTreeViewer.ALL_LEVELS);
94 100
        // Propagate selection from viewer
95 101
        getSite().setSelectionProvider(viewer);
102
        //listen to selection changes
103
        viewer.addSelectionChangedListener(this);
96 104

  
97 105
        //create context menu
98 106
        MenuManager menuManager = new MenuManager();
......
319 327
//        }
320 328
    }
321 329

  
330
    /* (non-Javadoc)
331
     * @see org.eclipse.jface.viewers.ISelectionChangedListener#selectionChanged(org.eclipse.jface.viewers.SelectionChangedEvent)
332
     */
333
    @Override
334
    public void selectionChanged(SelectionChangedEvent event) {
335
        this.selection  = event.getSelection();
336
    }
337

  
338
    /**
339
     * @return the selection
340
     */
341
    public ISelection getSelection() {
342
        return selection;
343
    }
344

  
322 345
}
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/operation/AddDerivedUnitFacadeMediaOperation.java
15 15
import org.eclipse.core.runtime.IAdaptable;
16 16
import org.eclipse.core.runtime.IProgressMonitor;
17 17
import org.eclipse.core.runtime.IStatus;
18
import org.eclipse.core.runtime.Status;
18 19

  
19 20
import eu.etaxonomy.cdm.api.facade.DerivedUnitFacade;
20 21
import eu.etaxonomy.cdm.api.facade.DerivedUnitFacadeNotSupportedException;
......
56 57
		try {
57 58
		    if(specimen instanceof FieldUnit){
58 59
		        facade = DerivedUnitFacade.NewInstance(SpecimenOrObservationType.FieldUnit, (FieldUnit) specimen);
59
		        facade.getFieldObjectImageGallery(true);
60
		        if(facade.hasFieldObjectImageGallery()){
61
		            MessagingUtils.informationDialog("Image gallery creation failed", "Only one image gallery is possible.");
62
		            return Status.CANCEL_STATUS;
63
		        }
64
		        else{
65
		            facade.getFieldObjectImageGallery(true);
66
		        }
60 67
		    }
61 68
		    else if(specimen instanceof DerivedUnit){
62 69
		        facade = DerivedUnitFacade.NewInstance((DerivedUnit)specimen);
63
		        facade.getDerivedUnitImageGallery(true);
70
		        if(facade.hasDerivedUnitImageGallery()){
71
		            MessagingUtils.informationDialog("Image gallery creation failed", "Only one image gallery is possible.");
72
		            return Status.CANCEL_STATUS;
73
		        }
74
		        else{
75
		            facade.getDerivedUnitImageGallery(true);
76
		        }
64 77
		    }
65 78
		} catch (DerivedUnitFacadeNotSupportedException e) {
66 79
			MessagingUtils.error(getClass(), e);
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/media/MediaContentProvider.java
1 1
// $Id$
2 2
/**
3 3
* Copyright (C) 2007 EDIT
4
* European Distributed Institute of Taxonomy 
4
* European Distributed Institute of Taxonomy
5 5
* http://www.e-taxonomy.eu
6
* 
6
*
7 7
* The contents of this file are subject to the Mozilla Public License Version 1.1
8 8
* See LICENSE.TXT at the top of this package for the full license terms.
9 9
*/
10 10

  
11 11
package eu.etaxonomy.taxeditor.editor.view.media;
12 12

  
13
import java.util.ArrayList;
13
import java.util.Collections;
14 14
import java.util.HashSet;
15 15
import java.util.List;
16 16
import java.util.Set;
......
26 26
import eu.etaxonomy.cdm.model.description.SpecimenDescription;
27 27
import eu.etaxonomy.cdm.model.media.Media;
28 28
import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;
29
import eu.etaxonomy.cdm.model.occurrence.FieldUnit;
30
import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationType;
29 31
import eu.etaxonomy.cdm.model.taxon.Taxon;
30 32
import eu.etaxonomy.taxeditor.editor.TaxonEditorInput;
31 33
import eu.etaxonomy.taxeditor.model.MessagingUtils;
......
40 42
public class MediaContentProvider implements ITreeContentProvider{
41 43

  
42 44
	private static final Object[] NO_CHILDREN = new Object[0];
43
	
45

  
44 46
	/** {@inheritDoc} */
45
	public Object[] getChildren(Object parentElement) {
46
				
47
	@Override
48
    public Object[] getChildren(Object parentElement) {
49

  
47 50
		if (parentElement instanceof TaxonEditorInput) {
48 51
			Taxon taxon = ((TaxonEditorInput) parentElement).getTaxon();
49 52
			if(taxon == null){
......
55 58
				if(description.isImageGallery()){
56 59
					imageGalleries.add(description);
57 60
				}
58
			}			
59
			return imageGalleries.toArray(); 
61
			}
62
			return imageGalleries.toArray();
60 63
		}
61 64
		else if (parentElement instanceof DescriptionBase) {
62 65
			if (((DescriptionBase) parentElement).isImageGallery()) {
63 66
				return getImages((DescriptionBase) parentElement).toArray();
64
			} 
67
			}
65 68
		}
66 69
		else if (parentElement instanceof DerivedUnit){
67 70
			try {
68 71
				DerivedUnitFacade facade = DerivedUnitFacade.NewInstance((DerivedUnit) parentElement);
69
		
70
				// TODO at the moment we always create image galleries because the facade is like so.
71
				// this should definitely change and we want to use normal getters and setters here
72
				List<DescriptionBase> derivedUnitFacadeImageGalleries = new ArrayList<DescriptionBase>(2);
73
				
72

  
74 73
				SpecimenDescription derivedUnitImageGallery = facade.getDerivedUnitImageGallery(false);
75
				SpecimenDescription fieldObjectImageGallery = facade.getFieldObjectImageGallery(false);
76
				
74

  
77 75
				if(derivedUnitImageGallery != null){
78
					derivedUnitFacadeImageGalleries.add(derivedUnitImageGallery);
79
				}
80
				
81
				if(fieldObjectImageGallery != null){
82
					derivedUnitFacadeImageGalleries.add(fieldObjectImageGallery);
76
					return Collections.singleton(derivedUnitImageGallery).toArray();
83 77
				}
84
				
85
				return derivedUnitFacadeImageGalleries.toArray();
86
				
78

  
87 79
			} catch (DerivedUnitFacadeNotSupportedException e) {
88 80
				MessagingUtils.error(this.getClass(), "DerivedUnitFacadeNotSupportedException when trying to instantiate DerivedUnitFacade", e);
89 81
			}
90 82
		}
91
		
83
		else if (parentElement instanceof FieldUnit){
84
		        DerivedUnitFacade facade = DerivedUnitFacade.NewInstance(SpecimenOrObservationType.FieldUnit, (FieldUnit) parentElement);
85

  
86
		        SpecimenDescription fieldObjectImageGallery = facade.getFieldObjectImageGallery(false);
87

  
88
		        if(fieldObjectImageGallery != null){
89
		            return Collections.singleton(fieldObjectImageGallery).toArray();
90
		        }
91
		}
92 92
		return NO_CHILDREN;
93 93
	}
94 94

  
95 95
	/** {@inheritDoc} */
96
	public Object getParent(Object element) {
96
	@Override
97
    public Object getParent(Object element) {
97 98
		// TODO Auto-generated method stub
98 99
		return null;
99 100
	}
100 101

  
101 102
	/** {@inheritDoc} */
102
	public boolean hasChildren(Object element) {
103
	@Override
104
    public boolean hasChildren(Object element) {
103 105
		return (getChildren(element).length > 0);
104 106
	}
105 107

  
106 108
	/** {@inheritDoc} */
107
	public Object[] getElements(Object inputElement) {
109
	@Override
110
    public Object[] getElements(Object inputElement) {
108 111
		return getChildren(inputElement);
109 112
	}
110 113

  
111 114
	/**
112 115
	 * <p>dispose</p>
113 116
	 */
114
	public void dispose() {}
117
	@Override
118
    public void dispose() {}
115 119

  
116 120
	/** {@inheritDoc} */
117
	public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {}
118
	
121
	@Override
122
    public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {}
123

  
119 124
	private List<Media> getImages(DescriptionBase description){
120 125
		Assert.isTrue(description.isImageGallery(), "Description should have the imageGallery flag set.");
121
		
126

  
122 127
		Set<DescriptionElementBase> elements = description.getElements();
123 128
		if (elements != null) {
124 129
			// by definition, image galleries have only one description element
125 130
			if(elements.size() > 1){
126 131
				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);
127 132
			}
128
						
133

  
129 134
			DescriptionElementBase element = elements.iterator().next();
130
			
135

  
131 136
			return element.getMedia();
132 137
		}
133 138
		return null;
134 139
	}
135
	
140

  
136 141
	private SpecimenDescription createDerivedUnitFacadeImageGallery(DerivedUnitFacade facade){
137 142
		SpecimenDescription description = SpecimenDescription.NewInstance();
138 143
		description.setImageGallery(true);
139
		
140
		
141
		
144

  
145

  
146

  
142 147
		return description;
143 148
	}
144 149
}
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/media/MediaViewPart.java
15 15
import org.eclipse.jface.viewers.ISelection;
16 16
import org.eclipse.jface.viewers.IStructuredSelection;
17 17
import org.eclipse.jface.viewers.StructuredSelection;
18
import org.eclipse.jface.viewers.TreeNode;
18 19
import org.eclipse.jface.viewers.TreeViewer;
19 20
import org.eclipse.jface.viewers.Viewer;
20 21
import org.eclipse.swt.SWT;
......
35 36
import eu.etaxonomy.taxeditor.model.IPartContentHasMedia;
36 37
import eu.etaxonomy.taxeditor.model.IPartContentHasSupplementalData;
37 38
import eu.etaxonomy.taxeditor.view.AbstractCdmEditorViewPart;
39
import eu.etaxonomy.taxeditor.view.detail.DetailsViewPart;
40
import eu.etaxonomy.taxeditor.view.supplementaldata.SupplementalDataViewPart;
38 41

  
39 42
/**
40 43
 * <p>MediaViewPart class.</p>
......
100 103
			return;
101 104
		}
102 105

  
103
		if(part instanceof MultiPageTaxonEditor){
104
			IEditorInput input = ((IEditorPart) part).getEditorInput();
105
			showViewer(part, new StructuredSelection(input));
106
        if(part instanceof DetailsViewPart || part instanceof SupplementalDataViewPart){
107
            // do not show empty page as these views are also used to edit the description selected in this view
108
            return;
109
        }
110

  
111
		if(part instanceof IPartContentHasMedia){
112
		    if(part instanceof MultiPageTaxonEditor){
113
		        IEditorInput input = ((IEditorPart) part).getEditorInput();
114
		        showViewer(part, new StructuredSelection(input));
115
		    }
116
		    else if(selection instanceof IStructuredSelection){
117
		        Object firstElement = ((IStructuredSelection) selection).getFirstElement();
118
		        if(firstElement instanceof TreeNode){
119
		            showViewer(part, new StructuredSelection(((TreeNode) firstElement).getValue()));
120
		        }
121
		        else{
122
		            showViewer(part, (IStructuredSelection) selection);
123
		        }
124
		    }
106 125
		}
107

  
108
		else if(part instanceof IPartContentHasMedia && selection instanceof IStructuredSelection){
109
			showViewer(part, (IStructuredSelection) selection);
126
		else{
127
		    showEmptyPage();
110 128
		}
111 129
	}
112 130

  
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/media/handler/AddExistingMediaHandler.java
25 25
            DescriptionBase description) {
26 26
        AbstractPostOperation operation = null;
27 27
        try {
28

  
29 28
            //select media
30 29
            Media media = MediaSelectionDialog.select(AbstractUtility.getShell(), null, null);
31
            // TODO use undo context specific to editor
32
            operation = new AddExistingMediaToImageGalleryOperation(media, event.getCommand().getName(),
33
                    EditorUtil.getUndoContext(), description, postOperationEnabled);
34
            AbstractUtility.executeOperation(operation);
30
            if(media!=null){
31
                // TODO use undo context specific to editor
32
                operation = new AddExistingMediaToImageGalleryOperation(media, event.getCommand().getName(),
33
                        EditorUtil.getUndoContext(), description, postOperationEnabled);
34
                AbstractUtility.executeOperation(operation);
35
            }
35 36
        } catch (NotDefinedException e) {
36 37
            MessagingUtils.warn(getClass(), "Command name not set.");
37 38
        }
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/media/handler/AddImageGalleryHandler.java
9 9
import org.eclipse.core.commands.common.NotDefinedException;
10 10
import org.eclipse.jface.viewers.ISelection;
11 11
import org.eclipse.jface.viewers.IStructuredSelection;
12
import org.eclipse.jface.viewers.TreeNode;
12 13
import org.eclipse.ui.IEditorInput;
13 14
import org.eclipse.ui.IEditorPart;
14 15
import org.eclipse.ui.IWorkbenchPart;
......
21 22
import eu.etaxonomy.taxeditor.bulkeditor.input.OccurrenceEditorInput;
22 23
import eu.etaxonomy.taxeditor.editor.EditorUtil;
23 24
import eu.etaxonomy.taxeditor.editor.TaxonEditorInput;
25
import eu.etaxonomy.taxeditor.editor.view.derivate.DerivateView;
26
import eu.etaxonomy.taxeditor.editor.view.derivate.DerivateViewEditorInput;
24 27
import eu.etaxonomy.taxeditor.editor.view.descriptive.operation.AddDerivedUnitFacadeMediaOperation;
25 28
import eu.etaxonomy.taxeditor.editor.view.descriptive.operation.CreateTaxonDescriptionOperation;
26 29
import eu.etaxonomy.taxeditor.model.AbstractUtility;
......
65 68
		else if(input instanceof OccurrenceEditorInput){
66 69
		    BulkEditor bulkEditor = (BulkEditor) editor;
67 70
		    ISelection selection = bulkEditor.getSelectionProvider().getSelection();
68

  
69
		    if(selection instanceof IStructuredSelection){
70
		        Object element = ((IStructuredSelection) selection).getFirstElement();
71
		        if(element instanceof SpecimenOrObservationBase<?>){
72
		            try {
73
		                AbstractPostOperation<?> operation = new AddDerivedUnitFacadeMediaOperation(event.getCommand().getName(),
74
		                        BulkEditorUtil.getUndoContext(), (SpecimenOrObservationBase<?>)element, postOperationEnabled);
75
		                AbstractUtility.executeOperation(operation);
76
		            } catch (NotDefinedException e) {
77
		                MessagingUtils.warn(getClass(), "Command name not set.");
78
		            }
79
		        }
80
		    }
71
		    invokeOperation(event, postOperationEnabled, selection);
72
		}
73
		else if(input instanceof DerivateViewEditorInput){
74
		    ISelection selection = ((DerivateView)editor).getSelection();
75
		    invokeOperation(event, postOperationEnabled, selection);
81 76
		}
82 77
		return null;
83 78
	}
84 79

  
80
    /**
81
     * @param event
82
     * @param postOperationEnabled
83
     * @param selection
84
     */
85
    private void invokeOperation(ExecutionEvent event, IPostOperationEnabled postOperationEnabled, ISelection selection) {
86
        if(selection instanceof IStructuredSelection){
87
            Object element = ((IStructuredSelection) selection).getFirstElement();
88
            if(element instanceof TreeNode){
89
                element = ((TreeNode) element).getValue();
90
            }
91
            if(element instanceof SpecimenOrObservationBase<?>){
92
                try {
93
                    AbstractPostOperation<?> operation = new AddDerivedUnitFacadeMediaOperation(event.getCommand().getName(),
94
                            BulkEditorUtil.getUndoContext(), (SpecimenOrObservationBase<?>)element, postOperationEnabled);
95
                    AbstractUtility.executeOperation(operation);
96
                } catch (NotDefinedException e) {
97
                    MessagingUtils.warn(getClass(), "Command name not set.");
98
                }
99
            }
100
        }
101
    }
102

  
85 103
}

Also available in: Unified diff