Project

General

Profile

Download (4.83 KB) Statistics
| Branch: | Tag: | Revision:
1
package eu.etaxonomy.taxeditor.editor.view.derivate.searchFilter;
2

    
3
import java.util.ArrayList;
4
import java.util.LinkedHashSet;
5
import java.util.List;
6
import java.util.Set;
7

    
8
import org.eclipse.jface.viewers.ITreeContentProvider;
9
import org.eclipse.jface.viewers.TreeNode;
10
import org.eclipse.jface.viewers.Viewer;
11

    
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;
19

    
20
public class DerivateContentProvider implements ITreeContentProvider {
21

    
22
    List<TreeNode> rootNodes;
23

    
24
	@Override
25
	public void dispose() {
26
		// TODO Auto-generated method stub
27

    
28
	}
29

    
30
	public List<SpecimenOrObservationBase> getRootElements() {
31
	    List<SpecimenOrObservationBase> elements = new ArrayList<SpecimenOrObservationBase>();
32

    
33
	    if(rootNodes != null) {
34
	        for(TreeNode node : rootNodes) {
35
	            elements.add((SpecimenOrObservationBase)node.getValue());
36
	        }
37
	    }
38
	    return elements;
39
	}
40

    
41
	@Override
42
	public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
43
	}
44

    
45
	@Override
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));
54
	                }
55
	            }
56
            }
57
	    }
58
	    return rootNodes.toArray();
59
	}
60

    
61
	@Override
62
	public Object[] getChildren(Object element) {
63
	    TreeNode currentnode = null;
64
	    Object value = null;
65
        if(element instanceof TreeNode){
66
            currentnode = (TreeNode) element;
67
            value = ((TreeNode) element).getValue();
68
        }
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);
76
                children.add(node);
77
            }
78
        }
79
        else if(value instanceof Sequence){
80
            Set<SingleRead> singleReads = ((Sequence) value).getSingleReads();
81
            for(SingleRead singleRead:singleReads){
82
                TreeNode node = new TreeNode(singleRead);
83
                node.setParent(currentnode);
84
                children.add(node);
85
            }
86
            return children.toArray();
87
        }
88

    
89
        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);
94
                children.add(node);
95
            }
96
            return children.toArray();
97
	    }
98
	    return null;
99
	}
100

    
101
	@Override
102
	public Object getParent(Object element) {
103
        if(element instanceof TreeNode){
104
            return ((TreeNode) element).getParent();
105
        }
106
		return null;
107
	}
108

    
109
	@Override
110
	public boolean hasChildren(Object element) {
111
        if(element instanceof TreeNode){
112
            element = ((TreeNode) element).getValue();
113
        }
114

    
115
        if(element instanceof DnaSample && ((DnaSample) element).getRecordBasis()==SpecimenOrObservationType.DnaSample){
116
            DnaSample dnaSample = (DnaSample)element;
117
            if(!dnaSample.getSequences().isEmpty()){// || !dnaSample.getAmplifications().isEmpty()){
118
                return true;
119
            }
120
        }
121
        else if(element instanceof Sequence){
122
            return !((Sequence)element).getSingleReads().isEmpty();
123
        }
124

    
125
        if(element instanceof SpecimenOrObservationBase){
126
	        SpecimenOrObservationBase<?> specimenOrObservation = (SpecimenOrObservationBase<?>)element;
127
	        for(DerivationEvent event:specimenOrObservation.getDerivationEvents()){
128
	            if(!event.getDerivatives().isEmpty()){
129
	                return true;
130
	            }
131
	        }
132
	    }
133
		return false;
134
	}
135

    
136
	private List<DerivedUnit> getDerivates(SpecimenOrObservationBase<?> specimenOrObservation){
137
	    List<DerivedUnit> derivates = new ArrayList<DerivedUnit>();
138
	    for(DerivationEvent derivationEvent:specimenOrObservation.getDerivationEvents()){
139
	        derivates.addAll(derivationEvent.getDerivatives());
140
	    }
141
	    return derivates;
142
	}
143

    
144
}
(1-1/4)