1 package eu
.etaxonomy
.taxeditor
.editor
.view
.derivate
;
3 import java
.util
.ArrayList
;
4 import java
.util
.Collections
;
8 import org
.eclipse
.jface
.viewers
.ITreeContentProvider
;
9 import org
.eclipse
.jface
.viewers
.Viewer
;
11 import eu
.etaxonomy
.cdm
.model
.molecular
.Amplification
;
12 import eu
.etaxonomy
.cdm
.model
.molecular
.DnaSample
;
13 import eu
.etaxonomy
.cdm
.model
.molecular
.Sequence
;
14 import eu
.etaxonomy
.cdm
.model
.molecular
.SingleRead
;
15 import eu
.etaxonomy
.cdm
.model
.occurrence
.DerivationEvent
;
16 import eu
.etaxonomy
.cdm
.model
.occurrence
.DerivedUnit
;
17 import eu
.etaxonomy
.cdm
.model
.occurrence
.FieldUnit
;
18 import eu
.etaxonomy
.cdm
.model
.occurrence
.SpecimenOrObservationBase
;
19 import eu
.etaxonomy
.taxeditor
.editor
.EditorUtil
;
20 import eu
.etaxonomy
.taxeditor
.model
.AbstractUtility
;
22 public class DerivateContentProvider
implements ITreeContentProvider
{
25 public void dispose() {
26 // TODO Auto-generated method stub
31 public void inputChanged(Viewer viewer
, Object oldInput
, Object newInput
) {
35 public Object
[] getElements(Object inputElement
) {
36 SpecimenOrObservationBase
<?
> specimen
= null;
37 if(inputElement
instanceof DerivateViewEditorInput
){
38 inputElement
= ((DerivateViewEditorInput
) inputElement
).getDerivate();
41 // return the parent FieldUnit if element is a DerivedUnit
42 if(inputElement
instanceof DerivedUnit
){
43 specimen
= EditorUtil
.getFieldUnit((DerivedUnit
)inputElement
);
45 else if(inputElement
instanceof FieldUnit
){
46 specimen
= (FieldUnit
) inputElement
;
49 AbstractUtility
.error(DerivateContentProvider
.class, "Invalid input of type " + inputElement
.getClass(), new UnsupportedOperationException());
52 return Collections
.singleton(specimen
).toArray();
55 return Collections
.EMPTY_LIST
.toArray();
60 public Object
[] getChildren(Object parentElement
) {
61 if(parentElement
instanceof DerivateViewEditorInput
){
62 parentElement
= ((DerivateViewEditorInput
) parentElement
).getDerivate();
64 if(parentElement
instanceof DnaSample
){
65 DnaSample dnaSample
= (DnaSample
)parentElement
;
66 List
<Object
> children
= new ArrayList
<Object
>();
67 //order is important: users want to see Sequences first
68 children
.addAll(dnaSample
.getSequences());
69 children
.addAll(dnaSample
.getAmplifications());
70 return children
.toArray();
72 else if(parentElement
instanceof Amplification
){
73 return ((Amplification
) parentElement
).getSingleReads().toArray();
75 else if(parentElement
instanceof Sequence
){
76 return ((Sequence
) parentElement
).getSingleReads().toArray();
78 else if(parentElement
instanceof SpecimenOrObservationBase
){
79 return getDerivates((SpecimenOrObservationBase
) parentElement
).toArray();
81 else if(parentElement
instanceof SingleRead
){
82 List
<Object
> children
= new ArrayList
<Object
>();
83 children
.add(((SingleRead
) parentElement
).getAmplification());
84 //TODO getConsensusSequence??
85 return children
.toArray();
91 public Object
getParent(Object element
) {
92 if(element
instanceof DerivateViewEditorInput
){
93 element
= ((DerivateViewEditorInput
) element
).getDerivate();
96 if(element
instanceof FieldUnit
){
99 else if(element
instanceof DerivedUnit
){
100 DerivedUnit derivedUnit
= (DerivedUnit
)element
;
101 return derivedUnit
.getOriginalUnit();
103 else if(element
instanceof Amplification
){
104 ((Amplification
) element
).getDnaSample();
106 else if(element
instanceof Sequence
){
107 ((Sequence
) element
).getDnaSample();
109 else if(element
instanceof SingleRead
){
110 // TODO there are multiple possible parents
111 // does returning null help?
118 public boolean hasChildren(Object element
) {
119 if(element
instanceof DerivateViewEditorInput
){
120 element
= ((DerivateViewEditorInput
) element
).getDerivate();
123 if(element
instanceof DnaSample
){
124 DnaSample dnaSample
= (DnaSample
)element
;
125 if(!dnaSample
.getSequences().isEmpty() || !dnaSample
.getAmplifications().isEmpty()){
129 else if(element
instanceof Amplification
){
130 Amplification amplification
= (Amplification
)element
;
131 return !amplification
.getSingleReads().isEmpty();
133 else if(element
instanceof Sequence
){
134 Sequence sequence
= (Sequence
)element
;
135 return !sequence
.getSingleReads().isEmpty();
137 else if(element
instanceof SpecimenOrObservationBase
){
138 SpecimenOrObservationBase specimenOrObservation
= (SpecimenOrObservationBase
)element
;
139 for(DerivationEvent event
:(Set
<DerivationEvent
>)specimenOrObservation
.getDerivationEvents()){
140 if(!event
.getDerivatives().isEmpty()){
148 private List
<DerivedUnit
> getDerivates(SpecimenOrObservationBase specimenOrObservation
){
149 List
<DerivedUnit
> derivates
= new ArrayList
<DerivedUnit
>();
150 for(DerivationEvent derivationEvent
:(Set
<DerivationEvent
>)specimenOrObservation
.getDerivationEvents()){
151 derivates
.addAll(derivationEvent
.getDerivatives());