package eu.etaxonomy.taxeditor.editor.view.derivate;
+import java.util.ArrayList;
import java.util.Collections;
+import java.util.List;
+import java.util.Set;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.Viewer;
+import eu.etaxonomy.cdm.model.occurrence.DerivationEvent;
+import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;
+import eu.etaxonomy.cdm.model.occurrence.FieldUnit;
+import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
+
public class DerivateContentProvider implements ITreeContentProvider {
@Override
@Override
public Object[] getElements(Object inputElement) {
- return Collections.singleton(inputElement).toArray();
+ // return the parent FieldUnit if element is a DerivedUnit
+ if(inputElement instanceof DerivedUnit){
+ DerivedUnit derivedUnit = (DerivedUnit)inputElement;
+ for(SpecimenOrObservationBase original:derivedUnit.getOriginals()){
+ if(original instanceof FieldUnit){
+ return Collections.singletonList(original).toArray();
+ }
+ else{
+ return getElements(original);
+ }
+ }
+ }
+ // return the FieldUnit itself if element is a FieldUnit (used clone() due to recursion issues -> see javadoc of this method)
+ else if(inputElement instanceof FieldUnit){
+ FieldUnit fieldUnit = ((FieldUnit) inputElement).clone();
+ fieldUnit.getTitleCache();
+ return Collections.singleton(fieldUnit).toArray();
+ }
+ return Collections.EMPTY_LIST.toArray();
}
@Override
public Object[] getChildren(Object parentElement) {
- return null;
+ if(parentElement instanceof SpecimenOrObservationBase){
+ return getDerivates((SpecimenOrObservationBase) parentElement).toArray();
+ }
+ return null;
}
@Override
public Object getParent(Object element) {
- // TODO Auto-generated method stub
+ if(element instanceof DerivedUnit){
+ DerivedUnit derivedUnit = (DerivedUnit)element;
+ return derivedUnit.getOriginalUnit();
+ }
return null;
}
@Override
public boolean hasChildren(Object element) {
- // TODO Auto-generated method stub
+ if(element instanceof SpecimenOrObservationBase){
+ SpecimenOrObservationBase specimenOrObservation = (SpecimenOrObservationBase)element;
+ for(DerivationEvent event:(Set<DerivationEvent>)specimenOrObservation.getDerivationEvents()){
+ if(!event.getDerivatives().isEmpty()){
+ return true;
+ }
+ }
+ }
return false;
}
+ private List<DerivedUnit> getDerivates(SpecimenOrObservationBase specimenOrObservation){
+ List<DerivedUnit> derivates = new ArrayList<DerivedUnit>();
+ for(DerivationEvent derivationEvent:(Set<DerivationEvent>)specimenOrObservation.getDerivationEvents()){
+ derivates.addAll(derivationEvent.getDerivatives());
+ }
+ return derivates;
+ }
+
}