package eu.etaxonomy.taxeditor.view.derivateSearch;
import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Comparator;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
+import java.util.TreeSet;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.TreeNode;
public class DerivateContentProvider implements ITreeContentProvider {
- List<TreeNode> rootNodes;
+ private TreeSet<TreeNode> rootNodes;
@Override
public void dispose() {
@Override
public Object[] getElements(Object inputElement) {
- rootNodes = new ArrayList<TreeNode>();
- if(inputElement instanceof Set){
- for (Object o: (Set)inputElement) {
+ rootNodes = new TreeSet<TreeNode>(new TreeNodeComparator());
+ if(inputElement instanceof Collection){
+ for (Object o: (Collection)inputElement) {
if(o instanceof SpecimenOrObservationBase){
SpecimenOrObservationBase<?> rootElement = (SpecimenOrObservationBase<?>)o;
if(rootElement!=null){
node.setParent(currentnode);
children.add(node);
}
- return children.toArray();
}
else if(value instanceof Sequence){
Set<SingleRead> singleReads = ((Sequence) value).getSingleReads();
}
return children.toArray();
}
- else if(value instanceof SpecimenOrObservationBase){
+
+ if(value instanceof SpecimenOrObservationBase){
List<DerivedUnit> derivates = getDerivates((SpecimenOrObservationBase<?>) value);
for (DerivedUnit derivedUnit:derivates) {
TreeNode node = new TreeNode(derivedUnit);
else if(element instanceof Sequence){
return !((Sequence)element).getSingleReads().isEmpty();
}
- else if(element instanceof SpecimenOrObservationBase){
+
+ if(element instanceof SpecimenOrObservationBase){
SpecimenOrObservationBase<?> specimenOrObservation = (SpecimenOrObservationBase<?>)element;
for(DerivationEvent event:specimenOrObservation.getDerivationEvents()){
if(!event.getDerivatives().isEmpty()){
}
return derivates;
}
+
+ private class TreeNodeComparator implements Comparator<TreeNode>{
+
+ @Override
+ public int compare(TreeNode o1, TreeNode o2) {
+ if(o1!=null && o2==null){
+ return -1;
+ }
+ else if(o1==null && o2!=null){
+ return 1;
+ }
+ else if(o1!=null && o2!=null){
+ SpecimenOrObservationBase<?> specimenOrObservation1 = (SpecimenOrObservationBase<?>) o1.getValue();
+ SpecimenOrObservationBase<?> specimenOrObservation2 = (SpecimenOrObservationBase<?>) o2.getValue();
+ return specimenOrObservation1.getTitleCache().compareTo(specimenOrObservation2.getTitleCache());
+ }
+ return 0;
+ }
+
+ }
}