1 package eu
.etaxonomy
.taxeditor
.view
.derivateSearch
;
3 import java
.util
.ArrayList
;
4 import java
.util
.Collection
;
5 import java
.util
.Comparator
;
6 import java
.util
.LinkedHashSet
;
9 import java
.util
.TreeSet
;
11 import org
.eclipse
.jface
.viewers
.ITreeContentProvider
;
12 import org
.eclipse
.jface
.viewers
.TreeNode
;
13 import org
.eclipse
.jface
.viewers
.Viewer
;
15 import eu
.etaxonomy
.cdm
.model
.molecular
.DnaSample
;
16 import eu
.etaxonomy
.cdm
.model
.molecular
.Sequence
;
17 import eu
.etaxonomy
.cdm
.model
.molecular
.SingleRead
;
18 import eu
.etaxonomy
.cdm
.model
.occurrence
.DerivationEvent
;
19 import eu
.etaxonomy
.cdm
.model
.occurrence
.DerivedUnit
;
20 import eu
.etaxonomy
.cdm
.model
.occurrence
.SpecimenOrObservationBase
;
21 import eu
.etaxonomy
.cdm
.model
.occurrence
.SpecimenOrObservationType
;
23 public class DerivateContentProvider
implements ITreeContentProvider
{
25 private TreeSet
<TreeNode
> rootNodes
;
28 public void dispose() {
29 // TODO Auto-generated method stub
33 public List
<SpecimenOrObservationBase
> getRootElements() {
34 List
<SpecimenOrObservationBase
> elements
= new ArrayList
<SpecimenOrObservationBase
>();
36 if(rootNodes
!= null) {
37 for(TreeNode node
: rootNodes
) {
38 elements
.add((SpecimenOrObservationBase
)node
.getValue());
45 public void inputChanged(Viewer viewer
, Object oldInput
, Object newInput
) {
49 public Object
[] getElements(Object inputElement
) {
50 rootNodes
= new TreeSet
<TreeNode
>(new TreeNodeComparator());
51 if(inputElement
instanceof Collection
){
52 for (Object o
: (Collection
)inputElement
) {
53 if(o
instanceof SpecimenOrObservationBase
){
54 SpecimenOrObservationBase
<?
> rootElement
= (SpecimenOrObservationBase
<?
>)o
;
55 if(rootElement
!=null){
56 rootNodes
.add(new TreeNode(rootElement
));
61 return rootNodes
.toArray();
65 public Object
[] getChildren(Object element
) {
66 TreeNode currentnode
= null;
68 if(element
instanceof TreeNode
){
69 currentnode
= (TreeNode
) element
;
70 value
= ((TreeNode
) element
).getValue();
72 Set
<Object
> children
= new LinkedHashSet
<Object
>();
73 if(value
instanceof DnaSample
&& ((DnaSample
) value
).getRecordBasis()==SpecimenOrObservationType
.DnaSample
){
74 DnaSample dnaSample
= (DnaSample
)value
;
75 Set
<Sequence
> sequences
= dnaSample
.getSequences();
76 for (Sequence sequence
: sequences
) {
77 TreeNode node
= new TreeNode(sequence
);
78 node
.setParent(currentnode
);
82 else if(value
instanceof Sequence
){
83 Set
<SingleRead
> singleReads
= ((Sequence
) value
).getSingleReads();
84 for(SingleRead singleRead
:singleReads
){
85 TreeNode node
= new TreeNode(singleRead
);
86 node
.setParent(currentnode
);
89 return children
.toArray();
92 if(value
instanceof SpecimenOrObservationBase
){
93 List
<DerivedUnit
> derivates
= getDerivates((SpecimenOrObservationBase
<?
>) value
);
94 for (DerivedUnit derivedUnit
:derivates
) {
95 TreeNode node
= new TreeNode(derivedUnit
);
96 node
.setParent(currentnode
);
99 return children
.toArray();
105 public Object
getParent(Object element
) {
106 if(element
instanceof TreeNode
){
107 return ((TreeNode
) element
).getParent();
113 public boolean hasChildren(Object element
) {
114 if(element
instanceof TreeNode
){
115 element
= ((TreeNode
) element
).getValue();
118 if(element
instanceof DnaSample
&& ((DnaSample
) element
).getRecordBasis()==SpecimenOrObservationType
.DnaSample
){
119 DnaSample dnaSample
= (DnaSample
)element
;
120 if(!dnaSample
.getSequences().isEmpty()){// || !dnaSample.getAmplifications().isEmpty()){
124 else if(element
instanceof Sequence
){
125 return !((Sequence
)element
).getSingleReads().isEmpty();
128 if(element
instanceof SpecimenOrObservationBase
){
129 SpecimenOrObservationBase
<?
> specimenOrObservation
= (SpecimenOrObservationBase
<?
>)element
;
130 for(DerivationEvent event
:specimenOrObservation
.getDerivationEvents()){
131 if(!event
.getDerivatives().isEmpty()){
139 private List
<DerivedUnit
> getDerivates(SpecimenOrObservationBase
<?
> specimenOrObservation
){
140 List
<DerivedUnit
> derivates
= new ArrayList
<DerivedUnit
>();
141 for(DerivationEvent derivationEvent
:specimenOrObservation
.getDerivationEvents()){
142 derivates
.addAll(derivationEvent
.getDerivatives());
147 private class TreeNodeComparator
implements Comparator
<TreeNode
>{
150 public int compare(TreeNode o1
, TreeNode o2
) {
151 if(o1
!=null && o2
==null){
154 else if(o1
==null && o2
!=null){
157 else if(o1
!=null && o2
!=null){
158 SpecimenOrObservationBase
<?
> specimenOrObservation1
= (SpecimenOrObservationBase
<?
>) o1
.getValue();
159 SpecimenOrObservationBase
<?
> specimenOrObservation2
= (SpecimenOrObservationBase
<?
>) o2
.getValue();
160 return specimenOrObservation1
.getTitleCache().compareTo(specimenOrObservation2
.getTitleCache());