merge-update from trunk
[taxeditor.git] / eu.etaxonomy.taxeditor.editor / src / main / java / eu / etaxonomy / taxeditor / editor / view / derivate / DerivateContentProvider.java
1 package eu.etaxonomy.taxeditor.editor.view.derivate;
2
3 import java.util.ArrayList;
4 import java.util.Collections;
5 import java.util.List;
6 import java.util.Set;
7
8 import org.eclipse.jface.viewers.ITreeContentProvider;
9 import org.eclipse.jface.viewers.Viewer;
10
11 import eu.etaxonomy.cdm.model.occurrence.DerivationEvent;
12 import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;
13 import eu.etaxonomy.cdm.model.occurrence.FieldUnit;
14 import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
15 import eu.etaxonomy.taxeditor.editor.EditorUtil;
16
17 public class DerivateContentProvider implements ITreeContentProvider {
18
19 @Override
20 public void dispose() {
21 // TODO Auto-generated method stub
22
23 }
24
25 @Override
26 public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
27 }
28
29 @Override
30 public Object[] getElements(Object inputElement) {
31 SpecimenOrObservationBase<?> specimen = null;
32 if(inputElement instanceof DerivateViewEditorInput){
33 inputElement = ((DerivateViewEditorInput) inputElement).getDerivate();
34 }
35
36 // return the parent FieldUnit if element is a DerivedUnit
37 if(inputElement instanceof DerivedUnit){
38 specimen = EditorUtil.getFieldUnit((DerivedUnit)inputElement);
39 }
40 else if(inputElement instanceof FieldUnit){
41 specimen = (FieldUnit) inputElement;
42 }
43 if(specimen!=null){
44 return Collections.singleton(specimen).toArray();
45 }
46 else {
47 return Collections.EMPTY_LIST.toArray();
48 }
49 }
50
51 @Override
52 public Object[] getChildren(Object parentElement) {
53 if(parentElement instanceof DerivateViewEditorInput){
54 parentElement = ((DerivateViewEditorInput) parentElement).getDerivate();
55 }
56
57 if(parentElement instanceof SpecimenOrObservationBase){
58 return getDerivates((SpecimenOrObservationBase) parentElement).toArray();
59 }
60 return null;
61 }
62
63 @Override
64 public Object getParent(Object element) {
65 if(element instanceof DerivateViewEditorInput){
66 element = ((DerivateViewEditorInput) element).getDerivate();
67 }
68
69 if(element instanceof FieldUnit){
70 return element;
71 }
72 else if(element instanceof DerivedUnit){
73 DerivedUnit derivedUnit = (DerivedUnit)element;
74 return derivedUnit.getOriginalUnit();
75 }
76 return null;
77 }
78
79 @Override
80 public boolean hasChildren(Object element) {
81 if(element instanceof DerivateViewEditorInput){
82 element = ((DerivateViewEditorInput) element).getDerivate();
83 }
84
85 if(element instanceof SpecimenOrObservationBase){
86 SpecimenOrObservationBase specimenOrObservation = (SpecimenOrObservationBase)element;
87 for(DerivationEvent event:(Set<DerivationEvent>)specimenOrObservation.getDerivationEvents()){
88 if(!event.getDerivatives().isEmpty()){
89 return true;
90 }
91 }
92 }
93 return false;
94 }
95
96 private List<DerivedUnit> getDerivates(SpecimenOrObservationBase specimenOrObservation){
97 List<DerivedUnit> derivates = new ArrayList<DerivedUnit>();
98 for(DerivationEvent derivationEvent:(Set<DerivationEvent>)specimenOrObservation.getDerivationEvents()){
99 derivates.addAll(derivationEvent.getDerivatives());
100 }
101 return derivates;
102 }
103
104 }