Project

General

Profile

Download (4.97 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
* Copyright (C) 2007 EDIT
3
* European Distributed Institute of Taxonomy
4
* http://www.e-taxonomy.eu
5
*
6
* The contents of this file are subject to the Mozilla Public License Version 1.1
7
* See LICENSE.TXT at the top of this package for the full license terms.
8
*/
9

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

    
12
import java.util.Collections;
13
import java.util.HashSet;
14
import java.util.List;
15
import java.util.Set;
16

    
17
import org.eclipse.core.runtime.Assert;
18
import org.eclipse.jface.viewers.ITreeContentProvider;
19
import org.eclipse.jface.viewers.Viewer;
20

    
21
import eu.etaxonomy.cdm.api.facade.DerivedUnitFacade;
22
import eu.etaxonomy.cdm.api.facade.DerivedUnitFacadeNotSupportedException;
23
import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
24
import eu.etaxonomy.cdm.model.description.DescriptionBase;
25
import eu.etaxonomy.cdm.model.description.DescriptionElementBase;
26
import eu.etaxonomy.cdm.model.description.SpecimenDescription;
27
import eu.etaxonomy.cdm.model.media.Media;
28
import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;
29
import eu.etaxonomy.cdm.model.occurrence.FieldUnit;
30
import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationType;
31
import eu.etaxonomy.cdm.model.taxon.Taxon;
32
import eu.etaxonomy.taxeditor.editor.e4.TaxonEditorInputE4;
33
import eu.etaxonomy.taxeditor.model.MessagingUtils;
34

    
35
/**
36
 * <p>MediaContentProvider class.</p>
37
 *
38
 * @author n.hoffmann
39
 * @created Jun 15, 2010
40
 */
41
public class MediaContentProvider implements ITreeContentProvider{
42

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

    
45
	@Override
46
    public Object[] getChildren(Object parentElement) {
47

    
48
		if (parentElement instanceof TaxonEditorInputE4 || parentElement instanceof Taxon) {
49

    
50
			Taxon taxon = null;
51
			if (parentElement instanceof TaxonEditorInputE4){
52
				taxon = ((TaxonEditorInputE4) parentElement).getTaxon();
53
			} else{
54
				taxon = HibernateProxyHelper.deproxy(parentElement, Taxon.class);
55
			}
56

    
57
			if(taxon == null){
58
				MessagingUtils.error(getClass(), "Taxon is null", null); //$NON-NLS-1$
59
				return NO_CHILDREN;
60
			}
61
			HashSet<DescriptionBase<?>> imageGalleries = new HashSet<>();
62
			for(DescriptionBase<?> description : taxon.getDescriptions()){
63
				if(description.isImageGallery()){
64
					imageGalleries.add(description);
65
				}
66
			}
67
			return imageGalleries.toArray();
68
		}
69
		else if (parentElement instanceof DescriptionBase) {
70
			if (((DescriptionBase<?>) parentElement).isImageGallery()) {
71
				List<Media> images =  getImages((DescriptionBase<?>) parentElement);
72
				if (images != null){
73
					return images.toArray();
74
				}
75
				return null;
76

    
77
			}
78
		}
79
		else if (parentElement instanceof DerivedUnit){
80
			try {
81
				DerivedUnitFacade facade = DerivedUnitFacade.NewInstance((DerivedUnit) parentElement);
82

    
83
				SpecimenDescription derivedUnitImageGallery = facade.getDerivedUnitImageGallery(false);
84

    
85
				if(derivedUnitImageGallery != null){
86
					return Collections.singleton(derivedUnitImageGallery).toArray();
87
				}
88

    
89
			} catch (DerivedUnitFacadeNotSupportedException e) {
90
				MessagingUtils.error(this.getClass(), "DerivedUnitFacadeNotSupportedException when trying to instantiate DerivedUnitFacade", e); //$NON-NLS-1$
91
			}
92
		}
93
		else if (parentElement instanceof FieldUnit){
94
		        DerivedUnitFacade facade = DerivedUnitFacade.NewInstance(SpecimenOrObservationType.FieldUnit, (FieldUnit) parentElement);
95

    
96
		        SpecimenDescription fieldObjectImageGallery = facade.getFieldObjectImageGallery(false);
97

    
98
		        if(fieldObjectImageGallery != null){
99
		            return Collections.singleton(fieldObjectImageGallery).toArray();
100
		        }
101
		}
102
		return NO_CHILDREN;
103
	}
104

    
105
	@Override
106
    public Object getParent(Object element) {
107
		// TODO Auto-generated method stub
108
		return null;
109
	}
110

    
111
	@Override
112
    public boolean hasChildren(Object element) {
113
		if (getChildren(element)== null) {
114
			return false;
115
		}
116
		return (getChildren(element).length > 0);
117
	}
118

    
119
	@Override
120
    public Object[] getElements(Object inputElement) {
121
		return getChildren(inputElement);
122
	}
123

    
124
	@Override
125
    public void dispose() {}
126

    
127
	@Override
128
    public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {}
129

    
130
	private List<Media> getImages(DescriptionBase description){
131
		Assert.isTrue(description.isImageGallery(), "Description should have the imageGallery flag set."); //$NON-NLS-1$
132

    
133
		Set<DescriptionElementBase> elements = description.getElements();
134
		if (elements != null) {
135
			// by definition, image galleries have only one description element
136
			if(elements.size() > 1){
137
				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); //$NON-NLS-1$ //$NON-NLS-2$
138
			}
139
			if (!elements.isEmpty()){
140
				DescriptionElementBase element = elements.iterator().next();
141
				return element.getMedia();
142
			}
143
		}
144
		return null;
145
	}
146

    
147
	private SpecimenDescription createDerivedUnitFacadeImageGallery(DerivedUnitFacade facade){
148
		SpecimenDescription description = SpecimenDescription.NewInstance();
149
		description.setImageGallery(true);
150
		return description;
151
	}
152
}
(1-1/2)