Project

General

Profile

Download (4.69 KB) Statistics
| Branch: | Tag: | Revision:
1
package eu.etaxonomy.taxeditor.view.derivateSearch;
2

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

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

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

    
23
public class DerivateContentProvider implements ITreeContentProvider {
24

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

    
29
	}
30

    
31
	@Override
32
	public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
33
	}
34

    
35
	@Override
36
	public Object[] getElements(Object inputElement) {
37
	    List<TreeNode> rootElements = new ArrayList<TreeNode>();
38
	    if(inputElement instanceof Set){
39
	        for (Object o: (Set)inputElement) {
40
	            if(o instanceof UUID){
41
	                UUID uuid = (UUID)o;
42
	                SpecimenOrObservationBase<?> rootElement = CdmStore.getService(IOccurrenceService.class).load(uuid);
43
	                if(rootElement!=null){
44
	                    rootElements.add(new TreeNode(rootElement));
45
	                }
46
	            }
47
            }
48
	    }
49
	    return rootElements.toArray();
50
	}
51

    
52
	@Override
53
	public Object[] getChildren(Object element) {
54
	    TreeNode currentnode = null;
55
	    Object value = null;
56
        if(element instanceof TreeNode){
57
            currentnode = (TreeNode) element;
58
            value = ((TreeNode) element).getValue();
59
        }
60
        Set<Object> children = new LinkedHashSet<Object>();
61
        if(value instanceof DnaSample && ((DnaSample) value).getRecordBasis()==SpecimenOrObservationType.DnaSample){
62
            DnaSample dnaSample = (DnaSample)value;
63
            Set<Sequence> sequences = dnaSample.getSequences();
64
            for (Sequence sequence : sequences) {
65
                TreeNode node = new TreeNode(sequence);
66
                node.setParent(currentnode);
67
                children.add(node);
68
            }
69
            return children.toArray();
70
        }
71
        else if(value instanceof Sequence){
72
            Set<SingleRead> singleReads = ((Sequence) value).getSingleReads();
73
            for(SingleRead singleRead:singleReads){
74
                TreeNode node = new TreeNode(singleRead);
75
                node.setParent(currentnode);
76
                children.add(node);
77
            }
78
            return children.toArray();
79
        }
80
        else if(value instanceof SpecimenOrObservationBase){
81
	        List<DerivedUnit> derivates = getDerivates((SpecimenOrObservationBase<?>) value);
82
	        for (DerivedUnit derivedUnit:derivates) {
83
                TreeNode node = new TreeNode(derivedUnit);
84
                node.setParent(currentnode);
85
                children.add(node);
86
            }
87
            return children.toArray();
88
	    }
89
	    return null;
90
	}
91

    
92
	@Override
93
	public Object getParent(Object element) {
94
        if(element instanceof TreeNode){
95
            return ((TreeNode) element).getParent();
96
        }
97
		return null;
98
	}
99

    
100
	@Override
101
	public boolean hasChildren(Object element) {
102
        if(element instanceof TreeNode){
103
            element = ((TreeNode) element).getValue();
104
        }
105

    
106
        if(element instanceof DnaSample && ((DnaSample) element).getRecordBasis()==SpecimenOrObservationType.DnaSample){
107
            DnaSample dnaSample = (DnaSample)element;
108
            if(!dnaSample.getSequences().isEmpty()){// || !dnaSample.getAmplifications().isEmpty()){
109
                return true;
110
            }
111
        }
112
        else if(element instanceof Sequence){
113
            return !((Sequence)element).getSingleReads().isEmpty();
114
        }
115
        else if(element instanceof SpecimenOrObservationBase){
116
	        SpecimenOrObservationBase<?> specimenOrObservation = (SpecimenOrObservationBase<?>)element;
117
	        for(DerivationEvent event:specimenOrObservation.getDerivationEvents()){
118
	            if(!event.getDerivatives().isEmpty()){
119
	                return true;
120
	            }
121
	        }
122
	    }
123
		return false;
124
	}
125

    
126
	private List<DerivedUnit> getDerivates(SpecimenOrObservationBase<?> specimenOrObservation){
127
	    List<DerivedUnit> derivates = new ArrayList<DerivedUnit>();
128
	    for(DerivationEvent derivationEvent:specimenOrObservation.getDerivationEvents()){
129
	        derivates.addAll(derivationEvent.getDerivatives());
130
	    }
131
	    return derivates;
132
	}
133

    
134
}
(1-1/5)