1 package eu
.etaxonomy
.taxeditor
.view
.derivateSearch
;
3 import java
.util
.ArrayList
;
4 import java
.util
.LinkedHashSet
;
8 import org
.eclipse
.jface
.viewers
.ITreeContentProvider
;
9 import org
.eclipse
.jface
.viewers
.TreeNode
;
10 import org
.eclipse
.jface
.viewers
.Viewer
;
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
.SpecimenOrObservationBase
;
18 import eu
.etaxonomy
.cdm
.model
.occurrence
.SpecimenOrObservationType
;
20 public class DerivateContentProvider
implements ITreeContentProvider
{
22 List
<TreeNode
> rootNodes
;
25 public void dispose() {
26 // TODO Auto-generated method stub
30 public List
<SpecimenOrObservationBase
> getRootElements() {
31 List
<SpecimenOrObservationBase
> elements
= new ArrayList
<SpecimenOrObservationBase
>();
33 if(rootNodes
!= null) {
34 for(TreeNode node
: rootNodes
) {
35 elements
.add((SpecimenOrObservationBase
)node
.getValue());
42 public void inputChanged(Viewer viewer
, Object oldInput
, Object newInput
) {
46 public Object
[] getElements(Object inputElement
) {
47 rootNodes
= new ArrayList
<TreeNode
>();
48 if(inputElement
instanceof Set
){
49 for (Object o
: (Set
)inputElement
) {
50 if(o
instanceof SpecimenOrObservationBase
){
51 SpecimenOrObservationBase
<?
> rootElement
= (SpecimenOrObservationBase
<?
>)o
;
52 if(rootElement
!=null){
53 rootNodes
.add(new TreeNode(rootElement
));
58 return rootNodes
.toArray();
62 public Object
[] getChildren(Object element
) {
63 TreeNode currentnode
= null;
65 if(element
instanceof TreeNode
){
66 currentnode
= (TreeNode
) element
;
67 value
= ((TreeNode
) element
).getValue();
69 Set
<Object
> children
= new LinkedHashSet
<Object
>();
70 if(value
instanceof DnaSample
&& ((DnaSample
) value
).getRecordBasis()==SpecimenOrObservationType
.DnaSample
){
71 DnaSample dnaSample
= (DnaSample
)value
;
72 Set
<Sequence
> sequences
= dnaSample
.getSequences();
73 for (Sequence sequence
: sequences
) {
74 TreeNode node
= new TreeNode(sequence
);
75 node
.setParent(currentnode
);
78 return children
.toArray();
80 else if(value
instanceof Sequence
){
81 Set
<SingleRead
> singleReads
= ((Sequence
) value
).getSingleReads();
82 for(SingleRead singleRead
:singleReads
){
83 TreeNode node
= new TreeNode(singleRead
);
84 node
.setParent(currentnode
);
87 return children
.toArray();
89 else if(value
instanceof SpecimenOrObservationBase
){
90 List
<DerivedUnit
> derivates
= getDerivates((SpecimenOrObservationBase
<?
>) value
);
91 for (DerivedUnit derivedUnit
:derivates
) {
92 TreeNode node
= new TreeNode(derivedUnit
);
93 node
.setParent(currentnode
);
96 return children
.toArray();
102 public Object
getParent(Object element
) {
103 if(element
instanceof TreeNode
){
104 return ((TreeNode
) element
).getParent();
110 public boolean hasChildren(Object element
) {
111 if(element
instanceof TreeNode
){
112 element
= ((TreeNode
) element
).getValue();
115 if(element
instanceof DnaSample
&& ((DnaSample
) element
).getRecordBasis()==SpecimenOrObservationType
.DnaSample
){
116 DnaSample dnaSample
= (DnaSample
)element
;
117 if(!dnaSample
.getSequences().isEmpty()){// || !dnaSample.getAmplifications().isEmpty()){
121 else if(element
instanceof Sequence
){
122 return !((Sequence
)element
).getSingleReads().isEmpty();
124 else if(element
instanceof SpecimenOrObservationBase
){
125 SpecimenOrObservationBase
<?
> specimenOrObservation
= (SpecimenOrObservationBase
<?
>)element
;
126 for(DerivationEvent event
:specimenOrObservation
.getDerivationEvents()){
127 if(!event
.getDerivatives().isEmpty()){
135 private List
<DerivedUnit
> getDerivates(SpecimenOrObservationBase
<?
> specimenOrObservation
){
136 List
<DerivedUnit
> derivates
= new ArrayList
<DerivedUnit
>();
137 for(DerivationEvent derivationEvent
:specimenOrObservation
.getDerivationEvents()){
138 derivates
.addAll(derivationEvent
.getDerivatives());