1 package eu
.etaxonomy
.taxeditor
.editor
.view
.derivate
;
3 import java
.util
.ArrayList
;
4 import java
.util
.Collections
;
5 import java
.util
.LinkedHashSet
;
9 import org
.eclipse
.jface
.viewers
.ITreeContentProvider
;
10 import org
.eclipse
.jface
.viewers
.TreeNode
;
11 import org
.eclipse
.jface
.viewers
.Viewer
;
13 import eu
.etaxonomy
.cdm
.model
.molecular
.DnaSample
;
14 import eu
.etaxonomy
.cdm
.model
.molecular
.Sequence
;
15 import eu
.etaxonomy
.cdm
.model
.molecular
.SingleRead
;
16 import eu
.etaxonomy
.cdm
.model
.occurrence
.DerivationEvent
;
17 import eu
.etaxonomy
.cdm
.model
.occurrence
.DerivedUnit
;
18 import eu
.etaxonomy
.cdm
.model
.occurrence
.SpecimenOrObservationBase
;
19 import eu
.etaxonomy
.cdm
.model
.occurrence
.SpecimenOrObservationType
;
20 import eu
.etaxonomy
.taxeditor
.editor
.EditorUtil
;
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 specimen
= ((DerivateViewEditorInput
) inputElement
).getDerivate();
41 specimen
= EditorUtil
.getTopMostDerivate(specimen
);
44 //show topmost element in the derivate hierarchy if no field unit was found
45 TreeNode node
= new TreeNode(specimen
);
46 return Collections
.singleton(node
).toArray();
52 public Object
[] getChildren(Object element
) {
53 TreeNode currentnode
= null;
55 if(element
instanceof TreeNode
){
56 currentnode
= (TreeNode
) element
;
57 value
= ((TreeNode
) element
).getValue();
59 Set
<Object
> children
= new LinkedHashSet
<Object
>();
60 if(value
instanceof DnaSample
&& ((DnaSample
) value
).getRecordBasis()==SpecimenOrObservationType
.DnaSample
){
61 DnaSample dnaSample
= (DnaSample
)value
;
62 Set
<Sequence
> sequences
= dnaSample
.getSequences();
63 for (Sequence sequence
: sequences
) {
64 TreeNode node
= new TreeNode(sequence
);
65 node
.setParent(currentnode
);
68 return children
.toArray();
70 else if(value
instanceof Sequence
){
71 Set
<SingleRead
> singleReads
= ((Sequence
) value
).getSingleReads();
72 for(SingleRead singleRead
:singleReads
){
73 TreeNode node
= new TreeNode(singleRead
);
74 node
.setParent(currentnode
);
77 return children
.toArray();
79 else if(value
instanceof SpecimenOrObservationBase
){
80 List
<DerivedUnit
> derivates
= getDerivates((SpecimenOrObservationBase
<?
>) value
);
81 for (DerivedUnit derivedUnit
:derivates
) {
82 TreeNode node
= new TreeNode(derivedUnit
);
83 node
.setParent(currentnode
);
86 return children
.toArray();
92 public Object
getParent(Object element
) {
93 if(element
instanceof TreeNode
){
94 return ((TreeNode
) element
).getParent();
100 public boolean hasChildren(Object element
) {
101 if(element
instanceof TreeNode
){
102 element
= ((TreeNode
) element
).getValue();
105 if(element
instanceof DnaSample
&& ((DnaSample
) element
).getRecordBasis()==SpecimenOrObservationType
.DnaSample
){
106 DnaSample dnaSample
= (DnaSample
)element
;
107 if(!dnaSample
.getSequences().isEmpty()){// || !dnaSample.getAmplifications().isEmpty()){
111 else if(element
instanceof Sequence
){
112 return !((Sequence
)element
).getSingleReads().isEmpty();
114 else if(element
instanceof SpecimenOrObservationBase
){
115 SpecimenOrObservationBase specimenOrObservation
= (SpecimenOrObservationBase
)element
;
116 for(DerivationEvent event
:(Set
<DerivationEvent
>)specimenOrObservation
.getDerivationEvents()){
117 if(!event
.getDerivatives().isEmpty()){
125 private List
<DerivedUnit
> getDerivates(SpecimenOrObservationBase specimenOrObservation
){
126 List
<DerivedUnit
> derivates
= new ArrayList
<DerivedUnit
>();
127 for(DerivationEvent derivationEvent
:(Set
<DerivationEvent
>)specimenOrObservation
.getDerivationEvents()){
128 derivates
.addAll(derivationEvent
.getDerivatives());