1 package eu
.etaxonomy
.taxeditor
.editor
.view
.derivate
;
3 import java
.util
.ArrayList
;
4 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
.api
.service
.IOccurrenceService
;
14 import eu
.etaxonomy
.cdm
.model
.molecular
.DnaSample
;
15 import eu
.etaxonomy
.cdm
.model
.molecular
.Sequence
;
16 import eu
.etaxonomy
.cdm
.model
.molecular
.SingleRead
;
17 import eu
.etaxonomy
.cdm
.model
.occurrence
.DerivationEvent
;
18 import eu
.etaxonomy
.cdm
.model
.occurrence
.DerivedUnit
;
19 import eu
.etaxonomy
.cdm
.model
.occurrence
.SpecimenOrObservationBase
;
20 import eu
.etaxonomy
.cdm
.model
.occurrence
.SpecimenOrObservationType
;
21 import eu
.etaxonomy
.taxeditor
.store
.CdmStore
;
23 public class DerivateContentProvider
implements ITreeContentProvider
{
26 public void dispose() {
27 // TODO Auto-generated method stub
32 public void inputChanged(Viewer viewer
, Object oldInput
, Object newInput
) {
36 public Object
[] getElements(Object inputElement
) {
37 List
<TreeNode
> rootElements
= new ArrayList
<TreeNode
>();
38 if(inputElement
instanceof DerivateViewEditorInput
){
39 Set
<UUID
> rootUUIDs
= ((DerivateViewEditorInput
) inputElement
).getRootUUIDs();
40 for (UUID uuid
: rootUUIDs
) {
41 SpecimenOrObservationBase
<?
> rootElement
= CdmStore
.getService(IOccurrenceService
.class).load(uuid
);
42 if(rootElement
!=null){
43 rootElements
.add(new TreeNode(rootElement
));
47 return rootElements
.toArray();
51 public Object
[] getChildren(Object element
) {
52 TreeNode currentnode
= null;
54 if(element
instanceof TreeNode
){
55 currentnode
= (TreeNode
) element
;
56 value
= ((TreeNode
) element
).getValue();
58 Set
<Object
> children
= new LinkedHashSet
<Object
>();
59 if(value
instanceof DnaSample
&& ((DnaSample
) value
).getRecordBasis()==SpecimenOrObservationType
.DnaSample
){
60 DnaSample dnaSample
= (DnaSample
)value
;
61 Set
<Sequence
> sequences
= dnaSample
.getSequences();
62 for (Sequence sequence
: sequences
) {
63 TreeNode node
= new TreeNode(sequence
);
64 node
.setParent(currentnode
);
67 return children
.toArray();
69 else if(value
instanceof Sequence
){
70 Set
<SingleRead
> singleReads
= ((Sequence
) value
).getSingleReads();
71 for(SingleRead singleRead
:singleReads
){
72 TreeNode node
= new TreeNode(singleRead
);
73 node
.setParent(currentnode
);
76 return children
.toArray();
78 else if(value
instanceof SpecimenOrObservationBase
){
79 List
<DerivedUnit
> derivates
= getDerivates((SpecimenOrObservationBase
<?
>) value
);
80 for (DerivedUnit derivedUnit
:derivates
) {
81 TreeNode node
= new TreeNode(derivedUnit
);
82 node
.setParent(currentnode
);
85 return children
.toArray();
91 public Object
getParent(Object element
) {
92 if(element
instanceof TreeNode
){
93 return ((TreeNode
) element
).getParent();
99 public boolean hasChildren(Object element
) {
100 if(element
instanceof TreeNode
){
101 element
= ((TreeNode
) element
).getValue();
104 if(element
instanceof DnaSample
&& ((DnaSample
) element
).getRecordBasis()==SpecimenOrObservationType
.DnaSample
){
105 DnaSample dnaSample
= (DnaSample
)element
;
106 if(!dnaSample
.getSequences().isEmpty()){// || !dnaSample.getAmplifications().isEmpty()){
110 else if(element
instanceof Sequence
){
111 return !((Sequence
)element
).getSingleReads().isEmpty();
113 else if(element
instanceof SpecimenOrObservationBase
){
114 SpecimenOrObservationBase
<?
> specimenOrObservation
= (SpecimenOrObservationBase
<?
>)element
;
115 for(DerivationEvent event
:specimenOrObservation
.getDerivationEvents()){
116 if(!event
.getDerivatives().isEmpty()){
124 private List
<DerivedUnit
> getDerivates(SpecimenOrObservationBase
<?
> specimenOrObservation
){
125 List
<DerivedUnit
> derivates
= new ArrayList
<DerivedUnit
>();
126 for(DerivationEvent derivationEvent
:specimenOrObservation
.getDerivationEvents()){
127 derivates
.addAll(derivationEvent
.getDerivatives());